Skocz do zawartości

Robot latający typu quadrocopter


beargrylls

Pomocna odpowiedź

Witam, to mój pierwszy temat i zarazem post na tym forum. Jestem studentem 5 roku na kierunku automatyka i robotyka, tym nie mniej jednak jestem początkującym robotykiem biorąc pod uwagę moje doświadczenie.

Już od paru lat chodzi mi po głowie podobny projekt:

Zdaję sobie sprawę ze stopnia skomplikowania takiego projektu, dlatego podzieliłem go na wiele mniejszych etapów.

Pierwszym z nich było zbudowanie quadrocoptera służącego jako platforma do testów i dalszych modyfikacji:

mózgiem quadrocoptera jest kontroler lotu MultiWii w skład którego wchodzą:

Mikrokontroler Atmega328P

3-osiowy żyroskop: ITG3205

3-osiowy akcelerometr: BMA180

Barometr: BMP085

Magnetometr: HMC5883L

Na dzień dzisiejszy model jest sterowany zdalnie przez człowieka, sygnały z nadajnika odpowiadające kątom RPY i ciągowi silników wysyłane są do odbiornika RC na pokładzie, który przekształca je na sygnał PPM i wysyła do kontrolera, który natomiast na podstawie tych sygnałów, steruje silnikami.

Obecnie chciałbym rozwiązać następujące problemy:

1. Zapis parametrów lotu na karcie SD, które posłużą do identyfikacji modelu.

Tutaj mam kilka pomysłów. Po pierwsze można podpiąć czytnik karty SD w podobny sposób jak do arduino UNO, z tym że tam komunikacja szeregowa korzysta z pinów 11, 12 i 13, natomiast w kontrolerze który posiadam piny te są prawdopodobnie używane już do czego innego, więc nie wiem czy takie rozwiązanie jest możliwe. Następnie trzeba by zmodyfikować program kontrolera.

Inną możliwością jest podłączenie arduino do MultiWii, tak żeby dane z czujników były wysyłane do arduino, które zapisywałoby je na karcie. Jednak w tym przypadku nie wiem jakiej komunikacji użyć i w ogóle jak zrobić żeby dwa mikrokontrolery się ze sobą komunikowały.

Jeszcze inna możliwość, to umieszczenie w robocie arduino z oddzielnymi czujnikami. Dla mnie to rozwiązanie wydawało się najprostsze, jednak gdy próbowałem zapisać dane z czujnika MPU6050 (3 osiowy żyroskop + 3 osiowy akcelerometr) na karcie, to dane te nie były poprawne, np. w jednej kolumnie cały czas było 0, nie wiem czy to nie było spowodowane złą synchronizacją. Tzn. że dane z czujnika były odbierane z częstotliwością 50Hz, a zapis na kartę odbywał się co 200ms.

2. Zmiana algorytmu sterowania

Oryginalnie w MultiWii są oddzielne PIDy dla każdej osi + PID do utrzymywania stałej wysokości, co jest moim zdaniem niewystarczające w bardziej wymagających zastosowaniach ze względu na sprzężenia skrośne. Jeśli chodzi o regulator to jedynie do głowy przychodzi mi LQR, który zresztą był użyty w tym projekcie z filmiku. Inną opcją jest regulator rozmyty, ale nie do końca sobie wyobrażam jak miałby działać.

3. Autonomiczny start, zawis i lądowanie

Jeśli chodzi o autonomiczność, to moim pomysłem jest zastąpienie sygnałów z odbiornika RC, przez sygnały wysyłane z drugiego mikrokontrolera. Nie wiem na ile takie rozwiązanie jest dobre i czy nie lepiej jest zastosować jeden mocniejszy mikrokontroler, natomiast, jako że jestem w posiadaniu arduino, taki pomysł nasunął mi się niejako samoistnie. Tutaj dochodzi kwestia czujników, bowiem chciałbym, żeby drugi mikrokontroler mógł obliczać pozycję wykorzystując jednostkę inercyjną MultiWii lub oddzielną, oraz dokładną wysokość, wykorzystując czujniki ultradźwiękowe HC-SR04. W późniejszej fazie projektu chciałbym użyć takich czujników do wykrywania przeszkód i generowania prostej mapy otoczenia.

Link do komentarza
Share on other sites

2. Zmiana algorytmu sterowania

Oryginalnie w MultiWii są oddzielne PIDy dla każdej osi + PID do utrzymywania stałej wysokości, co jest moim zdaniem niewystarczające w bardziej wymagających zastosowaniach ze względu na sprzężenia skrośne. Jeśli chodzi o regulator to jedynie do głowy przychodzi mi LQR, który zresztą był użyty w tym projekcie z filmiku. Inną opcją jest regulator rozmyty, ale nie do końca sobie wyobrażam jak miałby działać.

Innym algorytmem moglby byc sterownik predykcyjny. Bardzo latwy do zamodelowania w matlabie (jest gotowy algorytm). Zbudowalem kiedys robota balansujacego (zasada ta sama, dwie osie zamiast trzech) opartego o ten sterownik, i dzialal dosc dobrze, jednak byly pewne problemy przy zmianie modelu (wiatr, zmiana srodka masy - przy zmianie baterii na inna, itd.). Przy LQR mialbys te same problemy.

Ogromna zaleta PID jest to, ze mozesz sterowac obiektem przy braku znajomosci modelu. No i oczywiscie jesli chcesz zeby quad byl autonomiczny musisz napisac dobry EKF (14+ stanowy), co pozera mase czasu procesora i nie zostawia go zbyt duzo na rownie skomplikowane algorytmy sterowania. Co sprawia, ze wszyscy korzystaja z PID ze wzgledu na prostote, oraz - przy dobrych nastawach - porownywalne rezultaty.

czujniki ultradźwiękowe HC-SR04

Same ultradzwieki nie wystarcza (dzialaja dokladnie przy niskich odleglosciach od ziemi), potrzebujesz czegos dokladniejszego (sprzezenie gps, barometru i ultradzwiekow daje swietne wyniki).

Link do komentarza
Share on other sites

Dzięki za odpowiedź. Muszę poczytać koniecznie o algorytmie predykcyjnym. Rzeczywiście na początek rozsądniej będzie zostać przy PIDach. Zresztą można by je też później zmodyfikować. Z doborem parametrów PIDa też muszę jeszcze popracować. Zastanawiam się nad metodą ich doboru. Jeśli zrobię model matematyczny to powinno być prościej. Model i tak zamierzam zrobić.

Czujniki zamierzam wykorzystać na razie tylko do startu i lądowania, żeby dokładnie określać wysokość, bo sam barometr jest za mało dokładny. Wiem że mają one zasięg do kilku metrów, ale w pomieszczeniu to powinno wystarczyć, a na zewnątrz tak jak piszesz, będę korzystał dodatkowo z GPSa.

UPDATE

1. Problem zapisywania parametrów lotu mam zamiar rozwiązać wykorzystując ten projekt:

https://github.com/renes/multiwiiDataLogger

Podpinam TX multiwii do RX arduino i RX multiwii do TX arduino, podłączam czytnik kart do arduino, wgrywam program do arduino i powinno zapisywać dane z IMU i wartości sterowań na karcie.

2. Zastanawiam się, czy to arduino. które służyłoby do zapisu danych na karcie, nie mogłoby wykorzystywać tych danych, oraz czujników ultradźwiękowych, do obliczania sterowań dla Multiwii. Możnaby też zaimplementować w nim EKFa, tylko nie wiem czy procesor by wystarczył, czy nie lepiej użyć do tego arduino MEGA lub DUE?

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.