Skocz do zawartości

Radiowa komunikacja między robotami (np. w roju)


Mars

Pomocna odpowiedź

Zastanawiam się jak rozwiązać komunikację między kilkoma robotami. W domyśle miałyby pracować jako rój. 5-10 niedużych robotów, pracujących maksymalnie w kilkumetrowych odstępach. Chciałbym aby umiały określić swoje położenie względem reszty grupy.

Ważna kwestia (jak zawsze) to pieniądze. (jeśli zdam pewien przedmiot i nie będę musiał płacić za powtarzanie to zaszaleję 😃)

Sprzęt musi (powinien) umożliwiać jednoczesne nadawanie i odbieranie danych. Byłoby dobrze, gdyby dało się odbierać dane od kilku kompanów jednocześnie (jak to zrobić, żeby wzajemnie się nie zakłócały?). Nie chciałbym czekać cały dzień, aż skończą rozmawiać. Komunikacja po SPI mile widziana.

Wstępnie myślałem o czymś takim:

http://www.tme.eu/pl/details/rfm12b-433d/moduly-komunikacyjne-rf/hope-microelectronics/#

Po chwili uświadomiłem sobie, że jednoczesne nadawanie i odbieranie przy jednej antenie będzie raczej trudne.

No to może nadajnik i odbiornik osobno?

HM-R868S i HM-T868S wydają się znośne. Co prawda nie jest to SPI, ale jakoś bym sobie poradził (a przy okazji ogarnął UART 😉). Pytanie tylko, czy kilka układów nie wpadnie w jakąś zabójczą interferencję?

Może macie jakieś inne, tanie pomysły na taką komunikację? BlueTooth byłby dobry, gdyby nie cena. Na samym początku pomyślałem o jakimś własnym nadajniku i odbiorniku (zwykłe anteny, jak gdybym chciał odbierać RMF FM 😋), ale chyba bym poległ na miejscu. No chyba, że ...

Wystarczą jakieś punkty zaczepienia i teksty "Tak się da, a tak nie". Odnośnie ostatnich zdań, mile widziane wskazówki radioamatorów.

Mało tutaj informacji dotyczących roju (może pamiętacie temat kolegi "błazna"? : D)

Link do komentarza
Share on other sites

Myślę, że poruszyłeś tu dwa zupełnie różne problemy. Pierwszy to łączność. Żaden z przychodzących mi do głowy standardów radiowych nie nadaje i odbiera jednocześnie. Byłoby to bardzo trudne do zrobienia z czysto elektronicznych względów. Wyobrażasz sobie filtr w odbiorniku tłumiący sygnał z własnego nadajnika pracującego na tej samej antenie ale w kanale obok? Musiałby tłumić sygnał miliony razy silniejszy od tego który właśnie jest nadawany - to nie do zrobienia. Ale to przecież nie ma znaczenia, bo wcale coś takiego nie jest potrzebne. Od tego są wyższe warstwy organizacji takiej sieci by "udawać", że transmisje zachodzą jednocześnie. Albo wykorzystasz prościutkie i tanie moduły radiowe które już umożliwiają wybór kanału, same modulują sygnał i nawet mają SPI ale sam zrobisz organizację/synchronizację sieci albo - niestety - jesteś skazany na rozwiązania typu BlueTooth czy ZigBee. One robią to samo za Ciebie ale i za Twoje pieniądze.

Być może warto pomyśleć o jednostce nadrzędnej (starcjonarnej?), która byłaby centralą komunikatów i organizatorem pracy sieci. Coś jak BTS w GSM. Mogłaby po kolei odpytywać lub przydzielać kanały/czas na "wypowiedzenie się" każdego robota do niej. Potem by np. sortowała komunikaty i odsyłała je z powrotem do adresatów. No tutaj pomysłów organizacji może być mnóstwo.

Druga kwestia to określanie położenia względem grupy. Nie wiem o jakim terenie pracy tego roju myślisz ale mam kilka luźnych pomysłów:

- każdy z robotów będzie miał niezależne pozycjonowanie typu GPS (przy kilkumetrowych odstępach to chyba raczej odpada)

- można pokryć obszar jakimiś znacznikami (podczerwień?) i każdy robot będzie musiał potrafić wyznaczyć azymuty do kilku znaczników

- znany teren (mieszkanie?) i samodzielne określanie położenia na podstawie wykrytego kształtu otoczenia

- aktywne lub pasywne wykrywanie znaczników jeżdżących na innych robotach (głowica obrotowa z detektorem IR, kamerka, ultradźwięki ale trochę jak w systemie IFF)

- kamera nadzorująca położenie wszystkich na danym obszarze (+stacja bazowa+znaczniki np. rysunki na każdym inne lub mrugające LED lub IR)

Niektóre z tych rozwiązań mają jakby inteligencję zaszytą w każdym członku roju ale inne wymagają stacji bazowej. Napisz coś więcej o zastosowaniu, terenie, wielkości pojazdów itp. Przy autonomicznym określaniu położenia protokół wymiany danych powinien umożliwiać wymianę informacji tak, by każdy kto tego potrzebuje miał pełny obraz sytuacji "taktycznej".

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Haha, ja pamiętam temat kolegi błazna, to taki rój był że szkoda gadać 😋 Co do tanich transceiverów - zobacz rfm73, około 8zł przy jednostkowym zakupie, 2,4GHz i SPI 🙂

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Rój, diabelnie ciekawa sprawa!

To też zależy od tego, co Twoje roboty będą robić. Jeżeli będą skupione na małym obszarze to myślałem o komunikacji podczerwienią. Można byłoby stworzyć swój własny standard komunikacji przy użyciu diody IR oraz fototranzystora. Oczywiście takich par nadajnik/odbiornik byłoby kilka na jednym robocie (w kilku kierunkach), więc masz co prawda ograniczoną ilość odbiorców/nadawców, ale to już nie byłaby komunikacja jednokanałowa.

Bardzo jestem ciekawy Twojego pomysłu. Zdradzisz co zamierzać zrobić? 😉

Link do komentarza
Share on other sites

W zamyśle ma to być coś, dzięki czemu nauczę się kilku rzeczy.

Roboty wielkości dłoni, bo nie chcę się babrać z maluchami, a wielkie to już nie to samo wg mnie (i mobilność spada). Stacji-Matki chciałbym uniknąć. Jak to sobie wyobrażam:

Kładę roboty na podłodze, włączam, zaczynają szukać się (bezprzewodowo) i liczyć, ile ich jest, po czym przechodzą do poznawania terenu, czyli jeżdżą w poszukiwaniu granic "świata". Jeżeli znajdą jakiś przedmiot (detekcja na zasadzie "ej, właśnie objechałem obiekt w 5 sekund, czyli to nie jest ściana") wysyłają informację, że coś takiego się tutaj znajduje. Reszta odbiera sygnał i, zależnie od tego co im wklepię, albo przybywa "na pomoc", albo tylko zapamiętuje i dalej się rozgląda. Czyli mają być małe i ciekawskie 🙂

grabo, założyłem, bo komunikacja za pomocą podczerwieni wydaje mi się o wiele gorszym rozwiązaniem. Trzeba się widzieć, żeby móc się komunikować. Połączenie radiowe eliminuje wszelkie przeszkody czy pojedyncze ściany. Jeden dojedzie na drugi koniec mieszkania i co, ma się zgubić? 😉

Żaden z przychodzących mi do głowy standardów radiowych nie nadaje i odbiera jednocześnie.

Ale jeżeli zastosować dwa osobne moduły (jeden nadawczy, drugi odbiorczy), to chyba ten problem odpada? Chociaż mógłby odbierać to, co sam właśnie wysyła 😃. No ale programowo można to odfiltrować. Każdy robocik wysyłałby najpierw unikalny numer identyfikacyjny, a potem ciąg danych z informacją.

