Оглавление:

RGB-D SLAM с Kinect на Raspberry Pi 4 [Buster] ROS Melodic: 6 шагов
RGB-D SLAM с Kinect на Raspberry Pi 4 [Buster] ROS Melodic: 6 шагов

Видео: RGB-D SLAM с Kinect на Raspberry Pi 4 [Buster] ROS Melodic: 6 шагов

Видео: RGB-D SLAM с Kinect на Raspberry Pi 4 [Buster] ROS Melodic: 6 шагов
Видео: RTAB based RGBD SLAM | 3D Depth Mapping | ::ROS | Raspberry Pi 4 2024, Июль
Anonim
Image
Image

В прошлом году я написал статью о сборке и установке ROS Melodic на новом (на тот момент) Raspberry Pi с ОС Debian Buster. Статья привлекла много внимания как здесь, на Instructables, так и на других платформах. Я очень рад, что помог такому количеству людей успешно установить ROS на Raspberry Pi. В сопроводительном видео я также кратко продемонстрировал получение изображения глубины из Kinect 360. Позже многие люди связались со мной в LinkedIn и спросили, как мне удалось использовать Kinect с Raspberry Pi. Я был немного удивлен этим вопросом, так как процесс подготовки Kinect в то время занимал у меня около 3-4 часов и не казался слишком сложным. Я поделился своими файлами.bash_history со всеми людьми, которые интересовались этой проблемой, и в апреле наконец нашел время написать статью о том, как установить драйверы Kinect и выполнить RGB-D SLAM с RTAB-MAP ROS. Неделя бессонных ночей после начала написания статьи, теперь я понимаю, почему так много людей задали мне этот вопрос:)

Я начну с краткого объяснения того, какие подходы сработали, а какие нет. Затем я объясню, как установить драйверы Kinect для использования с ROS Melodic и, наконец, как настроить вашу машину для RGB-D SLAM с RTAB-MAP ROS.

Шаг 1. Что сработало, а что нет

Для Kinect на Raspberry Pi доступно несколько драйверов - два из них поддерживаются ROS.

Драйверы OpenNI - пакет openni_camera для ROS

Драйверы libfreenect - пакет freenect_stack для ROS

Если вы посмотрите на соответствующие репозитории GitHub, то обнаружите, что драйвер OpenNI последний раз обновлялся много лет назад, а на практике уже долгое время является EOL. ibfreekinect, с другой стороны, своевременно обновляется. То же самое для их соответствующих пакетов ROS, freenect_stack был выпущен для мелодии ROS, в то время как последний дистрибутив openni_camera перечислил поддержку Fuerte …

Можно скомпилировать и установить драйвер OpenNI и пакет openni_camera на Raspberry Pi для ROS Melodic, хотя у меня это не сработало. Для этого следуйте этому руководству, шаги 1, 2, 3, на шагах 2 и 3 удалите флаг «-mfloat-abi = softfp» из файла Platform / Linux / Build / Common / Platform. ARM (согласно совету по этому Выпуск на Github). Затем клонируйте пакет openni_camera в рабочее пространство catkin и скомпилируйте с помощью catkin_make. У меня это не сработало, ошибка заключалась в том, что не удалось создать генератор глубины. Причина: интерфейс USB не поддерживается!

Использование libfreenect и freenect_stack в конечном итоге дало успех, но было довольно много проблем, которые нужно было решить, и решение было немного хакерским, хотя и работало очень стабильно (1 час + непрерывная работа).

Шаг 2: Установка драйверов Freenect и Freenect_stack

Установка драйверов Freenect и Freenect_stack
Установка драйверов Freenect и Freenect_stack

Я предполагаю, что вы используете мой образ ROS Melodic Desktop из этой статьи. Если вы хотите выполнить установку в другой среде, например в образе ros_comm или в Ubuntu для Raspberry Pi, убедитесь, что у вас достаточно знаний о ROS для решения проблем, которые могут возникнуть из-за этой разницы.

Начнем с сборки драйверов libfreenect из исходных текстов, поскольку предварительно созданная версия репозитория apt-get слишком устарела.

sudo apt-get update

