Configurando o ROS e trabalhando com uma câmera estéreo ZED no NVIDIA Jetson

Boa tarde, queridos leitores! Em artigos recentes, falei sobre os populares métodos SLAM e odometria visual que têm suporte no ROS. Neste artigo, vou desviar um pouco do tópico e falar sobre como configurar e trabalhar com o ROS no microcomputador NVIDIA Jetson TK1 . Depois de instalar tudo o que precisamos, conectaremos e experimentaremos a câmera estéreo ZED streolabs . Para quem é interessante, pergunto sob kat.

Sobre a NVIDIA Jetson


Para começar, considere a plataforma NVIDIA Jetson TK1. O NVIDIA Jetson TK1 é um microcomputador NVIDIA baseado no Tegra K1 SOC (CPU + GPU em um único chip com suporte para CUDA). A NVIDIA Jetson possui uma CPU quad-core ARM Cortex-A15 com 2,3 GHz, possui os mesmos componentes que o Raspberry Pi (HDMI, USB 2.0 e 3.0, Ethernet), além de módulos específicos para PC: SATA, mini-PCIe . O processador móvel Tegra K1 possui propriedades e arquitetura muito semelhantes às GPUs de desktop, o que permite suportar cargas pesadas com o mínimo consumo de energia. Conforme declarado na página oficial, o processador permite executar quaisquer tarefas gráficas com muitos recursos, como reconhecimento de rosto, realidade aumentada e até tarefas de visão computacional para veículos não tripulados. Você pode ler mais sobre todos os recursos da plataforma aqui .

A memória interna no NVIDIA Jetson TK1 é representada por um módulo eMMC de 16 GB. Por padrão, o NVIDIA Jetson TK1 vem pré-carregado com o sistema operacional Ubuntu 14.04.

Um adaptador de 12 V CA / CC é usado para alimentar o microcomputador.

imagem

Câmera estéreo ZED


A câmera estéreo ZED é uma câmera passiva de profundidade, composta por duas câmeras RGB comuns, a 12 cm de distância uma da outra, com uma visão de até 20 metros. Diferente das câmeras ativas (como ASUS Xtion e Microsoft Kinect), a câmera estéreo ZED não possui um laser infravermelho para medir a distância. A câmera é relativamente barata (custa US $ 449). A vantagem da câmera é seu tamanho pequeno (175 x 30 x 33 mm) e leveza (159 g).

A câmera pode ser usada para criar mapas da área ao ar livre no drone .
Você pode ler mais sobre a câmera na página oficial .

imagem

Configurando o Ubuntu no NVIDIA Jetson TK1


Conectamos o NVIDIA Jetson TK1 usando HDMI ao monitor, um fio Ethernet ao conector correspondente e, finalmente, usando o adaptador 12 V CA / CC à fonte de alimentação.

Para instalar o sistema no NVIDIA Jetson, pode ser necessário instalar o JetPack TK1 (instruções podem ser encontradas aqui ). Eu peguei o NVIDIA Jetson com o JetPack já instalado e o Ubuntu 14.04, então aqui não vou considerar instalá-lo.

Portanto, o sistema Ubuntu 14.04 será iniciado automaticamente. Para autorização, usamos o nome de usuário e a senha do ubuntu.

Descubra o endereço IP do host Jetson:

ifconfig 

Obtenha as especificações de hardware:

 lscpu 

A conclusão é esta:

 Architecture: armv7l Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per socket: 4 Socket(s): 1 

Pode haver um problema na conexão com a Jetson via SSH: ifconfig exibe o endereço IP, mas você não pode se conectar à Jetson neste endereço. Para resolver o problema, abra o arquivo / etc / network / interface a partir da raiz:

 sudo nano /etc/network/interface 

e adicione as linhas:

 auto eth0 iface eth0 inet dhcp 

Fizemos uma atribuição dinâmica de endereços IP. Salve as alterações e execute:

 sudo ifup eth0 

Agora tudo deve funcionar. Esta decisão foi tomada a partir daqui .
Agora conecte-se ao Jetson via SSH:

 ssh -X ubuntu@<ip_address> 

Instalar CUDA


Para trabalhar com a câmera ZED, precisamos do SDK ZED, que requer a versão 6.5 CUDA instalada. Faça o download do arquivo deb para o CUDA Toolkit 6.5 for L4T aqui (instruções obtidas aqui ):

 wget http://developer.download.nvidia.com/compute/cuda/6_5/rel/installers/cuda-repo-l4t-r21.1-6-5-prod_6.5-14_armhf.deb 

Defina os metadados do repositório para o CUDA para L4T que você acabou de baixar:

 sudo dpkg -i cuda-repo-l4t-r21.1-6-5-prod_6.5-14_armhf.deb 

Faça o download e instale o próprio CUDA Toolkit, incluindo o OpenGL toolkit para NVIDIA:

 sudo apt-get update 

Instale o cuda-toolkit-6-5:

 sudo apt-get install cuda-toolkit-6-5 

Adicione o usuário do ubuntu ao grupo "video" para fornecer acesso à GPU:

 sudo usermod -a -G video $USER 

Aqui $ USER é ubuntu.
Adicione os caminhos à pasta de instalação CUDA ao script .bashrc e execute-o no terminal atual:

 echo "export PATH=/usr/local/cuda-6.5/bin:$PATH" >> ~/.bashrc echo "export $PATH=/usr/local/cuda-6.5/bin:$PATH" >> ~/.bashrc source ~/.bashrc 

Verifique se o CUDA Toolkit está instalado no dispositivo:

 nvcc -V 