Od tego są wyższe warstwy organizacji takiej sieci by "udawać", że transmisje zachodzą jednocześnie. Albo wykorzystasz prościutkie i tanie moduły radiowe które już umożliwiają wybór kanału, same modulują sygnał i nawet mają SPI ale sam zrobisz organizację/synchronizację sieci albo - niestety - jesteś skazany na rozwiązania typu BlueTooth czy ZigBee. One robią to samo za Ciebie ale i za Twoje pieniądze.

I chyba na taką odpowiedź liczyłem tworząc ten temat. Na pewno nie mam zamiaru płacić kilkudziesięciu zł. za jeden moduł BT czy ZB. Mógłbyś w paru słowach rozwinąć o tym pierwszym rozwiązaniu? Nie oczekuję wywodu na godzinę czytania (choć czemu nie? 🙂). Wystarczy kilka zdań i jakieś słowa kluczowe. Nie lubię błądzić w poszukiwaniach.

[ Dodano: 14-09-2012, 16:12 ]

Czytam o tym RFM73 i jest tam

Programmable frequency range 2400-2483.5MHz, 83 channels selectable

Czyli wybieram, na którym kanale chcę nadawać, a odbiornik nasłuchuje na całym zakresie?

Ale jak to się ma w takim razie do tego

Układy RFM z tego co kojarzę obsługują komunikację z maksymalnie 4 (albo 5) innymi urządzeniami

?

[ Dodano: 14-09-2012, 16:34 ]

No to chyba wszystko jasne

The PRX device can open up to six data pipes to support up to six PTX devices with unique addresses.

Czyli mogę mieć 7 robocików (albo więcej, bo można je pogrupować, ale to już dodatkowa zabawa).

No other data pipe can receive data until a complete packet is received by a data pipe that has detected its address

Tego chciałem uniknąć. No ale można pójść na jakiś kompromis. Wszak transmisja i tak wystarczająco szybka jak na takie zabawy. Mogę zrobić tak, że robot chcąc nadać coś, najpierw informuje o tym, a wtedy reszta wyłącza nadawanie. Przesłanie kilku bajtów raczej nie trwa wieki 😉

Co wy na to?

Link do komentarza
Share on other sites

Mars, chodzi o to, że nadajesz urządzeniu adres własny oraz adresy, z których może przyjąć komunikaty (czyli kanały - własny nadawczy, oraz nasłuchiwane odbiorcze), w ten sposób nie powinno dochodziło interferencji, ale musisz być przygotowany na to, że komunikaty będą musiały być przekazywane łańcuszkiem. Nie jestem też pewien czy układy te mają coś w guście broadcastingu (a coś takiego się przydaje).

Link do komentarza
Share on other sites

Moim zdaniem nie powinieneś zaraz na starcie ograniczać się do tak małej liczby urządzeń. Korzystając z prostych modułów, które już zawierają w sobie jakieś warstwy protokołu zawsze będziesz zmuszony do korzystania tylko z takich możliwości jakie dał Ci ich producent. Nie zawsze docelowym zastosowaniem takich modułów była praca w roju robotów, prawda? 🙂 Żeby sprawdzić czy sobie poradzisz z problemem organizacji takiej sieci spróbuj przeprowadzić następujący eksperyment myślowy. Masz n robotów, każdy wyposażony jest w transceiver radiowy (lub inne medium np. IR ale to w tej chwili nie ma znaczenia) oraz:

- Każdy węzeł sieci ma swój unikalny adres - na razie nie wnikamy jak go sobie zdobył. Być może ustawiłeś go na jakichś zworkach.

- Roboty mogą być włączane w przypadkowych chwilach oraz także przypadkowo mogą być wyłączane. Ta sytuacja obejmuje też przypadki wychodzenia z zasięgu i do niego powracania.

- Moduł radiowy jest półdupleksowy - jeśli nadaje to nie odbiera i na odwrót a przełączanie między trybami zajmuje niezerowy czas.

