0 引言
入門機器人最常見的應用就是slam建圖和導航,本文將詳細介紹這一流程, 便于初學這快速上手。
首先對需要用到的軟件包就行簡單介紹。
turtlebot3: 是一個小型的,基于ros的移動機器人。 學習機器人的很多示例程序都是基于turtlebot3。
Cartographer: 是一個流行的slam建圖工具包。
Nav2: 是一個流行的導航工具包。
gazebo: 是一個基于ros的物理仿真平臺。
1 依賴包安裝
前提條件是已經安裝好了ros2環境, 本文安裝的是humble版本, 其他版本需要注意修改對應的安裝包。
1.1 gazebo 安裝
sudo apt install ros-humble-gazebo-*
1.2 Cartographer安裝
sudo apt install ros-humble-cartographer
sudo apt install ros-humble-cartographer-ros
1.3 nav2 安裝
sudo apt install ros-humble-navigation2
sudo apt install ros-humble-nav2-bringup
1.4 tutlebot3安裝
sudo apt install ros-humble-turtlebot3*
1.5 鍵盤控制程序包安裝
sudo apt install ros-humble-teleop-twist-keyboard
2 用Cartographer進行slam, 得到地圖
第一步: 啟動gazebo仿真
ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
第二步: 啟動cartographer節點
ros2 launch turtlebot3_cartographer cartographer.launch.py
第三步: 啟動鍵盤控制節點
ros2 run teleop_twist_keyboard teleop_twist_keyboard
用鍵盤控制機器人的移動進行slam建圖。
鍵盤控制程序的使用方法可以參考我的另一篇博客: ros鍵盤控制程序teleop_twist_keyboard 鍵值含義及用法
第四步:保存地圖
ros2 run nav2_map_server map_saver_cli -f my_map
my_map 是保存的地圖的文件名, 會生成yaml 和pgm 兩個文件。
實際場景如下:
建圖效果如下:
3 用Nav2 實現導航
第一步: 啟動gazebo 仿真
ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
第二步: 啟動nav2 導航程序
ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=true map:=map/my_map.yaml
注意: 這里用到的map就是上面通過slam建圖得到的地圖文件。
第三步:操作rviz界面進行導航
首先需要點擊 2D Pose Estimate, 并在地圖上點一個點, 作為機器人的初始位姿。
然后點擊Nav2 Goal設定目標位姿。
設置好之后就可以看到導航程序會規劃好一條從起始點到目標點的路徑, 并沿著路徑進行移動。
4 FAQ
1 啟動gazebo時可能報錯 [error] [gzserver-1]: process has died [pid 690246, exit code 255
原因是可能之前運行過gzserver進程并且沒有正常退出, 解決辦法是殺掉gzserver進程。
killall gzserver 或者ps -ef 查看gzserver進程, 用kill -9 殺掉即可。
2 無報錯能打開gazebo界面, 但場景出不來
原因是沒找到gazebo模型庫,找到它的安裝路徑, 并添加以下環境變量即可。
export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/humble/share/turtlebot3_gazebo/models
3 nav2 導航程序可能報錯: nav2_amcl::MotionModel does not exist
解決辦法是找到配置文件參數, 如上述例子中配置文件為/opt/ros/humble/share/turtlebot3_navigation2/param/waffle.yaml
amcl節點使用的robot_model_type參數值為"differential",需要修改為"nav2_amcl::DifferentialMotionModel"