日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(七)turtlebot3导航包解析

發布時間:2024/1/8 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (七)turtlebot3导航包解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

地圖導航需要啟動amcl節點和move_base節點,rviz節點。

1.amcl節點

(1)amcl接收從rviz中傳送過來的初始化位置。

initial_pose_sub_ = nh_.subscribe("initialpose", 2, &AmclNode::initialPoseReceived, this);

訂閱rviz 發布的initialpose話題。如果收到rviz中傳送過來的初始化位置調用AmclNode::initialPoseReceived函數。
(2)amcl向map_server發送信息,獲取地圖

requestMap()

(3)如果獲取地圖和初始化位置成功,初始化粒子濾波

AmclNode::applyInitialPose()

(4)初始化激光,廣播tf信息。

this->tfb_->sendTransform(tmp_tf_stamped);

2.move_base節點

(1)move_base節點從amcl接收tf消息,其中固定的frame為map,就是原點位置的名字叫做map,由于amcl中已經由粒子濾波計算出來了機器相對于地圖的位置,用odom表示機器,那么amcl發送odom到map的tf在move_base節點中就可以接收到了。

tf::TransformListener tf(ros::Duration(10)); move_base::MoveBase move_base( tf );

(2)move_base節點新建局部地圖和全局地圖,并發送地圖信息

controller_costmap_ros_ = new costmap_2d::Costmap2DROS("local_costmap", tf_);

其中Costmap2DROS類中發送地圖信息

publisher_ = new Costmap2DPublisher(&private_nh, layered_costmap_->getCostmap(), global_frame_, "costmap",always_send_full_costmap);

(3)當move_base節點的局部地圖和全局地圖啟動后,local_costmap從gazebo中接收里程計信息/odom和激光信息/scan并且更新局部地圖。同時更新全局地圖。

// Start actively updating costmaps based on sensor dataplanner_costmap_ros_->start();

查看start函數發現將所有的插件設置為activate

(*plugin)->activate();

發現加載的插件為costmap_2d::InflationLayer ,costmap_2d::ObstacleLayer ,
costmap_2d::StaticLayer,costmap_2d::VoxelLayer
在costmap_2d::ObstacleLayer 類中的可以發現此類訂閱了sensor_msgs::LaserScan消息

boost::shared_ptr < message_filters::Subscriber<sensor_msgs::LaserScan>> sub(new message_filters::Subscriber<sensor_msgs::LaserScan>(g_nh, topic, 50));

(4)move_base節點在executeCb函數中的 bool done = executeCycle(goal, global_plan)中發送cmd_vel信息,gazebo接收此信息并控制機器人運動,
首先新建一個路徑規劃類

boost::shared_ptr<nav_core::BaseGlobalPlanner> planner_planner_ = bgp_loader_.createInstance(global_planner);planner_->initialize(bgp_loader_.getName(global_planner), planner_costmap_ros_);

以上是使用插件的方式新建一個nav_core::BaseGlobalPlanne類。相當于new 一個這樣的類。初始化的時候要將costmap地圖傳給該類。
初始化好后就要根據起始點,終點和地圖來找全局路徑了

planner_->makePlan(start, req.goal, global_plan)

找到路徑后將路徑發給局部地圖規劃器
nav_core::BaseLocalPlanne tc_
首先設置路徑,

tc_->setPlan(*controller_plan_)

然后將根據路徑計算控制命令

tc_->computeVelocityCommands(cmd_vel)

完成路徑規劃。

如何生成導航路徑主要由makePlan來實現,具體使用什么算法生成導航路徑將在下篇博文中介紹

下圖為節點關系圖

總結

以上是生活随笔為你收集整理的(七)turtlebot3导航包解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。