- Nadawanie może być przeprowadzane tylko przez jeden moduł w danej chwili. Uruchomienie drugiego nadajnika na 100% niszczy akurat nadawaną ramkę oraz nie daje szans odebrania także tej drugiej, zakłócającej.

- Wszystkie odbiorniki odbierają na tym samym kanale wszystko to, co jest akurat w powietrzu.

Jeżeli wymyślisz sposób pracy takiej sieci, startu, synchronizacji nowo wchodzących, podziału i przydziału czasu to jesteś w domu. Spróbuj, warto się zastanowić. Być może krok po kroku dojdziesz do fajnych wniosków. Zauważ, że takie założenia prawie niczego nie wymagają od modułów radiowych. Mogą to być najprostsze klocki za kilkanaście złotych. Od razu mówię, że nie mam pojęcia jak to zrobić ale kilka pomysłów chodzi mi po głowie i chętnie posłucham innych. Mała burza mózgów jeszcze nikomu nie zaszkodziła. Narzucającym się rozwiązaniem jest podział czasu (TDM) oraz zamknięcie protokołu w pętlę, gdzie każdy robot ma swój slot czasowy oraz zostawiamy (na końcu?) chwilę na możliwość "wejścia do kręgu" nowego uczestnika. Z resztą, nie chcę niczego sugerować.

Link do komentarza
Share on other sites

Wyobrażam to sobie tak, że jeden z robotów robi za takiego lidera, synchronizatora, inicjatora. Roboty milczą, póki on nie rozpocznie.

Załóżmy, że adresy są od 1 do n. Robot o adresie 1 ("jedynka") to lider.

1. Jedynka nadaje do wszystkich.

2. Na końcu podaje adres = 2.

3. Odzywa się dwójka.

4. Na końcu podaje adres = 3.

5. Trójka się nie odzywa.

6. Jedynka wysyła adres = 4.

7. Czwórka się odzywa.

8. Na końcu podaje adres = 5.

9. Piątka się nie odzywa.

10. Jedynka wysyła adres = 6.

11. Szóstka się nie odzywa.

12. Jedynka wysyła adres = 7.

13. Siódemka się nie odzywa.

14a. Albo wysyła dalej, np. do 32,
14b. Albo już po trzech brakach odzewu decyduje o nadaniu informacji końcowej i wznowieniu pętli od 2.

Jeżeli jedynka padnie, to, po pewnym czasie ciszy, dwójka przejmuje funkcję lidera (zna wszystko to, co dochodziło do jedynki, więc nastąpi kontynuacja). Kwestia tylko sprawdzania, czy jedynka "już" wstała.

Mnóstwo wad. Wolne przede wszystkim. Może też być tak, że piątka będzie w zasięgu czwórki, ale nie jedynki. Wtedy jedynka nie usłyszy piątki i poleci dalej.

Czyli pomysł do ... poprawki : D

Link do komentarza
Share on other sites

Widać więc, że wyróżnianie jednego robota który na domiar złego ma te same możliwości (radiowe) co cała reszta zgrai jest niedobre. Waśnie z tego powodu myślałem o jakiejś silniejszej stacji bazowej ale może lepszym wyjściem byłoby zrobienie jakiegoś łańcuszka? Pierwszy nadaje do drugiego, drugi do trzeciego itd.

