Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: Научного журнала «Студенческий» № 23(277)

Рубрика журнала: Информационные технологии

Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5

Библиографическое описание:
Гаврилов Р.А. ИНТЕГРАЦИЯ ORB-SLAM3 С ROS ДЛЯ ПОСТРОЕНИЯ МАГНИТНОЙ КАРТЫ // Студенческий: электрон. научн. журн. 2024. № 23(277). URL: https://sibac.info/journal/student/277/338148 (дата обращения: 12.12.2024).

ИНТЕГРАЦИЯ ORB-SLAM3 С ROS ДЛЯ ПОСТРОЕНИЯ МАГНИТНОЙ КАРТЫ

Гаврилов Роман Андреевич

студент, кафедра системного программирования и компьютерной безопасности, Гродненский государственный университет им. Янки Купалы,

Республика Беларусь, г. Гродно

Петров Сергей Валерьевич

научный руководитель,

канд. мед. наук, доц., Гродненский государственный университет им. Янки Купалы,

Республика Беларусь, г. Гродно

INTEGRATION OF ORB-SLAM3 WITH ROS FOR MAGNETIC FIELD MAPPING

 

Roman Gavrilov

student, Department of System Programming and Computer Security, Yanka Kupala State University of Grodno,

Belarus, Grodno

Sergey Petrov

scientific supervisor, Candidate of Medical Sciences,  associate professor, Yanka Kupala State University of Grodno,

Belarus, Grodno

 

АННОТАЦИЯ

Данная статья рассматривает ORB-SLAM3 с ROS для картирования магнитных полей с помощью камеры Kinect и магнитометра.

ABSTRACT

This article examines ORB-SLAM3 with ROS for magnetic field mapping using a Kinect camera and magnetometer.

 

Ключевые слова: ROS, ORB-SLAM3, RGB-D камера, визуализация, картографирование.

Keywords: ROS, ORB-SLAM3, RGB-D camera, visualization, mapping.

 

На сегодняшний день высокая точность реконструкции объектов реального мира необходима для работы приложений дополненной реальности и робототехники нового поколения. В робототехнике задача одновременного определения местоположения и построения плотных и разреженных моделей статичной области пространства называется SLAM (simultaneous localization and mapping). Одной из таких систем является ORB-SLAM3, интегрированная визуально-инерциальная система SLAM, которая полностью полагается на оценку апостериорного максимума (MAP), даже на этапе инициализации IMU-сенсора [8]. Этот подход позволил создать систему, надежно работающую в режиме реального времени в различных средах, как внутри, так и снаружи помещений, обеспечивая высокую точность. Важной особенностью ORB-SLAM3 является мультикартографическая система, основанная на новом методе распознавания местности с улучшенным запоминанием. Благодаря этому ORB-SLAM3 способна работать даже в условиях плохой визуализации: если система теряется, она создаёт новую карту местности, которая будет плавно интегрирована с предыдущими при повторном посещении уже нанесённых на карту областей. В отличие от методов визуальной одометрии, использующих информацию только за последние несколько секунд, ORB-SLAM3 является первой системой, способной повторно использовать всю ранее полученную информацию на всех этапах алгоритма. Это позволяет точно определять позу камеры и наблюдаемое облако точек, даже если ключевые кадры сильно разнесены во времени или взяты из предыдущих сеансов картографирования [8].

В этом исследовании была выбрана RGB-D камера, а именно модель Kinect 2010 года, изначально предназначенная для использования с игровой приставкой Xbox 360. Эта версия Kinect использует метод структурированного света, определяя расстояние с помощью инфракрасного света и анализируя, как этот рисунок появляется на инфракрасном изображении [10]. Хотя Visual SLAM можно выполнять с использованием только монокулярной камеры, которая является наиболее дешёвым и доступным вариантом, этот метод имеет ограничения. С одной камерой невозможно определить глубину, что делает масштаб карты и траекторию движения неопределёнными. Кроме того, для создания начальной карты система требует методов множественного просмотра или фильтрации, так как она не может триангулировать с первого кадра. Наконец, монокулярная SLAM подвержена дрейфу масштаба и может выйти из строя при простом повороте во время работы. Использование стерео или RGB-D камеры решает эти проблемы, предоставляя наиболее надёжное решение для Visual SLAM.

