Pular para o conteúdo principal

Implantar NVBlox com Câmera Orbbec no Jetson AGX Orin

Introdução​

Isaac ROS NVBlox é um framework de mapeamento 3D de alto desempenho acelerado por GPU, desenvolvido pela NVIDIA para percepção robótica em tempo real. Diferente de modelos de estimativa de profundidade monocular, o NVBlox consome entrada de profundidade real de câmeras RGB-D ou câmeras estéreo para construir representações precisas de cenas 3D.

Ele constrói mapas densos TSDF (Truncated Signed Distance Field) e ESDF (Euclidean Signed Distance Field) em tempo real, permitindo reconstrução 3D de alta qualidade, navegação ciente de obstáculos e verificação de colisão. O NVBlox também pode gerar malhas, mapas de custo baseados em voxels e representações de ocupação 3D adequadas para robôs móveis autônomos (AMRs).

Isso o torna particularmente valioso para aplicações de Edge AI, onde restrições de hardware e eficiência computacional são considerações críticas. Este wiki demonstra como implantar o Isaac ROS NVBlox no Jetson AGX Orin com integração ao ROS 2, usando uma câmera RGB-D Orbbec e uma plataforma de robô móvel para alcançar um pipeline completo de percepção e navegação no próprio dispositivo. 🚀

Pré-requisitos​

  • reComputer J50 (Jetson AGX Orin) com JetPack 6.2.1
  • Câmera RGB-D Orbbec 📷
  • Chassi de robô móvel (opcional) 🤖
  • Ambiente ROS2 Humble instalado
  • Instalação do Orbbec ROS2 SDK necessária
  • Instalação do Isaac ROS necessária

Destaques Técnicos​

  • Mapeamento 3D em Tempo Real: O NVBlox gera mapas densos TSDF e ESDF em tempo real usando aceleração por GPU, permitindo reconstrução de cenas 3D de alta qualidade para aplicações de robótica.

  • Integração com Câmera RGB-D: Aproveita informações de profundidade reais de câmeras RGB-D Orbbec para criar representações 3D precisas sem depender de estimativa de profundidade monocular.

  • Otimizado para Implantação na Borda: Projetado especificamente para inferência eficiente em dispositivos de borda como o Jetson AGX Orin, com otimização CUDA para desempenho máximo.

  • Saídas Prontas para Navegação: Gera malhas, mapas de custo baseados em voxels e grades de ocupação 3D adequadas para navegação autônoma e desvio de colisão.

  • Suporte Nativo a ROS2: Fornece integração perfeita com ROS2 Humble com tipos de mensagens robóticas padrão para fácil integração em sistemas robóticos existentes.

Configuração do Ambiente​

Instalar Dependências Básicas​

Instale as seguintes dependências no seu 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​

Atualize as fontes de software:

sudo apt-get update

Instale dependências básicas:

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

Adicione a chave GPG oficial do Docker:

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

Adicione o repositório estável do Docker:

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

Atualize a lista de pacotes novamente (novo repositório adicionado):

sudo apt-get update

Instale o Docker CE (Community Edition):

sudo apt-get install docker-ce

Garanta que o Docker seja iniciado:

sudo systemctl enable docker
sudo systemctl start docker

Adicione permissões (adicione o usuário ao grupo Docker):

sudo usermod -aG docker $USER

Reinicie o sistema ou faça logout:

sudo reboot

Instalar Isaac ROS 3.2​

Crie o workspace e adicione ao ambiente:

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

Entre no workspace e clone os pacotes:

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

Puxe a imagem oficial Isaac Common Docker e entre no Docker:

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

Executar ./scripts/run_dev.sh irá instalar automaticamente o Isaac ROS e iniciar o contêiner.

dica

Instalar o Isaac ROS requer fazer login no NVIDIA NGC no terminal e inserir a API Key 🔑 gerada pela sua conta NGC

Instalar Orbbec SDK ROS2​

O uso de câmeras RGB-D Orbbec requer a instalação do driver do SDK. Este guia usa o método Build from Source.

Instale as dependências:

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

Crie um workspace 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

Entre no diretório de trabalho e compile:

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

Para permitir que câmeras Orbbec sejam reconhecidas corretamente no Linux, instale as regras udev.

Entre no diretório de trabalho do código-fonte e execute o 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

Se este script não for executado, a abertura do dispositivo falhará devido a problemas de permissão. Você precisará executar o exemplo com sudo (privilégios de administrador). ⚠️

Implantar NVBlox​

Compilar NVBlox​

Obtenha o código-fonte do NVBlox adaptado para câmera Orbbec e copie-o para o diretório de trabalho:

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}/

Entre no workspace e inicie o contêiner Docker do Isaac ROS:

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

(Opcional) Se você encontrar um erro semelhante ao seguinte:

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

Você pode tentar executar o seguinte comando no terminal para corrigir:

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

Após iniciar o contêiner com sucesso, você deverá ver algo como isto:

Instale dependências adicionais:

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

Adicione variáveis de ambiente CUDA ao .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

Crie links 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

Compile e inicialize o workspace em /workspaces/isaac_ros-dev:

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

Após a conclusão da compilação, você deverá ver resultados como estes:

Iniciar NVBlox​

Após conectar a câmera Orbbec ao Jetson via cabo de dados, primeiro inicie o script Orbbec ROS2 no ambiente 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

Aqui estão alguns parâmetros <camera_name> suportados:

  • gemini210
  • gemini2
  • gemini2L
  • gemini_330_gmsl
  • gemini_330_series
atenção

Observe que você NÃO deve iniciar o script Orbbec dentro do contêiner Docker. Certifique-se de ter instalado o driver Orbbec seguindo o tutorial anterior. ⚠️

O contêiner Isaac ROS faz a ponte com o ROS2 publicado localmente por padrão. No contêiner Docker, digite:

ros2 topic list

Normalmente, você deverá ver os seguintes tópicos de dados publicados pela câmera Orbbec no contêiner 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

Certifique-se de que você consegue ler os tópicos de dados da câmera Orbbec. Em seguida, inicie o script de exemplo do NVBlox no contêiner Isaac ROS:

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

ros2 launch nvblox_examples_bringup orbbec_example.launch.py

Você pode ver a saída do NVBlox de grades de ocupação 3D e malhas no RViz:

O RViz pode ser configurado como mostrado abaixo. Ative os resultados de visualização desejados e selecione os nomes de tópicos disponíveis:

Por fim, montando o AGX Orin e a câmera Orbbec em um AGV móvel, você pode obter o efeito mostrado no vídeo: 🎥

Isso pode ser usado para detecção de obstáculos e construção de mapas de malha 3D de cenas para robôs móveis. 🤖

Referências​

Suporte Técnico e Discussão de Produtos​

Obrigado por escolher nossos produtos! Estamos aqui para oferecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...