Configurando o USB 3.0 no Jetson TK1


Por padrão, a porta USB 3.0 é configurada pelo sistema no Jetson TK1 como USB 2.0. Precisamos configurá-lo como USB 3.0. Para fazer isso, abra o arquivo /boot/extlinux/extlinux.conf na raiz:

 sudo vi /boot/extlinux/extlinux.conf 

Encontre a string 'usb_port_owner_info = 0'. Se essa linha ocorrer duas vezes, altere a última inclusão. Reescreva 'usb_port_owner_info = 0' para 'usb_port_owner_info = 2'.

Instale o ZED SDK


O procedimento de instalação é semelhante ao Linux para desktop. Deve-se observar apenas que o OpenCV já está instalado ao instalar o JetPack, para que você possa usar a otimização Tegra. Portanto, a instalação manual do OpenCV não é necessária.

Para usar a câmera estéreo ZED, precisamos instalar o ZED SDK 1.2. O instalador usa um arquivo .run Jetson TK1 especial. Faça o download do instalador:

 wget https://www.stereolabs.com/developers/downloads/archives/ZED_SDK_Linux_JTK1_v1.2.0.run 

Defina os direitos de execução do arquivo e execute-o no terminal:

 sudo chmod +x ZED_SDK_Linux_JTK1_v1.2.0.run ./ZED_SDK_Linux_JTK1_v1.2.0.run 

Aceitamos os termos do contrato de licença, pressione 'q' e depois 'Y'. A seguir, siga as instruções.

Inicie o ZED Explorer no próprio Jetson (não funciona ao conectar remotamente via SSH):

 /usr/local/zed/tools/ZED\ Explorer 

imagem

Instalando o driver ROS para a câmera estéreo ZED


Eu usei o ROS Indigo em meus experimentos. Instale as dependências para o driver ROS:

 sudo apt-get install ros-indigo-tf2-ros ros-indigo-image-transport ros-indigo-dynamic-reconfigure ros-indigo-urdf 

Instale o wrapper ROS para a câmera ZED:

 cd ~/catkin_ws/src git clone https://github.com/zastrix/zed-ros-wrapper.git git checkout ef3ad46f14cf62ff21083829a1fa6879d20246de cd ~/catkin_ws catkin_make 

Execute o zed_wrapper executando os seguintes comandos em diferentes janelas do terminal:

 roscore roslaunch zed_wrapper zed.launch 

Mostramos os tópicos ativos:

 rostopic list 

Na lista, além dos tópicos padrão, veremos tópicos com o prefixo / zed:

 /zed/depth/camera_info /zed/depth/depth_registered /zed/joint_states /zed/left/camera_info /zed/left/image_raw_color /zed/left/image_rect_color /zed/odom /zed/point_cloud/cloud_registered /zed/rgb/camera_info /zed/rgb/image_raw_color /zed/rgb/image_rect_color /zed/right/camera_info /zed/right/image_raw_color /zed/right/image_rect_color 

Execute rqt_image_view:

 rosrun rqt_image_view rqt_image_view 

Ao escolher o tópico / zed / depth / depth_registered, obtemos um mapa de profundidade:

imagem

Imagem RGB da câmera esquerda (/ zed / left / image_raw_color):

imagem

E, finalmente, a imagem RGB da câmera direita (/ zed / right / image_raw_color):

imagem

Os dados da câmera são publicados nos tópicos / zed / rgb / image_raw_color e / zed / depth / depth_registered com uma frequência de 15Hz.
Descobrimos a frequência de publicação de uma nuvem de pontos no tópico / zed / point_cloud / cloud_registered:

 rostopic hz /zed/point_cloud/cloud_registered 

 average rate: 4.146 min: 0.202s max: 0.371s std dev: 0.04798s window: 11 average rate: 4.178 min: 0.191s max: 0.371s std dev: 0.04306s window: 16 

Execute o rviz no próprio Jetson (não foi possível iniciá-lo com êxito ao conectar via ssh com a opção -x):

 rosrun rviz rviz 

imagem

imagem

SLAM na NVIDIA Jetson com câmera estéreo ZED


Vamos agora tentar a câmera ZED em uma tarefa prática. No NVIDIA Jetson, você pode executar facilmente o algoritmo SLAM RTAB-MAP. Primeiro, instale o wrapper ROS para o RTAB-MAP:

 sudo apt-get install ros-indigo-rtabmap-ros 

Agora execute o rtabmap usando a câmera ZED. Se não tivermos zed_wrapper em execução, execute-o:

 rosrun zed_wrapper zed_wrapper_node 

Execute o rtabmap:

 rtabmap 

Selecione a câmera ZED na janela rtabmap como a fonte:

imagem

Como não testei o RTAB-MAP na NVIDIA Jetson, deixo a vocês, queridos leitores, a oportunidade de experimentar esse algoritmo SLAM. O uso do RTAB-MAP pode ser encontrado nos meus últimos dois artigos ( aqui e aqui ).

Espero que este artigo seja um bom ponto de partida para você usar a câmera estéreo ZED e o microcomputador NVIDIA Jetson. Desejo-lhe boa sorte nos experimentos e até breve!

PS: Sua opinião sobre a escolha de uma câmera estéreo de baixo custo para experimentação é interessante. O suporte a ROS não é grande coisa, principalmente o preço. Por favor, escreva suas opções nos comentários do artigo.

PS (Upd): Gostaria de experimentar câmeras estéreo passivas como o ZED. Desejável capaz de trabalhar com Raspberry Pi 3.

Source: https://habr.com/ru/post/pt409259/


All Articles