Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Patriota - robot "follow the line"

Pele44 03 Gru 2008 11:41 13228 17
  • Patriota - robot "follow the line"

    Witam!
    Chciałem przedstawić moją pierwszą konstrukcję na tym forum, no i chyba pierwszą zrobioną z taką dbałością przeze mnie. Tak jak w temacie jest to robot wyspecjalizowany do tego, aby jeździć po linii. Jest już po swoich pierwszych zawodach na bionikaliach 2008, gdzie zajął 5 miejsce.


    Nazwa Patriota wynika z tego że jego główna część podwozia (tzw. „żelazko” ;) ) powstało 11 listopada, był to też pierwszy element tego robota. Jest to już mój drugi robot zbudowany na FTL, jednak pierwszy nigdy nie startował w zawodach, w rezultacie posłużył jako prototyp, źródło wielu doświadczeń i okazji do nauczenia się kilku nowych rzeczy (szczególnie jeśli chodzi o budowę mechaniczną).

    Patriota - robot "follow the line"

    Jak widać na zdjęciach podwozie robota jest bardzo proste i raczej mało oryginalne koncepcyjnie, jednak moim zdaniem jest to najlepsza forma jeśli chodzi o roboty FTL, ponieważ zapewnia dużą zwrotność i umiarkowaną wagę. Główna płyta podwozia została wykonana z poliwęglanu, są do niej zamocowane dwie mniejsze, zagięte płytki, na których umocowane są silniki (HL149 z przekładnią 10, na 6V). Wszystko jest łączone przy pomocy śrubek i nakrętek, Niektóre otwory są gwintowane: np. te na śruby utrzymujące płytkę z czujnikami. Koła są wykonane z tekstolitu (przez mojego wujka – tokarza) i mają „opony” zrobione z dwóch oringów 5mm. Muszę przyznać że zapewnia to całkiem dobrą przyczepność. Biorąc pod uwagę uzyskanie jak najmniejszego momentu bezwładności, najcięższe elementy są umiejscowione na osi kół (baterie).

    Patriota - robot "follow the line"

    Jeśli chodzi o część elektroniczną to schematy są zamieszczone w załączniku. Mózgiem robota jest ATmega88, chodzi ona na 3,3V. Napięcie takie wybrałem z dwóch powodów: moduł radiowy który używam jest do niego przystosowany (na 5V były spore problemy), oraz mniejsze zużycie prądu. Wybór takiego „niestandardowego” napięcia wymusił zastosowanie innego sterownika silników (H-bridge), dlatego został nim MPC17531A – ponieważ był pierwszym jakim mi Google wypluło, oraz freescale nie szczędzi z wysyłaniem jego darmowych sampli. Poza tym ma lepsze parametry niż stary, wysłużony ld293. Niestety ten mostek nie posiada oddzielnych wejść enable dla każdego kanału dlatego żeby to obejść zastosowałem bramki NAND.
    Jak już wcześniej wspomniałem na płytce znajduje się gniazdo do modułu komunikacji bezprzewodowej. Jest to RFM12b – jest całkiem tani i prosty w obsłudze, może prędkość transmisji nie powala, ale do tych zastosowań jest w zupełności wystarczająca. Używam go do monitorowania parametrów z robota (na razie zaimplementowana jest tylko komunikacja jednokierunkowa). Specjalnie do tego napisałem w C++ Builderze program ułatwiający interpretację danych.

    Patriota - robot "follow the line"

    Część logiczna i czujniki są zasilane ze stabilizatora liniowego, który dostałem kiedyś jako sample. Zasilanie silników może pochodzić z dwóch źródeł (wybierane za pomocą zworki), albo bezpośrednio z baterii lub ze stabilizatora impulsowego MAX5035D (znów próbki :D ). Jest on regulowany, na płytce został umieszczony potencjometr precyzyjny, dzięki któremu można regulować napięcie w zakresie około 5-7V. Czemu stabilizator impulsowy? – bo ma wysoka sprawność i wystarczającą stabilność napięcia dla silników. Do reszty jest zwykły regulator Liniowy, bo tutaj zależało mi na stabilności napięcia (testy z stabilizatorem impulsowym dawały np. duże wahania na odczytach z czujników)

    Patriota - robot "follow the line"

    Kolejnym elementem jest płytka z czujnikami, tutaj są stare, poczciwe TCRT1000. Na schemacie widać że są łączone po dwa. Miało to na celu zmniejszenie zużycia prądu (te czujniki są strasznie prądożerne). Dzięki takiemu rozwiązaniu mniej energii jest tracona na opornikach. Możliwa też jest regulacja mocy świecenia diod, co dodatkowo może pozwolić zaoszczędzić trochę energii i dopasować czujniki lepiej do danych warunków.

    Patriota - robot "follow the line"

    Ostatnią rzeczą jest oprogramowanie. Od razu mówię że go nie udostępniam, głównie dlatego że jest ono niedopracowane (szczególnie jeśli chodzi o algorytm regulacji jazdy). Powiem jednak w skrócie że są zaimplementowane algorytmy kalibracji czujników, dane potem są przechowywane w eepromie. Dzięki temu np. nie musze pisać oddzielnego algorytmu do linii białej lub czarnej, oraz ustawiać jakiś stałych dla danego podłoża itp. Samo sterowanie to algorytm filtracji odczytu z czujników, wyostrzenia ich, m.in. przy pomocy stałego śledzenia linii, dalej jest liczony uchyb i przepuszczane jest to wszystko przez regulator PD (był PID, ale działał gorzej). I tutaj była największa słabość mojego robota, nie udało mi się znaleźć optymalnych nastaw ze względu na brak czasu.

    Patriota - robot "follow the line"

    Koszty wbrew pozorom nie były takie duże. Kilka kluczowych elementów jak już wcześniej wspomniałem pochodziły z darmowych próbek. Jeśli chodzi o elementy elektroniczne to znaczącą cenę miały jedynie rfm12b – 16zł oraz atmega88 ~ 4zł i TCRT1000 (7 x 3zł), niemniej jednak reszta (oporniki, rezystory itd.) kosztowały łącznie około 10zł. Całkiem sporo pieniędzy poszło na śrubki i inne „wykończeniowe” duperele. Łącznie myślę, że zamknąłem się w kwocie około 50-70zł. Resztę rzeczy miałem wcześniej m.in. poliwęglan (góra skrawków kupiona za 5zł w firmie produkującej reklamy), silniki dostałem od kumpla za darmo (pochodzą z demontażu urządzeń).

    Mam nadzieję że projekt się podoba, niemniej jednak proszę o wszelkie konstruktywne uwagi.


    Obiecany filmik, z pierwszego przejazdu na bionikaliach - przejazd nie zaliczony bo jak widać na skrzyżowaniu robot źle pojechał, co było spowodowane wielką muldą w tamtym miejscu, za drugim i trzecim razem po wygładzeniu przejazd był już poprawny, niestety nie mam filmiku z pozostałych przejazdów.
    http://pl.youtube.com/watch?v=93CSpYHfWVw

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    Pele44
    Poziom 12  
    Offline 
    Pele44 napisał 48 postów o ocenie 174, pomógł 1 razy. Mieszka w mieście Warszawa. Jest z nami od 2007 roku.
  • #2
    kasaidolar
    Poziom 19  
    Zaciekawila mnie bardzo ta aplikacja na pc - czy mozesz napisac cos wiecej na ten temat - Chodzi mi o cala komunikacje robota z kompem. Swego czasu pisalem taki maly programik ktory wysylal spora ilosc danych z pamieci do pc przez uc. Mialem z tym niezle problemy - a Ty jeszcze po radiu to wysylasz :)
    Prosze napisz co i jak - co jaki czas wysylasz co wysylasz ile wysylasz itd :)

    Dodano po 51 [sekundy]:

    Jakie masz CRC?
  • #3
    tokrzych
    Poziom 15  
    Projekt wykonany dość starannie ale na przyszłość po pocynowaniu płytki użyj plecionki i lutownicy by ładnie " zlizać " nadmiar cyny ze ścieżek, inaczej płytka z elementami nie prezentuje się najpiekniej.
  • #4
    Rolnik95
    Poziom 18  
    Witam. Konstrukcja bardzo przemyślana i fajnie zrobiona. Gratulacje. Mam jeszcze pytanie. Dużo ludzi dostaje sample. Jak zrobić aby dostać takie sample i u kogo. Czy to jest bezpłatne?
  • #5
    kleikvcx
    Poziom 11  
    Witam. Może kolega wstawi jakiś filmik z jazdy tego cudeńka.
  • #6
    Pele44
    Poziom 12  
    kasaidolar napisał:
    Zaciekawila mnie bardzo ta aplikacja na pc - czy mozesz napisac cos wiecej na ten temat - Chodzi mi o cala komunikacje robota z kompem. Swego czasu pisalem taki maly programik ktory wysylal spora ilosc danych z pamieci do pc przez uc. Mialem z tym niezle problemy - a Ty jeszcze po radiu to wysylasz :)
    Prosze napisz co i jak - co jaki czas wysylasz co wysylasz ile wysylasz itd :)
    Jakie masz CRC?

    Pośrednikiem między komputerem a robotem jest płytka również zrobiona przeze mnie, ma oczywiście identyczny moduł radiowy na pokładzie i łącze rs232 do komputera. Z robota przesyłam ramki danych, można powiedzieć że są o stałym rozmiarze, które są podpisywane CRC8 (korzystam z funkcji liczenia crc dla 1 wire). Każda ramka ma minimum 20bajtów. Gdy mój pośrednik odbierze dane, sprawdza poprawność i w bardzo podobnym formacie przesyła dane do komputera przez rs232, opakowując to, tak żeby program był w stanie wykryć gdzie jest początek i koniec ramki.
    Jeśli chodzi o sam program to oprócz standardowych komponentów, do obsługi portu com użyłem CPortLib. Ma on bardzo fajne funkcje pozwalające np automatycznie wykryć odebranie pojedynczej ramki i wygenerowane wtedy ustalonego zdarzenia.
    tokrzych napisał:
    Projekt wykonany dość starannie ale na przyszłość po pocynowaniu płytki użyj plecionki i lutownicy by ładnie " zlizać " nadmiar cyny ze ścieżek, inaczej płytka z elementami nie prezentuje się najpiekniej.

    Wiem ze mi płytka nie wyszła za bardzo, ale miałem parę przygód np. musiałem wyciąć jedną atmegę i wstawić inną bo programator stracił zasilanie podczas ustawiania fuse bitów...
    btw. co rozumiesz przez plecionkę?
    Rolnik95 napisał:
    Witam. Konstrukcja bardzo przemyślana i fajnie zrobiona. Gratulacje. Mam jeszcze pytanie. Dużo ludzi dostaje sample. Jak zrobić aby dostać takie sample i u kogo. Czy to jest bezpłatne?

    Po prostu musisz się zarejestrować na stronie jednego z producentów układów elektronicznych i sprawdzić czy oferują pożądany przez Ciebie element w samplach. Taki sklep internetowy ale nie wszystko dostępne, w ograniczonych ilościach i za darmo. Najchętniej z mojego doświadczenia próbki przesyłają: maxim, st, freescale.
  • #7
    Szacho
    Poziom 14  
    Chyba niegługo zmienię swoje hobby :), tak z ciekawości w algorytmie PID zastosowałeś różniczkowanie z inercją czy idealne ??
  • #8
    Pele44
    Poziom 12  
    Szacho napisał:
    Chyba niegługo zmienię swoje hobby :), tak z ciekawości w algorytmie PID zastosowałeś różniczkowanie z inercją czy idealne ??


    Nie wiem czy dobrze rozumiem, bo jeśli chodzi o automatykę to jestem kompletnym amatorem, miałem wprawdzie przedmiot w tej tematyce, ale jakiś czas temu. Do obliczania wartości sterowania używam wzoru wprost, a nie przyrostowego, więc jak liczę różniczkę to od starej wartości uchybu odejmuje aktualną, dzielę to przez dt i mnożę przez współczynnik.
    Muszę przyznać że sam się mocno zastanawiam czy PID w tym miejscu się nadaje.
  • #9
    Szacho
    Poziom 14  
    W algorytmie PID najprościej zrobić P oraz I, a różniczkowanie przeważnie jest źle zrobione dlatego też nie działa tak jak trzeba. PD w teorii działa szybko ale zawsze pozostawia odchyłke regulacji (uchyb). PID zawsze zlikwiduje odchyłke do zera. Sprawdź odpowiedź swojego regulatora na wymuszenie skokowe, jeżeli uzyskasz coś podobnego do niebieskiej linii to coś żle zrobiłeś. Prawiłowa odpowiedź rzeczywistego PID powinna mieć kształt czerwonej linii.

    Odnośnie nastaw to raczej powinieneś dążyć do przebiegu aperiodycznego (bez przeregulowań).
  • #10
    kurc1111
    Poziom 12  
    Ile zajęło ci skonstruowanie tego robota??
  • #11
    Mat_91
    Poziom 25  
    RFM12b obsługujesz przez SPI programowe czy sprzętowe? Mógłbyś pokazać część kodu odpowiedzialna za obsługe tego nadajnika?

    Plecionka to taka jak by "taśma", "linka" spleciona z bardzo cienkich miedzianych drucików;] Świetnie zbiera nadmiar cyny.
  • #12
    brynix
    Poziom 10  
    No robocik pierwsza klasa muszę przyznać. Z niecierpliwością czekam na jakiś filmik. Jak w części różniczkującej obliczasz dt ? Timerem? ale w jakim trybie?
  • #13
    mskojon
    Poziom 31  
    Robocik był szybki, ja zająłem 7 miejsce, może zamieszczę mojego robota na forum :)
    Skąd dorwałeś silniki?
  • #14
    Ikar_91
    Poziom 13  
    Jak wyciąłeś poliwęglan?
    pozdrawiam
  • #15
    Pele44
    Poziom 12  
    Mat_91 napisał:
    RFM12b obsługujesz przez SPI programowe czy sprzętowe? Mógłbyś pokazać część kodu odpowiedzialna za obsługe tego nadajnika?

    Używam sprzętowego modułu w mikrokontrolerze, chyba nawet pracującego z częstotliwością 3MHz, chodź używam też końcówki nINT z RFM12b. Odezwij się na priva to mogę Ci przesłać bibliotekę do obsługi, chodź ma ona bardzo umiarkowaną funkcjonalność.
    brynix napisał:
    Jak w części różniczkującej obliczasz dt ? Timerem? ale w jakim trybie?

    Po prostu dane są zbierane i przetwarzane zawsze w stałych odstępach czasu. Osiągnąłem to przez użycie licznika w trybie CTC, który generuje przerwanie na compare. Znając wartość maksymalna licznika i częstotliwość jego zegara łatwo jest obliczyć czas dt. Zaraz po zakończeniu przetwarzania, procek jest usypiany i znów budzony gdy przyjdzie przerwanie od timera - pozwala zaoszczędzić trochę prądu. U mnie chyba timer przerywa z częstotliwością ok 200Hz.
    Ikar_91 napisał:
    Jak wyciąłeś poliwęglan?

    bardzo prosto - z grubsza brzeszczotem, a wykańczałem końcówką do wiertarki z obracającym się papierem ściernym - coś w stylu frezu.

    Do kurc1111 i mskojon:
    odpowiedzi na wasze pytania są w pierwszym poście

    A co do filmiku, to jak tylko znajdę troche czasu postaram się coś skombinować.
  • #16
    tokrzych
    Poziom 15  
    Plecionka wygląda jak zdjęty ekran z kabla antenowego tylko o drobnieszym przekroju miedzianych linek. Na taką płytkę jak wykonałeś zużyjesz jej ze 2 cm.
    Plecionki są różnej szerokości, np. ja mam 2,5 mm (jest płaska) a na szpulce jest 1,3 m , cena to coś około 4 zł. Na pocynowaną płytkę przykładasz koniec plecionki, przyciskasz ją lutownicą i powoli przeciągasz wzdłuż płytki . Płytka wygląda jak pocynowana w zakładzie produkcyjnym..Bardzo dobrze się też sprawdza by usunąć zwarcie jakie może się pojawić przy lutowaniu np. Atmegi , jedno dotknięcie i scalaczek czysty.
    Pozdrawiam.
  • #17
    marek_Łódź
    Poziom 36  
    Super robocik. Na podstawie danych z radia można by wyrysować (z grubsza) mapę pokonanej trasy (nie widzę takiej opcji). Czy faktycznie jest tak dużo błędnych ramek jak na tym zrzucie ekranu?
  • #18
    Pele44
    Poziom 12  
    marek_Łódź napisał:
    Super robocik. Na podstawie danych z radia można by wyrysować (z grubsza) mapę pokonanej trasy (nie widzę takiej opcji). Czy faktycznie jest tak dużo błędnych ramek jak na tym zrzucie ekranu?


    Bardzo ciekawy pomysł z tym rysowaniem toru, może kiedyś dopisze taką funkcję, chodź zrobienie tego dobrze do łatwych rzeczy nie należy. Logi z konkursu mam :)

    A co do błędów to jest to skutek zbyt częstego przesyłania próbek (nie zbyt szybkiego). Po prostu płytka przekaźnikowa nie nadąża, jest to kwestia dopracowania kodu, jego optymalizacji. Z drugiej strony przy tej ilości próbek na sekundę, nawet jeśli połowa odebranych ramek jest błędna to nie robi to wielkiej różnicy.

    Ogólnie rzecz ujmując to piętą achillesową tego robota jest właśnie oprogramowanie, miałem bardzo mało czasu na jego dopracowanie, sam algorytm regulacji jazdy powstał w tylko jeden dzień, a to za mało żeby wszystko chodziło jak trzeba.