Robot szuracz – najprostszy robot chodzący

Robot szuracz to najprostsza możliwa konstrukcja robota chodzącego – ma tylko jeden silnik więc nie oczekuj po nim startów w wyścigach ale pryz jego okazji zastanowimy się nad prostym modelem ruchu.

Wprowadzenie

Robot Szuracz to bardzo prosta, a wręcz prymitywna konstrukcja robota chodzącego. Cały ruch oparty jest tylko na jednym silniku serwo, dlatego nie ma możliwości, aby był on specjalnie efektywny – wyobraź sobie, jak poruszałoby się Twoje ciało gdyby miało tylko jeden mięsień (nie ważne jak silny).

Sprawdź te dwie rzeczy w internecie:
1. Wpisz w wyszukiwarce ROBOT KROCZĄCY i w trybie wyszukiwania grafiki przyjrzyj się różnym konstrukcjom robotów – znajdziesz różne przykłady robotów humanoidalnych lub tzw. hexapodów, przypominających pająki, spróbuj przeanalizować, ile niektóre z nich posiadają silników?
2. Poszukaj: ILE MIĘŚNI MA LUDZKIE CIAŁO?, albo ILE MIĘŚNI MA LUDZKA TWARZ? – całkiem sporo, prawda? Pewnie dlatego tak trudno skonstruować robota, który przypominałby człowieka.

W praktyce konstrukcje robotów kroczących są dość skomplikowane zarówno ze względu na mechanikę (jednoczesna praca wielu silników), jak i oprogramowanie wymagające czasami bardzo skomplikowanych modeli kinematycznych.

Gdzie w tym wszystkim nasz Szuracz?

Na tle poważnej konkurencji nasz robot Szuracz wygląda bardzo mizernie, ale to nie startowanie w zawodach jest jego powołaniem. Potraktujmy go jako eksperyment: jak skonstruować możliwie jak najprostszego robota kroczącego i jak zaprogramować najprostszy model ruchu.

Dodatkowo nasz robot podłączony jest do komputera kablem, dlatego może i lepiej żeby nie uciekał nam zbyt szybko 😉

Programowanie

1. Podłącz sterownik do komputera i wtyczki LOFI Robot Extension oraz uruchom aplikację LOFI Blocks.

2. Ustaw silnik serwo w “pozycji środkowej” – serwomotor porusza się w zakresie od 0 do 180 stopni, co w kodzie przekłada się na 0-100. W tej konstrukcji serwomotor steruje “nogą/płetwą”, która porusza się w tym samym zakresie w lewo i w prawo dlatego przyjmujemy, że pozycja startowa silnika, w której Szuracz stoi prosto to 50.

Jeśli po ustawieniu silnika na 50 “płetwa” Szuracza jest skrzywiona, odczep ją od silnika i ustaw prosto (na tyle na ile się da)

Poeksperymentujmy trochę z ruchami

Model ruchu w przypadku tego robota bardzo prosty – poruszanie płetwą na przemian raz w lewo raz w prawo – co w przełożeniu na ruchy silnika wygląda tak, że jeśli ustawienie płetwy na środku to wartość 50, to wychylenie jej w lewo lub prawo będzie wymagało zmniejszania i zwiększania tej wartości “środkowej. Ustawiamy więc naprzemian silnik serwo na pozycję 40 i 60 (jak widzisz obie te wartości różnią się o 10 od pozycji środkowej – 50). Pomiędzy zmianami pozycji silnika ustalmy pewien odstęp czasu przy pomocy bloku CZEKAJ – im dłuższy, tym robot porusza się wolniej.

Na początku efekt naszego chodzenia wygląda tak:

Nasz Szuracz, robi dość leniwe kroki i przesuwa się do przodu minimalnie. Aby przyspieszyć ruch, zmniejszmy czas oczekiwania pomiędzy kolejnymi krokami do 15 setnych sekundy, spróbujmy też zwiększyć zakres kroków na 35 i 65.

