Обзор Методов Визуальной Одометрии В Ros: Использование Камер Глубины

Добрый день, дорогие читатели! В предыдущих статьях о роботизированной платформе ROS я затрагивал тему локализации и картографирования местности, в частности мы изучали методы SLAM: gmapping в статья и hector_slam в статья .

В этой статье я продолжу знакомство с алгоритмами локализации в ROS и предоставлю обзор нескольких алгоритмов визуальной одометрии, реализованных на платформе ROS. Визуальная одометрия важна в робототехнике, поскольку позволяет оценить движение робота, его текущее положение и ускорение на основе данных видеопотока с камеры.

Вы можете использовать как обычную RGB-камеру (в данном случае речь идет о монокулярной одометрии), так и стереокамеру (стереодометрия) и даже RGBD-камеру.

При использовании камер RGBD, таких как Microsoft Kinect, можно получить более точную визуальную одометрию, чем при использовании стереокамер, поскольку в этом случае мы используем 3D-данные.

В этой статье мы рассмотрим такие алгоритмы.

Кому интересна эта тема, просьба нажать под кат.



rtabmap

rtabmap по сути, это алгоритм SLAM в ROS. Помимо инструментов для SLAM в этот пакет входит приложение средство просмотра одометрии апробировать различные методы визуальной одометрии.

В rtabmap визуальная одометрия работает следующим образом: для расчета одометрии алгоритм использует визуальные признаки, полученные из RGB-изображения, и данные глубины из карты глубины.

Используя совпадения визуальных признаков между двумя изображениями, алгоритм RANSAC вычисляет преобразование между последовательными кадрами.

Установить rtabmap на ROS Indigo и Kinetic очень просто с помощью apt-get:

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
   

sudo apt-get install ros-<version>-rtabmap ros-<version>-rtabmap-ros

Вы также можете установить rtabmap и rtabmap_ros из исходников:

source /opt/ros/<version>/setup.bash cd ~ git clone https://github.com/introlab/rtabmap.git rtabmap cd rtabmap/build cmake .

make cd ~/catkin_ws git clone https://github.com/introlab/rtabmap_ros.git src/rtabmap_ros catkin_make -j1

Запустим odmetryViewer:

rtabmap-odometryViewer

Откроется подобное окно:

Обзор методов визуальной одометрии в ROS: использование камер глубины

Давайте немного переместим камеру:

Обзор методов визуальной одометрии в ROS: использование камер глубины

Попробуем запустить его с параметрами.

Например, с помощью метода «мешка слов» (по умолчанию используется дескриптор SURF):

rtabmap-odometryViewer -bow

Использование метода «мешка слов» с дескриптором SIFT (0 = SURF, 1 = SIFT)

rtabmap-odometryViewer -bow 1



Обзор методов визуальной одометрии в ROS: использование камер глубины

Используя метод FAST+BRIEF:

rtabmap-odometryViewer -bin



Обзор методов визуальной одометрии в ROS: использование камер глубины

Вы также можете попробовать одометрию на основе метода ICP (итеративная ближайшая точка), используя параметр -icp. Частоту обработки можно настроить с помощью параметра hz (целое число кадров в секунду):

rtabmap-odometryViewer -hz 2

Вы также можете настроить внутренние параметры алгоритма, такие как максимальное расстояние между устройствами вставки, максимальное количество визуальных признаков для поиска соответствия и количество итераций в методе RANSAC/ICP. В целом эксперименты с визуальной одометрией rtabmap показали, что алгоритм работает быстро, без задержек и точно определяет положение камеры относительно сцены.

Единственным недостатком алгоритма из пакета rtabmap является то, что при его использовании не удалось отобразить данные одометрии в rviz. Здесь вам нужно более глубоко погрузиться в интеграцию ROS.

Пакет fovis_ros

Пакет fovis_ros работает только в версии ROS Hydro. В репозитории есть ветка Indigo, но при компиляции в рабочую область catkin fovis_ros вылетает с ошибкой.

Для установки fovis_ros нам понадобится библиотека libfovis и сам пакет fovis_ros. Давайте загрузим их из репозитория github:

cd ~/catkin_ws/src git clone https://github.com/srv/libfovis.git cd libfovis git checkout hydro cd .

git clone https://github.com/srv/fovis.git cd fovis git checkout hydro cd ~/catkin_ws catkin_make source devel/setup.bash

Здесь нам нужно убедиться, что текущая ветка выбрана Hydro, иначе могут возникнуть проблемы при компиляции (текущая ветка в репозиториях — Indigo).

Теперь создадим лаунчер для запуска fovis_ros:

cd ~/catkin_ws/src git clone https://github.com/vovaekb/fovis_demo.git сd ~/catkin_ws catkin_make source devel/setup.bash

Запустим fovis_demo.launch:

