Tabla de contenido:

SLAM RGB-D con Kinect en Raspberry Pi 4 [Buster] ROS Melodic: 6 pasos
SLAM RGB-D con Kinect en Raspberry Pi 4 [Buster] ROS Melodic: 6 pasos

Video: SLAM RGB-D con Kinect en Raspberry Pi 4 [Buster] ROS Melodic: 6 pasos

Video: SLAM RGB-D con Kinect en Raspberry Pi 4 [Buster] ROS Melodic: 6 pasos
Video: RGB-D SLAM с Kinect на Raspberry Pi 4 ROS Melodic 2024, Diciembre
Anonim
Image
Image

El año pasado escribí un artículo sobre la construcción e instalación de ROS Melodic en la nueva (en ese momento) Raspberry Pi con Debian Buster OS. El artículo ha recibido mucha atención tanto aquí en Instructables como en otras plataformas. Estoy muy contento de haber ayudado a tanta gente a instalar ROS con éxito en Raspberry Pi. En el video adjunto también demostré brevemente cómo obtener una imagen de profundidad de Kinect 360. Más tarde, muchas personas me contactaron en LinkedIn y me preguntaron cómo logré usar Kinect con Raspberry Pi. Me sorprendió un poco la pregunta, ya que el proceso de preparación de Kinect en ese momento me llevó entre 3 y 4 horas y no parecía muy complicado. Compartí mis archivos.bash_history con todas las personas que me preguntaban sobre el problema y en abril finalmente encontré el tiempo para escribir un artículo sobre cómo instalar los controladores de Kinect y realizar RGB-D SLAM con RTAB-MAP ROS. Semana de noches sin dormir después de comenzar a escribir el artículo, ahora entiendo por qué tanta gente me hizo esta pregunta:)

Comenzaré con una breve explicación sobre qué enfoques funcionaron y cuáles no. Luego explicaré cómo instalar los controladores Kinect para usar con ROS Melodic y, finalmente, cómo configurar su máquina para RGB-D SLAM con RTAB-MAP ROS.

Paso 1: Qué funcionó y qué no

Hay algunos controladores disponibles para Kinect en Raspberry Pi; de ellos, dos son compatibles con ROS.

Controladores OpenNI - paquete openni_camera para ROS

controladores libfreenect - paquete freenect_stack para ROS

Si observa sus respectivos repositorios de GitHub, puede encontrar que el controlador OpenNI se actualizó por última vez hace años y, en la práctica, está en EOL durante mucho tiempo. ibfreekinect, por otro lado, se está actualizando oportunamente. Lo mismo para sus respectivos paquetes ROS, freenect_stack fue lanzado para ROS melodic, mientras que la última distro que openni_camera ha incluido soporte para es Fuerte …

Es posible compilar e instalar el controlador OpenNI y el paquete openni_camera en Raspberry Pi para ROS Melodic, aunque no funcionó para mí. Para hacer eso, siga esta guía, los pasos 1, 2, 3, en el paso 2 y 3, elimine el indicador "-mfloat-abi = softfp" del archivo Platform / Linux / Build / Common / Platform. ARM (según los consejos sobre este Problema de Github). Luego, clone el paquete openni_camera en su espacio de trabajo catkin y compile con catkin_make. Sin embargo, no funcionó para mí, el error fue crear un generador de profundidad fallido. Motivo: ¡la interfaz USB no es compatible!

El uso de libfreenect y freenect_stack tuvo éxito al final, pero hubo bastantes problemas que resolver y la solución fue un poco hack, aunque funciona de manera muy estable (1 hora + operación continua).

Paso 2: instalación de controladores Freenect y Freenect_stack

Instalación de controladores Freenect y Freenect_stack
Instalación de controladores Freenect y Freenect_stack

Asumiré que usa mi imagen ROS Melodic Desktop de este artículo. Si desea realizar la instalación en un entorno diferente, por ejemplo, la imagen ros_comm o en Ubuntu para Raspberry Pi, asegúrese de tener suficiente conocimiento sobre ROS para resolver los problemas que puedan surgir de esa diferencia.

