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:
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:
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:
Viele GrĂŒĂe