Cómo usar una cámara USB con ROS en una Raspberry Pi o BeagleBone Blue - para transmitir video a una computadora grande



Esta instrucción trata sobre cómo conectar una cámara USB a una Raspberry Pi o BeagleBone Blue y usarla con ROS (Robot Operating System), para leer datos de la cámara a través de ROS image_view e incluso transmitir la transmisión de video a un navegador web.

Al final del video hay una demostración del robot EduMip.

1) Como beneficio adicional, crearemos un sistema ROS distribuido.

2) La aplicación Roscore y la aplicación para ver imágenes funcionarán en la PC (maestra) y el nodo de la cámara en la Raspberry Pi (esclava).

3) Para configurar maestro y esclavo, necesitamos actualizar las variables de entorno en ambos dispositivos.

4) En el asistente: encuentre la dirección IP del dispositivo. Para ethernet, net_dev puede ser enpXXs0 o ethX:

$ ifconfig {net_dev} ifconfig enp61s0   ifconfig 

5) Use la dirección IP como el valor para la variable ROS_IP:

 $ export ROS_IP="10.42.0.1" 

6) Y para ROS_MASTER_URI:

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

7) Si desea utilizar estos valores para futuras sesiones, puede guardar los valores en un archivo .bashrc en su directorio de inicio:

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

8) Conéctese a la Raspberry Pi a través de ssh:

 $ ssh {user}@{raspberry_ip} 

9) Para RPi, como esclavo, agregue la dirección IP maestra para ROS_MASTER_URI

10) Y la dirección IP de Raspberry Pi para 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) Ahora es el momento de conectar la cámara USB.

12) Compruebe si el sistema reconoce la cámara ::

 $ lsusb $ ls /dev | grep video* 

13) Instale el nodo usb_cam ROS con las dependencias necesarias:

 $ sudo apt install ros-kinetic-usb-cam 

14) El host usb_cam ya tiene un archivo de inicio de prueba:

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

15) Antes de comenzar este archivo, ejecutemos el núcleo ROS en el maestro:

 $ roscore 

16) Y ahora ejecuta el nodo usb_cam en esclavo:

 $ roslaunch usb_cam usb_cam-test.launch 

17) Ahora podemos ver los temas creados. Podemos verificarlos en maestro o esclavo.

18) Mueva el proceso actual al fondo utilizando CTRL + Z y ejecute el comando bg para continuar ejecutándose en segundo plano. (en la versión de Ubuntu no es de escritorio completo y sin pantalla, simplemente inicie otro terminal)

19) Para ver temas en la terminal:

 $ rostopic list 

20) ... o en la interfaz gráfica:

 $ rqt_graph 

21) Leer datos de la cámara usando image_view:

 $ rosrun image_view image_view image:=/usb_cam/image_raw 



22) O usando rqt_image_view

23) Trae la tarea en segundo plano al primer plano:

 $ fg 

24) El último experimento hasta la fecha es la transmisión web

25) Instalación del servidor de video web host ROS:

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

26) Para hacer esto correctamente, cree un espacio de trabajo para catkin para nuestro archivo de inicio personalizado:

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

27) Luego crea el paquete ROS:

 $ cd src $ catkin_create_pkg vidsrv std_msgs rospy roscpp 

28) Cree un archivo de inicio usando nano, vim, etc .:

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

publicar el código desde aquí

En Beaglebone Blue con una cámara usb A4Tech, este código funcionó para mí:

 <launch> <!-- This node description you can take from usb_cam-test.launch --> <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" > <param name="video_device" value="/dev/video0" /> <param name="image_width" value="352" /> <param name="image_height" value="288" /> <param name="pixel_format" value="mjpeg" /> <param name="camera_frame_id" value="usb_cam" /> <param name="io_method" value="mmap"/> </node> <!-- This node will launch web video server --> <node name="web_video_server" pkg="web_video_server" type="web_video_server" \ /> </launch> 

29) Recoge el paquete:

 $ cd .. $ catkin_make 

30) Ejecute el kernel ROS en el maestro nuevamente:

 $ roscore 

31) Y ejecuta el archivo de inicio creado:

 $ roslaunch vidsrv vidsrv.launch 

32) El puerto predeterminado del servidor de video web es 8080

33) Abrir URL en el navegador web: {RPi_IP}: 8080

Enlaces de documentación:

Nodo del servidor de video
nodo de cámara USB
visor de imágenes rqt
Nodo Módulo de cámara Raspberry Pi

Las cámaras USB se pueden usar en casi todos los que tengan controladores para Linux, también puede usar el enlace del Módulo de cámara Raspberry Pi de manera similar anteriormente.

Un ejemplo de cómo funciona esto en BeagleBone Blue con una cámara A4Tech:



Busque una tarjeta triple en video desde una cámara USB BealeBone Blue (el algoritmo de reconocimiento funciona en una computadora portátil con master ROS).

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


All Articles