roslaunch fovis_demo fovis_demo.launch

Откроется окно рвиза:

Обзор методов визуальной одометрии в ROS: использование камер глубины

Давайте немного переместим камеру и получим обновленное положение:

Обзор методов визуальной одометрии в ROS: использование камер глубины

fovis_ros публикует данные в двух темах: /kinect_odometer/odometry (одометрия) и /kinect_odometer/pose (положение).

Теперь посмотрим на содержимое файлов запуска в моем примере.

Для информации файлы запуска взяты из книги «Изучение ROS для программирования робототехники – Второе издание» из главы 5 под названием «Компьютерное зрение».

Начнем с основного файла fovis_demo.launch. В соответствии

<arg name="mode" default="no_registered"/>

мы устанавливаем для параметра режима значение no_registered. Это означает, что мы используем информацию о глубине no_registered, т.е.

карта глубины не регистрируется и не преобразуется в изображение с RGB-камеры.

Это сделано для ускорения обработки, так как если бы глубина записывалась, алгоритм был бы медленным.

Давайте проверим скорость обновления одометрии:

rostopic hz /kinect_odometer/odometry

Мы получим аналогичный результат:

average rate: 8.759 min: 0.084s max: 0.156s std dev: 0.02417s window: 9 average rate: 7.938 min: 0.084s max: 0.180s std dev: 0.02724s window: 16 average rate: 7.493 min: 0.084s max: 0.217s std dev: 0.03286s window: 23 average rate: 8.111 min: 0.068s max: 0.217s std dev: 0.03645s window: 33

Запустим fovis_demo с программной регистрацией, используя параметр mode:=sw_registered:

roslaunch fovis_demo fovis_demo.launch mode:=sw_registered

Мы получаем следующую информацию о частоте обновления одометрии:

average rate: 0.963 min: 1.022s max: 1.056s std dev: 0.01676s window: 3 average rate: 0.968 min: 1.020s max: 1.056s std dev: 0.01635s window: 4 average rate: 1.212 min: 0.509s max: 1.056s std dev: 0.25435s window: 6

Далее мы определяем файл конфигурации дисплея для rviz:

<arg name="rviz_config" default="$(find fovis_demo)/config/rviz_$(arg mode).

rviz"/>

Я не буду здесь обсуждать его содержание.

Скажу лишь, что он определяет внешний вид окна рвиза: активные отображения тем, глобальные настройки типа «Фиксированный кадр» и т.д. Далее следует определение параметра rviz и запуск драйвера сенсора Kinect в зависимости от параметра режима:

<include file="$(find fovis_demo)/launch/openni_kinect_$(arg mode).

launch"/>

Запускаем лаунчер для фовиса из нашего пакета, также в зависимости от параметра режима:

<include file="$(find fovis_demo)/launch/fovis_$(arg mode).

launch"/>

Поскольку мы оцениваем движение робота на основе движения камеры, нам необходимо знать смещение или преобразование системы координат камеры в систему координат робота.

Для этого мы публикуем статическое преобразование между системами координат base_link → camera_link с помощью static_transform_publisher из пакета tf:

<node pkg="tf" type="static_transform_publisher" name="base_to_camera_tf" args="0 0 -0.05 0 0 0 base_link camera_link 100"/>

И наконец запускаем rviz:

<group if="$(arg rviz)"> <node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rviz_config)"/> </group>

Остальные файлы запуска я рассматривать в этой статье не буду.

Если хотите, вы можете сделать это сами.

Скажу лишь, что когда мы запускаем fovis_ros с параметром mode=sw_registered, мы дросселируем кадры с RGB-камеры, т.е.

перепубликуем сообщения из одной темы в другую с меньшей частотой обновления (2,5 Гц) (подробнее об этом можно прочитать здесь).

Здесь ).

Для тех, кто заинтересован в более глубоком изучении алгоритма fovis, есть статья о деталях алгоритма.

Эксперименты с визуальной одометрией fovis_ros показали, что алгоритм работает не так быстро, как rtabmap, с небольшими задержками при перемещении камеры, но все же достаточно точно определяет положение камеры относительно сцены.

Надеюсь, этот обзор алгоритмов визуальной одометрии будет полезен в вашей работе и поможет решить некоторые задачи.

Желаю вам успехов в ваших проектах и до новых встреч! PS: Также прошу вас принять участие в опросе и выбрать версию ROS, которую вы используете в своей работе.

В опросе могут участвовать только зарегистрированные пользователи.

Войти , Пожалуйста.

Какую версию ROS вы используете? 0% Hydro 0 9,09% Indigo 1 90,91% Kinetic 10 Проголосовали 11 пользователей.

21 пользователь воздержался.

Теги: #Робототехника #локализация #слэм #одометрия

Вместе с данным постом часто просматривают: