Budujemy i programujemy GYROBOY

W tym tutorialu zrobimy robota samobalansującego się z zestawu LEGO MINDSTROM EV3 (45544). Podczas budowania robota, który będzie poruszał się po otwartej przestrzeni, najtrudniejszym wyzwaniem wydaje się dostosowanie konstrukcji oraz programu, by robot stał się samobalansujący.

Krok 1: Budowa robota.

Do rozpoczęcia budowy robota GYROBOY wymagany jest zestaw klocków LEGO MINDSTORMS EV3 – 45544. Następnie potrzebujemy instrukcji do pobrania poniżej. Etap ten jest dość szybki, ponieważ nie powinien zająć ci więcej czasu niż 45 min.

Instrukcja GYROBOY
Opis dodatkowy
Opis dodatkowy

Krok 2: Instalowanie czujnika żyroskopowego  EV3.

Jeśli używasz oprogramowania LEGO MINDSTROMS EV3 HOME EDITION musisz doinstalować dany blok za pomocą instrukcji opisanej w artykule: Dodawanie nowych bloków do programu Lego Mindstroms EV3 Home Edition.

Krok 3. Programowanie robota GyroBoy – ustawienia początkowe.

Gyroboy uruchamia dwa równoległe programy. Pierwszy ciąg, pętla M, obsługuje zbieranie danych i równanie bilansujące. Wszystkie ustawienia robota nie powinny być zmieniane bez zaawansowanej wiedzy. Druga pętla, BHV, obsługuje zachowanie robota. Umożliwia podstawowe sterowanie i sprzężenie zwrotne czujnika. Zmieniając zmienne Cdrv i Cstr, możesz sprawić, by robot robił to, co chcesz.

Pętla M zaczyna się od utworzenia własnego bloku RST (RESET), spowoduje to zresetowanie wszystkich silników i czujników. Menu Tools -> My Block Builder

Kolejny nowo utworzony blok gOS sprawdza w jakiej „dyspozycji” jest robot. Po zakończeniu robot ustawia kolejność uruchamiania. Na grafice wyświetlacza zobaczymy nową minę robota (Awake).

Krok 3. Programowanie robota GyroBoy – pobieranie danych.

Petla BAL pobiera wszystkie dane z czujnika żyroskopowego i czujników silnika, aby je zrównoważyć. Czas jest również wykorzystywany w obliczeniach. Timer służy do obliczenia czasu potrzebnego do uruchomienia równania i reguluje czas między uzyskaniem danych a uruchomieniem równania bilansującego. Czas musi zostać uregulowany, aby uzyskać bardziej stabilnego robota.

Nieregulowane bloki silnika dla motoru A i D są używane, po to, by upewnić się, że tylko równanie bilansujące reguluje ruch, a nie inne wewnętrzne obliczenia. Myblock CHK jest po to, aby sprawdzić, czy robot upadł, i kończy pętlę. Zmienna przyjmuje wartość prawda. Moje bloki są wyświetlane w taki sposób, aby poprawić czytelność i możliwość dostosowania naszego programu.

Pętla BAL wygląda następująco:

Pętla M kończy się zatrzymując silniki. Zmiana wyświetlania grafiki i dźwięku wskazuje stan upadku i jest gotowa do zresetowania. Powinien dać użytkownikowi czas na umieszczenie robota z powrotem na stojaku, a następnie poprzez naciśnięcie czujnika dotykowego robot może rozpocząć pracę od nowa.

Krok 4. Programowanie robota GyroBoy.

Kolejna pętla działa równorzędnie z pętlami BAL i M, jest to pętla BHV, która kontroluje zachowanie robota. Zmienna S jest podłączona do przełącznika A, może przyjmować trzy wartości. Jeśli zmienna S ma wartość 0, zmienne CDrv i CStr są ustawione na 0 (zero) i jest to stan bezczynności robota.

Jeśli S wynosi 1, robot wykonuje sekwencję startową. Zmienna CDrv jest ustawiona na 40 dla 4 sekundy, następnie z powrotem do zera, następnie zmienna S zostaje zmieniona na 2. 

Kiedy zmienna S ustawiona jest na 2 to stan robota jest gotowy do pracy. Czujnik koloru jest sprawdzany i dla każdego dostępnego koloru istnieje inna wartość zmiennej CStr i CDrv. Czujnik odległości sprawdza czy przed robotem nie znajduje się jakiś przedmiot (jakaś przeszkoda), jeśli znajduje się to robot zatrzymuje się i zapisuje ostatnie warunki jazdy, a następnie przygotowuje się do odwrotu, cofając się i machając lekko ramionami. Robot przez kilka sekund rusza się losowo w lewo i prawo, a następnie wraca do poprzedniego stanu jazdy (porusza się w przód).

Krok 5. Programowanie własnego bloku RST.

Blok ten resetuje wszystkie motory, sensory, czas i zmienne używane w naszym programie.

Krok 6. Programowanie własnego bloku GT

Mój blok GT oblicza przedział czasowy oparty na liczniku czasu i pętli. Czas jest podzielony przez zmienną cLO, która reprezentuje liczbę pętli i jest połączona ze zmienną tlnt. Do zmiennej cLo dodawana jest wartość jeden po wykonywaniu obliczeń.

Krok 7. Programowanie własnego bloku Ctrl

Nowo utworzony blok Ctrl używa dwóch zmiennych do sterowania robotem. Zmienna Cdrv jest ponownie używane do tworzenia docelowej pozycji silnika. Zmienna Cdrv jest mnożona przez zmienną tInt i odejmowana od zmiennej mPos, a wynik jest przypisany ponownie do zmiennej mPos. Zmienna Cstr jest mnożona przez 0.1 i dodana do zmiennej Pwr (moc), a następnie wartość jest połączona z lewym silnikiem napędowym. Wartość odejmowana od zmiennej Pwt (moc) jest połączona z prawym silnikiem napędowym.

Krok 8. Programowanie własnego bloku Chk

Blok Chk sprawdza, czy robot upadł. Jeśli moc wynosi 100 przez ponad 2 sekundy t zmienna OK zakończy pętlę równoważenia, a robot może zostać ponownie umieszczony na stojaku.

Krok 9. Programowanie własnego bloku gOS

Blok gOS dokonuję przesunięcia czujnika żyroskopowego w stabilną pozycję. Jeśli żyroskop nieznacznie się wychyli to otrzyma wartość regulowaną podczas ruchu robota. Przesunięcie jest również obliczane dynamicznie podczas ruchu robota. Aby obliczyć tę wartość, wartość żyroskopu jest odczytywana i sumowana 250 razy. Przy każdym dodawaniu wartość jest sprawdzana przy wartościach maksymalnych i minimalnych, aby upewnić się, że robot jest stabilny. Po zakończeniu pętli Chk, różnica między gMax i gMin jest sprawdzana, jeśli wartość jest mniejsza niż 2, obliczenia będą kontynuowane, w przeciwnym razie robot ponownie sprawdzi odczyt z żyroskopu. Średnia gSum jest zajęta przez blok matematyczny dzielący przez 250, a następnie jest podłączony do zmiennej gOS.

Krok 10. Programowanie własnego bloku GM

Blok GM pobiera dane z motorów. Po pierwsze, pozycja motoru jest

Krok 11. Programowanie własnego bloku EQ

Krok 12. Programowanie własnego bloku GG

 

Leave a Reply

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>