So verwenden Sie eine USB-Kamera mit ROS auf einem Raspberry Pi oder BeagleBone Blue - zum Streamen von Videos auf einen großen Computer



In dieser Anleitung erfahren Sie, wie Sie eine USB-Kamera an einen Raspberry Pi oder BeagleBone Blue anschließen und mit ROS (Robot Operating System) verwenden - um Daten von der Kamera über ROS image_view zu lesen und den Videostream sogar an einen Webbrowser zu streamen!

Am Ende des Videos befindet sich eine Demonstration des EduMip-Roboters.

1) Als Bonus erstellen wir ein verteiltes ROS-System.

2) Die Roscore-Anwendung und die Anwendung zum Anzeigen von Bildern funktionieren auf dem PC (Master) und dem Kameraknoten auf dem Raspberry Pi (Slave).

3) Um Master und Slave zu konfigurieren, müssen die Umgebungsvariablen auf beiden Geräten aktualisiert werden.

4) Im Assistenten: Suchen Sie die IP-Adresse des Geräts. Für Ethernet kann net_dev entweder enpXXs0 oder ethX sein:

$ ifconfig {net_dev} ifconfig enp61s0   ifconfig 

5) Verwenden Sie die IP-Adresse als Wert für die Variable ROS_IP:

 $ export ROS_IP="10.42.0.1" 

6) Und für ROS_MASTER_URI:

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

7) Wenn Sie diese Werte für zukünftige Sitzungen verwenden möchten, können Sie die Werte in einer .bashrc-Datei in Ihrem Home-Verzeichnis speichern:

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

8) Stellen Sie über ssh eine Verbindung zum Raspberry Pi her:

 $ ssh {user}@{raspberry_ip} 

9) Fügen Sie für RPi als Slave die Master-IP-Adresse für ROS_MASTER_URI hinzu

10) Und die IP-Adresse des Raspberry Pi für 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) Jetzt ist es Zeit, die USB-Kamera anzuschließen.

12) Überprüfen Sie, ob die Kamera vom System erkannt wird ::

 $ lsusb $ ls /dev | grep video* 

13) Installieren Sie den ROS-Knoten usb_cam mit den erforderlichen Abhängigkeiten:

 $ sudo apt install ros-kinetic-usb-cam 

14) Der usb_cam-Host verfügt bereits über eine Teststartdatei:

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

15) Bevor Sie diese Datei starten, führen Sie den ROS-Kernel auf dem Master aus:

 $ roscore 

16) Führen Sie nun den Knoten usb_cam auf dem Slave aus:

 $ roslaunch usb_cam usb_cam-test.launch 

17) Jetzt können wir die erstellten Themen sehen. Wir können sie entweder auf Master oder Slave überprüfen.

18) Verschieben Sie den aktuellen Prozess mit STRG + Z in den Hintergrund und führen Sie den Befehl bg aus, um die Ausführung im Hintergrund fortzusetzen. (auf der Ubuntu-Version nicht voll Desktop und ohne Bildschirm, starten Sie einfach ein anderes Terminal)

19) So sehen Sie Themen im Terminal:

 $ rostopic list 

20) ... oder in der grafischen Oberfläche:

 $ rqt_graph 

21) Lesen von Kameradaten mit image_view:

 $ rosrun image_view image_view image:=/usb_cam/image_raw 



22) Oder mit rqt_image_view

23) Bringen Sie die Hintergrundaufgabe in den Vordergrund:

 $ fg 

24) Das bisher neueste Experiment ist das Web-Streaming

25) Installieren des ROS-Host-Webvideoservers:

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

26) Um dies korrekt zu tun, erstellen Sie einen Arbeitsbereich für catkin für unsere benutzerdefinierte Startdatei:

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

27) Erstellen Sie dann das ROS-Paket:

 $ cd src $ catkin_create_pkg vidsrv std_msgs rospy roscpp 

28) Erstellen Sie eine Startdatei mit nano, vim usw.:

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

poste den Code von hier

Bei Beaglebone Blue mit einer A4Tech-USB-Kamera funktionierte dieser Code für mich:

 <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) Sammeln Sie das Paket:

 $ cd .. $ catkin_make 

30) Führen Sie den ROS-Kernel erneut auf dem Master aus:

 $ roscore 

31) Führen Sie die erstellte Startdatei aus:

 $ roslaunch vidsrv vidsrv.launch 

32) Der Standardport für den Webvideoserver ist 8080

33) Öffnen Sie die URL im Webbrowser: {RPi_IP}: 8080

Dokumentationslinks:

Videoserverknoten
USB-Kameraknoten
rqt Bildbetrachter
Raspberry Pi Camera Module-Knoten

USB-Kameras können fast alle verwendet werden, die Treiber für Linux haben. Sie können auch den Link Raspberry Pi Camera Module verwenden, ähnlich wie oben.

Ein Beispiel dafür, wie dies auf BeagleBone Blue mit einer A4Tech-Kamera funktioniert:



Suchen Sie nach einer Dreifachkarte für Videos von einer BealeBone Blue USB-Kamera (der Erkennungsalgorithmus funktioniert auf einem Laptop mit Master-ROS).

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


All Articles