Motorsteuerung
Es wurde damit begonnen die Motoren zu programmieren und zu testen. Dazu wurde eine ROS2 Node namens slave.py erstellt, welche die Programmierung zur Steuerung der Motor GPIO Pins beinhaltet. Dazu werden bestimmte Nachrichten wie forward, backward, right, left oder stop manuell an diese ROS2 Node gepublished.
Der Ablauf ist dazu in Abb. 7 Graphisch dargestellt.
Damit überhaupt etwas passiert muss zuerst der ROS2 Code, die slave.py ausgeführt werden.
ros2 run sensor_test Motortest
Unter Demos wird dazu im Detail beschrieben, wie die verschiedenen Programme ausgeführt werden können.
Danach ist der subscriber in einer Art Standby Modus und wartet auf eingehende Nachrichten.
Im nächsten Schritt sendet jemand manuell eine Movement Nachricht an den subscriber.
ros2 topic pub /cmd_vel std_msgs/msg/String '{data: forward}'
Diese Nachricht wird in einer Dauerschleife gesendet, bis das publishen gestoppt wird.
Die Node "motor_subscriber" empfängt dann die zuvor gesendete Nachricht über den dort definierten subscriber.
Anhand dieser Nachricht entscheidet die Node über eine If-Schleife welche GPIO Pins angesteuert werden müssen.
Dazu gibt es 3 Pins für den linken Motor und 3 Pins für den rechten Motor.
Jeweils einen für vorwärts, einen für rückwärts und einen um die Motoren zu aktivieren. Die Aktivierung erfolgt in der Initialisierungsfunktion.
Bei der Motorsteuerung wurden die Geschwindigkeit auf 0% gesetzt damit der AlphaBot erst losfährt wenn die Slave eine Nachricht erhält.
Für die Hindernisumfahrung wurde der Wert höher gesetzt, damit der AlphaBot beim starten des Programmes losfährt.
self.PWMA = GPIO.PWM(ENA,500)
self.PWMA.start(0)
Bei der Nachricht "forward" die beiden GPIO Pins für das vorwärts Fahren auf HIGH gesetzt und der AlphaBot fährt vorwärts.
In Abb. 8 ist zusehen wie links die Nachricht "forward" gepublished wird und rechts die Node "motor_subscriber" diese Nachricht empfängt.
Zudem ist zu sehen das nach dem pub Befehl eine loop beginnt, das heißt, dass die Nachricht in gleichmäßigen Zeitabständen gepublished wird.