sudo apt-get install libusb-1.0-0-dev

git clone

cd libfreenect

mkdir build && cd build

cmake -L..

делать

sudo make install

Будем надеяться, что процесс сборки будет проходить без особых событий и будет полон дружественных зеленых сообщений. Следующее, что нужно сделать после установки драйвера libfreenect, - установить пакет freenect_stack для ROS. Есть довольно много других пакетов, от которых это зависит, нам нужно будет их клонировать и собрать вместе с catkin_make. Перед тем, как начать, убедитесь, что ваше рабочее пространство с кошачьим мешком правильно настроено и получено!

Из папки src вашей рабочей области catkin:

git clone

git clone

git clone

git clone

git clone

git clone

Ооо, это было много клонирования.

ПОЗДНЕЕ РЕДАКТИРОВАНИЕ: как было указано одним из моих читателей, репозиторий vision_opencv должен быть настроен на мелодическую ветвь. Для этого cd перейдите в src / vision_opencv и выполните

git checkout мелодичный

Затем вернитесь в папку рабочего пространства catkin. Чтобы проверить, есть ли у нас зависимости для всех пакетов, выполните эту команду:

установка rosdep --from-paths src --ignore-src

Если вы успешно клонировали все необходимые пакеты, он запросит загрузку libfreekinect с помощью apt-get. Ответьте нет, так как мы уже установили его из исходников.

sudo apt-get install libbullet-dev libharfbuzz-dev libgtk2.0-dev libgtk-3-dev

catkin_make -j2

Время чая;) или любой другой ваш любимый напиток.

После завершения процесса компиляции вы можете попробовать запустить стек kinect и проверить, правильно ли он выводит изображение глубины и цвета. Я использую Raspberry Pi без головы, поэтому мне нужно запустить RVIZ на моем настольном компьютере.

На Raspberry Pi сделайте (измените IP-адрес на IP-адрес вашего Raspberry Pi!):

экспорт ROS_MASTER_URI = https://192.168.0.108: 11311

экспорт ROS_IP = 192.168.0.108

roslaunch freenect_launch freenect.launch depth_registration: = true

Вы увидите результат, как на снимке экрана 1. «Остановка устройства RGB и сброс потока глубины». указывает, что Kinect готов, но на его темы еще ничего не подписано.

На настольном компьютере с установленной ROS Melodic выполните:

экспорт ROS_MASTER_URI = https://192.168.0.108: 11311

экспорт ROS_IP = [ваш-рабочий-компьютер-ip] rviz

Теперь вы должны иметь возможность видеть потоки изображений RGB и Depth в RVIZ, как на снимке экрана 2 выше… но не одновременно.

Хорошо, вот где начинается взлом. Я потратил 3 дня, пробуя разные драйверы и подходы, и ничего не помогло - как только я попытался получить доступ к двум потокам одновременно, Kinect начинал тайм-аут, как вы можете видеть на снимке экрана 3. Я перепробовал все: лучший источник питания, более старые коммиты libfreenect и freenect_stack, остановка usb_autosuspend, закачка отбеливателя в порты USB (ладно, не последний! не делайте этого, это шутка и не должна составлять технический совет:)). Затем в одном из выпусков Github я увидел учетную запись человека, который сказал, что их Kinect работал нестабильно, пока они не «загрузили шину USB», подключив ключ Wi-Fi. Я попробовал, и это сработало. С одной стороны, я рад, что это сработало. С другой стороны, кто-то действительно должен это исправить. Ну, пока что (вроде) исправив это, давайте перейдем к следующему шагу.

Шаг 3. Установка автономной RTAB MAP

Установка автономной RTAB MAP
Установка автономной RTAB MAP

Сначала нам нужно установить кучу зависимостей:

Несмотря на то, что для PCL доступен предварительно собранный пакет armhf, из-за этой проблемы нам необходимо скомпилировать его из исходников. Проконсультируйтесь с репозиторием PCL GitHub, чтобы узнать, как его скомпилировать из исходного кода.

sudo apt-get install libvtk6-dev libvtk6-qt-dev libvtk6-java libvtk6-jni

