Motorsteuerung: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 30: Zeile 30:
Dazu gibt es 3 Pins für den linken Motor und 3 Pins für den rechten Motor.
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. Dadurch wird ermöglicht, das der AlphaBot beim ausführen des Codes sofort losfährt oder wie hier erst losfährt wenn eine Nachricht gepublished wurde.
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. Dadurch wird ermöglicht, das der AlphaBot beim ausführen des Codes sofort losfährt oder wie hier erst losfährt wenn eine Nachricht gepublished wurde.
Jetzt endlich werden bei der Nachricht "forward" die beiden GPIO Pins für das vorwärts Fahren auf HIGH gesetzt und der AlphaBot fährt vorwärts.
 
<code>
self.PWMA = GPIO.PWM(ENA,500)
 
self.PWMA.start(0)
</code>
 
Bei der Nachricht "forward" die beiden GPIO Pins für das vorwärts Fahren auf HIGH gesetzt und der AlphaBot fährt vorwärts.





Version vom 15. März 2022, 13:20 Uhr

Abb. 7 Hindernisumfahrung Beispiel

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. Dadurch wird ermöglicht, das der AlphaBot beim ausführen des Codes sofort losfährt oder wie hier erst losfährt wenn eine Nachricht gepublished wurde.

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.

Abb. 8: Terminal Ausgabe