Карты низкого качества, созданные на основе алгоритмов захлопывания на основе одометрии, протестированных на реальном TurtleBot

В настоящее время я тестирую несколько алгоритмов хлопка на реальном TurtleBot (ROS Kinetic). Несмотря на то, что на TurtleBot, похоже, все работает нормально, я столкнулся с проблемой на картах, основанных на алгоритмах захвата на основе одометрии. Хотя я изменил базу TurtleBot, чтобы выяснить, есть ли у базы проблемы с оборудованием или одометрией, карты остались прежними. Лидар, который я использую, имеет максимальную дальность до 17 метров.

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 намного лучше двух предыдущих. введите описание изображения здесь

Вопросы :

Где мне искать исправление, если я пробовал алгоритмы на двух разных TurtleBot? Как я могу улучшить качество карты, если то, что я получаю, действительно плохое?


person gonidelis    schedule 25.01.2019    source источник
comment
Правильны ли ваши преобразования между одометром, базой и лазерной рамкой? Вы сделали картографирование с чистой одометрией, чтобы увидеть, есть ли у вас систематические ошибки в сигналах одометрии?   -  person Tik0    schedule 25.01.2019
comment
@ Tik0 Как я могу убедиться в правильности преобразований? Я просто полагаюсь на преобразования, которые уже выполняются алгоритмами, которые я выбираю для запуска. Что еще я должен проверить? Как я уже упоминал, я попытался изменить базу, поэтому я запустил алгоритмы с двумя разными базами, и результат был таким же.   -  person gonidelis    schedule 25.01.2019
comment
Убедитесь, что все ваши преобразования и сообщения соответствуют REP-105. Однако здесь вы также найдете несколько советов по одометрии. Кроме того, у вас есть инструмент rviz и roswtf для фреймов отладки. Но сначала я бы просто нарисовал сообщения одометрии, чтобы увидеть, имеют ли они вообще смысл. Если они показывают систематические ошибки, они могут испортить ваш SLAM.   -  person Tik0    schedule 25.01.2019


Ответы (1)


Я считаю, что хороший способ проверить базовую одометрию:

  1. Запускайте черепашьих ботов с минимальным использованием gmapping или любого другого удара.
  2. Запустите rviz и убедитесь, что в качестве фиксированного фрейма задан мировой фрейм, например odom или map (проверьте имя в вашем дереве TF).
  3. Добавьте к нему лазер и установите время затухания около 100 секунд.
  4. Держите робота перед стеной и прикажите ему двигаться к стене. По мере того, как робот движется вперед, «положение стены» в данных лазера в вашем мировом кадре должно выглядеть более или менее канцелярским. Это дает вам уверенность в том, что ваша передняя одометрия в порядке.
  5. Затем поместите робота в угол или в другое место, где в поле зрения лазера видны большие трехмерные объекты. Затем прикажите роботу повернуться. Еще раз все углы и 3D-объекты должны оставаться неподвижными.

Если вы можете сделать это успешно, вы сможете создавать разумные «сырые» карты перед использованием каких-либо алгоритмов SLAM.

person Vik    schedule 06.03.2019