前言

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,可以多搜一搜去解决。