Помимо измерения глубины с помощью ИК-проектора и ИК-камеры, Kinect также записывает обычное RGB-видео и оснащён четырьмя микрофонами с функцией шумоподавления.

В настоящее время для полноценного использования ORB-SLAM3 необходимо установить значительное количество различного программного обеспечения, в первую очередь, промежуточное ПО – ROS. В ROS существуют узлы и микроузлы: узел запускается один раз в одном процессе, а микроузел может запускаться несколько раз из одного и того же процесса [1].

На сегодняшний день доступны две версии ROS: ROS 1 и ROS 2. Официальная поддержка ROS 1 осуществляется на платформе Ubuntu, но сообщество также обеспечивает поддержку для других дистрибутивов Linux и OS X. В 2017 году была выпущена ROS 2, которая была разработана для решения задач и сценариев, где ROS 1 не мог использоваться из-за своих ограничений [1].

В нашем исследовании мы использовали ROS 1 версии Noetic, работающую на операционной системе Linux, а именно Ubuntu 20.04. Существует также другая версия ROS 1 – Melodic, которая работает на более ранней версии Ubuntu. Мы выбрали ROS 1, поскольку ORB-SLAM3 изначально поддерживал именно эту версию, и для неё предоставляет больше документации. В дальнейшем, когда мы будем упоминать ROS, речь будет идти именно о ROS 1.

Мы кратко опишем этапы настройки и установки для общего понимания ORB-SLAM3. Сначала установим ROS Noetic [11], создадим рабочее окружение и настроим его согласно официальной документации [2]. Также установим и соберем пакеты image_common и image_pipeline для работы с камерой.

После подготовки рабочего пространства можно приступать к установке ORB-SLAM3. Для правильной установки необходимо выполнить следующие шаги:

1.  Установка дополнительных библиотек. ORB-SLAM3 имеет множество зависимостей, поэтому для успешной сборки системы нужно установить все необходимые библиотеки [4]. Поскольку у нас используется Ubuntu 20.04, из репозитория дистрибутива будет установлена OpenCV версии 4.2.0.

2. Установка ORB-SLAM3 [7].

3. Настройка ORB-SLAM3. Теперь необходимо собрать ROS узлы, которые не устанавливаются автоматически при установке ORB-SLAM3. Для этого изменим файл CMakeLists.txt в папке ROS узла. В начале файла добавим «project(ORB_SLAM3)», изменим версию OpenCV на 4.2.0 и версию С++ на более актуальную. Также можно закомментировать AR nodes, так как они не собираются. В корневой папке также изменим содержимое файла build_ros, указывая путь к нашему пакету. Это необходимо для успешной компиляции [7].

Во время исследования выяснилось, что ORB-SLAM3 не может напрямую передавать данные в ROS, для этого нужно установить дополнительный пакет-оболочку [9]. После скачивания в CMakeLists.txt нужно указать путь до нашего ORB-SLAM3. Так как мы установили ORB-SLAM3 в домашнюю папку, мы можем пропустить этот шаг и сразу собрать наш модуль командой «catkin_make» в рабочей папке. После сборки необходимо добавить файл ORBvoc.txt, который находится в папке ORB-SLAM3, в config нашего пакета.

Также для работы с Kinect нужно установить специальный драйвер, иначе мы не сможем взаимодействовать с камерой. Существует два пакета для работы с Kinect: OpenNI и Freenect. Во время исследования попытка установить OpenNI не удалась, поэтому было решено использовать Freenect [6]. Для интеграции Freenect в ROS необходимо установить специальный пакет freenect_stack [3].

 