Comencemos por construir controladores libfreenect desde la fuente, ya que la versión prediseñada del repositorio apt-get está demasiado desactualizada.

sudo apt-get update

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

clon de git

cd libfreenect

mkdir build && cd build

cmake -L..

hacer

sudo hacer instalar

Es de esperar que el proceso de construcción transcurra sin incidentes y esté lleno de mensajes amigables con el medio ambiente. Después de instalar el controlador libfreenect, lo siguiente que debe hacer es instalar el paquete freenect_stack para ROS. Hay bastantes otros paquetes de los que depende, tendremos que clonarlos y compilarlos con catkin_make todos juntos. Antes de comenzar, asegúrese de que su espacio de trabajo de amento esté configurado y obtenido correctamente.

Desde la carpeta src del espacio de trabajo de catkin:

clon de git

clon de git

clon de git

clon de git

clon de git

clon de git

Vaya, eso fue mucha clonación.

EDICIÓN POSTERIOR: Como señaló uno de mis lectores, el repositorio vision_opencv debe configurarse en rama melódica. Para ese cd a src / vision_opencv y ejecutar

git checkout melódico

Luego, vuelva a la carpeta del espacio de trabajo de catkin. Para verificar si tenemos dependencias para todos los paquetes en su lugar, ejecute este comando:

instalación de rosdep --from -path src --ignore-src

Si clonó con éxito todos los paquetes necesarios, le solicitará descargar libfreekinect con apt-get. Responda no, ya que ya lo instalamos desde la fuente.

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

catkin_make -j2

Hora del té;) o cualquiera que sea tu bebida favorita.

Una vez finalizado el proceso de compilación, puede intentar iniciar kinect stack y comprobar si genera las imágenes de profundidad y color correctamente. Utilizo Raspberry Pi sin cabeza, por lo que necesito ejecutar RVIZ en mi computadora de escritorio.

En Raspberry Pi, haga (¡Cambie la dirección IP a la dirección IP de su Raspberry Pi!):

exportar ROS_MASTER_URI = https://192.168.0.108: 11311

exportar ROS_IP = 192.168.0.108

roslaunch freenect_launch freenect.launch depth_registration: = true

Verá la salida como en la captura de pantalla 1. "Deteniendo el dispositivo RGB y el flujo de profundidad de descarga". indica que Kinect está listo, pero aún no hay nada suscrito a sus temas.

En su computadora de escritorio con ROS Melodic instalado, haga:

exportar ROS_MASTER_URI = https://192.168.0.108: 11311

exportar ROS_IP = [ip-de-su-computadora-de-escritorio] rviz

Ahora debería poder ver secuencias de imágenes RGB y de profundidad en RVIZ como en la captura de pantalla 2 anterior … pero no al mismo tiempo.

Bien, aquí es donde comienzan las cosas hacky. Pasé 3 días probando diferentes controladores y enfoques y nada funcionó; tan pronto como intentaba acceder a dos transmisiones simultáneamente, Kinect comenzaba a agotarse, como puede ver en la captura de pantalla 3. Intenté todo: mejor fuente de alimentación, confirmaciones más antiguas de libfreenect y freenect_stack, detener usb_autosuspend, inyectar lejía en los puertos USB (bueno, ¡no el último! No lo hagas, es una broma y no debería constituir un consejo técnico:)). Luego, en uno de los problemas de Github, vi el relato de una persona que dijo que su Kinect era inestable, hasta que "cargaron el bus USB" conectando un dongle WiFi. Intenté eso y funcionó. Por un lado, me alegro de que haya funcionado. Por otro lado, alguien debería arreglar eso. Bueno, mientras (más o menos) arreglamos eso, pasemos al siguiente paso.

Paso 3: Instalación de MAP RTAB independiente

Instalación de MAP RTAB independiente
Instalación de MAP RTAB independiente

Primero tenemos un montón de dependencias para instalar:

A pesar de que hay un paquete armhf precompilado disponible para PCL, necesitaremos compilarlo desde la fuente debido a este problema. Consulte el repositorio de PCL GitHub para ver cómo compilarlo desde la fuente.

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

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

