gmapping建图与rviz实时显示中出现的问题记录

网上关于gmapping建图教程基本都是:
用ros的数据记录指令rosbag去记录数据,然后再通过rviz去显示记录的数据。
其实可以用rviz去实时显示构建地图的过程,但是需要去配置ROS:

  1. 首先,要了解gmapping 功能包。首先下载功能包,对于ubuntu 18.04来说,下载命令为:sudo apt-get install ros-melodic-gmapping.gmapping功能包提供了基于激光的SLAM,在ROS系统中使用slam_gmapping节点表示。 通过该节点用户可以用机器人在移动过程中激光传感器获取的数据创建2D栅格地图。

  2. 节点中其他细节不过多记录,只记录在本人调试过程中碰到问题的细节:
    ①订阅主题
    tf (tf/tfMessage),用于激光器坐标系,基座坐标系,里程计坐标系和地图坐标系之间的转换。这个主题相当重要,如果配置失误,算法不会运行,并且报错“base_link” passed to lookupTransform argument source_frame does not exist. 这个错误说明算法输出的/map坐标系与机器人的base_link坐标系没有tf转换关系,如果仿真程序能正常输出tf转换关系,出现这个错误一般是gmapping 配置过程中名字没有改,还是默认的名字,所以算法找不到这个转换关系;故只需要在gmapping的launch文件里对改成自己机器人基座坐标系的名字,错误就会消失。另外关于rosparam set use_sim_time true一定不要运行,根据实践经验,在不需要rosbag去展示数据的时候,运行这条命令将导致算法的/map与odom坐标系之间的tf转换关系消失,导致算法不运行,/map没输出。
    scan (sensor_msgs/LaserScan ) ,激光器扫描数据传给算法。这里如果算法没有读到这个激光雷达的主题数据,错误一般是gmapping的launch文件中写的激光雷达的主题名字和真实机器人的激光雷达主题名字不对应,launch文件中默认是scan,如果不对应的话,可以重映射
    ②节点发布的主题
    map_metadata (nav_msgs/MapMetaData),周期性发布地图metadata数据
    map (nav_msgs/OccupancyGrid),周期性发布地图数据
    ~entropy (std_msgs/Float64),发布机器人姿态分布熵的估计
    第二个/map比较重要,它就是最后的rviz需要显示的地图所订阅的主题。
    ③tf变换,再次强调tf变换的重要性,算法运行时需要的tf变换:odom -> base_link -> scan,算法提供的tf变换:map -> odom。

  3. 下面就是打开rviz使用map栅格地图订阅/map主题就可以看到实时地图了。前提是上面算法都可以无错误的运行。

你可能感兴趣的:(Ubuntu,/,Ros,开发,路径规划,自动驾驶)