在ROS中開始自主機器人仿真 - 3 讓turtlebot自主導航


我們已經在gazebo中實現了機器人的仿真,而且能夠控制機器人的運動, 查看機器人所感知到的信息, 包括lasercan, 圖像信息, 深度信息, 點雲, 也包括沒有提到的速度信息. 這里,我們建立用ROS navigation stack 導航功能包ROS navigation stack 導航功能包 , 進行機器人地圖構建與導航.

part 2.1: 讓turtlebot自主導航

1 創建地圖

使用下面的命令,借助鍵盤遙控機器人創建精確詳盡的地圖.

加載Gazebo仿真環境

roslaunch turtlebot_gazebo turtlebot_world.launch
 

開始構建地圖

roslaunch turtlebot_gazebo gmapping_demo.launch

 

rviz可視化

roslaunch turtlebot_rviz_launchers view_navigation.launch

 

鍵盤遙控

roslaunch turtlebot_teleop keyboard_teleop.launch

 

通過不斷地讓機器人在環境中游走, 就可以得到一個grid 地圖.

2 保存地圖

保存地圖到本地文件夾

rosrun map_server map_saver -f ~/file_folder/test_map

 

3 加載地圖

關閉之前的節點, 重新打開gezebo仿真環境, 加載地圖, 進行導航.

加載Gazebo仿真環境

roslaunch turtlebot_gazebo turtlebot_world.launch

 

加載地圖
roslaunch turtlebot_gazebo amcl_demo.launch map_file:=~/file_folder/test_map.yaml

 

rviz可視化
roslaunch turtlebot_rviz_launchers view_navigation.launch

 

part 2.2: 解釋與擴展

對於仿真環境,顯示以及配置文件已經在之前詳細說明.

gmapping

上文采用gmapping進行地圖構建, gmapping是一個ros自帶的地圖構建工具包。slam_gmapping采用激光數據(topic:sensor_msgs/LaserScan)生成二維地圖(topic:nav_msgs/OccupancyGrid). 在gmappingtutorial中 ,可以發現, 訂閱的主題,發布的主題,以及調用的服務。

訂閱主題

tf (tf/tfMessage) 坐標系轉換
scan (sensor_msgs/LaserScan) 激光數據

發布主題

map_metadata (nav_msgs/MapMetaData)
map (nav_msgs/OccupancyGrid)
地圖數據
entropy (std_msgs/Float64)
表示機器人位姿的不確定性

服務

dynamic_map (nav_msgs/GetMap)
調用獲得地圖數據

amcl

amcl全稱adaptive Monte Carlo localization,是一個機器人二維環境的概率定位系統, 在已知地圖的環境中, 利用粒子濾波跟蹤機器人的位姿. ROS中的amcl節點訂閱激光數據sensor_msgs/LaserScan和地圖數據nav_msgs/OccupancyGrid, 得到機器人的估計位姿.

訂閱主題

scan (sensor_msgs/LaserScan) 激光數據
tf (tf/tfMessage)
initialpose (geometry_msgs/PoseWithCovarianceStamped)
map (nav_msgs/OccupancyGrid)地圖信息

發布主題

amcl_pose (geometry_msgs/PoseWithCovarianceStamped)機器人在地圖中的估計位置及協方差
particlecloud (geometry_msgs/PoseArray) 粒子雲位置估計
tf (tf/tfMessage)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM