Добрый день, дорогие читатели! В предыдущих статьях о роботизированной платформе 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:
Вы также можете установить rtabmap и rtabmap_ros из исходников:sudo apt-get install ros-<version>-rtabmap ros-<version>-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
Откроется подобное окно:
Давайте немного переместим камеру:
Попробуем запустить его с параметрами.
Например, с помощью метода «мешка слов» (по умолчанию используется дескриптор SURF): rtabmap-odometryViewer -bow
Использование метода «мешка слов» с дескриптором SIFT (0 = SURF, 1 = SIFT) rtabmap-odometryViewer -bow 1
Используя метод FAST+BRIEF: rtabmap-odometryViewer -bin
Вы также можете попробовать одометрию на основе метода 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
Откроется окно рвиза:
Давайте немного переместим камеру и получим обновленное положение:
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 пользователь воздержался.
Теги: #Робототехника #локализация #слэм #одометрия
-
Звездные Войны, Повествование И Веб-Дизайн
19 Oct, 24 -
Туристы Изменили Цвет Озера С Помощью Монет
19 Oct, 24 -
Креативная Картотека
19 Oct, 24 -
Радио-Э №12
19 Oct, 24 -
Ucoz Движется На Запад!!!
19 Oct, 24 -
Nintendo Wii Действительно Помогает Похудеть
19 Oct, 24