sudo apt-get install libopencv-dev cmake libopenni2-dev libsqlite3-dev

Теперь давайте клонируем репозиторий git автономного пакета rtab map в нашу домашнюю папку и создадим его. Я использовал последнюю версию (0.18.0).

git clone

cd rtabmap / build

cmake..

make -j2

sudo make install

sudo ldconfig rtabmap

Теперь, когда мы скомпилировали автономную RTAB MAP, мы можем перейти к последнему шагу - компиляции и установке оболочки ROS для RTAB MAP, rtabmap_ros.

Шаг 4: Установка Rtabmap_ros

Установка Rtabmap_ros
Установка Rtabmap_ros

Если вы зашли так далеко, вы, вероятно, уже знаете, как это делать:) Клонируйте репозиторий rtabmap_ros в папку src вашей рабочей области catkin. (Выполните следующую команду из папки src рабочей области catkin!)

git clone

Нам также понадобятся эти пакеты ROS, от которых зависит rtabmap_ros:

git clone

git clone

git clone

git clone

git clone

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

установка rosdep --from-paths src --ignore-src

Установите больше зависимостей из ap-get (это не прервет связывание, но вызовет ошибку во время компиляции)

sudo apt-get install libsdl-image1.2-dev

Затем перейдите в папку рабочего пространства catkin и начните компилировать:

CD..

catkin_make -j2

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

Шаг 5: Показать время

Время для шоу
Время для шоу
Время для шоу
Время для шоу

Проделайте этот хитрый трюк, добавив что-то вроде Wi-Fi или Bluetooth-ключа к USB-порту - я использовал 2 порта USB 2.0, один для Kinect, другой для WiFi-ключа.

На Raspberry Pi сделайте (измените IP-адрес на IP-адрес вашего Raspberry Pi!): 1-й терминал:

экспорт ROS_MASTER_URI = https://192.168.0.108: 11311

экспорт ROS_IP = 192.168.0.108

roslaunch freenect_launch freenect.launch depth_registration: = true data_skip: = 2

2-й терминал:

roslaunch rtabmap_ros rgbd_mapping.launch rtabmap_args: = - delete_db_on_start --Vis / MaxFeatures 500 --Mem / ImagePreDecimation 2 --Mem / ImagePostDecimation 2 --Kp / DetectorStrategy 6 --OdomF2M / MaxSize: = ложь

Вы увидите результат, как на снимке экрана 1. «Остановка устройства RGB и сброс потока глубины». указывает, что Kinect готов, но на его темы еще ничего не подписано. Во втором терминале вы должны видеть сообщения о качестве odom. Если вы перемещаете Kinect слишком быстро, качество odom упадет до 0, и вам нужно будет перейти в предыдущее место или начать с чистой базы данных.

На вашем настольном компьютере с установленным пакетом ROS Melodic и rtab_map (я рекомендую вам использовать для этого компьютер с Ubuntu, поскольку для архитектуры amd64 доступны готовые пакеты) выполните:

экспорт ROS_MASTER_URI = https://192.168.0.108: 11311

экспорт ROS_IP = [ваш-рабочий-компьютер-ip]

рвиз

Добавьте дисплеи MapGraph и MapCloud в rviz и выберите соответствующие темы из rtab_map. Ну вот и все, сладкий вкус победы! Давай, сделай карту:)

Шаг 6: ссылки

Во время написания этой статьи я использовал ряд ресурсов, в основном форумы и вопросы GitHub. Я оставлю их здесь.

github.com/OpenKinect/libfreenect/issues/338

www.reddit.com/r/robotics/comments/8d37gy/ros_with_raspberry_pi_and_xbox_360_kinect_question/

github.com/ros-drivers/freenect_stack/issues/48

official-rtab-map-forum.67519.x6.nabble.com/RGB-D-SLAM-example-on-ROS-and-Raspberry-Pi-3-td1250.html

github.com/OpenKinect/libfreenect/issues/524

Добавьте меня в LinkedIn, если у вас есть какие-либо вопросы, и подпишитесь на мой канал на YouTube, чтобы получать уведомления о более интересных проектах, связанных с машинным обучением и робототехникой.

Рекомендуемые: