О NVIDIA Jetson
Для начала рассмотрим платформу NVIDIA Jetson TK1. NVIDIA Jetson TK1 это микрокомпьютер NVIDIA на основе Tegra K1 SOC (CPU+GPU на одном чипе с поддержкой CUDA). NVIDIA Jetson может похвастаться 4-х ядерным CPU ARM Cortex-A15 с 2.3 ГГц, имеет те же самые компоненты, что и Raspberry Pi (HDMI, USB 2.0 и 3.0, Ethernet), а также модули, свойственные ПК: SATA, mini-PCIe. Мобильный процессор Tegra K1 имеет очень близкие свойства и архитектуру к десктопным GPU, что позволяет выдерживать большие нагрузки с минимальным энергопотреблением. Как говорится на официальной странице процессор позволяет запускать на плате любые ресурсоемкие графические задачи, такие как распознавание лиц, дополненная реальность и даже задачи компьютерного зрения для беспилотных автомобилей. Более подробнее о всех возможностях платформы можно прочитать здесь.
Встроенная память на NVIDIA Jetson TK1 представлена модулем eMMC размером 16 Гб. По умолчанию на NVIDIA Jetson TK1 предустановлена операционная система Ubuntu 14.04.
Для питания микрокомпьютера используется AC/DC адаптер на 12 В.
Стереокамера ZED
Стереокамера ZED является пассивной камерой глубины, состоящей из двух обычных RGB камер, удаленных на расстояние 12 см друг от друга, с обзором до 20 метров. В отличие от активных камер (таких как ASUS Xtion и Microsoft Kinect), стереокамера ZED не имеет ИК-лазера для измерения расстояния. Камера относительно недорогая (стоит 449$). Преимуществом камеры можно считать ее малые размеры (175 x 30 x 33 мм) и легковесность (159 г).
Камеру можно использовать для построения карт местности вне помещения на дроне.
Подробнее о камере можно прочитать на официальной странице.
Настройка Ubuntu на NVIDIA Jetson TK1
Подключим NVIDIA Jetson TK1 с помощью HDMI к монитору, провод Ethernet в соответствующий разъем и наконец с помощью AC/DC адаптера на 12 В к источнику питания.
Для установки системы на NVIDIA Jetson может понадобиться установить JetPack TK1 (инструкцию можно найти здесь). У меня на руках оказался NVIDIA Jetson с уже установленным JetPack и системой Ubuntu 14.04, поэтому здесь я не рассматриваю его установку.
Итак система Ubuntu 14.04 запустится автоматически. Для авторизации используем логин и пароль ubuntu.
Узнаем IP адрес хоста Jetson:
ifconfig
Получим аппаратные характеристики:
lscpu
Вывод будем таким:
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
Возможна проблема с подключением к Jetson по SSH: ifconfig отображает IP адрес, но подключиться к Jetson по этому адресу не удается. Чтобы решить проблему откроем файл /etc/network/interface из-под рута:
sudo nano /etc/network/interface
и добавим строки:
auto eth0 iface eth0 inet dhcp
Мы сделали динамическое назначение IP адреса. Сохраним изменения и выполним:
sudo ifup eth0
Теперь все должно работать. Данное решение было взято отсюда.
Теперь подключимся к Jetson по SSH:
ssh -X ubuntu@
Установка CUDA
Для работы с камерой ZED нам нужен ZED SDK, который требует установленной CUDA версии 6.5. Скачаем deb файл для CUDA Toolkit 6.5 for L4Tотсюда (инструкция взята отсюда):
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
Установим метаданные репозитория для CUDA for L4T, который только что скачали:
sudo dpkg -i cuda-repo-l4t-r21.1-6-5-prod_6.5-14_armhf.deb
Скачаем и установим сам CUDA Toolkit включая OpenGL toolkit для NVIDIA:
sudo apt-get update
Установим cuda-toolkit-6-5:
sudo apt-get install cuda-toolkit-6-5
Добавим пользователя ubuntu в группу «video» для обеспечения доступа к GPU:
sudo usermod -a -G video $USER
Здесь $USER это ubuntu.
Добавим пути до папки установки CUDA в скрипт .bashrc и выполним его в текущем терминале:
echo "export PATH=/usr/local/cuda-6.5/bin:$PATH" >> ~/.bashrc echo "export $PATH=/usr/local/cuda-6.5/bin:$PATH" >> ~/.bashrc source ~/.bashrc
Проверим, что CUDA Toolkit установлен на устройстве:
nvcc -V
Настройка USB 3.0 на Jetson TK1
По умолчанию порт USB 3.0 настроен системой на Jetson TK1 как USB 2.0. Нам необходимо его сконфигурировать как USB 3.0. Для этого откроем файл /boot/extlinux/extlinux.conf под рутом:
sudo vi /boot/extlinux/extlinux.conf
Найдем строку ‘usb_port_owner_info=0‘. Если эта строка встречается два раза, то изменим последнее включение. Перепишем ‘usb_port_owner_info=0‘ на ‘usb_port_owner_info=2‘.
Установка ZED SDK
Процедура установки выглядит подобным образом как и на десктопной Linux. Стоит только отметить, что OpenCV уже установлен при установке JetPack для того, чтобы можно было для него использовать оптимизацию Tegra. Поэтому ручная установка OpenCV не требуется.
Для использования стереокамеры ZED нам нужно установить ZED SDK 1.2. В качестве установщика используется специальный для Jetson TK1 .run файл. Скачаем установщик:
wget https://www.stereolabs.com/developers/downloads/archives/ZED_SDK_Linux_JTK1_v1.2.0.run
Установим для файла права на исполнение и запустим его в терминале:
sudo chmod +x ZED_SDK_Linux_JTK1_v1.2.0.run ./ZED_SDK_Linux_JTK1_v1.2.0.run
Примем условия лицензионного соглашения, нажмем ‘q’ и затем ‘Y’. Далее выполним процедуру следуя инструкциям.
Запустим ZED Explorer на самом Jetson (не работает при подключении удаленно через SSH):
/usr/local/zed/tools/ZED Explorer
Установка ROS драйвера для стереокамеры ZED
Я использовал в своих экспериментах ROS Indigo. Установим зависимости для ROS драйвера:
sudo apt-get install ros-indigo-tf2-ros ros-indigo-image-transport ros-indigo-dynamic-reconfigure ros-indigo-urdf
Установим ROS враппер для ZED камеры:
cd ~/catkin_ws/src git clone https://github.com/zastrix/zed-ros-wrapper.git git checkout ef3ad46f14cf62ff21083829a1fa6879d20246de cd ~/catkin_ws catkin_make
Запустим zed_wrapper выполнив следующие команды в разных окнах терминала:
roscore roslaunch zed_wrapper zed.launch
Покажем активные топики:
rostopic list
В списке помимо стандартных топиков увидим топики с префиксом /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
Запустим rqt_image_view:
rosrun rqt_image_view rqt_image_view
При выборе топика /zed/depth/depth_registered получим карту глубины:
RGB изображение с левой камеры (/zed/left/image_raw_color):
И наконец RGB изображение с правой камеры (/zed/right/image_raw_color):
Данные с камеры публикуются в топики /zed/rgb/image_raw_color и /zed/depth/depth_registered с частотой 15Hz.
Узнаем частоту публикации облака точек в топик /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
Запустим rviz на самом Jetson (мне не удалось успешно запустить его при подключении через ssh с опцией -x):
rosrun rviz rviz
SLAM На NVIDIA Jetson со стереокамерой ZED
Давайте теперь попробуем камеру ZED на практической задаче. На NVIDIA Jetson можно без проблем запустить алгоритм SLAM RTAB-MAP. Для начала установим враппер ROS для RTAB-MAP:
sudo apt-get install ros-indigo-rtabmap-ros
Теперь запустим rtabmap с использованием камеры ZED. Если у нас не запущен zed_wrapper, то запускаем его:
rosrun zed_wrapper zed_wrapper_node
Запустим rtabmap:
rtabmap
Выберем камеру ZED в окне rtabmap в качестве источника:
Я не проводил испытания RTAB-MAP на NVIDIA Jetson, поэтому оставляю вам, дорогие читатели, возможность испытать этот алгоритм SLAM. Об использовании RTAB-MAP можно прочитать в двух моих последних статьях (здесь и здесь).
Надеюсь эта статья станет для вас хорошей стартовой точкой для использования стереокамеры ZED и микрокомпьютера NVIDIA Jetson. Желаю вам удачи в экспериментах и до новых встреч!
PS: Интересно ваше мнение по поводу выбора недорогой стереокамеры для экспериментов. Поддержка ROS не имеет большого значения, главное цена. Свои варианты пожалуйста пишите в комментариях к статье.
Источник