Как использовать USB-камеру с ROS на Raspberry Pi или BeagleBone Blue — для потокового стрима видео на большой компьютер

n6ab2cphx16phhl8trn84b008y0.jpeg

Эта инструкция о том как подключить USB-камеру к Raspberry Pi или BeagleBone Blue и использовать ее с ROS (Robot Operating System) — чтобы читать данные с камеры через ROS image_view и даже транслировать видео поток в веб-браузер!

В конце видео демонстрация на роботе EduMip.
1) В качестве бонуса мы создадим распределенную систему ROS.

2) Приложение Roscore и приложение для просмотра изображений будут работать на ПК (мастер) и узел камеры на Raspberry Pi (ведомый).

3) Чтобы настроить master и slave, нам нужно обновить переменные среды на обоих устройствах.

4) На мастере: найдите IP-адрес устройства. Для ethernet net_dev может быть как enpXXs0 или ethX:

$ ifconfig {net_dev} 
ifconfig enp61s0 
или просто ifconfig


5) Использовать IP-адрес в качестве значения для переменной ROS_IP:

$ export ROS_IP="10.42.0.1" 


6) И для ROS_MASTER_URI:

$ export ROS_MASTER_URI="http://10.42.0.1:11311" 


7) Если вы хотите использовать эти значения для будущих сеансов, вы можете сохранить значения в файле .bashrc в своем домашнем каталоге:

$ echo 'export ROS_IP="10.42.0.1"' >> ~/.bashrc 
$ echo 'export ROS_MASTER_URI="http://10.42.0.1:11311"' >> ~/.bashrc


8) Подключитесь к Raspberry Pi через ssh:

$ ssh {user}@{raspberry_ip} 


9) Для RPi в качестве подчиненного устройства добавьте главный IP-адрес для ROS_MASTER_URI

10) И IP-адрес Raspberry Pi для ROS_IP

$ export ROS_IP="10.42.0.65" 
$ export ROS_MASTER_URI="http://10.42.0.1:11311" 
или    
$ echo 'export ROS_IP="10.42.0.65"' >> ~/.bashrc 
$ echo 'export ROS_MASTER_URI="http://10.42.0.1:11311"' >> ~/.bashrc


11) Теперь пришло время подключить USB-камеру.

12) Проверьте, распознана ли камера системой:

$ lsusb 
$ ls /dev | grep video* 


13) Установите узел ROS usb_cam с необходимыми зависимостями:

$ sudo apt install ros-kinetic-usb-cam


14) У узла usb_cam уже есть тестовый файл запуска:

$ cat /opt/ros/kinetic/share/usb_cam/launch/usb_cam-test.launch


15) Прежде чем запускать этот файл, давайте запустим ядро ROS на master:

$ roscore


16) И теперь запустите узел usb_cam на slave:

$ roslaunch usb_cam usb_cam-test.launch


17) Теперь мы можем видеть созданные темы. Мы можем проверить их либо на master, либо на slave.

18) Перевидите текущий процесс в фоновый режим с помощью CTRL + Z и выполните команду bg, чтобы продолжить выполнение в фоновом режиме. (на варианте Ubuntu не full desktop и без экрана, запустите просто еще один терминал)

19) Чтобы увидеть темы в терминале:

$ rostopic list


20)… или в графическом интерфейсе:

$ rqt_graph


21) Чтение данных камеры с помощью image_view:

$ rosrun image_view image_view image:=/usb_cam/image_raw


_rvnnsqaykdhpwfe9h823i0kpt4.jpeg

22) Или используя rqt_image_view

23) Перенести фоновую задачу на передний план:

$ fg


24) Последний эксперимент на сегодняшний день — потоковая передача в web

25) Установка узла ROS веб-видео-сервер:

$ sudo apt install ros-kinetic-web-video-server


26) Чтобы сделать это правильно, создайте рабочую область для catkin для нашего пользовательского файла запуска:

$ mkdir -p ~/rosvid_ws/src 
$ cd ~/rosvid_ws 
$ catkin_make 
$ source devel/setup.bash


27) Затем создайте пакет ROS:

$ cd src
$ catkin_create_pkg vidsrv std_msgs rospy roscpp 


28) Создайте файл запуска с помощью nano, vim итд.:

$ mkdir -p vidsrv/launch
$ nano vidsrv/launch/vidsrv.launch 


разместите там код отсюда

На Beaglebone Blue с usb камерой A4Tech у меня сработал такой код:


  
  
    
    
    
    
    
    
  
  
  


29) Соберите пакет:

$ cd .. 
$ catkin_make 


30) Снова запустите ядро ROS на master:

$ roscore


31) И запустите созданный файл запуска:

$ roslaunch vidsrv vidsrv.launch


32) Порт веб-видео-сервера по умолчанию — 8080

33) Открыть URL в веб-браузере: {RPi_IP}:8080

Ссылки на документацию:

→ Video server node
→ USB camera node
→ rqt image viewer
→ Raspberry Pi Camera Module node

USB камеры можно использовать практически любые, у которых есть драйвера для linux, также аналогично можно использовать Raspberry Pi Camera Module ссылка выше.

Пример как это работает на BeagleBone Blue с камерой A4Tech:

Поиск карты тройка на видео с USB камеры BealeBone Blue (алгоритм распознавания работает на ноутбуке с master ROS).

adqm2vtrimqjpch2cufyb1w2p8i.jpeg

© Habrahabr.ru