Gmapping算法是基于粒子滤波SLAM框架的常用开源SLAM算法,在ROS中使用Gmapping建图需要提供 Odometry(里程计信息)和laser(激光数据),但是只用一个激光雷达也可以进行Gmapping建图。
若只用激光雷达数据建图就需要使用 laser_scan_matcher 功能包。laser_scan_matcher 功能包是增量激光扫描配准工具,该软件包允许扫描连续的 sensor_msgs / LaserScan 消息之间的匹配,并将估计的激光位置发布为 geometry_msgs / Pose2D 或 tf 变换。该包可以在没有其他传感器提供的任何测距估计的情况下使用,因此,它可以作为独立的里程计算器估算器。
若VLP-16激光雷达的驱动和基本配置还未安装请看:https://blog.csdn.net/qq_34911636/article/details/109363209
1 下载laser_scan_matcher功能包到工作空间中,然后编译
git clone https://github.com/ccny-ros-pkg/scan_tools.git
catkin_make
编译过程中若出现以下错误:
该错误是无法定位csm功能包时,需要安装csm功能包,在终端中输入:
sudo apt-get install ros-kinetic-csm
然后重新编译即可
2 启动ROS管理节点
roscore
3 打开新终端,运行 VLP16_points.launch
roslaunch velodyne_pointcloud VLP16_points.launch
4 打开新终端,输入以下命令发布 tf 变换 base_link->velodyne
rosrun tf static_transform_publisher 0 0 0 0 0 0 base_link velodyne 0
5 打开新终端,启动 slam_gmapping
rosrun gmapping slam_gmapping
6 打开新终端,启动 laser_scan_matcher_node,并指定 fixed_frame 为 odom
rosrun laser_scan_matcher laser_scan_matcher_node _fixed_frame:=odom
7 打开新终端启动rviz
rosrun rviz rviz
然后在 rviz 中点击 Add -> By topic,添加 Map、LaserScan 或 PointCloud2 等,Fixed Frame 主题可设置为/map,实时显示获取到的结果如下所示: