ROS Trolley Robot. Teil 3. Beschleunigen, Kamera wechseln, Gang fixieren

Beiträge in der Reihe:
8. Wir steuern von der Telefon-ROS-Steuerung, GPS-Knoten
7. Roboterlokalisierung: Gmapping, AMCL, Referenzpunkte auf der Raumkarte
6. Kilometerzähler mit Radgebern, Raumkarte, Lidar
5. Wir arbeiten in Rviz und Pavillon: Xacro, neue Sensoren.
4. Erstellen Sie eine Robotersimulation mit den Editoren rviz und pavillon.
3. Beschleunigen, Kamera wechseln, Gang fixieren
2. Software
1. Eisen

Das letzte Mal , als wir mit OpenCV und ROS (Roboterbetriebssystem) arbeiteten und die ganze Kraft von Himbeer-Pi 3b + nutzten, gelang es uns, entlang der Linie zu fahren, ein Lächeln auf den Gesichtern der Menschen zu sehen, eine traurige Schnauze von Katzen und sie sogar zu treffen.

Aber zusammen mit den ermutigenden ersten Schritten in diesem Bereich der Robotik musste ich mich einer Reihe kleiner Aufgaben stellen: langsamer Himbeer-Pi, ein kleiner Abstand von der Kamera, der das Gesicht erkannte, sich beim Fahren zur Seite bewegte, und andere. Wie sie gelöst werden können, einschließlich der Erschließung neuer kleiner Horizonte bei der Entwicklung von ROS, wird später beschrieben.

1. Durch Ausführen aller Knoten (Skripte in ROS) aus einem zuvor zusammengestellten Projekt und Beginn der Arbeit mit Haar-Kaskaden wurde schnell klar, dass die Leistung eines Einplatinencomputers für solche Aufgaben immer noch eher schwach ist. Trotz der Tatsache, dass die Prozessorlast nicht maximal war und innerhalb von 80% variierte, dachte der Roboter lange, als er das Gesicht einer Person oder das Gesicht einer Katze sah, dem er folgen musste.

Das Traurigste war, dass sich der Roboter zu bewegen begann, nachdem das Gesicht oder Gesicht aus dem Sichtfeld der Kamera verschwunden war, und „dachte“, dass er zum Objekt gehen würde. Im Allgemeinen wie in M.Yu. Lermontov:
"Der langjährige Ausgestoßene wanderte
In der Wüste der Welt ohne Obdach ... ".
Die ersten Versuche, die Situation zu korrigieren, waren wie folgt:
- Im Startknoten der Kamera (auf Himbeer-Pi) wurde die Größe des aufgenommenen Bildes von 640 x 480 60 fps auf 320 x 240 15 fps reduziert.

cd /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/rosbots_driver nano pi_camera_driver.py 

Dies führte zu einer gewissen Steigerung der Produktivität, aber das Gesamtbild blieb alles andere als ideal.

Um im Skript dem Gesicht einer Person (follow_face.py) oder einer Katze (follow_cat2.py) zu folgen, wurden die Schlussfolgerungen auf dem Bildschirm von opencv-Bildern selbst auskommentiert. Das ist alles cv.imshow. Zu Beginn der Reise war es nun unmöglich, visuell zu beobachten, ob der Roboter ein Bild sieht, zu dem er sich bewegt oder nicht. Nun, ich musste die Klarheit opfern.
Außerdem wurden die Info-Ausgaben von ROS selbst in den Skripten kommentiert: # rospy.loginfo.
Dies reduzierte die Last geringfügig und erhöhte die Arbeitsgeschwindigkeit.
Aber ... es war notwendig, sich etwas anderes auszudenken.

2. Außerdem war der Roboter furchtbar kurzsichtig. Nach unseren eigenen Erfahrungen und Empfehlungen in diesem Bereich wurde eine Fischaugen-Kamera verwendet:



Diese Kamera bietet einen ziemlich großen Betrachtungswinkel und ermöglicht es Ihnen, einen wesentlichen Teil des Raums zu erfassen.

Wie sich jedoch herausstellte, waren ihre Ergebnisse auf dem Gebiet der Gesichtserkennungsqualität nicht beeindruckend ... Mckayla war nicht beeindruckt ... Aufgrund des gleichen weiten Betrachtungswinkels, den die Kamera verwendet, verzerrt sie gleichzeitig das erkennbare Objekt selbst. Aus diesem Grund funktionieren die verwendeten Haar-Kaskaden nicht gut. Die Beleuchtung hat ebenfalls einen signifikanten Effekt: Im Schatten sinkt die Qualität noch mehr.

3. Und um das Ganze abzurunden, fehlte dem Roboter die Winkelgeschwindigkeit für klare Drehungen, und selbst an den Schwellen (nicht denjenigen, die überschritten werden müssen) und den Teppichen steckte er vollständig fest. Hier fügte Pfeffer den Leistungsunterschied der Motoren mit „gleicher Leistung“ hinzu, die selbst nach dem Verlassen derselben Charge fast nie gleich sind. Aus diesem Grund driftete der Roboter deutlich nach links.

Verbesserung der "Leistung".


Nun, mit der Leistung begann sich die Situation merklich zu verbessern, als der Hauptvorteil von ROS als System zur Rettung kam, nämlich die Fähigkeit, die Last auf verschiedene Maschinen zu verteilen.

Das heißt, es reicht aus, Bewegungsknoten, Kameras und den Hauptknoten auf Himbeere selbst auszuführen, und andere, stark belastete Knoten können auf die Schultern leistungsfähigerer Systeme gelegt werden.
Beispiel: Installieren von ROS auf einem Laptop oder Bereitstellen einer virtuellen Maschine.

In dieser Situation wurde die zweite Option gewählt.

Um nicht zu beschreiben, wie Ubuntu, ROS auf einer virtuellen Maschine installiert wird, verwenden wir den Slogan von Winnie Jones: " Wir brauchen einen leblosen Freiwilligen ." Wir haben es vorbereitet ... - Eine virtuelle Maschine mit allem Zeug kann hier heruntergeladen werden .

Die Parameter der virtuellen Maschine, deren Verwendung vorgeschlagen wird, lauten wie folgt:



Es versteht sich, dass Sie es auf einer VMware-Workstation bereitstellen (ausführen).
Passwort: Himbeere

Jetzt können Sie die Leistung beim Verdauen von Haar-Kaskaden auf Eisen bewerten, das stärker ist als Himbeer-Pi!

Um das ROS-System zu starten, das jetzt in zwei Teile unterteilt ist, müssen Sie die virtuelle Maschine angeben, auf der der Masterknoten arbeitet (und die unmittelbar nach dem Systemstart auf Himbeere startet).

Bearbeiten Sie dazu bashrc in einer virtuellen Maschine:

 sudo nano ~/.bashrc 

Geben Sie in den Zeilen ganz am Ende der Datei die IP-Adressen an:

 export ROS_MASTER_URI=http://192.168.1.120:11311 export ROS_HOSTNAME=192.168.1.114 

Die erste IP ist die Himbeer-Pi-Adresse, die zweite IP ist die Adresse der virtuellen Maschine.
* Die virtuelle Maschine und die Himbeere müssen sich im selben lokalen Netzwerk befinden.

Bei Himbeeren ist derselbe Bashrc unterschiedlich:

 <source lang="bash">export ROS_MASTER_URI=http://192.168.1.120:11311 export ROS_HOSTNAME=192.168.1.120 

Zwei IP-Adressen auf Himbeer passen zusammen.
* Vergessen Sie nicht, nach dem Ändern von bashrc neu zu starten.

Wie starte ich ein verteiltes ROS-System?


Es gibt zwei Terminals auf Himbeere.

Im 1. Satz:

 rosrun rosbots_driver part2_cmr.py 

In der 2. Himbeerkamera:

 sudo modprobe bcm2835-v4l2 roslaunch usb_cam usb_cam-test.launch 

Insgesamt arbeiten 2 Knoten an Himbeeren: Einer wartet auf das Verschieben eines Befehls, der zweite sendet Videos von der Kamera an das Netzwerk.

Um eine Verbindung zum Master herzustellen und den Roboter über die Tastatur zu steuern, müssen Sie jetzt in der virtuellen Maschine Folgendes ausführen:

 rosrun teleop_twist_keyboard teleop_twist_keyboard.py /cmd_vel:=/part2_cmr/cmd_vel 

Auf die gleiche Weise können Sie anstelle der Verwaltung von einer virtuellen Maschine aus einen Knoten ausführen, der dem Gesicht einer Person folgt:

 cd /home/pi/rosbots_setup_tools/rpi_setup python follow_face.py 

Nun ein wenig trockene Statistiken über die Ergebnisse mit der Fischaugen-Himbeer-Pi-Kamera bei verschiedenen Einstellungen des von der Kamera aufgenommenen Bildes.

320 x 240, 30 fps:
Gesicht des Menschen. 80-100 cm. Lichteinflüsse, sieht praktisch nicht im Schatten. Es ist besser, die Lampe zur Verbesserung auf das Gesicht zu richten. Lächeln erkennt mit einem Lächeln das Gesicht schneller.
Katzengesicht auf Blatt A4. 15-30 cm.

Bei 800x600 und 60fps sieht das Gesicht in einer Entfernung von 2-3 m.

Bei 1280x720 und 60fps - das Gesicht sieht in einer Entfernung von 3-4 m. Aber es gibt falsch positive Ergebnisse - sieht es eine Wanduhr als Gesicht usw.

Eine Katze auf A4 erkennt mit einer Verzögerung von 1-2 Sekunden eine Entfernung von 1-1,5 m.
Auslastung der virtuellen Maschine 77-88%.

