Steuerung des Lichts und Enable Motor Node Red

Wie sieht das Objekt in Node Red aus um die Lichter zu steuern und den Motor zu starten?

Hallo,

bezĂŒglich der Freischaltung des Roboters aus NodeRED heraus:

Der Roboter besitzt hierfĂŒr einen sogenannten Service in seiner ROS2-Anwendung. Hier erwartet er ein einmaliges Kommando, um die Enable-Variable auf ‘Wahr’ zu setzen.
Ein Überblick ĂŒber die Realisierung in einem NodeRED-Flow ist nachfolgend beschrieben.

Der Kern des Programms bildet der exec-Baustein “ROS2 Enable Kommando”. Mit solch einem Baustein können Kommandozeilenbefehle ausgefĂŒhrt werden. In diesem Fall werden zunĂ€chst die spezifischen Nachrichtentypen geladen und dann ein Aufruf des Services ausgefĂŒhrt, bei dem die Enable-Variable auf ‘Wahr’ (en. true) gesetzt werden soll. Getrennt sind beide Kommandos durch ‘&&’, wodurch in Linux-Terminals mehrere Befehle hintereinander ausgefĂŒhrt werden können:

Um die AusfĂŒhrung dieses Bausteins in der grafischen BedienoberflĂ€che zu ermöglichen, wurde ein Button-Baustein hinzugefĂŒgt. Die Dashboard-Elemente aus diesem Flow sind in einem separaten Reiter “Service-Bedienung” in der Kachel “Freischaltung” platziert.

Der oberste Ausgang des exec-Bausteins gibt die Ausgabe zurĂŒck, welche wir im Terminal zurĂŒckgegeben wird und kann mithilfe eines Debug-Bausteins inspiziert werden:

Ein relevanter Teil der Antwort ist die BestĂ€tigung der ROS2-Anwendung, dass unser Service-Aufruf erfolgreich bearbeitet wurde. Somit können wir uns diese Informationen nutzen, um eine entsprechende Ausgabe in unserer GUI zu erstellen. Wir prĂŒfen zunĂ€chst mit einem switch-Baustein, ob der Aufruf erfolgreich war:

Sollte die Ausgabe des exec-Bausteins “sending_succesfull=True” beinhalten, dann wird die gesamte RĂŒckmeldung am Ende des switch-Bausteins durchgereicht. Da es nicht vorteilhaft wĂ€re diese gesamte Ausgabe darzustellen wird die Payload durch den darauf folgenden Baustein mit einem String ĂŒberschrieben, den wir aussagekrĂ€ftig anzeigen können:

after_switch

Da so stets der gleiche String dargestellt wird, können wir dieses Textfeld bei jedem BetÀtigen des Enable-Buttons zunÀchst leeren. So werden erfolgreiche Aufrufe klar mitgeteilt:

clear

Der hier beschriebene NodeRED-Flow kann hiermit direkt importiert werden:

[{"id":"bd4096743cac6662","type":"tab","label":"Services","disabled":false,"info":""},{"id":"08bfaef8661ab1c7","type":"inject","z":"bd4096743cac6662","name":"Test-Knopf","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":140,"y":100,"wires":[["9c513725264dac1f"]]},{"id":"9c513725264dac1f","type":"exec","z":"bd4096743cac6662","command":"source /home/iotbot_ws/install/setup.bash && ros2 service call /iotbot/srv/send_enable iotbot_interface/srv/SendEnable \"{enable: true}\" ","addpay":"","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"ROS2 Enable Kommando","x":370,"y":280,"wires":[["844049fbba12540a","5bf294ea306732da"],[],[]]},{"id":"844049fbba12540a","type":"debug","z":"bd4096743cac6662","name":"ROS2 Ausgabe","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":640,"y":100,"wires":[]},{"id":"95c4ee595b899292","type":"ui_button","z":"bd4096743cac6662","name":"GUI-Knopf","group":"c5e9dfec51d4a375","order":0,"width":0,"height":0,"passthru":false,"label":"Enable","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"","payloadType":"str","topic":"topic","topicType":"msg","x":130,"y":320,"wires":[["9c513725264dac1f","0667e4ae2eb06ba6"]]},{"id":"6523ffebd575631f","type":"ui_text","z":"bd4096743cac6662","group":"c5e9dfec51d4a375","order":1,"width":0,"height":0,"name":"Zeige Ergebnis","label":"","format":"{{msg.payload}}","layout":"row-spread","className":"","x":920,"y":360,"wires":[]},{"id":"5bf294ea306732da","type":"switch","z":"bd4096743cac6662","name":"ROS2-Antwort untersuchen","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"sending_succesfull=True","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":640,"y":280,"wires":[["ba2510e2ef722b6a"]]},{"id":"ba2510e2ef722b6a","type":"change","z":"bd4096743cac6662","name":"Erstelle Nachricht bei Erfolg","rules":[{"t":"set","p":"payload","pt":"msg","to":"Erfolgreich freigeschaltet!","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":280,"wires":[["6523ffebd575631f"]]},{"id":"0667e4ae2eb06ba6","type":"change","z":"bd4096743cac6662","name":"Leere das Textfeld","rules":[{"t":"set","p":"payload","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":360,"wires":[["6523ffebd575631f"]]},{"id":"0b6078584f55bb1f","type":"comment","z":"bd4096743cac6662","name":"Testbereich fĂŒr die Bedienung aus dem NodeRED Browsereditor heraus.","info":"","x":290,"y":60,"wires":[]},{"id":"004d7158b200e646","type":"comment","z":"bd4096743cac6662","name":"Bedienung durch einen Knopf in der grafischen BedienoberflĂ€che.","info":"","x":270,"y":220,"wires":[]},{"id":"c5e9dfec51d4a375","type":"ui_group","name":"Freischaltung","tab":"af0f5fe7f1d76a41","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"af0f5fe7f1d76a41","type":"ui_tab","name":"Service-Bedienung","icon":"dashboard","disabled":false,"hidden":false}]

Damit erhaltet ihr folgende Erweiterung in eurer OberflÀche vor und nach BetÀtigung des Enable-Buttons:

GUI_1

GUI_2

Viele GrĂŒĂŸe

2 Likes