JetBot ROS AI Kit 教程八、SLAM激光雷达建图

来自Waveshare Wiki
跳转至: 导航搜索

JetBot ROS AI Kit 教程目录


步骤1、启动slam建图节点

  • 首先开启雷达电源,保持雷达正常转动,在机器人端,运行如下命令启动激光雷达节点
    • 【注意:启动slam建图节点时会默认开启底盘节点,所以请先关闭‘机器人底盘节点’,避免启动slam建图节点时发生冲突,产生错误】
roslaunch jetbot_pro slam.launch        #建图算法默认使用gmapping 
Jetbot Image47.png
  • 在启动slam节点同时,我们需要控制机器人移动进行建图。因此,你需要在虚拟机中新建一个终端,参考教程五“移动机器人控制-手柄控制机器人移动”,通过启动游戏手柄遥控节点来控制机器人移动。
  • 打开虚拟机,输入以下命令打开RVIZ工具,查看建图。
roslaunch jetbot_pro view_slam.launch    #显示地图
Jetbot 76.png
  • 若在显示地图时发生如下错误时,请检查遥控器手柄是否接入,其中 /dev/input/js0 为遥控器手柄设备
Jetbot Image51.png

步骤2、保存地图文件

  • 当扫描完成地图后,在机器人中新开一个终端运行如下命令保存构建好的地图文件。
cd ~/catkin_ws/src/jetbot_pro/maps
rosrun map_server map_saver -f mymap
Jetbot image49.png
  • 运行ls命令可以查看保存的地图信息
ls
Jetbot image50.png
  • 其中:mymap.pgm为地图数据,mymap.yaml为地图信息,savemap.sh为保存地图脚本。因此也可以运行此脚本保存地图
cd ~/catkin_ws/src/jetbot_pro/maps && ./savemap.sh

步骤3、多种建图算法实现

  • 程序支持gmapping,hector,karto,cartographer四种建图算法,默认使用的是gmapping算法,也可以通过map_type参数选择对应的建图算法。
  • 以下是选择不同的map_type参数命令输入
roslaunch jetbot_pro slam.launch map_type:=gmapping             #gmapping 算法(默认)
roslaunch jetbot_pro slam.launch map_type:=hector               #hector 算法
roslaunch jetbot_pro slam.launch map_type:=karto                #karto 算法
roslaunch jetbot_pro slam.launch map_type:=cartographer         #cartographer算法
  • 在虚拟机端,用算法 gmapping、hector、karto 都可以运行如下命令显示地图
roslaunch jetbot_pro view_slam.launch        #显示地图
  • 若使用算法 cartographer 则rviz的配置不一样,需要使用如下命令显示地图
roslaunch jetbot_pro view_slam.launch map_type:=cartographer        #显示地图
  • hector 算法建图效果
Jetbot Image52.png
  • karto 算法建图效果
Jetbot image53.png
  • cartographer 算法建图效果。图中绿色点为点云数据而非雷达数据,蓝色为小车运动路径
Jetbot image54.png
  • 注意:使用算法gmapping、hector、karto 建图时,可以通过map_server 命令直接保存地图;而 cartographer 算法建图后,则需要先将 pbstream 转为 map才能保存,即我们可以使用如下脚本保存地图
sudo nano catkin_ws/src/jetbot_pro/maps && ./carto_savemap.sh