
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> <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> <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 PiLas 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).