Wie Sie sehen können, nehmen die Last auf der virtuellen Maschine und die Entfernung, in der der Roboter das Objekt sieht, zu, wenn das Fenster des von der Kamera aufgenommenen Bildes vergrößert wird. Die Belastung der Himbeere wächst, aber nicht signifikant. Die Erkennungsgeschwindigkeit im Vergleich zum Betrieb aller Knoten nur auf Himbeeren hat sich erheblich erhöht.

Myopie behandeln


Die obigen Statistiken haben gezeigt, dass zur Verbesserung der Sicht die Auflösung und die Bilder pro Sekunde der Kamera erhöht werden müssen, um die Leistung der virtuellen Maschine zu verbessern. Selbst bei 1280 x 720 und 60 fps ist der Abstand zum Objekt jedoch nicht zu groß.

Die Lösung für dieses Problem kam unerwartet.

Wie Sie wissen, steht für Himbeeren eine ganze Reihe von Kameras zur Verfügung. Und für unseren Fall war einer von ihnen perfekt, nämlich:



Ihre Ergebnisse sind wie folgt:

Mit künstlicher Beleuchtung im Raum sieht er sein Gesicht in einer Entfernung von 7-8 m! Es ist nicht einmal notwendig zu lächeln.)
800x600 und 60fps - herunterladen. Virtuelle Maschine - 70-80%, Himbeere - 21% (es gibt nur Bewegungsknoten und beginnt mit der Übertragung der Kamera).
Eine Katze auf A4 erkennt mit einer Verzögerung von 1-2 Sekunden eine Entfernung von 2-2,3 m.
Wie Sie sehen können, leiden Katzen erneut, die auf kürzeren Entfernungen bestimmt werden. Aber hier liegt der Grund höchstwahrscheinlich in den Einstellungen der Haar-Kaskaden und nicht in der Kamera.
* Diese Kamera wird in der Regel komplett mit IR-Ohren geliefert. Es ist nicht notwendig, sie bei Tageslicht zu verwenden:



So zeigte die Kamera für Himbeer-Pi, die sich vom Fischauge unterscheidet, die besten Ergebnisse bei der Arbeit mit Objekten, selbst bei künstlicher Beleuchtung von schlechter Qualität. Um den Abstand zur Kamera zu vergrößern, musste ich jedoch mit Blickwinkeln bezahlen und dies muss berücksichtigt werden.

Nun zur Verbesserung des Fahrgestells und zum seitlichen Abriss des Roboters


Wie oben erwähnt, gibt es praktisch keine Zwillingsmotoren, und der Roboter ist dazu verdammt, entweder nach rechts oder nach links zu fahren, je nachdem, wie stark der Motor war, wobei alle anderen Dinge gleich sind.

Normalerweise wird der Bewegungsunterschied mit Encodern ausgeglichen, da diese in unserem Projekt gut sind. Wie das funktioniert gibt es einen guten Film .

Hier können Sie jedoch alles vereinfachen und einen kleinen Trick ausführen, indem Sie nur das Skript korrigieren, um dem Gesicht einer Person (follow_face.py) oder einer Katze (follow_cat2.py) in einer virtuellen Maschine zu folgen.

Wir interessieren uns für folgende Zeilen:

 #-0.013 - because right wheel is faster twist_msg.linear.x = 0.1 twist_msg.angular.z = -0.013 elif self.face_found["x"] < 0.0: # To the left cur_dir = "left" twist_msg.linear.x = 0.1 twist_msg.angular.z = 0.016 else: # To the right cur_dir = "right" twist_msg.linear.x = 0.1 twist_msg.angular.z = -0.016 

Je nachdem, wo und wie viel der Roboter bläst, müssen Sie die Werte für z anpassen. Im obigen Code werden die Werte beim Einschalten des 12-V-Motortreibers ausgewählt.

Es ist möglich, die Laufcharakteristik des Roboters (Geschwindigkeit und Manövrierfähigkeit) zu verbessern, indem auf den im Projekt verwendeten Motortreiber (L9110s) anstelle von 8 V - 12 V angewendet wird. Es ist jedoch besser, dies nicht ohne die Installation eines Leistungsstabilisators oder zumindest eines Kondensators zu tun, da Wie sich herausstellte, brennen die H-Bridge-Chips des L9110 einwandfrei. Vielleicht macht sie das so billig. Trotzdem treibt der Roboter 12 V recht munter und leichtfertig an.

Anstelle einer Schlussfolgerung


Nun, da der Roboter nicht mehr weggetragen wurde und sich seine Sicht verbessert hat, können Sie zum Beispiel mit ihm Verstecken spielen. Oder um etwas vom anderen Ende des Raumes zu bringen. Natürlich drehte er sich zu ihm um, wie zu einer Person.


Fortsetzung folgt.

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


All Articles