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