在真实 TurtleBot 中测试的基于里程计的 slam 算法生成的低质量地图

Poor quality maps produced from odometry based slam algorithms tested in real TurtleBot

我目前正在真实的 TurtleBot(ROS Kinetic) 中测试几种 slam 算法。尽管在 TurtleBot 上一切似乎都运行良好,但我在来自基于里程计的 slam 算法的地图上遇到了一个问题。虽然我更改了 TurtleBot 基地以确定基地是否有硬件或 odometry 问题,但地图保持不变。我用的lidar最大射程可达17m

Gmapping(使用里程计) 我使用这些参数测试了 gmapping:

<launch>
<arg name="scan_topic"  default="scan" />
<arg name="base_frame"  default="base_footprint"/>
<arg name="odom_frame"  default="odom"/>
<node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
<param name="base_frame" value="$(arg base_frame)"/>
<param name="odom_frame" value="$(arg odom_frame)"/>
<param name="map_update_interval" value="5.0"/>
<param name="maxUrange" value="12.0"/>
<param name="maxRange" value="17.0"/>
<param name="sigma" value="0.05"/>
<param name="kernelSize" value="1"/>
<param name="lstep" value="0.05"/>
<param name="astep" value="0.05"/>
<param name="iterations" value="5"/>
<param name="lsigma" value="0.075"/>
<param name="ogain" value="3.0"/>
<param name="lskip" value="0"/>
<param name="minimumScore" value="500"/>
<param name="srr" value="0.01"/>
<param name="srt" value="0.02"/>
<param name="str" value="0.01"/>
<param name="stt" value="0.02"/>
<param name="linearUpdate" value="0.5"/>
<param name="angularUpdate" value="0.436"/>
<param name="temporalUpdate" value="-1.0"/>
<param name="resampleThreshold" value="0.5"/>
<param name="particles" value="200"/>
<param name="xmin" value="-1.0"/>
<param name="ymin" value="-1.0"/>
<param name="xmax" value="1.0"/>
<param name="ymax" value="1.0"/>
<param name="delta" value="0.05"/>
<param name="llsamplerange" value="0.01"/>
<param name="llsamplestep" value="0.01"/>
<param name="lasamplerange" value="0.005"/>
<param name="lasamplestep" value="0.005"/>
<remap from="scan" to="$(arg scan_topic)"/>
</node>
</launch>

在整个实验室测试的 Gmapping 的地图在这里:

KartoSlam(使用里程计) KartoSlam 在实验室房间使用默认参数测试生成的地图是这样的。

CRSM Slam(未使用里程计) CRSM Slam 制作的地图,在实验室的房间里测试,没有使用里程计,就是这个。如您所见,CRSM 地图比前两个要好得多。

问题:

既然我已经在两个不同的 TurtleBots 上尝试过这些算法,我应该在哪里寻找修复程序? 我怎么能提高地图质量,因为我目前得到的地图质量很差?

我发现测试基本里程计的一个好方法是:

  1. 以最少的 gmapping 或任何其他 slam 启动 turtlebots。
  2. 启动 rviz 并确保将固定框架设置为世界框架,例如 odom 或 map(从您的 TF 树中验证名称)。
  3. 向其中添加激光并设置大约 100 秒的衰减时间。
  4. 让机器人保持在墙前并命令它向墙移动。随着机器人向前移动,您世界框架中激光数据中的 'position of the wall' 应该看起来或多或少是固定的。这让你确信你的前向里程计是好的。
  5. 然后将机器人放在角落附近或激光视野中有大型 3D 物体的地方。然后命令机器人旋转。所有角和 3D 对象都应再次保持静止。

如果您能成功完成上述操作,那么您应该能够在使用任何 SLAM 算法之前制作出合理的 'raw' 地图。