前言
Turtlebot3(简称TB3)是继Turtlebot2之后,又一款ROS官方打造的软硬件学习平台,更小,更便宜,更好玩,该文章通过该项目提供的软件平台与例程进行SLAM简单介绍与实现。
在Turtlebot3进行SLAM仿真
1 安装Turtlebot3依赖包
- 打开终端,输入以下命令安装Turtlebot3依赖的包文件
sudo apt-get install ros-noetic-joy ros-noetic-teleop-twist-joy ros-noetic-teleop-twist-keyboard ros-noetic-laser-proc ros-noetic-rgbd-launch ros-noetic-depthimage-to-laserscan ros-noetic-rosserial-arduino ros-noetic-rosserial-python ros-noetic-rosserial-server ros-noetic-rosserial-client ros-noetic-rosserial-msgs ros-noetic-amcl ros-noetic-map-server ros-noetic-move-base ros-noetic-urdf ros-noetic-xacro ros-noetic-compressed-image-transport ros-noetic-rqt-image-view ros-noetic-gmapping ros-noetic-navigation ros-noetic-interactive-markers rviz
2 创建项目并安装Turtlebot3
- 打开终端,输入命令创建名为"catkin_turtlebot3"的项目文件
mkdir catkin_turtlebot3
- 进入项目文件“catkin_turtlebot3”
cd catkin_turtlebot3
- 创建一个新文件“scr”用以储存环境等文件
mkdir src
- 进入src文件
cd src
- 将turtlebot3的源码从GitHub克隆至src文件中
git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
- 返回上一级文件夹并编译
cd ..
catkin_make
此时,Turtlebot3的已经下载并编译了
下一步对环境进行配置
- 添加模型申明,用以设定打开后模型的样子
echo "export TURTLEBOT3_MODEL=waffle" >> ~/.bashrc
- 对环境变量进行设置(与上一章ROS添加环境变量相同,可参考)
echo "source ~/catkin_turtlebot3/devel/setup.bash" >> ~/.bashrc
- 很重要!完成后建议打开一个新终端,使用下面命令进行测试
echo $ROS_PACKAGE_PATH
如果显示当前项目的路径就表明设置成功
如果是以下情况,请再重新设置,或者新开一个终端测试(一定是再项目文件夹目录中运行)
至此,Turtlebot3的安装与配置就全部完成了
下面使用官方例程进行SLAM仿真
3 使用Turtlebot3进行建图
- 打开新终端,进入项目文件“catkin_turtlebot3”
cd catkin_turtlebot3
- ROS第一步,打开roscore
roscore
- 打开新终端,输入命令启动Gazabo,是通过roslaunch命令启动src文件夹中特定节点
roslaunch turtlebot3_gazebo turtlebot3_world.launch
启动后得到打开了如下界面
- 注意:如果启动界面一直卡在开头或打开后地图一片空白,可能是因为在路径中缺少turtlebot3_world文件夹
- catkin_turtlebot3/src/turtlebot3_simulations/turtlebot3_gazebo/models
- 打开新终端,启动SLAM进行建图,该命令是在可视化工具rviz中打开并进行SLAM
roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping
如果没有rviz包,可使用以下命令安装
sudo apt install rviz
打开后如图所示
- 打开新终端,输入键盘控制的命令
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
- 注意:该键盘控制是依靠按“W A D X”键增加速度,按S停止进行控制
通过键盘移动机器人,完善地图的建立,直到自己满意
- 打开新终端,输入命令保存地图
rosrun map_server map_saver -f ~/map
地图被保存至主目录中,包含2个文件
map.pgn:地图图片
map.yaml:地图信息
4 使用扫描地图进行自动导航仿真
- 运动Gazabo
roslaunch turtlebot3_gazebo turtlebot3_world.launch
- 读取地图并运行导航程序
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml
点击上方红色箭头按钮:2D Nav Goal
随后在地图上任意地点点击设定导航目标位置,小车便开始自主规划移动
刚启动时会出现如下情况
可以点击界面上方绿色箭头:2D Pose Estimate
再点击小车在图片中的实际位置,移动小车后会对地图进行修复匹配。
总结
本文在Ubuntu中创建了新的工程项目“catkin_turtlebot3”,并配置了Turtlebot3的虚拟环境,使用官方例程进行了SLAM仿真。
需要重点注意的有ROS通信的关系,环境变量的设置。整个项目可能由于入门时对Ubuntu的不熟悉导致遇到一些奇怪的bug,可以多搜一搜去解决。