Ahora clonemos el repositorio git del paquete independiente rtab map en nuestra carpeta de inicio y compilemos. Usé la última versión (0.18.0).

clon de git

cd rtabmap / build

cmake..

hacer -j2

sudo hacer instalar

sudo ldconfig rtabmap

Ahora, cuando hemos compilado MAP RTAB independiente, podemos pasar al último paso: compilar e instalar el contenedor ROS para MAP RTAB, rtabmap_ros.

Paso 4: Instalación de Rtabmap_ros

Instalación de Rtabmap_ros
Instalación de Rtabmap_ros

Si llegaste tan lejos, probablemente ya conozcas el ejercicio:) Clona el repositorio rtabmap_ros en tu carpeta src del espacio de trabajo catkin. (¡Ejecute el siguiente comando desde la carpeta src del espacio de trabajo de catkin!)

clon de git

También necesitaremos estos paquetes ROS, de los que depende rtabmap_ros:

clon de git

clon de git

clon de git

clon de git

clon de git

Antes de comenzar la compilación, puede asegurarse de que no le faltan dependencias con el siguiente comando:

instalación de rosdep --from -path src --ignore-src

Instale más dependencias desde ap-get (estas no interrumpirán el enlace, pero arrojarán un error durante la compilación)

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

Luego, muévase a la carpeta de su espacio de trabajo catkin y comience a compilar:

CD..

catkin_make -j2

Espero que no hayas puesto demasiado lejos tu bebida de recopilación favorita. Una vez finalizada la compilación, ¡estamos listos para hacer el mapeo!

Paso 5: Mostrar la hora

Tiempo de la funcion
Tiempo de la funcion
Tiempo de la funcion
Tiempo de la funcion

Haz ese truco de hacky agregando algo como WiFi o dongle Bluetooth a un puerto USB: estaba usando 2 puertos USB 2.0, uno para Kinect y el otro para el dongle WiFi.

En Raspberry Pi, haga (¡Cambie la dirección IP a la dirección IP de su Raspberry Pi!): 1er terminal:

exportar ROS_MASTER_URI = https://192.168.0.108: 11311

exportar ROS_IP = 192.168.0.108

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

2da terminal:

roslaunch rtabmap_ros rgbd_mapping.launch rtabmap_args: = - delete_db_on_start --Vis / MaxFeatures 500 --Mem / ImagePreDecimation 2 --Mem / ImagePostDecimation 2 --Kp / DetectorStrategy 6 --OdomF2Mvdom 2 / Tamaño de imagen 1000 --OdomF2Mvdom 2: = falso

Verá la salida como en la captura de pantalla 1. "Deteniendo el dispositivo RGB y la descarga de flujo de profundidad". indica que Kinect está listo, pero aún no hay nada suscrito a sus temas. En la segunda terminal deberías estar viendo mensajes sobre la calidad de odom. Si mueve Kinect demasiado rápido, la calidad de la odom pasará a 0 y deberá moverse a una ubicación anterior o comenzar desde una base de datos limpia.

En su computadora de escritorio con ROS Melodic y el paquete rtab_map instalado (le recomiendo que use una computadora Ubuntu para eso, ya que los paquetes preconstruidos están disponibles para la arquitectura amd64) haga:

exportar ROS_MASTER_URI = https://192.168.0.108: 11311

exportar ROS_IP = [su-computadora-de-escritorio-ip]

rviz

Agregue las pantallas MapGraph y MapCloud a rviz y elija los temas correspondientes provenientes de rtab_map. Bueno, esto es todo, ¡dulce sabor de la victoria! Adelante, haz un mapeo:)

Paso 6: referencias

Mientras escribía este artículo, consulté una serie de recursos, en su mayoría foros y problemas de GitHub. Los dejo aquí.

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

Agrégueme a LinkedIn si tiene alguna pregunta y suscríbase a mi canal de YouTube para recibir notificaciones sobre proyectos más interesantes relacionados con el aprendizaje automático y la robótica.

Recomendado: