U ovom vodiču ćemo naučiti kako koristiti uROS biblioteku za micropython: https://github.com/mgtm98/uRos
ROS je operativni sustav za robote u kojem različiti "čvorovi" komuniciraju sa središnjim poslužiteljem putem TCP poruka u JSON formatu.
Ova nam biblioteka omogućuje implementaciju ROS čvora u našem SBC. Spojit će se na poslužitelj i moći će slati (objavljivati) ili primati (pretplatiti se na) poruke.
Kod za objavljivanje poruke je sljedeći:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | uvoz mreža iz aurochs uvoz * iz uros.std_msgs uvoz std_Bool lan = mreža.LAN() lan.aktivan(Pravi) lan.ifconfig( ( "10.0.0.1", "255.255.255.0", "10.0.0.2", "8.8.8.8" )) dok(lan.status() != 3 ): otisak( ".", na kraju="" ) vrijeme.spavati(1) otisak( "Povezano!" ) uRos = Ros( "10.0.0.2", 9090 ) #stvaranje novog uRos objekta msg = std_Bool( podaci = Pravi ) #stvaranje Ros string msg objekta uRos.objaviti( "uRosTopic", poruka ) #objavljivanje objekta poruke otisak("gotovo") |
U ovom kodu prvo se spajamo na LAN mrežu, a zatim na ROS poslužitelj; definiramo format naše poruke i na kraju objavljujemo.
Na računalu izvršavamo kod u pythonu koji djeluje kao ROS poslužitelj. Radi jednostavnosti, ovaj kod je samo socket poslužitelj koji ispisuje podatke na konzolu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | uvoz utičnica uvoz sys def poslužitelj_utičnice( domaćin, port ): s = utičnica.utičnica (utičnica.AF_INET, utičnica.SOCK_STREAM) s.bind((host, port)) s.slušati(1) dok Pravi: spoj, adresa = s.prihvatiti () otisak('Povezano od', adresa) dok Pravi: podaci = conn.recv(1024) if ne podatke: razbiti otisak(podatak) conn.Zatvoriti() otisak("priključak zatvoren") s.Zatvoriti() otisak("zatvoreno je") socket_server( '10.0.0.2', 9090 ) otisak("gotovo") |
Kao rezultat toga, prikazani su podaci primljeni na poslužitelju:
Ako pogledamo podatke, vidimo dva dijela:
1. Definicija naše uRosTopic poruke. Ovo se šalje samo jednom za svaku novu vrstu poruke.
2. I objavljeni podaci. Ovo se šalje svaki put kada objavimo novu vrijednost.
Sada ste spremni povezati svoj SBC s bilo kojim ROS uređajem putem etherneta, definirati prilagođenu poruku i poslati je sa samo nekoliko redaka python koda.