turtlebot3 Slam建图和导航仿真

使用RViz仿真Turtlebot3

RViz简介

RViz是ROS的三维可视化工具。它的主要目的是以三维方式显示ROS消息,可以将数据进行可视化表达。例如无需编程即可表达激光测距仪(LRF)等三维距离传感器的点云数据(PCD,Point Cloud Data),从相机获取的图像值等。RViz的优点在于即使没有机器人的硬件也可以进行虚拟仿真,可以进行SLAM测试和导航。
ROS三维可视化工具的启动画面

使用RViz仿真

要运行虚拟机器人,首先选定引进的机器人型号,并运行Turtlebot3功能包中的turtlebot3_fake.launch文件。
运行turtlebot3_fake.launch文件

这个文件实际上运行的turtlebot3_fake_node节点和robot_state_publisher节点。其中turtlebot3_fake_node节点从turtlebot3_description功能包导入Turtlebot3的三维模型,并发布实际机器人的话题。如下图所示,我们已经看到了Turtlebot3的burger型号的机器人三维模型。
为了方便进一步地队Turtlebot3的模型进行路径规划和导航等操作,我们在RViz中尝试用键盘操作机器人。运行turtlebot3_teleop功能包中的turtlebot3_teleop_key.launch文件。该launch文件将启动turtlebot3_teleop_keyboard节点。turtlebot3_fake_node节点接收由turtlebot3_teleop_keyboard节点通过/cmd_vel话题发送的平移速度和旋转速度,并将其作为驱动命令,并用此命令驱动虚拟机器人。键盘操作的按键是A、W、S、D、X,分别表示逆时针旋转速度+0.01rad/sec、前进速度+0.01m/sec、初始化平移速度和旋转速度(即停止)、顺时针旋转速度+0.01rad/sec、后退速度+0.01m/sec。
如下所示为TurtleBot3机器人在RViz中的仿真运动。
Turtlebot3在RViz中的仿真运动

Turtlebot3的SLAM建图与导航

SALM建图

SLAM(simultaneous localization and mapping)是为了让机器人自己(或接受人的一些帮助)绘制地图而出现的技术。用中文应该是“同步定位与绘制地图”。这是在机器人移动到未知空间时通过探测周围环境来估计当前位置并绘制地图的方法。
按照如下所示的步骤进行建图操作

  1. 选择turtlebot3机器人的型号;
  2. 加载待扫描的地图;
  3. 调用TurtleBot3机器人上的激光雷达和Slam中的gampping;
  4. 利用键盘控制进行操作,使得机器人在空间中行进;
  5. 地图是否清晰完整,如果不是,则返回上一步继续进行扫描,否则则保存地图,完成建图。
    建图过程中有以下几点需要注意:
    加载待扫描的地图和TurtleBot3机器人时使用Gazebo加载,如下图所示。
    利用Gazebo加载待扫描地图和TurtleBot3机器人

扫描建图过程中使用上文叙述过键盘控制机器人运动的方法进行建图,如下所示为建图过程和保存的地图。
SLAM建图过程1
SLAM建图过程2
保存的地图
从上述可以看到保存的地图与实际仿真的地图吻合度相当之高。

利用RViz实现Turtlebot3机器人的导航

完成上述的建图过程后,便可以运行虚拟导航程序。运行虚拟导航程序之前需要退出所有已执行的程序,防止其他程序对导航进行干扰。按照如下步骤进行导航。

  1. 加载Turtlebot3的型号
  2. 运行turtlebot3_navigation导航中的turtlebot3_navigation.launch文件并加载之前利用SLAM技术所保存的地图
  3. 运行RViz
  4. 利用Rviz中的2D Pose Estimate进行初始位姿的矫正
  5. 利用2D Nav Goal进行导航,任意设置导航终点,机器人会自动规划路线到达终点。
    导航运动中
    如下图所示为建图及导航的整体流程图
    建图及导航的整体流程图

```cpp
turtlebot3仿真自主导航记录
首先加载turtlebot3的型号,turtlebot3有三种型号burger、waffle和waffle pi
这里我选择burger型号

export TURTLEBOT3_MODEL=burger

调用turtlebot3_world 这个world是turtlebot3中自带的地图

roslaunch turtlebot3_gazebo turtlebot3_world.launch

首次加载gazebo,gazebo会下载模型,但是由于是访问官网,有非常大的几率下载失败,我事先已将常见的model加载到gazebo中去。

打开地图和turtlebot3之后,利用键盘控制机器人移动

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

利用turtlebot3的slam包进行建图

roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping

键盘控制机器人上下左右,激光雷达扫描地图建图

建完图之后需要保存

rosrun map_server map_saver -f ~/map

建图完之后重新加载turtlebot3_world并加载地图进行导航

roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml

利用2D Pose Estimate进行初始位姿的矫正

利用2D Nav Goal进行导航




杀死进程
 killall gzserver

killall gzclient

```