Tabla de contenido:
- Paso 1: Qué funcionó y qué no
- Paso 2: instalación de controladores Freenect y Freenect_stack
- Paso 3: Instalación de MAP RTAB independiente
- Paso 4: Instalación de Rtabmap_ros
- Paso 5: Mostrar la hora
- Paso 6: referencias
Video: SLAM RGB-D con Kinect en Raspberry Pi 4 [Buster] ROS Melodic: 6 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:41
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
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
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
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
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:
ROS Melodic en Raspberry Pi 4 [Debian Buster] + RPLIDAR A1M8: 6 pasos
ROS Melodic en Raspberry Pi 4 [Debian Buster] + RPLIDAR A1M8: Este artículo cubrirá el proceso de instalación de ROS Melodic Morenia en Raspberry Pi 4 ejecutando la última versión de Debian Buster y cómo usar RPLIDAR A1M8 con nuestra instalación. Dado que Debian Buster se lanzó oficialmente hace solo unas semanas (a partir del momento
Introducción a ROS Melodic en Raspberry Pi 4 Modelo B: 7 pasos
Introducción a ROS Melodic en Raspberry Pi 4 Modelo B: el sistema operativo del robot (ROS) es un conjunto de bibliotecas de software y herramientas que se utilizan para crear sistemas y aplicaciones robóticos. La versión actual de servicio a largo plazo de ROS es Melodic Morenia. ROS Melodic es compatible solo con Ubuntu 18.04 Bionic Beaver
Instalación de Raspbian Buster en Raspberry Pi 3 - Introducción a Raspbian Buster con Raspberry Pi 3b / 3b +: 4 pasos
Instalación de Raspbian Buster en Raspberry Pi 3 | Introducción a Raspbian Buster con Raspberry Pi 3b / 3b +: Hola chicos, recientemente la organización Raspberry pi lanzó un nuevo sistema operativo Raspbian llamado Raspbian Buster. Es una nueva versión de Raspbian para Raspberry pi's. Así que hoy, en estas instrucciones, aprenderemos cómo instalar el sistema operativo Raspbian Buster en su Raspberry pi 3
Cómo hacer un Spike Buster o una placa de conmutación con control remoto usando Atmega328P independiente: 6 pasos (con imágenes)
Cómo hacer Spike Buster o Switch Board con control remoto usando Atmega328P autónomo: En este proyecto, mostraré cómo construir Spike Buster o Switch Board con control remoto usando Atmega328P autónomo. Este proyecto se basa en una placa PCB personalizada con muy pocos componentes. Si prefieres ver el video, he insertado el mismo o
Roomblock: una plataforma para aprender la navegación ROS con Roomba, Raspberry Pi y RPLIDAR: 9 pasos (con imágenes)
Roomblock: una plataforma para aprender la navegación ROS con Roomba, Raspberry Pi y RPLIDAR: ¿Qué es esto? &Quot; Roomblock " es una plataforma de robot compuesta por un Roomba, una Raspberry Pi 2, un sensor láser (RPLIDAR) y una batería móvil. El marco de montaje puede fabricarse con impresoras 3D. El sistema de navegación ROS permite hacer un mapa de habitaciones y utilizar i