
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 hierBei Beaglebone Blue mit einer A4Tech-USB-Kamera funktionierte dieser Code für mich:
<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) 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-KnotenUSB-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).
