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...