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.

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 .

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

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 RGB da câmera esquerda (/ zed / left / image_raw_color):

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

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


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:

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.