JetBot ROS AI Kit 教程八、SLAM激光雷达建图
来自Waveshare Wiki
JetBot ROS AI Kit 教程目录
- JetBot ROS AI Kit 教程一、组装小车
- JetBot ROS AI Kit 教程二、安装Jetson nano 镜像
- JetBot ROS AI Kit 教程三、安装Ubuntu_ROS系统 镜像
- JetBot ROS AI Kit 教程四、配置多机通讯和添加串口
- JetBot ROS AI Kit 教程五、机器人移动控制
- JetBot ROS AI Kit 教程六、配置摄像头节点
- JetBot ROS AI Kit 教程七、配置激光雷达节点
- JetBot ROS AI Kit 教程八、SLAM激光雷达建图
- JetBot ROS AI Kit 教程九、自主导航
- JetBot ROS AI Kit 主页
步骤1、启动slam建图节点
- 首先开启雷达电源,保持雷达正常转动,在机器人端,运行如下命令启动激光雷达节点
- 【注意:启动slam建图节点时会默认开启底盘节点,所以请先关闭‘机器人底盘节点’,避免启动slam建图节点时发生冲突,产生错误】
roslaunch jetbot_pro slam.launch #建图算法默认使用gmapping
- 在启动slam节点同时,我们需要控制机器人移动进行建图。因此,你需要在虚拟机中新建一个终端,参考教程五“移动机器人控制-手柄控制机器人移动”,通过启动游戏手柄遥控节点来控制机器人移动。
- 打开虚拟机,输入以下命令打开RVIZ工具,查看建图。
roslaunch jetbot_pro view_slam.launch #显示地图
- 若在显示地图时发生如下错误时,请检查遥控器手柄是否接入,其中 /dev/input/js0 为遥控器手柄设备
步骤2、保存地图文件
- 当扫描完成地图后,在机器人中新开一个终端运行如下命令保存构建好的地图文件。
cd ~/catkin_ws/src/jetbot_pro/maps rosrun map_server map_saver -f mymap
- 运行ls命令可以查看保存的地图信息
ls
- 其中: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 算法建图效果
- karto 算法建图效果
- cartographer 算法建图效果。图中绿色点为点云数据而非雷达数据,蓝色为小车运动路径
- 注意:使用算法gmapping、hector、karto 建图时,可以通过map_server 命令直接保存地图;而 cartographer 算法建图后,则需要先将 pbstream 转为 map才能保存,即我们可以使用如下脚本保存地图
sudo nano catkin_ws/src/jetbot_pro/maps && ./carto_savemap.sh