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