Jak widać udało nam się poprawić trochę zdolności naszego Szuracza. Poeksperymentuj trochę z tymi wartościami, być może w przypadku Twojego robota inne parametry sprawdzą się lepiej – każdy silnik serwo pracuje odrobinę inaczej, co ma wpływ na ruch.

Zwróć uwagę na dwie rzeczy:
– teoretycznie im mniejszy czas czekania pomiędzy krokami, tym robot porusza się szybciej, ale silnik ma też swoją maksymalną prędkość pracy i jeśli czas odstępu pomiędzy krokami będzie zbyt krótki, silnik nie zdąży się ustawić na zadaną wartość a już otrzyma rozkaz obrotu w przeciwnym kierunku
– pozornie im większe wychylenia silnika, tym większy krok robota, ale w praktyce tylko do pewnej wartości zwiększanie długości kroku faktycznie usprawnia poruszanie naszego robota

Usprawnijmy nasz program

Żeby łatwiej testowało nam się różne prędkości pracy silnika, warto stworzyć zmienną, którą możemy nazwać TEMPO umieszczamy ją jako parametr funkcji CZEKAJ pomiędzy wszystkimi krokami, w ten sposób zmieniając jedną zmienną zmieniamy czas oczekiwania pomiędzy obydwoma krokami.

Dodajmy Szuraczowi trochę inteligencji

Opracowaliśmy już model ruchu naszego robota. Teraz popracujmy trochę nad logiką zachowania naszego drewnianego kolegi. Szuracz ma zamontowany czujnik odległości, może więc wykrywać obiekty, które pojawiają się przed nim. Ponieważ jest to robot przyjacielski, zaprogramujmy go tak, aby szedł do przodu w kierunku obiektu, który zobaczył, a kiedy nic nie widać niech szuracz stoi w miejscu.

Do naszego programu musimy dodać warunek “jeżeli Szuracz kogoś widzi”, co w kodzie możemy sformułować JEŻELI ODCZYT Z CZUJNIKA ODLEGŁOŚCI JEST MNIEJSZY OD… przyjętej przez nas odległości przy jakiej Szuracz ma reagować na obiekty, w tym wypadku niech będzie to 20 cm.
Wewnątrz bloku JEŻELI umieszczamy ułożone wcześniej przez nas bloki odpowiadające za ruch:

W tym momencie Szuracz będzie niestrudzenie (w swoim niespiesznym tempie) starał się dojść do obiektu, który znajduje się przed nim. Usprawnijmy go jeszcze trochę – niech zatrzymuje się, gdy znajdzie się już dostatecznie blisko obiektu, w kierunku którego zmierza, czyli niech idzie wtedy, kiedy obiekt jest w odległości poniżej 20 cm, ale niech Szuracz się zatrzyma, gdy obiekt jest bliżej niż 5 cm. Do tego celu musimy wykorzystać blok .. I .. z działu LOGIKA, sprawdzający czy dwa warunki są jednocześnie spełnione (mniejszy od 20 i większy od 5):

Jak widzisz, nasz Szuracz nie jest może demonem prędkości, ani mistrzem akrobatycznych sztuczek, ale może być miłym kompanem do nauki podstaw sterowania robotami kroczącymi. Czy masz może pomysł, jak go usprawnić? Jeśli tak, napisz o nim w komentarzu!

O autorze scenariusza:

Maciej Wojnicki

Maciej Wojnicki

Projektant, konstruktor, programista, twórca LOFI Robota - edukacyjnego systemu do nauki robotyki i programowania dla dzieci w każdym wieku. Pomysłodawca i współzałożyciel pierwszego w Polsce Fab Labu (Trójmiasto) - otwartej pracowni szybkiego prototypowania i cyfrowej fabrykacji, zrzeszonej w międzynarodowej sieci podobnych instytucji.