Raport z budowy robota mobilnego klasy minisumo John Cena Jędrzej Boczar Jan Bednarski Dominik Świerzko Koło Naukowe Robotyków KoNaR www.konar.pwr.edu.pl 6 stycznia 2016
SPIS TREŚCI SPIS TREŚCI Spis treści 1 Wstęp 2 2 Budowa robota 2 2.1 Mechanika............................. 2 2.1.1 Podsumowanie...................... 2 2.2 Elektronika............................ 4 2.2.1 Zasilanie.......................... 5 2.2.2 Mikrokontroler...................... 5 2.2.3 Czujniki.......................... 6 2.2.4 Sterowanie silnikami................... 6 2.2.5 Interfejs komunikacyjny................. 6 2.3 Program.............................. 10 2.3.1 Konfiguracja peryferii................... 10 2.3.2 Algorytm sterowania................... 10 3 Podsumowanie 11 4 Materiały źródłowe 12 1
2 BUDOWA ROBOTA 1 Wstęp Jest to raport z budowy robota typu Minisumo w ramach rekrutacji do KNR KoNaR. Opiekunem grupy był Michał Burdka. Opisany robot wciąż jest w fazie ulepszeń, ponieważ wiele rzeczy można jeszcze poprawić. Mimo tego, w obecnej formie, jest już poprawnie działającą konstrukcją i można przedstawić raport z budowy. W dokumencie został opisany przebieg prac nad robotem, zastosowane rozwiązania, jak i napotkane problemy, na końcu zaś opisane zostały doświadczenia i plany konstruktorów robota. 2 Budowa robota 2.1 Mechanika Mechanika nie była projektowana żadnym programie, co okazało się błędem i spowodowało sporo problemów, mimo to ostatecznie udało się wszystko poskładać. Robot waży w obecnym stanie 430 gramów (320 bez dodatkowego obciążenia) i mieści się w ustalonych granicach 10x10cm. Mechaniczna część robota przedstawiona została na zdjęciach 1. Jako podwozie dla robota został wykorzystany kawałek plexi, na nim zamontowana jest reszta elementów, w tym PCB. Wykorzystane silniki to mikrosilniki Pololu HP z przekładnią 30:1, a koła to Solarbotics RW2. Opony nie były modyfikowane i ich przyczepność pozostawiała wiele do rzeczenia, dlatego wymagały dodatkowego obciążenia. Do obciążenia kół wykorzystany został kawałek stali (zdjęcie 1b) ważący ok. 110 gramów. Pług (zdjęcie 1c) zrobiony jest ze zwykłej jakości stali i składa się z dwóch części - jednej zamontowanej nisko przy ziemi, aby uniemożliwić podniesienie robota i jednej chroniącej przed uderzeniem, ustawionej pod kątem ok. 60 stopni, w której to znajdują się otwory dla czujników odległości. 2.1.1 Podsumowanie Brak wczesnego projektu okazał się dużym problemem. Nie łatwo było spasować ze sobą wszystkie elementy. Mimo tego całość działa całkiem sprawnie, choć nie ma na razie doświadczeń z walk z innymi robotami. W niedalekiej przyszłości zostanie dołączona obudowa, najpewniej z wygiętej aluminiowej blachy, ponieważ w obecnym stanie elektronika jest zbyt odsłonięta i w razie przerzucenia przeciwnika może zostać zniszczona. Przy- 2
2.1 Mechanika 2 BUDOWA ROBOTA (a) Całość (b) Obciążenie (c) Pług (d) Podwozie Rysunek 1: Mechanika robota 3
2.2 Elektronika 2 BUDOWA ROBOTA Rysunek 2: PCB gotowane jest też już ostrze do przyłączenia pod pługiem, jednak na razie powodowałoby prawdopodobnie wiele problemów z nierównościami terenu. 2.2 Elektronika Cała elektronika projektowana była w KiCadzie. Wszystkie elementy poza goldpinami mocowane są SMD. Początkowo płytka miała być jednostronna, lecz nie udało się w ten sposób zmieścić wszystkich ścieżek i ostatecznie wykorzystano obie strony. Wszystko wykonano w taki sposób, aby możliwie dużo elementów można było łatwo wymienić w razie potrzeby. Wszystkie czujniki podłączone są poprzez goldpiny. Wykorzystano sterowniki silników w osobnych modułach dołączanych do płytki, co okazało się być dobrym rozwiązaniem, bo potrzebna była wymiana jednego i odbyło się to bez większych problemów. Podobne rozwiąznie zastosowano przy czujnikach linii. PCB zrobiono metodą fototransferu. Kliszę wykonano w naświetlarni, a płytka naświetlana była w domu przy pomocy lampy kwarcowej. Pierwsze podejście okazało się nieudane. Za drugim, mając do dyspozycji więcej czasu, przy pomocy laminarki zrobiono też maskę lutowniczą dla wygodniejszego lutowania. Na zdjęciu 2 widać jak ostatecznie prezentuje się płytka. 4
2.2 Elektronika 2 BUDOWA ROBOTA Rysunek 3: Schemat: zasilanie 2.2.1 Zasilanie Robot zasilany jest z akmulatora Li-Pol 7,4V. Jak widać na schemacie 3 wykorzystane zostały dwa stabilizatory napięcia - na 5V i 3,3V. Robot posiada włącznik oraz diodę sygnalizującą podłączenie zasilania. Przed odwrotną polaryzacją chroni jednostronna wtyczka. Pod 7,4V podłączone są silniki poprzez mostki H, jest też ono podawane przez ponad trzykrotny dzielnik napięcia do mikrokontrolera w celu monitorowania, czy bateria nie rozładowuje się. Napięcie 5V wykorzystane zostało do zasilania czujników odległości, jak i części logicznej sterowników silników. Odbiciowe czujniki linii oraz moduł startowy podłączone są do 3,3V, aby nie uszkodzić mikrokontrolera, ponieważ łączą się z wejściami nietolerującymi 5V. Napięciem 3,3V zasilany jest też mikrokontroler. 2.2.2 Mikrokontroler Wykorzystany mikrokontroler to STM32F103C8T6 w obudowie LQFP48. Specyfikacja: Maksymalne taktowanie procesora: 72 MHz Średni pobór prądu przy maksymalnym taktowaniu: 29-50 ma, zależnie od włączonych urządzeń peryferyjnych Pamięci: 64 kb Flash, 20 kb RAM 5
2.2 Elektronika 2 BUDOWA ROBOTA Cztery 16-bitowe timery Dwa 12-bitowe przetworniki analogowo-cyfrowe STM wybrany został przez nas przede wszystkim ze względu na wsparcie w postaci bibliotek i darmowych programów, jak i ze względu na możliwość prostego debugowania przez SWD. Na schamacie 4 został przedstawiony sposób podłączenia mikrokontrolera. 2.2.3 Czujniki W robocie wykorzystane zostały dwa rodzaje czujników (schemat 5). Do sprawdzania obecności linii wykorzystane zostały transoptory odbiciowe KTIR0711S. Są one obsługiwane jako wejścia analogowe, aby móc dostosowywać próg wykrywania. Czujniki odległości SHARP GP2Y0A21YKOF służą do odnajdywania pozycji przeciwnika. Posiadają one wyjście analogowe oraz zasięg 10-80 cm. Nie są one jednak wykorzystywane do określania odległości od celu, lecz jedynie sprawdzania jego obecności, dzięki czemu możliwe jest stosowanie ich nawet na bardzo małych odległościach, a wyjście analogowe pozwala na dokładną ich kalibrację. 2.2.4 Sterowanie silnikami Użyte sterowniki silników to TB6612FNG zasilane 7,4V i 5V (logika). W każdym sterowniku połączone zostały kanały wyjściowe (patrz schemat 6), dzięki czemu możliwy prąd wyjściowy na każdy silnik to 2,4A. 2.2.5 Interfejs komunikacyjny Interfejs komunikacyjny przedstawiony został na schemacie 7. Robota programować można przez SWD, do debugowania wykorzystywany był programator wbudowany w płytkę STM32Discovery. Komunikacja z robotem odbywa się przy pomocy przycisków i diod. Zastosowane przyciski służą do resetowania oraz startowania programu. Użyte diody sygnalizują: podłączenie zasilania poprawne wgranie programu stan aktywności (aktywny/nieaktywny/odliczanie startowe) wykrycie obiektu przez czujniki odległości (każdy osobno) najechanie na linię 6
2.2 Elektronika 2 BUDOWA ROBOTA Rysunek 4: Schemat: mikrokontroler 7
2.2 Elektronika 2 BUDOWA ROBOTA Rysunek 5: Schemat: czujniki Rysunek 6: Schemat: sterowniki silników 8
2.2 Elektronika 2 BUDOWA ROBOTA Rysunek 7: Schemat: Interfejs komunikcyjny 9
2.3 Program 2 BUDOWA ROBOTA 2.3 Program Program napisany został w języku C z wykorzystaniem bibliotek HAL. Korzystano z dedykowanego środowiska programistycznego System Workbench for STM32 oraz narzędzia STM32CubeMX, obydwa programy są dostępne za darmo. 2.3.1 Konfiguracja peryferii Wszystkie wykorzystane timery taktowane są z częstotliwością 64 MHz. Do generowania sygnału PWM wykorzystywane są dwa timery, ponieważ takie podłączenie do mikrokontrolera było najwygodniejsze, choć zapewne nie jest to najbardziej wydajne rozwiązanie. Częstotliwość sygnału PWM wynosi 10 khz (ustawione: prescaler - 63, okres - 99). Nie zostało w tym przypadku wykorzystane DMA. Do odczytywania sygnałów z czujników oraz wartości napięcia zasilania wykorzystywany jest jeden ADC. Odczyty zapisywane są w trybie ciągłym w tablicy przy pomocy DMA. Monitorowanie poziomu napięcia zasilania dokonywane jest przez WatchDoga i w razie zbyt niskiej wartości robot sygnalizuje to i przestaje działać. 2.3.2 Algorytm sterowania Na początku wykonywana jest inicjalizacja odpowiednich peryferiów, po czym program oczekuje na sygnał startu z przycisku lub modułu startowego. Po otrzymaniu sygnału z przycisku następuje odliczanie początkowe. Sygnał z modułu startowego nie włącza odliczania. Główna pętla programu składa się z dwóch części: poszukiwania przeciwnika i poszukiwania linii. Poszukiwanie przeciwnika polega na sprawdzeniu stanu czujników odległości i, zależnie od wyniku, ustalenie sposobu poruszania. Sygnał z obu czujników powoduje jazdę prosto, a z pojedynczego - nieznaczny skręt w odpowiednim kierunku. Gdy robot nie widzi przeciwnika, obraca się w kierunku z którego ostatnio coś zauważył. Jeżeli nie widział ostatnio celu to obroty są szybsze, niż gdy cel był dopiero co widoczny. Poszukiwanie linii odbywa się w kolejnej pętli. Pętla trwa dopóty, dopóki odczyty z czujników odległości się nie zmienią. Dzięki temu konfiguracja sygnałów na sterowniki silników odbywa się tylko wtedy kiedy jest potrzebna. W tej właśnie pętli cały czas sprawdzane jest czy nie najechano na linię. Jeżeli tak się stanie, robot hamuje, a potem wykonywany jest odjazd od linii i pętla trwa nadal. Ucieczka przed linią realizowana jest obecnie w wersji: odjazd w tył dopóki linia jest widoczna, a potem na bok przez krótki czas, 10
3 PODSUMOWANIE w stronę zależną od ostatniego odczytu. Jednak brak warunków nie pozwolił na dobre testy tej części algorytmu. Parametry pracy robota (takie jak moc silników przy różnych typach ruchu, promienie skrętu oraz progi zauważania czujników) zdefiniowane na początku program, a więc łatwo można je modyfikować. Odpowiednie stałe pozwalają też na ustalenie w jaki sposób robot reaguje na wykrycie linii. Możliwe jest wyłączenie tej opcji, jak też ustawienie ignorowania linii w razie widocznego celu (opcje: ignoruj gdy cel widoczny przynajmniej jednym czujnikiem lub ignoruj tylko, gdy widoczny obydwoma). 3 Podsumowanie W raporcie opisany został robot minisumo nazwany John Cena i tak też wpisany na zawody. Praca ta była naszą pierwszą stycznością z konstruowaniem elektroniki, tak więc robot nie może się mierzyć z dobrymi konstrukcjami tego typu. Brakowało nam doświadczenia jak coś takiego będzie wyglądać i przy których sprawach mogą pojawić się problemy. Większość błędów popełniliśmy w fazie projektowej (przede wszystkim brak projektu mechaniki w Autodesk Inventorze) i wiele pracy musieliśmy poświęcić, aby te błędy naprawić, a niektórych problemów nie da się niestety pozbyć bez rozpoczęcia wszystkiego od samego początku. Mimo nie dość konkurencyjnych efektów naszej pracy, było to ciekawe doświadczenie, a że najlepiej uczy się na błędach - naprawdę dużo się nauczyliśmy, właściwie wszystkiego tego co w końcu zrobiliśmy. Następna konstrukcja (mamy nadzieję, że w niedalekiej przyszłości taka powstanie) z pewnością pójdzie nam o wiele sprawniej. Według początkowego planu robot miał być gotowy na zawody Robotic Arena 2015, niestety nie udało się zbudować go na czas. Dziś robot jest już praktycznie gotowy, co nie znaczy, że dokładnie dopracowany. W najbliższym czasie zamierzamy dodać obudowę osłaniającą górę robota. W planach jest też rozbudowa algorytmu o płynne zwiększanie prędkości oraz dopracowanie sposobu reakcji na linię. Poza tym zamierzamy spróbować wykorzystać czujniki odległości każdy z innym progiem dostrzegania lub lepiej z dokładną interpretacją odległości od celu, aby na tej podstawie reagować lepiej na sytuację. Pomysłów jest wiele, jednak wszystkie wymagają wiele czasu i testów, dlatego jeszcze długi czas będziemy poprawiać naszego robota. Mimo to, jak widać, jest on już działającą konstrukcją i dowodem naszej pracy, i mamy nadzieję, że na następnych zawodach uda się nam pokazać z najlepszej strony. 11
4 MATERIAŁY ŹRÓDŁOWE Rysunek 8: W pełnej krasie 4 Materiały źródłowe Zdecydowaną większość wiedzy zdobyliśmy w ramach warsztatów - na samych warsztatach jak i potem w domu. Wiele pomógł nam też nasz opiekun Michał Burdka, szczególnie w sprawie schematu elektrycznego. Poza tym mnóstwo informacji znaleźliśmy w internecie, na stronach, których nazwy zdążyliśmy zapomnieć. Jedna strona była jednak najbardziej pomocna, a mianowicie www.forbot.pl, znajduje się tam mnóstwo materiałów na ten temat, a z wielu w choć niewielkiej części korzystaliśmy. Wśród materiałów należy także wymienić dwie książki wydawnictwa BTC traktujące o STMach. Są to Mikrokontrolery STM32 w praktyce Krzysztofa Paprockiego i STM32 Aplikacje i ćwiczenia w języku C Marka Galewskiego. 12