Comment utiliser une caméra USB avec ROS sur un Raspberry Pi ou BeagleBone Blue - pour diffuser des vidéos sur un grand ordinateur



Cette instruction explique comment connecter une caméra USB à un Raspberry Pi ou BeagleBone Blue et l'utiliser avec ROS (Robot Operating System) - pour lire les données de la caméra via ROS image_view et même diffuser le flux vidéo vers un navigateur Web!

À la fin de la vidéo, une démonstration sur le robot EduMip.

1) En prime, nous créerons un système ROS distribué.

2) L'application Roscore et l'application de visualisation d'images fonctionneront sur le PC (maître) et le nœud de la caméra sur le Raspberry Pi (esclave).

3) Pour configurer le maître et l'esclave, nous devons mettre à jour les variables d'environnement sur les deux appareils.

4) Sur l'assistant: recherchez l'adresse IP de l'appareil. Pour Ethernet, net_dev peut être enpXXs0 ou ethX:

$ ifconfig {net_dev} ifconfig enp61s0   ifconfig 

5) Utilisez l'adresse IP comme valeur pour la variable ROS_IP:

 $ export ROS_IP="10.42.0.1" 

6) Et pour ROS_MASTER_URI:

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

7) Si vous souhaitez utiliser ces valeurs pour de futures sessions, vous pouvez enregistrer les valeurs dans un fichier .bashrc dans votre répertoire personnel:

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

8) Connectez-vous au Raspberry Pi via ssh:

 $ ssh {user}@{raspberry_ip} 

9) Pour RPi, en tant qu'esclave, ajoutez l'adresse IP maître pour ROS_MASTER_URI

10) Et l'adresse IP du Raspberry Pi pour 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) Il est maintenant temps de connecter la caméra USB.

12) Vérifiez si la caméra est reconnue par le système:

 $ lsusb $ ls /dev | grep video* 

13) Installez le nœud usb_cam ROS avec les dépendances nécessaires:

 $ sudo apt install ros-kinetic-usb-cam 

14) L'hôte usb_cam a déjà un fichier de lancement de test:

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

15) Avant de démarrer ce fichier, exécutons le noyau ROS sur master:

 $ roscore 

16) Et maintenant, exécutez le nœud usb_cam sur l'esclave:

 $ roslaunch usb_cam usb_cam-test.launch 

17) Maintenant, nous pouvons voir les sujets créés. Nous pouvons les vérifier sur maître ou esclave.

18) Déplacez le processus actuel vers l'arrière-plan à l'aide de CTRL + Z et exécutez la commande bg pour continuer à exécuter en arrière-plan. (sur la version Ubuntu pas de bureau complet et sans écran, lancez simplement un autre terminal)

19) Pour voir les sujets dans le terminal:

 $ rostopic list 

20) ... ou dans l'interface graphique:

 $ rqt_graph 

21) Lecture des données de la caméra en utilisant image_view:

 $ rosrun image_view image_view image:=/usb_cam/image_raw 



22) Ou en utilisant rqt_image_view

23) Mettez la tâche d'arrière-plan au premier plan:

 $ fg 

24) La dernière expérience en date est le streaming web

25) Installation du serveur vidéo Web de l'hôte ROS:

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

26) Pour ce faire correctement, créez un espace de travail pour catkin pour notre fichier de démarrage personnalisé:

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

27) Créez ensuite le package ROS:

 $ cd src $ catkin_create_pkg vidsrv std_msgs rospy roscpp 

28) Créez un fichier de démarrage en utilisant nano, vim, etc.:

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

poster le code d'ici

Sur Beaglebone Blue avec une caméra USB A4Tech, ce code a fonctionné pour moi:

 <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) Récupérez le colis:

 $ cd .. $ catkin_make 

30) Réexécutez le noyau ROS sur le maître:

 $ roscore 

31) Et exécutez le fichier de démarrage créé:

 $ roslaunch vidsrv vidsrv.launch 

32) Le port du serveur vidéo Web par défaut est 8080

33) Ouvrir l'URL dans le navigateur Web: {RPi_IP}: 8080

Liens de documentation:

Nœud de serveur vidéo
Noeud de caméra USB
visionneuse d'images rqt
Nœud du module de caméra Raspberry Pi

Les caméras USB peuvent être utilisées presque avec tous les pilotes pour Linux, vous pouvez également utiliser le lien Raspberry Pi Camera Module de la même manière ci-dessus.

Un exemple de la façon dont cela fonctionne sur BeagleBone Blue avec un appareil photo A4Tech:



Recherchez une triple carte en vidéo à partir d'une caméra USB BealeBone Blue (l'algorithme de reconnaissance fonctionne sur un ordinateur portable avec maître ROS).

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


All Articles