Теперь осталось убедиться, что всё работает исправно. Для запуска проекта нужно выполнить три команды в разных окнах терминала: «roscore, roslaunch freenect_launch freenect.launch depth_registration:=true» и «rviz». В результате в Rviz мы получим изображение с Kinect (см. рисунок 1).

 

Рисунок 1. Изображение с Kinect в Rviz

 

В ходе проверки мы убедились, что все работает правильно. Однако, чтобы получать точные результаты при использовании ORB-SLAM3, необходимо откалибровать RGB-D и DEPTH камеры. Для этого мы уже ранее установили необходимое программное обеспечение. Для калибровки потребуется бумажный лист с шахматным узором. В нашем исследовании мы использовали обычный лист формата A4, но можно применять и другие форматы [5]. Во время калибровки необходимо снимать калибровочный объект в разных частях кадра под различными углами и с разным масштабом. Утилита самостоятельно выберет необходимое количество кадров для калибровки (см. рисунок 2). После того как наберется достаточно кадров (все индикаторы станут зелеными) можно запустить процесс калибровки нажатием на кнопку «calibrate». Затем необходимо нажать кнопку «commit» для сохранения данных калибровки.

Для использования в качестве магнитометра мы выбрали смартфон Samsung Galaxy Duos под управлением Android. Для интеграции с ROS мы использовали специальное приложение — ROS Android Sensors Driver. Для начала работы с

 

Рисунок 2. Калибровка RGB-D камеры

Примечание – Калибровка глубины выглядит примерно так же

 

ROS необходимо было экспортировать переменную окружения ROS MASTER URI, выполнить соответствующую команду в терминале, а затем в приложении ввести локальный IP-адрес компьютера и ROS MASTER URI, и нажать «OK». После успешного выполнения этих шагов должны были появиться соответствующие топики, что можно проверить с помощью команды «rostopic list». Для сохранения данных с телефона в текстовый файл был написан небольшой пакет ROS. Однако перед этим необходимо было узнать тип сообщений для топика, используя команду «rostopic info android/magnetic_field» (MagneticField), что позволило корректно настроить ROS пакет для обработки этих данных.

Пакет для сохранения данных с ORB-SLAM3 писать не пришлось так, как ранее установленный пакет уже имеет данный функционал. Также мы написали небольшой скрипт для одновременного запуска ORB_SLAM3 и Kinect, если мы этого не сделали бы, то пришлось бы запускать каждый пакет в новом окне терминала.

Когда мы закончили с настройкой магнитометра и ORB-SLAM3, мы написали несколько модулей на языке Python для обработки и визуализации данных. В этих модулях использовались следующие библиотеки: numpy, pandas, evo, matplotlib, pykrige. Библиотека evo нужна для работы с данными SLAM. Библиотека pykrige нужна для реализации кригинга. Первый модуль, создает график траектории нашей камеры. Он считывает данные из текстового файла (x, y), на основе которых потом строиться график. При помощи данного модуля было проведено тестирование ORB-SLAM3. Был совершен обход на фиксированном расстоянии в 0.5 метра вокруг установленного центра для локализации окружения. В результате был получен график (см. рисунок 3.), где наблюдается незначительная погрешность камеры.

Во втором модуле создаются два CSV файла. Первый файл содержит три столбца: timestamps, x, y. Второй файл включает четыре столбца: timestamps, mag_x, mag_y, mag_z.

 

Рисунок 3. Тестирование ORB-SLAM3

Примечание – На графики еще можно наблюдать траекторию на основе кейфреймов

 

Третий модуль проводит интерполяцию наших временных рядов. Данный модуль необходим так, как наши данные были получены из двух параллельно работающих пакетов ROS из-за чего временные метки csv файлов не совпадают, а, следовательно, и значения. В данном модуле мы выполняем следующие действия:

  1. объединяем два csv файла в один;
  2. сортируем полученный файл по временным меткам;
  3. пустые значения заполняем при помощи интерполяции;
  4. удаляем пустые значения в начале и в конце файла.

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

