Saltar al contenido principal

Desplegar NVBlox con cámara Orbbec en Jetson AGX Orin

Introducción

Isaac ROS NVBlox es un framework de mapeo 3D de alto rendimiento acelerado por GPU desarrollado por NVIDIA para percepción robótica en tiempo real. A diferencia de los modelos de estimación de profundidad monocular, NVBlox consume entrada de profundidad real de cámaras RGB-D o cámaras estéreo para construir representaciones precisas de escenas 3D.

Genera mapas densos TSDF (Truncated Signed Distance Field) y ESDF (Euclidean Signed Distance Field) en tiempo real, lo que permite reconstrucción 3D de alta calidad, navegación consciente de obstáculos y verificación de colisiones. NVBlox también puede generar mallas, mapas de coste basados en vóxeles y representaciones de ocupación 3D adecuadas para robots móviles autónomos (AMR).

Esto lo hace especialmente valioso para aplicaciones de Edge AI donde las limitaciones de hardware y la eficiencia computacional son consideraciones críticas. Este wiki demuestra cómo desplegar Isaac ROS NVBlox en Jetson AGX Orin con integración de ROS 2, utilizando una cámara Orbbec RGB-D y una plataforma de robot móvil para lograr una canalización completa de percepción y navegación en el propio dispositivo. 🚀

Requisitos previos

  • reComputer J50 (Jetson AGX Orin) con JetPack 6.2.1
  • Cámara Orbbec RGB-D 📷
  • Chasis de robot móvil (opcional) 🤖
  • Entorno ROS2 Humble instalado
  • Se requiere instalación del SDK de Orbbec ROS2
  • Se requiere instalación de Isaac ROS

Aspectos técnicos destacados

  • Mapeo 3D en tiempo real: NVBlox genera mapas TSDF y ESDF densos en tiempo real usando aceleración por GPU, lo que permite reconstrucción de escenas 3D de alta calidad para aplicaciones robóticas.

  • Integración con cámara RGB-D: Aprovecha información de profundidad real de cámaras Orbbec RGB-D para crear representaciones 3D precisas sin depender de estimación de profundidad monocular.

  • Optimizado para despliegue en el borde: Diseñado específicamente para inferencia eficiente en dispositivos de borde como Jetson AGX Orin, con optimización CUDA para máximo rendimiento.

  • Salidas listas para navegación: Genera mallas, mapas de coste basados en vóxeles y rejillas de ocupación 3D adecuadas para navegación autónoma y evitación de colisiones.

  • Compatibilidad nativa con ROS2: Proporciona integración fluida con ROS2 Humble con tipos de mensajes robóticos estándar para una fácil integración en sistemas robóticos existentes.

Configuración del entorno

Instalar dependencias básicas

Instala las siguientes dependencias en tu terminal:

sudo apt update
sudo apt-get install python3-pip # Install Python3
sudo apt-get install nvidia-jetpack # Install developer tools
sudo pip3 install jetson-stats # Install Jtop to check JetPack version
sudo apt-get install git-lfs # Install Git LFS

Instalar Docker CE

Actualiza las fuentes de software:

sudo apt-get update

Instala dependencias básicas:

sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common # Install essential packages to allow apt over HTTPS

Añade la clave GPG oficial de Docker:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Añade el repositorio estable de Docker:

sudo add-apt-repository \
"deb [arch=arm64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

Actualiza de nuevo la lista de paquetes (se añadió un nuevo repositorio):

sudo apt-get update

Instala Docker CE (Community Edition):

sudo apt-get install docker-ce

Asegúrate de que Docker se inicie:

sudo systemctl enable docker
sudo systemctl start docker

Añadir permisos (añadir usuario al grupo Docker):

sudo usermod -aG docker $USER

Reinicia el sistema o cierra sesión:

sudo reboot

Instalar Isaac ROS 3.2

Crea un espacio de trabajo y añádelo al entorno:

mkdir -p ~/workspaces/isaac_ros-dev/src
echo "export ISAAC_ROS_WS=${HOME}/workspaces/isaac_ros-dev/" >> ~/.bashrc
source ~/.bashrc

Entra en el espacio de trabajo y clona los paquetes:

cd ${ISAAC_ROS_WS}/src
git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common.git

Descarga la imagen oficial Docker de Isaac Common y entra en Docker:

cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
./scripts/run_dev.sh

Ejecutar ./scripts/run_dev.sh instalará automáticamente Isaac ROS e iniciará el contenedor.

tip

Instalar Isaac ROS requiere iniciar sesión en NVIDIA NGC en la terminal e introducir la API Key 🔑 generada por tu cuenta NGC.

Instalar Orbbec SDK ROS2

El uso de cámaras Orbbec RGB-D requiere instalar el controlador del SDK. Esta guía utiliza el método de compilación desde el código fuente (Build from Source).

Instala las dependencias:

sudo apt install libgflags-dev nlohmann-json3-dev \
ros-$ROS_DISTRO-image-transport ros-${ROS_DISTRO}-image-transport-plugins ros-${ROS_DISTRO}-compressed-image-transport \
ros-$ROS_DISTRO-image-publisher ros-$ROS_DISTRO-camera-info-manager \
ros-$ROS_DISTRO-diagnostic-updater ros-$ROS_DISTRO-diagnostic-msgs ros-$ROS_DISTRO-statistics-msgs ros-$ROS_DISTRO-xacro \
ros-$ROS_DISTRO-backward-ros libdw-dev libssl-dev mesa-utils libgl1 libgoogle-glog-dev

Crea un espacio de trabajo colcon:

mkdir -p ~/ros2_ws/src

cd ~/ros2_ws/src
git clone https://github.com/orbbec/OrbbecSDK_ROS2.git
cd OrbbecSDK_ROS2
git checkout v2-main

Entra en el directorio de trabajo y compila:

cd ~/ros2_ws
colcon build --event-handlers console_direct+ --cmake-args -DCMAKE_BUILD_TYPE=Release

Para permitir que las cámaras Orbbec se reconozcan correctamente en Linux, instala las reglas udev.

Entra en el directorio de trabajo del código fuente y ejecuta el script:

cd ~/ros2_ws/src/OrbbecSDK_ROS2/orbbec_camera/scripts
sudo bash install_udev_rules.sh
sudo udevadm control --reload-rules && sudo udevadm trigger
nota

Si este script no se ejecuta, la apertura del dispositivo fallará debido a problemas de permisos. Tendrías que ejecutar el ejemplo con sudo (privilegios de administrador). ⚠️

Desplegar NVBlox

Compilar NVBlox

Obtén el código fuente de NVBlox adaptado a la cámara Orbbec y cópialo al directorio de trabajo:

git clone https://github.com/jjjadand/isaac-NVblox-Orbbec.git
cp -r isaac-NVblox-Orbbec/src/isaac_ros_nvblox/ ${ISAAC_ROS_WS}/src/
cp -r isaac-NVblox-Orbbec/src/isaac_ros_nitros/ ${ISAAC_ROS_WS}/src/
cp -r isaac-NVblox-Orbbec/build/ ${ISAAC_ROS_WS}/

Entra en el espacio de trabajo e inicia el contenedor Docker de Isaac ROS:

cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
./scripts/run_dev.sh

(Opcional) Si encuentras un error similar al siguiente:

Finished pulling pre-built base image: nvcr.io/nvidia/isaac/ros:aarch64-ros2_humble_4c0c55dddd2bbcc3e8d5f9753bee634c
Nothing to build, retagged nvcr.io/nvidia/isaac/ros:aarch64-ros2_humble_4c0c55dddd2bbcc3e8d5f9753bee634c as isaac_ros_dev-aarch64
Running isaac_ros_dev-aarch64-container
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: could not apply required modification to OCI specification: error modifying OCI spec: failed to inject CDI devices: unresolvable CDI devices nvidia.com/gpu=all

