|
|
Zeile 1: |
Zeile 1: |
| [[Datei:Infrared.png|right|mini|500px|Abb. 9 Infrarot Hindernisumfahrung]]
| |
|
| |
|
| Nachdem die Motoren mit ROS2 implementiert und getestet wurden, wurde die Hindernisumfahrung mit Infrarotsensoren implementiert.
| |
| Hierfür wurden zwei neue Dateien mit den Namen "master_IR.py" und "slave_IR.py" in dem source Ordner des ROS2 Packages erstellt.
| |
|
| |
|
| |
| Der Ablauf für die Hindernisumfahrung mit Infrarotsensoren ist in Abb. 9 abgebildet.
| |
|
| |
|
| |
| Das Programm wird mit einer ROS2 launch-file ausgeführt. Die launch-file beinhaltet alle auszuführenden ROS2-Nodes. Dazu gehört der package Name und der Name der auszuführenden Datei. Mit dem folgenden Befehl werden dann beide Nodes ausgeführt.
| |
|
| |
| <code> ros2 launch sensor_test alphabot_IR_launch.py </code>
| |
|
| |
|
| |
| Dann fährt der AlphaBot los und die Sensordaten werden über die Slave-Node an die Master-Node gepublished.
| |
|
| |
|
| |
| Nachdem die Master-Node die Sensordaten erhalten hat, entscheidet sie über eine IF-Schleife in welche Richtung der AlphaBot fahren kann.
| |
|
| |
|
| |
| Der unterschied zur Motorsteuerung oben ist, das hier der Master anhand der Sensordaten forward, right, left oder backward an die Slave-Node published.
| |
|
| |
|
| |
| Für die Sensordaten musste zunächst der richtige Datentype herausgefunden werden. Dazu kann dieser Code in der Slave-Node unter der timer_callback() Funktion nachdem DR_status deklariert wurde integriert werden.
| |
|
| |
| <code>
| |
| print(type(DR_status))
| |
| </code>
| |
|
| |
| So wurde herausgefunden, dass es sich hier um ein Integer handelt.
| |
| Mit der Codezeile <code> print(DR_status) </code> wurde festgestellt, dass diese Infrarotsensoren bei einer <code>1</code> nichts vor ihnen steht und bei einer <code>0</code> etwas im Weg ist.
| |
|
| |
| So published die Master-Node "forward" wenn die Slave-Node für beide Sensoren eine 1 published und steuert beide GPIO Pins zum vorwärts fahren an.
| |
| Wenn z.B. der rechte Sensor eine "0" und der linke eine "1" angibt, dann ist rechts ein Hindernis. Der master sendet der Slave die Nachricht "left", sodass die Slave-Node die GPIO Pins zum rückwärts fahren des Linken Motors ansteuert.
| |
|
| |
|
| |
| In dem folgenden Sequenzdiagramm ist die Kommunikation zwischen Master und Slave deutlicher zu erkennen(Abb. 10).
| |
|
| |
| So ist in der Abbildung zu sehen, das zunächst die Slave die Sensordaten abfragt und über timer_callback() an den Master published.
| |
|
| |
| Anschließend published der Master anhand der erhaltenden Sensordaten ein Movement an die Slave. Die Slave steuert dann die Motoren an.
| |
| [[Datei:Infrared_Sequenzdigramm.png|left|mini|600px|Abb. 10 Infrarot Hindernisumfahrung Sequenzdiagramm]]
| |
|
| |
| <br clear=all>
| |
|
| |
| In Abb. 11 ist zu der Infrarot Hindernisumfahrung ein Beispiel, wie das in einem Terminal während der Programmausführung aussieht.
| |
|
| |
| So fährt der AlphaBot vorwärts (I heard: "forward"), da für beide IR-Sensoren eine 1 ausgelesen wurde.
| |
|
| |
| Oder er fährt links (I heard: "left"), da für den rechten IR-Sensor eine 0 und für den linken eine 1 ausgelesen wurde.
| |
|
| |
| [[Datei:IR_Left.jpg|left|mini|500px|Abb. 11 Hindernisumfahrung Beispiel]]
| |
|
| |
| <br clear=all>
| |
|
| |
| In ROS2 können die Programmierten Nodes und Topics in einem RQT-Graph grafisch Dargestellt werden wie schon in den ROS2 Tutorials gezeigt.
| |
| Für die Infrarot Hindernisumfahrung könnte der Graph dann wie in Abb. 12 gezeigt aussehen.
| |
|
| |
| Dort ist zusehen das der master zu den beiden Topics "IR_right und IR_left" subscript und über die Topic "cmd_vel" published. Auf der anderen Seite, die Slave, published über die Topics "IR_right und IR_left" und subscript zur Topic "cmd_vel".
| |
|
| |
| [[Datei:RQT_Graph_Infrared.jpeg|left|mini|600px|Abb. 12 Infrarot Hindernisumfahrung]]
| |
|
| |
| <br clear=all>
| |
|
| |
| Zudem gibt es unter RQT die Möglichkeit die Sensordaten in einem sogenannten Plot darzustellen.
| |
|
| |
| Dazu muss in RQT unter dem Reiter Plugin, Visualisierung Plot ausgewählt werden, wie in Abb. 13 gezeigt.
| |
|
| |
| [[Datei:RQT_Plot_öffnen.png|left|mini|300px|Abb. 13 RQT Plot öffnen]]
| |
|
| |
| <br clear=all>
| |
|
| |
| In dem Plot kann das Koordinatensystem mit dem in Abb. 14 markierten Bereich in der Größe eingestellt werden.
| |
|
| |
| An der X-Axis muss nichts geändert werden, da diese sich während der Ausführung automatisch erweitert. Unter Y-Axis lässt sich für Bottom der niedrigste Wert und für Top der höchste Wert, welches das Koordinaten System haben soll einstellen.
| |
|
| |
| [[Datei: Koordinatensystem einstellen.png|left|mini|300px|Abb. 14 Koordinatensystem einstellen]]
| |
|
| |
| <br clear=all>
| |
|
| |
| Um die Sensordaten dem Plot hinzuzufügen wird der Topic-Monitor benötigt. Der Topic Monitor wird über den Reiter Plugin und dann Topics, Topic Monitor geöffnet.
| |
|
| |
| In Abb. 15 sind links über den Topic Monitor die verschiedenen Topics zu sehen. Über den Pfeil links neben den Topics wird ein weiterer Reiter Namens "data" ausgeklappt(Abb. 15 1.)
| |
| Unter den Topics DR_left und DR_right kann "data" per drag and drop in den Plot gezogen werden. So erscheint in dem Plot oben links eine Legende mit dem Topic Namen und der Farbe des Graphens(Abb. 15 2.). Während der Laufzeit wird dann der Plot für die beiden IR-Sensoren generiert.
| |
|
| |
| Außerdem ist zusehen, das zweimal der blaue Graph auf 0 fällt.
| |
| So ist hier genauer zu erkennen, dass sich die Sensordaten nur auf 1 und 0 beschränken.
| |
| Weiter ist zuerkennen, dass der linke Sensor(blauer Plot) anspricht und dort sich zu dem Zeitpunkt ein Hindernis befindet.
| |
|
| |
| [[Datei:RQT_Plot_Infrared.png|left|mini|600px|Abb. 16 Infrarot Hindernisumfahrung]]
| |
|
| |
| <br clear=all>
| |
|
| |
|
| |
| [[Kommunikation Raspberry Pi mit ROS2|Kommunikation Raspberry Pi mit ROS2]]
| |