4

我目前正在一个真正的TurtleBot(ROS Kinetic)中测试几种 slam 算法。尽管 TurtleBot 上的一切似乎都运行良好,但我在来自基于里程计的 slam 算法的地图上遇到了一个问题。尽管我更改了TurtleBot底座以确定底座是否存在硬件或里程计问题,但地图保持不变。我使用的激光雷达最大射程可达 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 上尝试过算法,我应该在哪里寻找解决方案?我怎么能提高地图质量,因为到目前为止我得到的真的很差?

4

1 回答 1

0

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

  1. 以最少的无 gmapping 或任何其他大满贯启动turtlebots。
  2. 启动 rviz 并确保将固定框架设置为像 odom 或 map 这样的世界框架(从 TF 树验证名称)。
  3. 向其添加激光并将衰减时间设置为约 100 秒。
  4. 将机器人保持在墙前并命令它向墙移动。随着机器人向前移动,世界框架中激光数据中的“墙的位置”应该或多或少看起来是固定的。这可以确保您的前向里程计是正常的。
  5. 然后将机器人放在角落或激光视野中存在大型 3D 对象的某个地方。然后命令机器人旋转。再一次,所有的角落和 3D 对象都应该保持静止。

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

于 2019-03-06T02:39:09.340 回答