Buenas tardes, queridos lectores! En artículos recientes, hablé sobre los métodos populares de SLAM y odometría visual que tienen soporte en ROS. En este artículo me desviaré un poco del tema y hablaré sobre la configuración y el trabajo con ROS en el microordenador
NVIDIA Jetson TK1 . Después de instalar todo lo que necesitamos, conectaremos y probaremos la
cámara estéreo ZED de streolabs . A quien es interesante le pregunto bajo cat.
Sobre NVIDIA Jetson
Para comenzar, considere la plataforma NVIDIA Jetson TK1. NVIDIA Jetson TK1 es un microordenador NVIDIA basado en el
Tegra K1 SOC (CPU + GPU en un solo chip con soporte CUDA). NVIDIA Jetson cuenta con una CPU ARM Cortex-A15 de cuatro núcleos con 2.3 GHz, tiene los mismos componentes que Raspberry Pi (HDMI, USB 2.0 y 3.0, Ethernet), así como módulos específicos para PC: SATA, mini-PCIe . El procesador móvil
Tegra K1 tiene propiedades y arquitectura muy similares a las GPU de escritorio, lo que le permite soportar cargas pesadas con un consumo mínimo de energía. Como se indica en la
página oficial, el procesador le permite ejecutar cualquier tarea gráfica de uso intensivo de recursos en el tablero, como reconocimiento de rostros, realidad aumentada e incluso tareas de visión por computadora para vehículos no tripulados. Puede leer más sobre todas las características de la plataforma
aquí .
La memoria interna en el NVIDIA Jetson TK1 está representada por un módulo eMMC de 16 GB. Por defecto, NVIDIA Jetson TK1 viene precargado con el sistema operativo Ubuntu 14.04.
Se utiliza un adaptador de CA / CC de 12 V para alimentar el microordenador.

Cámara estéreo ZED
La cámara estéreo ZED es una cámara de profundidad pasiva, que consta de dos cámaras RGB ordinarias, a 12 cm de distancia entre sí, con una vista de hasta 20 metros. A diferencia de las cámaras activas (como ASUS Xtion y Microsoft Kinect), la cámara estéreo ZED no tiene un láser infrarrojo para medir la distancia. La cámara es relativamente barata (cuesta $ 449). La ventaja de la cámara es su pequeño tamaño (175 x 30 x 33 mm) y su ligereza (159 g).
La cámara se puede usar para
construir mapas del área al aire libre en el dron .
Puedes leer más sobre la cámara
en la página oficial .

Configurar Ubuntu en NVIDIA Jetson TK1
Conectamos el NVIDIA Jetson TK1 usando HDMI al monitor, un cable Ethernet al conector correspondiente y finalmente usando el adaptador de 12 V CA / CC a la fuente de alimentación.
Para instalar el sistema en NVIDIA Jetson, es posible que deba instalar JetPack TK1 (las instrucciones se pueden encontrar
aquí ). Tengo a mano NVIDIA Jetson con JetPack ya instalado y Ubuntu 14.04, así que aquí no consideraré instalarlo.
Entonces, el sistema Ubuntu 14.04 se iniciará automáticamente. Para la autorización, utilizamos el nombre de usuario y la contraseña de ubuntu.
Averigüe la dirección IP del host Jetson:
ifconfig
Obtenga las especificaciones de hardware:
lscpu
La conclusión es 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
Puede haber un problema al conectarse a Jetson a través de SSH: ifconfig muestra la dirección IP, pero no puede conectarse a Jetson en esta dirección. Para resolver el problema, abra el archivo / etc / network / interface desde la raíz:
sudo nano /etc/network/interface
y agrega las líneas:
auto eth0 iface eth0 inet dhcp
Hicimos una asignación dinámica de direcciones IP. Guarde los cambios y ejecute:
sudo ifup eth0
Ahora todo debería funcionar. Esta decisión fue tomada
desde aquí .
Ahora conéctese a Jetson a través de SSH:
ssh -X ubuntu@<ip_address>
Instalar CUDA
Para trabajar con la cámara ZED, necesitamos el SDK de ZED, que requiere la versión 6.5 instalada de CUDA. Descargue el archivo deb para CUDA Toolkit 6.5 para L4T
desde aquí (instrucciones tomadas
desde aquí ):
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
Establezca los metadatos del repositorio para CUDA para L4T que acaba de descargar:
sudo dpkg -i cuda-repo-l4t-r21.1-6-5-prod_6.5-14_armhf.deb
Descargue e instale el kit de herramientas CUDA, incluido el kit de herramientas OpenGL para NVIDIA:
sudo apt-get update
Instale cuda-toolkit-6-5:
sudo apt-get install cuda-toolkit-6-5
Agregue el usuario de ubuntu al grupo de "video" para proporcionar acceso a la GPU:
sudo usermod -a -G video $USER
Aquí $ USER es ubuntu.
Agregue las rutas a la carpeta de instalación de CUDA al script .bashrc y ejecútelo en el terminal actual:
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 que CUDA Toolkit esté instalado en el dispositivo:
nvcc -V
Configuración de USB 3.0 en el Jetson TK1
De manera predeterminada, el sistema configura el puerto USB 3.0 en el Jetson TK1 como USB 2.0. Necesitamos configurarlo como USB 3.0. Para hacer esto, abra el archivo /boot/extlinux/extlinux.conf debajo de la raíz:
sudo vi /boot/extlinux/extlinux.conf
Busque la cadena 'usb_port_owner_info = 0'. Si esta línea aparece dos veces, cambie la última inclusión. Reescriba 'usb_port_owner_info = 0' a 'usb_port_owner_info = 2'.
Instalar SDK de ZED
El procedimiento de instalación es similar al escritorio de Linux. Solo debe tenerse en cuenta que OpenCV ya está instalado al instalar JetPack para que pueda usar la optimización de Tegra para ello. Por lo tanto, no se requiere la instalación manual de OpenCV.
Para usar la cámara estéreo ZED, necesitamos instalar el ZED SDK 1.2. El instalador usa un archivo especial Jetson TK1 .run. Descargue el instalador:
wget https://www.stereolabs.com/developers/downloads/archives/ZED_SDK_Linux_JTK1_v1.2.0.run
Establezca los derechos de ejecución para el archivo y ejecútelo en la terminal:
sudo chmod +x ZED_SDK_Linux_JTK1_v1.2.0.run ./ZED_SDK_Linux_JTK1_v1.2.0.run
Aceptamos los términos del acuerdo de licencia, presionamos 'q' y luego 'Y'. Luego, sigue las instrucciones.
Inicie ZED Explorer en Jetson (no funciona cuando se conecta de forma remota a través de SSH):
/usr/local/zed/tools/ZED\ Explorer

