W tym samouczku nauczymy się korzystać z biblioteki uROS dla micropythona: https://github.com/mgtm98/uRos
ROS to system operacyjny dla robotów, w którym różne „węzły” komunikują się z serwerem centralnym za pomocą komunikatów TCP w formacie JSON.
Ta biblioteka pozwala nam zaimplementować węzeł ROS w naszym SBC. Połączy się z serwerem i będzie mógł wysyłać (publikować) lub odbierać (subskrybować) wiadomości.
Kod do opublikowania wiadomości wygląda następująco:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | importować sieć od żubr importować * od uros.std_msgs importować std_Bool lan = sieć.LAN() sieć.aktywny(Prawdziwy)lan.ifconfig(( "10.0.0.1", "255.255.255.0", "10.0.0.2", "8.8.8.8" )) Podczas(łan.status() != 3 ): ( ".", koniec="" ) czas.spać(1) ( "Połączony!" ) uRos = Róża( "10.0.0.2", 9090 ) #tworzenie nowego obiektu uRos msg = std_Bool( dane = Prawdziwy ) #tworzenie obiektu msg ciągu Ros uRos.publikować( „uRosTemat”, wiadomość ) #publikowanie obiektu wiadomości ("Gotowe") |
W tym kodzie łączymy się najpierw z siecią LAN, a następnie z serwerem ROS; określamy format naszego przekazu i wreszcie publikujemy.
Na PC wykonujemy kod w Pythonie, który działa jak serwer ROS. Dla uproszczenia ten kod jest tylko serwerem gniazd, który drukuje dane na konsoli.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | importować gniazdo importować sys def serwer_gniazda( host, port ): s = gniazdo.gniazdo (gniazdo).AF_INET, gniazdo.SOCK_STREAM).bind((host, port)) s.słuchać(1) Podczas Prawdziwy: poł., addr = s.zaakceptować() ('Połączony przez', adres) Podczas Prawdziwy: dane = Conn.recv(1024) if nie Dane: złamać (dane) poł.blisko() ("połączenie zamknięte") s.blisko() („zamknięte”) serwer_gniazda( "10.0.0.2", 9090 ) ("Gotowe") |
W rezultacie dane odebrane na serwerze są wyświetlane:
Jeśli przeanalizujemy dane, zobaczymy dwie części:
1. Definicja naszego przekazu uRosTopic. Jest wysyłany tylko raz dla każdego nowego typu wiadomości.
2. I opublikowane dane. Jest on wysyłany za każdym razem, gdy publikujemy nową wartość.
Teraz możesz podłączyć swój SBC do dowolnego urządzenia ROS przez Ethernet, zdefiniować niestandardową wiadomość i wysłać ją tylko kilkoma liniami kodu Pythona.