ROS:激光雷达+laser_scan_matcher 运行gmapping

Ⅰ. Gmapping是基于滤波SLAM框架的常用开源SLAM算法,在ROS中使用Gmapping建图需要提供 Odometry(里程计信息)和laser(激光数据),但是只用一个激光雷达也可以进行Gmapping建图;

Ⅱ. 采用的方法就是使用 laser_scan_matcher 功能包。所述 laser_scan_matcher 功能包是增量激光扫描配准工具。该软件包允许扫描连续的 sensor_msgs / LaserScan 消息之间的匹配,并将估计的激光位置发布为 geometry_msgs / Pose2D 或 tf 变换。该包可以在没有其他传感器提供的任何测距估计的情况下使用。因此,它可以作为独立的里程计算器估算器。

Ⅲ. 到 https://github.com/ccny-ros-pkg/scan_tools.git 下载 功能包,解压。将解压后功能包与激光雷达的功能包复制到你创建的 ROS 的工作区的src文件下,然后在工作区文件夹下编译(catkin_make),编译完成后,将其余的包都删掉,只留下 laser_scan_matcher 和雷达的功能包。如下图所示:
ROS:激光雷达+laser_scan_matcher 运行gmapping_第1张图片
(如果在编译过程中出现错误,无法找到csm功能包时,输入命令:sudo apt-get install ros-kinetic-csm 然后重新编译即可。其中kinetic是我的ROS版本,用到此命令时,请切换为你电脑上相应的ROS版本)。

Ⅳ. 然后,需要到 src →laser_scan_matcher → demo 文件中修改demo_gmapping.launch文件。
文件(部分)原本如下:
ROS:激光雷达+laser_scan_matcher 运行gmapping_第2张图片
然后做如下修改:
ROS:激光雷达+laser_scan_matcher 运行gmapping_第3张图片
其中:
在这里插入图片描述
这一部分是我所选用的激光雷达的 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内核)

然后,便可以看到雷达正在构建地图了,如图所示:
ROS:激光雷达+laser_scan_matcher 运行gmapping_第4张图片

Ⅵ .
1)要检查节点是否在发送数据,需要使用 rostopic :

rostopic list

然后会看到以下主题:
ROS:激光雷达+laser_scan_matcher 运行gmapping_第5张图片
2)/scan是节点正在发布消息的主题。该节点使用的数据类型用以下命令查看:

rostopic type /scan

然后会看到用于发送激光雷达信息的消息类型:
sensor_msgs/LaserScan

3)使用以下命令查看消息的数据结构:

rosmsg show sensor_msgs/LaserScan

然后会看到如下的数据结构:
ROS:激光雷达+laser_scan_matcher 运行gmapping_第6张图片
4)可以使用如下命令查看查看节点构成的计算图:

rqt_graph

然后会看到如下的图形界面:
ROS:激光雷达+laser_scan_matcher 运行gmapping_第7张图片
5)输入以下命令便可以查看 tf 转换树:

rosrun rqt_tf_tree rqt_tf_tree

ROS:激光雷达+laser_scan_matcher 运行gmapping_第8张图片
(也可以使用 :rosrun tf view_frames 生成 pdf 坐标系结构图,此命令将生成 frames.pdf 文件)

6)如果想了解关于激光雷达工作和数据发送的更多信息,可以使用如下命令来查看实时消息:

rostopic echo /scan

你可能感兴趣的:(ROS,ROS,激光雷达)