在实际TurtleBot中测试的基于里程计的slam算法生成的质量图质量较差

时间:2019-01-25 11:54:05

标签: ros slam

我目前正在真实的 TurtleBot(ROS Kinetic)中测试几种slam算法。尽管事实证明在TurtleBot上一切正常,但是我在基于里程计的slam算法的地图上遇到了一个问题。尽管我更改了 TurtleBot 基础以弄清该基础是否存在硬件问题或里程表问题,但这些图仍然相同。我使用的激光雷达的最大范围为17m。

映射(使用里程表) 我使用以下参数测试了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>

在整个实验室中测试过的映射中的地图位于: enter image description here

KartoSlam (使用测距法) 由KartoSlam生成的地图在实验室房间中使用默认参数进行了测试。 enter image description here

CRSM 大满贯(未使用里程表) 这是由CRSM Slam制作的,在不使用里程表的实验室中测试的地图。如您所见,CRSM映射比前两个要好得多。 enter image description here

问题:

由于我已经在两个不同的TurtleBots上尝试了算法,我应该在哪里寻找修复程序? 由于到目前为止我得到的确实很差,我该如何改善地图质量?

1 个答案:

答案 0 :(得分:0)

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

  1. 仅需最小限度的打钩或任何其他猛击就可以启动乌龟机器人。
  2. 启动rviz,并确保将固定框架设置为像odom或map这样的世界框架(从TF树中验证名称)。
  3. 向其中添加激光器,并设置大约100秒的衰减时间。
  4. 将机器人保持在墙前,并命令它朝墙移动。随着机器人向前移动,您的世界框架中激光数据中的“墙的位置”应该看起来或多或少是文具。这可以确保您的正向里程表正常。
  5. 然后将机器人放在激光视图中有大3D对象的角落或某个地方。然后命令机器人旋转。同样,所有角和3D对象应保持静止。

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