Wpis z mikrobloga

#arduino #esp8266 #elektronika #robotyka #automatyka #python #programowanie
Witam wszystkich, pracuję nad projektem autonomicznej kosiarki i mam kilka pytań do was :)
Najpierw opiszę mniej więcej projekt:
Jako podstawę projektu chcę wykorzystać zwykłą kosiarkę spalinową z napędem tylnych kół realizowaną przez zwykły pasek z silnika, napęd załączany jest linką.
Część logiczna: kontroler arduino z ESP wifi lub samo ESP-12. Sercem obliczeniowym będzie komputer PC w sieci lokalnej.
Do arduino będą podłączone następujące elementy:
- 9DoF IMU (układ 3 osiowy akcelerometr + 3 osiowy żydoskop + 3 osiowy magnetometr).
- 2 serwomechanizmy: pierwszy o mniejszym momencie sterujący napędem (poprzez pociąganie linki od napędu), drugi do sterowania kołem skrętnym z przodu (w celu ograniczenia komplikacji z przodu planuję tylko jedno koło na środku)
- czytnik RFID
- czujnik halla do pomiaru orientacyjnej przejechanej odległości, magnesy na kole napędowym.
- czujniki odległości/ wykrywania przeszkód.

Dane z czujników będą wysyłane via WiFi do serwera (komputer PC). Tutaj będą wykonywane wszystkie obliczenia.
Algorytmy sensor fuse np. zastosowanie filtru kalmana, madgwick, AHRS lub inne. Póki co dopiero raczkuję w tym temacie, są to dla mnie rzeczy zupełnie nowe chociaż mam doświadczenie w C++/Pythonie i Javascripcie, nie wiem jak za bardzo to ugryźć i od czego zacząć. Polecacie jakies książki na ten temat?
Po przetworzeniu danych komendy zostaja wysłane do kosiarki.
Dlaczego nie zastosuję np. raspbery pi? Nie ma sensu, po pierwsze pecet ma większą moc obliczeniową, mogę monitorować i dokonywać zmian na bieżąco, a opóźnienia w sieci wifi są pomijalne.

No dobrze, ale jak dokładnie wyobrażam sobie precyzyjną nawigację w terenie? Tutaj wchodzi do gry właśnie 9DoF IMU i tagi RFID umieszczone na trawniku. Każdy tag będzie miał inny numer identyfikacyjny.
Po rozmieszczeniu dużej ilości tagów sporządzę dokładną mapę terenu z naniesionymi tagami i przeszkodami, wyznaczę trasę przejazdu. Czyli będzie to typowa nawigacja względna inercyjna oparta na IMU. W celu redukcji dryftu żyroskopu, kosiarka po przejechaniu nad danym tagiem będzie wiedziała dokładnie w którym miejscu się znajduje i będzie mogła wprowadzić poprawki do systemu inercyjnego. I teraz moje pytania:

1. Jaki serwomechanizm (z jakim momentem) wykorzystać do sterowania kołem przednim? Kosiarka waży ok. 20kg, dodakowo trawnik nie jest idealnie równy. Zakres obrotu wystarczy 90 stopni, czyli dzięki przekładni 1:2 mogę uzyskać 2x większy moment.
2. Jaki moduł 9DoF IMU wybrać? Rozważałem Pololu AltIMU-10 v5 ("Przy pomocy tych sensorów można stworzyć kompletny system AHRS (attitude and heading reference system), czyli wyznaczyć położenie obiektu w przestrzeni trójwymiarowej.")
Nie robię drona, także wysokość można pominąć. Tagi RFID byłby rozmieszczone co 10-15m
3. Jak ugryźć te wszystkie algorytmy "sensor fuse"? Jakie książki, algorytmy, biblioteki byłyby tutaj najbardziej odpowiednie? Potrzebuję znać położenie względne i nawigować pomiędzy kolejnymi tagami RFID dosyć precyzyjnie.

Dzięki za odpowiedzi i wskazówki, jeżeli macie jakieś pomysły, inne spojrzenie na ten temat to piszcie :)
  • 34
@LM317T: jeszcze jedna kwestia: jeżeli dobrze rozumiem, to położenie robota (poza tagami, na których ma się "kalibrować") chcesz mierzyć czujnikiem inercyjnymi i tak, jak mówisz, będziesz miał kłopot z dryfem estymacji pozycji. Dużo dokładniejszą metodą (też obarczoną dryfem, choć zazwyczaj wyraźnie mniejszym) jest odometria. Montujesz na koła enkodery inkrementalne (i tak planowałeś czujniki Halla, więc to tylko krok dalej) i znając kinematykę swojej kosiarki możesz estymować jej położenie na podstawie odczytów
@Witty: właśnie tak planowałem, fuzja inercyjna + odometria. Ale to wyjdzie w praniu, trawnik nie jest idealnie równy, dodatkowo będę sprawdzał obroty kół napędowych i porównywał z obrotami kół przednich, w przypadku np. zawieszenia się kosiarki na nierówności będę od razu wiedział, że koła napędowe "buksują" w miejscu. Oczywiście można to też wyciągąć z IMU, ale ten sposób wydaje się prostszym rozwiązaniem.
To już sprawdzę w praktyce, czy odczyty z kół
@LM317T: Co do tych mocy obliczeniowych do triangulacji, to faktycznie byłyby wymagane spore, ale wiesz, jakiś mikrokomputerek z i3 albo celeronem by styknął na początek a ty i tak planujesz użyć PC do nawigacji.

Odnośnie zdalnego sterowania tym ustrojstwem przez wifi, to ja byłbym sceptyczny. Będziesz się męczył bo przy każdym "czknięciu" sieci będzie ci wywalało komunikację, a tu potrzebny jest stały strumień danych.
Jeszcze jeden sposób nawigacji: kabel zakopany pod ziemią wzdłuż trasy robota, a robot wyposażony w jakąś indukcyjną detekcję tego kabla jechałby po prostu wzdłuż niego elegancko kosząc trawnik i objeżdżając przeszkody. Problem tylko że jak postawisz krasnala ogrodowego to będziesz musiał ten kabel przesunąć bo ci kosiarka na krasnala wpadnie.
@UmCykCyk: kabel nie wchodzi w grę, za duża powierzchnia, trawnik już "dorosły", także szkoda kopać :)
A masz jakiś pomysł na komunikację? Tych danych będzie całkiem sporo szło, nie mam pojęcia ile kb/s
@LM317T filtr kalmana i wifi? Troche slabo moim zdaniem. Powinien on znajdowac sie w kosiarce. Zrywanie polaczenia zdecydowanie wplynie na stabilnosc takiego algorytmu. Poza tym jesli to bedzie obiekt maks drugiego rzędu to w prosty sposob wymnozysz sobie macierze i je rozpiszesz. Wartosci wzmocnien wyznaczysz raz offline i masz nieskomplikowany algorytm do zaimplementowania w kazdym mikrokontrolerze. Filtr kalmana startuje z jakis warunkow poczatkowych, wiec bedziesz musial uwzglednic, ze przez jakas chwile od
@LM317T: Wg mnie jednostka obliczeniowa musi być na kosiarce. A na pc to sobie monitorowanie urządzenia zrobić i jakieś ogólne sterowanie. Tylko nic stoi na przeszkodzie, żeby sobie na początek na drutach i wifi zrobić dowolną konfigurację i pisać wygodnie na pc, a później jak się okaże że jest źle to przeniesiesz to nakosiarkę. W sumie to wszystkim nam się tylko mniej lub bardziej wydaje, bo przecież nikt czegoś takiego nie