Четвертый модуль визуализирует данные файла с интерполированными значениями. В результате тестирования данного модуля был получен график магнитного поля для траектории нашей камеры (см. рисунок 4.). Однако для получения графика магнитного поля не только для траектории камеры, но и для ее ближайшего окружения необходимо написать последний модуль.

 

Рисунок 4. График магнитного поля для траектории камеры

Примечание – Для тестирования данного модуля использовался маршрут с наличием двух магнитов

 

В последнем модуле при помощи OrdinaryKriging из библиотеки pykrige в котором указываем необходимые нам параметры, создается поверхность с предполагаемыми значениями. Для тестирования данного модуля использовались те же данные что и при тестировании модуля для построения магнитного поля траектории камеры. Также для тестирования использовались две модели вариограммы:

  1. модель вариограммы Гаусса;
  2. модель экспоненциальной вариограммы.

В результате были получены графики, на которых отчетливо видно области с повышенным магнитным полем (см. рисунок 5.).

 

  

Рисунок 5. Графики магнитного поля на основе экспоненциальной вариограммы и вариограммы Гаусса

 

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

Также стоит сказать, что существует RTAB-Map, которая предлагает аналогичный функционал, хорошо интегрирована в ROS и активно поддерживается, что делает ее более предпочтительным выбором.

 

Список литературы:

  1. Гаврилов Р.А. РАЗРАБОТКА РОБОТОТЕХНИЧЕСКИХ СИСТЕМ С ПОМОЩЬЮ ROS // Студенческий: электрон. научн. журн. 2023. № 22(234). URL: https://sibac.info/journal/student/234/295858 (дата обращения: 02.06.2024).
  2. Creating a workspace for catkin [Electronic resource] / ROS, 11.05.2017. – Mode of access: http://wiki.ros.org/catkin/Tutorials/create_a_workspace. – Date of access: 02.06.2024.
  3. freenect_stack [Electronic resource] / ROS, 26.06.2013. – Mode of access: http://wiki.ros.org/freenect_stack. – Date of access: 05.06.2024.
  4. how to build ORB_SLAM3 on raspbian buster raspberry pi [Electronic resource] / zoldaten, 26.08.2022. – Mode of access: https://github.com/UZ-SLAMLab/ORB_SLAM3/issues/638. – Date of access: 02.06.2024.
  5. Intrinsic calibration of the Kinect cameras [Electronic resource] / ROS, 06.02.2015. – Mode of access: http://wiki.ros.org/openni_launch/Tutorials/IntrinsicCalibration. – Date of access: 05.06.2024.
  6. libfreenect2 [Electronic resource] / xlz, 21.01.2016. – Mode of access: https://github.com/OpenKinect/libfreenect2. – Date of access: 02.06.2024.
  7. ORB_SLAM3 [Electronic resource] / Carlos Campos, Richard Elvira, Juan J. Gómez Rodríguez, José M. M. Montiel, Juan D. Tardos, 22.12.2021. – Mode of access: https://github.com/UZ-SLAMLab/ORB_SLAM3. – Date of access: 02.06.2024.
  8. ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM [Electronic resource] / Carlos Campos, Richard Elvira, Juan J. Gómez Rodríguez, José M. M. Montiel, Juan D. Tardós, 23.07.2021. – Mode of access: https://arxiv.org/abs/2007.11898. – Date of access: 02.06.2024.
  9. ROS wrapper for ORB-SLAM3 [Electronic resource] / Thien Nguyen, 15.08.2022. – Mode of access: https://github.com/thien94/orb_slam3_ros_wrapper. – Date of access: 02.06.2024.
  10. Structured Light 3D Scanning [Electronic resource] / Kyle McDonald, 22.03.2011. – Mode of access: https://www.instructables.com/Structured-Light-3D-Scanning/. – Date of access: 10.12.2022.
  11. Ubuntu install of ROS Noetic [Electronic resource] / ROS, 04.03.2023. – Mode of access: http://wiki.ros.org/noetic/Installation/Ubuntu. – Date of access: 02.06.2024.
Удалить статью(вывести сообщение вместо статьи): 

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.