In deze tutorial leren we hoe we de uROS-bibliotheek voor micropython kunnen gebruiken: https://github.com/mgtm98/uRos
ROS is een besturingssysteem voor robots waarin de verschillende “nodes” communiceren met een centrale server via TCP-berichten in JSON-formaat.
Met deze bibliotheek kunnen we een ROS-knooppunt implementeren in onze SBC. Het maakt verbinding met een server en kan berichten verzenden (publiceren) of ontvangen (abonneren op).
De code om een bericht te plaatsen is als volgt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | importeren netwerk van uro's importeren * van uros.std_msgs importeren std_Bool lan = netwerk.LAN() lan.actief(Waar) lan.alsconfig( ( "10.0.0.1", "255.255.255.0", "10.0.0.2", "8.8.8.8" )) en(lan.toestand() != 3 ): print( "", einde="" ) tijd.slaap(1) print( "Verbonden!" ) uRoos = Roos( "10.0.0.2", 9090 ) #creëren van nieuw uRos-object msg = std_Bool( gegevens = Waar ) #creëren van een Ros string-berichtobject uRos.publiceren( "uRosTopic", bericht ) #het bericht-object publiceren print("gedaan") |
In deze code maken we eerst verbinding met het LAN-netwerk en vervolgens met de ROS-server; we definiëren het formaat van ons bericht en tot slot publiceren we.
Op de pc voeren we een code uit in python die fungeert als ROS-server. Voor de eenvoud is deze code slechts een socketserver die de gegevens naar de console afdrukt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | importeren stopcontact importeren sys def socket_server(host, poort): s = stopcontact.stopcontact (stopcontact).AF_INET, stopcontact.SOCK_STREAM) zo.bind((host, poort)) s.luister(1) en Waar: conn, adres = s.aanvaarden() print('Verbonden door', adres) en Waar: gegevens = conn.recv(1024) if niet data: breken print(gegevens) verbinding.dichtbij() print("conn gesloten") s.dichtbij() print("is gesloten") socket_server( '10.0.0.2', 9090 ) print("gedaan") |
Als resultaat worden de op de server ontvangen gegevens weergegeven:
Als we de gegevens onderzoeken, zien we twee delen:
1. De definitie van ons uRosTopic-bericht. Dit wordt slechts één keer verzonden voor elk nieuw type bericht.
2. En de gepubliceerde gegevens. Dit wordt elke keer verzonden als we een nieuwe waarde publiceren.
Nu ben je klaar om je SBC via ethernet met elk ROS-apparaat te verbinden, een aangepast bericht te definiëren en het te verzenden met slechts een paar regels python-code.