Zauważ, że tak naprawdę chodzi nam o przekazywanie uprawnień do nadawania po to, by w eterze nie zrobił się śmietnik. Ale co właściwie chcesz przekazywać? Mówiłeś o pozycjach. OK, zastanówmy się. Każdy robt będzie musiał być wyposażony w jakiś identyfikator. Przy pozycjonowaniu radio nie zadziała - nie jesteś w stanie zrobić odpowiednio kierunkowej anteny w tych wymiarach. To będą musiały być np. diodki LED lub IR mrugające w każdym inaczej. Mogą wysyłać identyfikatory cyfrowe, numery, częstotliwości, cokolwiek co odróżni jednego od drugiego. No i teraz każdy uczestnik musi mieć skaner dookólny rozglądający się przez 360 stopni i raportujący na jakim azymucie (względem północy z własnego kompasu?) widzi kolegę lub kolegów. Jeżeli wyśle to do reszty, to w końcu zbierze się wystarczająca ilość informacji, by każdy mógł odtworzyć sobie położenie wszystkich względem siebie. Niestety taki zbiór punktów - jeśli znamy tylko kąty, będzie mógł mieć dowolne wymiary. Znaczy mapa kątów będzie wygladała tak samo po przeskalowaniu odległości o dowolny współczynnik. Potrzebny jest też zatem albo pomiar odległości - ale to będzie dość trudne albo.. wymyśliłem bazę pomiarową w postaci conajmniej dwóch stałych punktów w znanej odległości. Jeżeli conajmniej jeden robot zobaczy oba punkty bazy to będzie w stanie (na podstawie zmierzonego kąta między nimi) wymyślić swoje bezwzględne położenie. Poda je przez radio a kolejni będą robić to samo. Bazując na kolejno "dowiadujących się" o swoim położeniu robotach wszyscy wkrótce wiedzieli by to samo. Problemem będą oczywiście błędy pomiaru kątów i pewne szczególne położenia względne, gdy ktoś będzie widział np. tylko jednego kolegę lub kilku ale prawie na jednej prostej. Skaner nie może mieć bardzo wąskiego kąta bo musi w czasie omiatania emitera odczytać i zdekodować jego identyfikator. Z drugiej strony możnaby wyznaczać centrum krzywej siły odbieranego sygnału i ten punkt traktować jak znaleziony kąt. Niestety, bez mechaniki obracającej "anteną" (lustro lub sam detektor IR) tu się nie obejdzie..

A może ultradźwięki? Gdybyśmy potrafili nadać dookólnie sygnał US z własnym zapytaniem (oto ja, numer N, czy ktoś mnie słyszy?) a odbiornik kolegi odczekiwałby pewien czas standartowy a potem wysyłał odpowiedź ze swoim kodem to na podstawie czasu opóźnienia znalibyśmy odległość. Znów pomogłyby tu punkty z węzłami bazowymi - od czegoś trzeba przecież zacząć liczenie. Sytuacja byłaby trochę podobna do poprzedniej ale odwrotna - znamy odległości ale nie znamy kątów, więc trzeba rozwiązywać podobny układ równań.

Wszystko to (wraz z błędami pomiarów itp) można zasymulować na kompie i to chyba dużo prościej niż budując wiele robotów. W każdym razie ja wolał bym właśnie w ten sposób przekonać się, że wymyśliłem piramidalną bzdurę albo że niezawodność całości jest tak mała, że nie daje szans na pracę w warunkach rzeczywistych. Poza tym możnaby dojść do ciekawych wniosków: im większy tłok tym lepiej albo gorzej, jak mają się przeszkody/widoczność do algorytmu liczenia położenia itd.

Ech, jednak kamerka patrząca na wszystkich z sufitu jest niezastąpiona..

Acha, być może warto zastanowić się nad metodami CSMA/CD - w stosunku do metod z przekazywaniem uprawnień wydają się dość proste algorytmicznie. Każdy czeka na wolny eter, odczekuje swój własny, chrakterystyczny czas i zaczyna nadawanie króciutkiej ramki. Wszystcy słuchają i odbierają dane ale czasem jest kolizja - trudno, ramki zostały stracone ale ponieważ obciążenie eteru nie jest (no nie powinno być) zbyt duże, to zderzenia nie są zbyt częste a informacje przesyłane są cyklicznie więc jak nie teraz, to uda się następnym razem.

No i drugie generalne pytanie: jak takie algorytmy rozproszone mają się do dynamiki zmian położenia uzyskiwanej nawet w prostych maszynkach na kółkach? Protokoły sieciowe mają duże narzuty - to nigdy nie będzie oszałamiająco szybkie więc może zamiast robotów puścić kilka.. żółwi?

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.