
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'iciSur Beaglebone Blue avec une caméra USB A4Tech, ce code a fonctionné pour moi:
 <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) 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 PiLes 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).
