Ⅰ. Gmapping是基于滤波SLAM框架的常用开源SLAM算法,在ROS中使用Gmapping建图需要提供 Odometry(里程计信息)和laser(激光数据),但是只用一个激光雷达也可以进行Gmapping建图;
Ⅱ. 采用的方法就是使用 laser_scan_matcher 功能包。所述 laser_scan_matcher 功能包是增量激光扫描配准工具。该软件包允许扫描连续的 sensor_msgs / LaserScan 消息之间的匹配,并将估计的激光位置发布为 geometry_msgs / Pose2D 或 tf 变换。该包可以在没有其他传感器提供的任何测距估计的情况下使用。因此,它可以作为独立的里程计算器估算器。
Ⅲ. 到 下载 功能包,解压。将解压后功能包与激光雷达的功能包复制到你创建的 ROS 的工作区的src文件下,然后在工作区文件夹下编译(catkin_make),编译完成后,将其余的包都删掉,只留下 laser_scan_matcher 和雷达的功能包。如下图所示:
(如果在编译过程中出现错误,无法找到csm功能包时,输入命令:sudo apt-get install ros-kinetic-csm 然后重新编译即可。其中kinetic是我的ROS版本,用到此命令时,请切换为你电脑上相应的ROS版本)。
Ⅳ. 然后,需要到 src →laser_scan_matcher →demo 文件中修改demo_gmapping.launch文件。
文件(部分)原本如下:
然后做如下修改:
其中:
这一部分是我所选用的激光雷达的 launch节点,修改为你自己所用的激光雷达即可。
Ⅴ. 然后到所创键的ROS工作区,重新编译(catkin_make)一下,输入:
source devel/setup.bash
(使当前工作区有效,;setup.bash这个自动生成的脚本文件设置了若干环境变量,从而使ROS能够找到创建的功能包和新生成的可执行文件)
sudo chmod 777 /dev/ttyUSB0
(请选择正确的串口号,我的是ttyUSB0)
roslaunch laser_scan_matcher demo_gmapping.launch
(无需提前运行 roscore命令,roslaunch文件自己会启动ROS内核)
然后,便可以看到雷达正在构建地图了,如图所示:
Ⅵ .
1)要检查节点是否在发送数据,需要使用 rostopic :
rostopic list
然后会看到以下主题:
2)/scan是节点正在发布消息的主题。该节点使用的数据类型用以下命令查看:
rostopic type /scan
然后会看到用于发送激光雷达信息的消息类型:
sensor_msgs/LaserScan
3)使用以下命令查看消息的数据结构:
rosmsg show sensor_msgs/LaserScan
然后会看到如下的数据结构:
4)可以使用如下命令查看查看节点构成的计算图:
rqt_graph
然后会看到如下的图形界面:
5)输入以下命令便可以查看 tf 转换树:
rosrun rqt_tf_tree rqt_tf_tree
(也可以使用 :rosrun tf view_frames 生成 pdf 坐标系结构图,此命令将生成 frames.pdf 文件)
6)如果想了解关于激光雷达工作和数据发送的更多信息,可以使用如下命令来查看实时消息:
rostopic echo /scan