Puedes intentar ejecutar el siguiente comando en la terminal para solucionarlo:

sudo nvidia-ctk cdi generate --mode=csv --output=/etc/cdi/nvidia.yaml

Después de iniciar correctamente el contenedor, deberías ver algo como esto:

Instala dependencias adicionales:

sudo apt update
sudo apt-get install -y ros-humble-magic-enum
sudo apt-get install -y ros-humble-foxglove-msgs

Añade variables de entorno CUDA a .bashrc:

echo '
CUDA_HOME=/usr/local/cuda
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
export CUDACXX=$CUDA_HOME/bin/nvcc
' >> ~/.bashrc

Crea enlaces simbólicos:

sudo ln -sf /opt/ros/humble/include/magic_enum.hpp /usr/include/magic_enum.hpp

sudo mkdir -p /opt/ros/humble/include/foxglove_msgs
sudo ln -sfn /opt/ros/humble/include/foxglove_msgs/foxglove_msgs/msg /opt/ros/humble/include/foxglove_msgs/msg

Compila e inicializa el espacio de trabajo en /workspaces/isaac_ros-dev:

colcon build --symlink-install --cmake-args -DBUILD_TESTING=OFF
source install/setup.bash

Después de que la compilación se complete, deberías ver resultados como estos:

Lanzar NVBlox

Después de conectar la cámara Orbbec al Jetson mediante un cable de datos, primero inicia el script Orbbec ROS2 en el entorno local:

cd ~/ros2_ws/src
source install/setup.bash

ros2 launch orbbec_camera <camera_name>.launch.py

# Example: ros2 launch orbbec_camera gemini2.launch.py

Aquí hay algunos parámetros <camera_name> compatibles:

  • gemini210
  • gemini2
  • gemini2L
  • gemini_330_gmsl
  • gemini_330_series
aviso

Ten en cuenta que NO debes iniciar el script de Orbbec dentro del contenedor Docker. Asegúrate de haber instalado el controlador de Orbbec siguiendo el tutorial anterior. ⚠️

El contenedor Isaac ROS se conecta por defecto con ROS2 publicado localmente. En el contenedor Docker, introduce:

ros2 topic list

Normalmente, deberías ver los siguientes temas de datos publicados por la cámara Orbbec en el contenedor Docker:

/camera/accel/imu_info
/camera/color/camera_info
/camera/color/image_raw
/camera/depth/camera_info
/camera/depth/image_raw
/camera/depth/points
/camera/depth_filter_status
/camera/device_status
/camera/gyro/imu_info
/camera/gyro_accel/sample
/camera/ir/camera_info
/camera/ir/image_raw

Asegúrate de poder leer los temas de datos de la cámara Orbbec. Luego inicia el script de ejemplo de NVBlox en el contenedor Isaac ROS:

cd ~/workspaces/isaac_ros-dev
source install/setup.bash

ros2 launch nvblox_examples_bringup orbbec_example.launch.py

Puedes ver la salida de NVBlox de rejillas de ocupación 3D y mallas en RViz:

RViz se puede configurar como se muestra a continuación. Habilita los resultados de visualización que desees y selecciona los nombres de temas disponibles:

Finalmente, montando el AGX Orin y la cámara Orbbec en un AGV móvil, puedes lograr el efecto que se muestra en el video: 🎥

Esto se puede utilizar para la detección de obstáculos y la construcción de mapas de malla 3D de escenas para robots móviles. 🤖

Referencias

Soporte técnico y debate sobre el producto

¡Gracias por elegir nuestros productos! Estamos aquí para ofrecerte diferentes tipos de soporte y garantizar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para adaptarnos a diferentes preferencias y necesidades.

Loading Comments...