Instalación del controlador ROS para la cámara estéreo ZED
Usé ROS Indigo en mis experimentos. Instale las dependencias para el controlador ROS:
sudo apt-get install ros-indigo-tf2-ros ros-indigo-image-transport ros-indigo-dynamic-reconfigure ros-indigo-urdf
Instale la envoltura ROS para la cámara ZED:
cd ~/catkin_ws/src git clone https://github.com/zastrix/zed-ros-wrapper.git git checkout ef3ad46f14cf62ff21083829a1fa6879d20246de cd ~/catkin_ws catkin_make
Ejecute zed_wrapper ejecutando los siguientes comandos en diferentes ventanas del terminal:
roscore roslaunch zed_wrapper zed.launch
Mostramos los temas activos:
rostopic list
En la lista, además de los temas estándar, veremos temas con el prefijo / 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
Ejecute rqt_image_view:
rosrun rqt_image_view rqt_image_view
Al elegir el tema / zed / depth / depth_registered obtenemos un mapa de profundidad:

Imagen RGB de la cámara izquierda (/ zed / left / image_raw_color):

Y finalmente, la imagen RGB de la cámara derecha (/ zed / right / image_raw_color):

Los datos de la cámara se publican en los temas / zed / rgb / image_raw_color y / zed / depth / depth_registered con una frecuencia de 15Hz.
Averiguamos la frecuencia de publicación de una nube de puntos en el tema / 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
Ejecute rviz en Jetson (no pude iniciarlo con éxito al conectarme a través de ssh con la opción -x):
rosrun rviz rviz


SLAM en NVIDIA Jetson con cámara estéreo ZED
Probemos ahora la cámara ZED en una tarea práctica. En NVIDIA Jetson, puede ejecutar fácilmente el algoritmo SLAM RTAB-MAP. Primero, instale el contenedor ROS para RTAB-MAP:
sudo apt-get install ros-indigo-rtabmap-ros
Ahora ejecute rtabmap con la cámara ZED. Si no tenemos zed_wrapper ejecutándose, ejecútelo:
rosrun zed_wrapper zed_wrapper_node
Ejecute rtabmap:
rtabmap
Seleccione la cámara ZED en la ventana rtabmap como fuente:

No he probado el RTAB-MAP en NVIDIA Jetson, así que les dejo, queridos lectores, la oportunidad de probar este algoritmo SLAM. El uso de RTAB-MAP se puede encontrar en mis dos últimos artículos (
aquí y
aquí ).
Espero que este artículo sea un buen punto de partida para usar la cámara estéreo ZED y la microcomputadora NVIDIA Jetson. ¡Te deseo buena suerte en los experimentos y hasta pronto!
PD: Su opinión sobre la elección de una cámara estéreo económica para la experimentación es interesante. El soporte de ROS realmente no importa, lo más importante es el precio. Por favor escriba sus opciones en los comentarios al artículo.
PD (Upd): Me gustaría probar cámaras estéreo pasivas como ZED. Deseable capaz de trabajar con Raspberry Pi 3.