PROGRAM „ROBOT MINI-SUMO. Ostatni artykuł na temat montażu robota mini sumo. Pierwsza część artykułu „Podwozie robota mini-sumo” szczegółowo opisuje jak wykonać podwozie robota. W tym artykule przeanalizujemy szczegółowo kompilacja programu dla robota. Nasz robot gotowy. Posiada podwozie, funkcję "mózgu" będzie pełnić mikrokontroler, a komunikację ze światem zewnętrznym będą realizować czujniki. Ale mimo wszystko to nadal będzie stać nieruchomo na stole.A żeby do tego nie doszło, czas tchnąć w nasze twórcze życie, że tak powiem, aby w pełni poczuć się jak „twórca”.Program, który stworzymy, nie tylko ożywi robota, ale także sprawić, by zachowywał się w ringu sensownie i logicznie.


1. Podstawą programu jest algorytm.

Jak poprzednio, nie możemy obejść się bez planu. W poprzednim artykule nasz plan był podstawą Schemat obwodu. W programowaniu plan nazywa się algorytmem. Niektórzy z Was wiedzą, co to jest, ktoś właśnie słyszał, ale są tacy, którzy nie wiedzieli i słyszeli po raz pierwszy.

Nie będę używał terminów naukowych, powiem po prostu, że algorytm jest opisem sekwencji pewnych działań. Całe nasze życie to różne działania; chodzimy, rozmawiamy, poruszamy rękami i nogami, odwracamy głowy. Wszystko to ma swoje znaczenie - algorytm, sekwencję, która determinuje nasze zachowanie, i może być skompilowana i opisana. Dla jasności podam przykład z życia. Codziennie rano myjesz zęby. Spróbuj opisać, jak to robisz, jak napisać program dla siebie. Oto, co się dzieje: „Bierzemy szczoteczkę do zębów. Wyciśnij pastę. Myjemy zęby ruchami lewo-prawo. Płukam usta. Mój pędzel".

W zasadzie wszystko się zgadza, ale ten mały program możemy wykonać w porze lunchu, wieczorem lub po każdym posiłku. Ale nie wzięliśmy pod uwagę ważnych czynników, które mogą zniweczyć wszystkie nasze wysiłki. Początkowo rozmawialiśmy o poranku. Jest to ważny czynnik i jeśli nie weźmiesz tego pod uwagę, będziesz musiał myć zęby leżąc w łóżku i z zamkniętymi oczami. Dlatego każdy program musi mieć zawsze jakiś początek i koniec z możliwością powtórzenia cyklu. Powtarzający się cykl dla osoby to następny dzień, w którym znów będzie poranek i zęby będą musiały zostać ponownie umyte. Dlatego do naszego programu dodajemy następujący algorytm (kolejność działań).

"Obudź się. Wstawaj z łóżka...”. Jeśli przestaniesz tworzyć algorytm na tym etapie i przejdziesz od razu do mycia zębów, program się zawiesi (zawiesi). Czemu? Ponieważ znowu nie wzięliśmy pod uwagę wszystkich czynników. Stoisz na środku sypialni i nie możesz wykonać kolejnego polecenia; „Bierzemy szczoteczkę do zębów”, ponieważ szczoteczka jest w łazience, a ty nadal musisz się do niej dostać. Cóż, jeśli śpisz w łazience, to nie ma problemu - program będzie działał! Ale w większości przypadków normalni ludzie śpią w innym pokoju. Takie podejście nazywa się logicznym, czyli mającym znaczenie. Wszystkie nasze działania muszą być rozsądne i mieć określony sens, w przeciwnym razie cel nie zostanie osiągnięty. Więc „Obudź się. Wstań. Idź do łazienki” byłoby najlepszą opcją.

Wracajmy do pracy. Jak teraz planujemy działania robota mini sumo na ringu? Mamy zasady, w których cel jest wyraźnie zaznaczony – „Wypchnij przeciwnika z ringu”. Ale aby to osiągnąć, należy wziąć pod uwagę pewne czynniki. Głównym czynnikiem jest nie wychodzenie poza sam krąg, a ściślej mówiąc, nie wykraczanie poza białą granicę koła. Oto, co mamy:

Ryż. 1 Algorytm zachowania robota w ringu.

Na rysunku 1 widać schemat blokowy. Zgodnie z wszelkimi prawami, tak zwykle komponuje się algorytmy. Jasne i zrozumiałe.

Pierwszy blok to „Start”. Od tego momentu program zaczyna wykonywać akcje robota po jego włączeniu. Pierwszą rzeczą, którą będzie musiał zrobić, to znaleźć wroga, blok „Target Search”. Kolejny blok naszego schematu ma postać rombu „Znaleziono cel?”. Oznacza to, że będziemy mieli wybór działań, które pozwolą osiągnąć określone wydarzenie. Jeśli cel zostanie znaleziony (Tak), to będziemy kontynuować wykonywanie programu i przejść do następnej części programu „Atak”, ale jeśli cel nie zostanie znaleziony (Nie), to najbardziej logiczne jest kontynuowanie szukając tego. Program będzie się zapętlał w tym momencie, dopóki robot nie wykryje wroga. Podczas ataku robot porusza się do przodu w kierunku przeciwnika, starając się go wypchnąć z ringu, w tym momencie „Dotarłeś do krawędzi ringu?” przechodzi do kolejnego bloku „Cofnij” i „Rewers”. Po turze cykl programu głównego się powtarza, to znaczy zaczyna się od samego początku i robot ponownie szuka wroga. Zrobiono to nie bez powodu. Jeśli w momencie ataku wróg zdołał uciec przed naszym robotem, to musimy wrócić do jego poszukiwań nie opuszczając krawędzi pierścienia. Wszystko z teorią. Przejdźmy do praktyki.

2. Zasady pisania programów dla Arduino.

Wprawdzie powiedziałem, że część teoretyczna się skończyła, ale powinniśmy przestudiować zasadę konstruowania programu dla Mikrokontrolery Arduino, chociaż te zasady będą prawdziwe dla innych MK z rodziny AVR.

Ryż. 2 Sposób pisania programu dla Arduino.

Ten schemat blokowy pokazuje nam jasno, co ważne punkty, iw jakiej kolejności należy przestrzegać podczas pisania programu.

Na samym początku programu, w razie potrzeby, podłączane są dodatkowe moduły. Następnie deklarowane są zmienne globalne. Następnie pojawia się blok inicjalizacji kontrolera. Definiuje przypisania portów, niezależnie od tego, czy jest to wejście, czy wyjście, oraz inne ustawienia. Z tego bloku można również wywoływać dodatkowe procedury pomocnicze. Krótko mówiąc, w tym momencie program produkuje ustawienia wstępne kontroler. Ten blok jest wykonywany raz podczas uruchamiania lub ponownego uruchamiania kontrolera. Należy pamiętać, że do bloku została dodana linia „opóźnienie 5 sekund”. Do Główne zasady nie dotyczy to pisania programu, ale potrzebny jest robot mini-sumo. Zasady mówią, że po komendzie sędziego roboty muszą zacząć się poruszać po 5 sekundach. Opóźnienie to nie może być wykonane w głównej pętli programu, ponieważ będzie ono stale powtarzane, a zachowanie robota nie zmieni się na lepsze.

W bloku głównego cyklu programu zostanie wykonany główny algorytm zachowania robota w pierścieniu, który rozważaliśmy na ryc. 1. Podczas działania pętli głównej będzie możliwy dostęp do podprogramów. Programiści bardzo często używają podprogramów do optymalizacji i redukcji kodu. Na przykład program do poruszania się do przodu lub do tyłu, bardziej logiczne jest wyróżnienie w poszczególne moduły i nie są zawarte w głównej części programu. Z tego powodu stanie się ogromny, całkowicie nieczytelny i bardzo problematyczne będzie znalezienie błędu lub wprowadzenie małej zmiany.

3. Narzędzie programistyczne Arduino IDE.

Pobierz ze strony Arduino.ru Ostatnia wersja IDE Arduino. Program nie wymaga specjalnej instalacji, wystarczy rozpakować zawartość archiwum do Właściwe miejsce. Na końcu tego artykułu znajduje się plik biblioteki dalmierza ultradźwiękowego. Należy go rozpakować do folderu Biblioteki.

Uruchamiamy aplikację. Sprawdzamy poprawną instalację biblioteki, przechodzimy do menu „Plik” - „Przykłady”. Prawie na samym dole pozycja ultradźwiękowa powinna pojawić się jak na ryc. 3.

Ryż. 3 Sprawdź, czy biblioteka Ultrasonic jest poprawnie zainstalowana.

Jeśli wszystko jest w porządku, przejdź do pozycji „Usługa” - „Zapłać”. Musimy wybrać naszą płytkę - Arduino Pro Mini 5v.

Ryż. 4 konfiguracja płyty kontrolera

Port szeregowy musi być wybrany tym, który pojawi się po Połączenia Arduino do komputera. Nieco należy powiedzieć o Arduino Pro Mini. W przeciwieństwie do innych kontrolerów z rodziny Arduino, Pro Mini nie posiada wbudowanego modułu połączeniowego z komputerem. Jest dostarczany osobno jako deska. Adapter USB do UART(TTL) i jest podłączony do płyty kontrolera za pomocą czterech przewodów.

Ryż. 5 adapterów USB-UART (TTL).

Na ryc. 6 pokazuje, jak prawidłowo podłączyć kontroler i adapter.

Ryż. 6. Podłączenie kontrolera do przejściówki USB-UART.

W przeciwieństwie do odbieranego połączenia linii sygnałowych, zamiast RX-TX i TX-RX, te linie muszą być połączone bezpośrednio: RX-RX, TX-TX. Przy pierwszym podłączeniu karty do komputera sterowniki urządzeń automatycznie rozpoczną instalację. Powinieneś poczekać na zakończenie instalacji. Kolejną cechą kontrolera jest brak oprogramowania Resetowanie w czasie programowania. Jest to oczywiście trochę niewygodne, ale nie wystarczy, aby odmówić Pro Mini. Wystarczy nacisnąć przycisk Reset na kontrolerze po zmianie napisu „Kompilacja” na „Pobierz”, rys. 7.

Ryż. 7. Wyświetlanie informacji o postępie programowania MK.

4. Piszemy kod.

W tym rozdziale nie będę się rozwodził nad opisem poleceń, dyrektyw i operatorów. Zakłada się, że masz już podstawową wiedzę. W przeciwnym razie należy zapoznać się z dokumentacją na oficjalnej stronie internetowej lub innymi źródłami w sieci.Kod programu napiszemy wyraźnie zgodnie z opracowanym przez nas planem lub algorytmem. Dodałem kod do niektórych bloków algorytmu, które teraz omówimy bardziej szczegółowo na ryc. osiem.

Ryż. 8. Pisanie początkowego bloku programu.

Pierwszy blok: dyrektywa # łączy bibliotekę kontroli modułów z naszym projektem.

Drugi blok: Deklarujemy zmienne i zapisujemy do nich wartości początkowe równe zero. Proszę zauważyć, że nie będziemy tworzyć nazw dla portów wyjściowych MK. Celowo zostawiłem je w formie cyfrowej, aby można było łatwo się do nich odnieść Schemat obwodu. W tym bloku deklarujemy tylko trzy zmienne - są to lewy i prawy czujnik pierścienia (_ i _), będą przechowywać wartości ADC. Oprócz zmiennej odległości dalmierza ultradźwiękowego (_) rejestruje odległość do przeszkody w centymetrach.

Linia Ultrasonic ultrasonic (4, 2) to nic innego jak deklaracja zmiennej dla dalmierza ultradźwiękowego, zaczerpnięta z przykładu dołączonej biblioteki. W nawiasach podano porty, do których podłączone są nogi czujnika.

Trzeci blok: (), w nim konfigurujemy wszystkie wejścia i wyjścia mikrokontrolera. Sygnały przychodzące będziemy odbierać na portach 15, 17, więc przypisujemy im (Input). Mamy cztery porty sterujące silnikami: 3.5 dla lewego silnika i 6.9 dla prawego silnika, przypisujemy je jako wyjście.

Dlaczego używamy dwóch portów dla jednego silnika? Wszystko jest proste; Jeśli napięcie zostanie przyłożone do styków silnika, zacznie się obracać w jednym z kierunków, powiedzmy zgodnie z ruchem wskazówek zegara. Ale jeśli zmienisz polaryzację, tj. zmienić "plus" i "minus" - wał silnika będzie się obracał w przeciwnym kierunku. Wykorzystamy tę właściwość do pełnoprawnych manewrów.

5. Główna pętla pętli.

W tym cyklu wykonywany jest program główny sterownika. Nie możesz się z niej całkowicie wydostać ani ukończyć. Z niego możliwe są tylko wywołania procedur zewnętrznych, tzw. podprogramów.

Rozważ strukturę naszego cyklu opartą na algorytmie na ryc. 9

Ryż. 9. Algorytm pętli głównej Pętla.

Od samego początku musimy uzyskać odczyty wszystkich czujników, w tym celu nazywamy podprogram:

void check_sensor() // Podprogram sprawdzania czujników.

R_Sensor=analogRead(15); // odczytaj prawidłowe odczyty czujnika

L_Sensor=analogRead(17); // odczytaj odczyty lewego czujnika

opóźnienie(10); //opóźnienie zakończenia konwersji ADC

dist_cm = ultradźwiękowy.Ranging (CM); // odczytaj wskazania dalmierza ultradźwiękowego

opóźnienie(10); // Opóźnienie zakończenia konwersji

Po otrzymaniu danych musimy je przetworzyć. Najpierw musimy określić naszą lokalizację, czy jesteśmy na ringu, czy nie. Jeżeli sprawdzamy obecność przeciwnika w obrębie 40 cm w ringu, jeżeli nie ma przeciwnika szukamy go skręcając w lewo procedurę:

void go_left() // wyszukaj cel lub idź w lewo

analogZapis(5, 100); //LEWY SILNIK

analogZapis(6, 100); //PRAWY SILNIK

Wartość mocy silników jest prawie o połowę mniejsza, jeśli kręcimy się zbyt szybko, możemy prześlizgnąć się przez wykryty cel przez bezwładność.

Jeśli cel zostanie wykryty, musimy go zaatakować, posuwając się do przodu z pełną prędkością.

void go_forward() //Atak - poruszanie się do przodu

analogZapis(3, 0); //LEWY SILNIK

Jeśli w momencie ataku natknęliśmy się na krawędź ringu i znaleźliśmy biały pasek, to musimy się zatrzymać, cofnąć, zawrócić i pojechać trochę do przodu, a następnie wznowić poszukiwania. Aby to zrobić, wywołaj procedury w kolejności:

przejdź_stop(); // Zatrzymaj się

opóźnienie (100); //czekaj 10ms

Wróć(); // Cofnąć się

opóźnienie (1000); //1 sekunda.

idź w prawo(); //Skręć w prawo

opóźnienie(300); //300ms

idź naprzód(); //Ruszaj naprzód

opóźnienie(300); //300ms

void go_stop() //stop

analogZapis(5, 255); //LEWY SILNIK

analogZapis(9, 255); //PRAWY SILNIK

void go_back () //powrót

analogZapis(3, 255); //LEWY SILNIK

analogZapis(6, 255); //PRAWY SILNIK

analogZapis(9, 0); //PRAWY SILNIK

void go_right () //szukaj celu lub przesuń się w prawo

analogZapis(3, 100); //LEWY SILNIK

analogZapis(5, 0); //LEWY SILNIK

analogZapis(6, 0); //PRAWY SILNIK

analogZapis(9, 100); //PRAWY SILNIK

void go_forward() //Atak do przodu

analogZapis(3, 0); //LEWY SILNIK

analogZapis(5, 255); //LEWY SILNIK

analogZapis(6, 0); //PRAWY SILNIK

analogZapis(9, 255); //PRAWY SILNIK

Opóźnienia czasowe między zabiegami określają czas trwania silników w różnych kierunkach ruchu. Jeśli go zwiększysz lub zmniejszysz, możesz osiągnąć różne kąty skręt lub odległość, jaką robot przejedzie przed wykonaniem kolejnego polecenia.

Pełny szkic do pobrania znajduje się na końcu artykułu.

Przedstawiony kod oczywiście nie jest ostateczny ani najbardziej właściwa opcja, każdy z Was ma prawo go uzupełniać lub poprawiać zgodnie z własnymi wymaganiami, ponieważ ogólną istotą artykułu jest nauczenie początkujących robotyków myślenia logicznego i systematycznego, poprawnego rozwiązywania zadań z wykorzystaniem wszelkich dostępnych zasobów.

Archiwum 1

Archiwum 2 do artykułu "Program robota minisumo".

Jeśli masz jakieś pytania, pisz na FORUM lub na czacie online o robotyce, omówimy je!

Uwaga! Kopiowanie całości lub części materiałów bez zgody administracji jest zabronione!

Witam! Chciałbyś złożyć robota, który nie jest trudny w montażu? Trafiłeś we właściwe miejsce! =) To właśnie na naszej stronie znajdziesz szczegółowe artykuły na temat montażu krok po kroku Twojego pierwszego robota, a także wielu innych robotów, a nawet na zawody.

Bardzo się cieszymy, że nasze artykuły pomogą Tobie, początkującemu w robotyce, opanować ten najciekawszy obszar i pompować swoje umiejętności w tym kierunku. Pragniemy również zauważyć, że zgodnie z tymi artykułami my, twórcy serwisu SERVODROID, prowadzimy zajęcia z darmowy kręgi robotyki, a my naprawdę lubimy uczyć i opowiadać wszystkim, czym jest robotyka BEAM.

Pomóż naszemu projektowi! Zarejestruj się na naszej stronie i wejdź na nasz czat lub forum online i podziel się swoim rzemiosłem i postępami - w końcu to twoja aktywność przyciąga coraz więcej uwagi do robotyki dla początkujących - patrzą na twój sukces i chcą być tak samo fajni , a my naprawdę Miło jest widzieć, że wszystko ci się układa. A jeśli coś nie wyjdzie - pomożemy ;)

Sumo- jeden z najbardziej ekscytujących Zawody robotów Lego Ev3. W tej konkurencji robot musi wypchnąć robota przeciwnika poza krąg bez opuszczania samego kręgu.

Na samym początku zawodów roboty ustawia się w centrum okręgu, po warstwie uruchamiają się programy i roboty muszą odczekać 3 sekundy, po czym roboty muszą dotrzeć do granicy okręgu i dopiero wtedy mają możliwość zaatakowania wroga. Portal zawiera schematy robotów do Lego sumo oraz instrukcje montażu

Opiszmy Algorytm i program sumo dla robota EV3

1 Akcja.

Robot czeka 3 sekundy, odjeżdżamy od środka koła do granicy, jedziemy do przodu, kręcimy się, szukamy wroga, jedziemy do wroga, jeśli jedziemy od granicy, to jedziemy z powrotem.

Ustaw czas oczekiwania na 3 sekundy.

2 Akcja. Wracamy do granicy.


3 działanie. Po dojechaniu do granicy robot musi iść do przodu. Ruch do przodu.

4 Akcja. Tworzymy nieskończoną pętlę. Robot będzie atakował wroga, dopóki nie zostanie wypchnięty lub do końca czasu zawodów.

Wkładamy do niego cykl rotacji z czujnikiem ultradźwiękowym. (możesz również użyć czujnika podczerwieni)


5 Akcja. Idziemy dalej, aż czujnik koloru zobaczy czarną linię, granicę koła.

6. Akcja Po obejrzeniu granicy jedziemy z powrotem.

Ćwiczenie.

Napisz sam odejście, korzystając z lekcji 1.

Hej geektimes!

Wstęp

Od dawna wiemy, że roboty to nasza przyszłość. Istnieje wiele gałęzi robotyki. Rozwój wojskowy, społeczny, rozrywkowy i po prostu działające roboty.
Ale tym razem chcę opowiedzieć w imieniu zespołu College w MIREA o komponencie konkurencyjnym, a dokładnie o robotach sumo.

Trochę o naszym zespole

Istniejemy od 2014 roku. Zwycięzcy i zdobywcy nagród większości konkursów Robofinist, Robofest, MIPT Spartakiad i mniejszych turniejów, a także jesteśmy absolutnymi mistrzami Rosji na lata 2016-2017 w nominacji do mini-sumo.

Kim są te roboty sumo?

Początkowo, gdy po raz pierwszy dowiedzieliśmy się o takich zawodach, zapaśnicy sumo byli konstruowani głównie z klocków Lego. Ale to dość zły pomysł, o czym później.

Na ten moment prawy zapaśnik sumo jest opisany bardzo prosto: całkowicie autonomiczny kawałek żelaza na kółkach, z mózgiem i parą czujników, który wybija podobny kawałek żelaza z ringu.

Istnieją 4 rodzaje:

1. Mega zapaśnik sumo
2. Zapaśnik mini sumo
3. Zapaśnik mikro sumo
4. Zapaśnik sumo Nano

Każdy jest inny nie tylko zewnętrznie, ale także wewnętrznie.

Mega - największe i najniebezpieczniejsze roboty. Maksymalna waga to do 3 kg, możliwość umieszczenia różnych „przyssawek”, czego nie wolno robić z innymi robotami.

Mini - przyjemne, małe roboty do 500 gramów 10 na 10 cm, nietrudne do lutowania, łatwe w konfiguracji i montażu. Są najpopularniejszą nominacją w sumo.

Mikro i nano - pomniejszone mini kopie. Mikro 5x5x5, nano 2,5x2,5x2,5. Trudne do lutowania i zbierania części. Bardziej popularna niż mega sumo.

Z czego oni są zrobieni?

Wróćmy do Lego. Najprawdopodobniej wielu z was próbowało coś zrobić z programowalnym konstruktorem Lego, a przynajmniej widziało, jak to się robi. Jest nawet osobna nominacja na takie roboty 15 na 15, ale jest to strasznie nudne i nadaje się tylko dla bardzo początkujących lub małych robotyków. W porównaniu do domowych próbek, ten traci wszystko oprócz złożoności montażu.

Najpierw to niska prędkość. Po drugie, rozmiar jest ogromny. Po trzecie, niska szybkość reakcji czujników. A także sam kontroler pozostawia wiele do życzenia.

Więcej o montażu i pakowaniu

Zawodnicy sumo, którzy startują w zawodach, robią na arduino. Wykorzystują do tego płytki tekstolitowe, czujniki lutownicze, kontroler, sterownik itp. Jest też szeroki wybór czujników do wykrywania wroga, ale warto zastosować te na podczerwień lub laserowe, ponieważ Sonary są bardzo powolne i nieporęczne. Oczywiście do poruszania się robota potrzebne są silniki i koła. Możesz umieścić je w nieograniczonej ilości, ale praktyka pokazuje, że robot najlepiej jeździ na dwóch kołach umieszczonych z tyłu. I oczywiście robot nie może żyć bez wiadra i haka. Wiadro to tylko futerał, owijka i zabezpieczenie na deskę i elementy. Najczęściej stal lub żelazo. Haczyki są wykonane z ostrzy do noży biurowych, ale zdarzają się przypadki z niestandardowym podejściem, na przykład zaostrzona drewniana linijka lub wata, ale takie podejście jest mało przydatne.

Najtrudniejszą rzeczą (poza programowaniem) jest zaprojektowanie robota.

Pierwszy etap



Nazywa się to pierwszym etapem - rozmieszczeniem silników i czujników. Widać tu też dwa małe czujniki przed hakiem, więc są to czujniki liniowe.

Służą do wykrywania białej linii w zakresie, aby uniknąć przypadkowego wypadnięcia z pierścienia, ale nie są wymaganym komponentem i nie są używane zbyt często. wysokie prędkości często nie pozwalaj na zatrzymanie się.

Druga faza



A tutaj sterownik, sterownik, włączniki i złącze akumulatora są już zastosowane.
Pozostaje tylko wydrukować ślad i przenieść go na tablicę tekstolitową, a następnie opracować ślady.

Oto jak to wygląda na gotowej planszy:

Gotowa deska



Robot gotowy do pracy:

Jak widać, nie ma tu nic szczególnie skomplikowanego. O problemach poniżej.

Przejdźmy do programowania

Najprostszym sposobem jest użycie kontrolerów zgodnych z arduino lub arduino. Również Arduino IDE nam pomoże. Za pomocą schemat standardowy robot ma 5 czujników. Więc stany mogą być

Wykluczamy sytuację, gdy boczne czujniki widzą wroga w tym samym czasie (bo tak się nie może zdarzyć, a jeśli tak, to jest awaria jednego z czujników), a także sytuację, w której boczny i dwa przednie czujniki podają 0 (czyli patrz), bo tak też nie może być lub szansa jest zbyt mała.

Aby trafił do wroga, wystarczy założyć piny, podać napięcie na silniki i odczytać odczyty z czujników:

Kod robota

// Ustawienie pinów dla czujników int pin_left=10; int pin_center_left=11; int pin_center_right=4; int pin_center=12; int pin_right=7; // Przypina do silników int pin_motor_left_forward=9; int pin_motor_left_back=6; int pin_motor_right_forward=3; int pin_motor_right_back=5; // Zmienne do przechowywania wyników odpytywania czujników int cl,cc,cr,l,r; // Funkcja odpytywania czujników void GLAZ() ( cl = digitalRead(pin_center_left); cc = digitalRead(pin_center); cr = digitalRead(pin_center_right); l = digitalRead(pin_left); r = digitalRead(pin_right); ) // Funkcja ruch, akceptując prędkości od 0 do 255, aby zasilić każdy silnik void MOVE(int a, int b) ( if(a<0) { digitalWrite(pin_motor_left_forward,LOW); analogWrite(pin_motor_left_back,0-a); } else { analogWrite(pin_motor_left_forward,a); digitalWrite(pin_motor_left_back,LOW); } if(b<0) { digitalWrite(pin_motor_right_forward,LOW); analogWrite(pin_motor_right_back,0-b); } else { digitalWrite(pin_motor_right_back,LOW); analogWrite(pin_motor_right_forward,b); } } void setup() { pinMode (pin_center,INPUT);//центральный pinMode (pin_right, INPUT);//правый датчик pinMode (pin_left,INPUT);//левый датчик pinMode (pin_center_right, INPUT);//передний правый датчик pinMode (pin_center_left,INPUT);//передний левый датчик pinMode (pin_line_left, INPUT); pinMode (pin_line_right, INPUT); pinMode (pin_start,INPUT);//старт pinMode (13,OUTPUT);//старт digitalWrite(13,HIGH); pinMode (pin_motor_left_back, OUTPUT);//мотор лево назад pinMode (pin_motor_right_forward, OUTPUT);//мотор право вперед pinMode (pin_motor_right_back, OUTPUT);//мотор правый назад pinMode (pin_motor_left_forward,OUTPUT);//мотор лево вперед // ожидание сигнала к началу схватки while(!digitalRead(pin_start))continue; MOVE(200,200); } void loop() { GLAZ(); if(l && r) { if((cl + cc + cr) < 2 || !cc){ MOVE(255,255); } if(cc) { if(!cl && cr) MOVE(0-180,180); if(cl && !cr) MOVE(180,0-180); } } else if(cc + cr + cl == 3) { if(!l && r) MOVE(0-200,200); if(!r && l) MOVE(200,0-200); } else if(cc) { if(!l && !cl && cr && r) MOVE(0-150,150); if(l && cl && !cr && !r) MOVE(150,0-150); } if(!digitalRead(pin_start))while(1){MOVE(0,0);} }


Musisz tylko poprawić kod.

Ważny!
Czujniki zwracają 1, jeśli nic nie widzą i 0, jeśli jest przeszkoda.

Po pobraniu kodu przez USB robot jest gotowy do rywalizacji.

Warte rozważenia

Po pierwsze, są elementy. Stosowane przez nas czujniki (sharp 340) są dość rzadkie lub nie istnieją. Dlatego, jeśli to możliwe, musisz wziąć dużo na raz lub znaleźć odpowiedni pod względem parametrów analog.

Po drugie, nie możesz zadać wrogiemu robotowi żadnych obrażeń krytycznych ani użyć np. magnesów do podnoszenia. To nieco ogranicza nas w doborze środków do walki.

Nie zapomnij też o kołach. Krzywizny, cienkie i ślizgające się nie sprawdzą, po prostu nie będziesz w stanie manewrować i nie będzie wystarczającej siły. Koniecznie przetestuj opony.

Podczas pracy z silnikami należy pamiętać, że będą one musiały pracować pod maksymalnym obciążeniem i dość często będą się palić.

Sensowne jest również tworzenie wymiennych baterii, ponieważ. Robot rozładowuje się dość szybko, a jego ładowanie zajmuje dużo czasu.

Lista niezbędnych zakupów:

1. Lutownica, lut, topnik (opcjonalnie)
2. Tablice tekstolitowe (aby wytrawić, należy zamknąć wszystkie tory, a następnie umieścić je w roztworze nadtlenku wodoru + kwasku cytrynowego + soli na kilka godzin, a następnie oderwać papier, na przykład pod którym tory były ukryty)
3. Czujniki Sharp 340
4. Silniki, wybierz do smaku, im więcej obrotów, tym lepiej.
Warto wybrać jedno z nich: polulu. (dodany)
5. Baterie (radzę wziąć litowo-polimerowe) + stacja ładująca
6. Klucz (przycisk włącznika, przylutowany do płytki) i elementy elektryczne (na zdjęciu ze śladem)
7. Kierowca
8. Kontroler, na początek możesz wypróbować Polulu A-Star 32u4 micro i tam wgrać bootloader arduino
9. Blacha do ciała
10. Wywierć otwory w desce
11. Launcher i moduł startowy
PS Jeśli coś przeoczyłem - napisz, poprawię to.

Konkurencja

Kolejne zawody odbędą się w Petersburgu, Robofinist, więc teraz intensywnie się do nich przygotowujemy i jeśli chcesz wziąć udział, to musisz zrobić wszystko jasno i szybko.

Ale te zawody nie są jedyne, w Rosji jest ich całkiem sporo, największe odbywają się w Moskwie. Mniej więcej raz w miesiącu lub dwóch możesz doświadczyć szczęścia i rywalizować.

Takie zawody za granicą nie są rzadkością i my też tam chcemy się dostać. Oto przybliżona mapa zawodów na całym świecie:

Mamy nadzieję, że robot sumo będzie się rozwijał dopiero w naszym kraju i zapraszamy wszystkich do udziału w tworzeniu naszego robota. Wygląda to bardzo epicko, gdy kawałki odlatują od jakiegoś robota.

To już koniec naszego artykułu wprowadzającego i życzymy wszelkich sukcesów w robotyce, z radością zobaczymy Cię na zawodach!

1. Główne zasady

1.1. Robot musi wypchnąć robota przeciwnika poza czarną linię (poza granice).

1.2. Po rozpoczęciu zawodów roboty muszą zbliżać się do siebie aż do kolizji.

1.3. Po zderzeniu roboty powinny spróbować nawiązać ze sobą kontakt.

1.4. Podczas zawodów członkowie zespołu nie powinni dotykać robotów.

1.5. W pierścieniu (okrągłe pole) umieszczane są dwa autonomiczne roboty. Roboty próbują wypchnąć przeciwnika z ringu.

1.6. Robot, który wygra najwięcej rund, wygrywa mecz.

1.7. Podczas gry „każdy z każdym” uważa się, że najlepszy robot wygrał najwięcej meczów.

1.8. Przy dużej liczbie uczestników istnieje możliwość zorganizowania rankingu według „systemu olimpijskiego” (dla wyjazdów).

2. Robot

2.1. Roboty muszą być zbudowane wyłącznie z części LEGO Mindstorms.

2.2. Podczas całej rundy:

Rozmiar robota nie powinien przekraczać 25x25x25cm.

Waga robota nie może przekraczać 1kg.

2.3. Robot w ocenie sędziów, który celowo uszkodzi inne roboty lub w inny sposób uszkodzi powierzchnię boiska, zostanie zdyskwalifikowany na cały czas trwania zawodów.

2.4. Surowo zabrania się używania w konstrukcji robota:

Kleje.

2.5. Przed meczem roboty są sprawdzane pod kątem wymiarów i wagi.

2.6. Robot może mieć wiele programów, z których operator może wybrać każdą rundę.

2.7. Pomiędzy meczami dozwolona jest zmiana konstrukcji i programów robotów.

3. Pole

3.1. Białe koło o średnicy 1 mz czarną obwódką o grubości 5 cm.

3.2. W okręgu strefy startowe robotów zaznaczone są czerwonymi paskami.

3.3. Czerwona kropka oznacza środek koła.

3.4. Boisko jest umieszczone na podium o wysokości 16 mm.

4. Gospodarze konkursy

4.1. Konkursy składają się z serii meczów. Mecz określa, który z dwóch uczestniczących w nim robotów jest najsilniejszy. Mecz składa się z 3 rund po 30 sekund. Mecz wygrywa robot, który wygra najwięcej rund. Sędzia może skorzystać z dodatkowej rundy w celu wyjaśnienia spornych sytuacji.

4.2. Rundy odbywają się kolejno.

4.3. Na początku rundy roboty są umieszczane za czerwonymi paskami (od środka pierścienia) w swoich strefach startowych, wszystkie części robota dotykające pola muszą znajdować się wewnątrz strefy startowej.

4.4. Na polecenie sędziego podawany jest sygnał do uruchomienia robotów, podczas gdy operatorzy robotów muszą uruchomić program na robotach i oddalić się od pola o ponad 1 metr w ciągu 5 sekund. W ciągu tych samych 5 sekund roboty muszą podróżować w linii prostej i zderzać się ze sobą.

4.5. Dla początkujących: Po zderzeniu roboty nie mogą manewrować wokół ringu.

4.6. Dla doświadczonych: Po zderzeniu roboty mogą manewrować wokół ringu, jak im się podoba.

4.7. Jeżeli roboty nie zderzą się w ciągu 5 sekund po rozpoczęciu rundy, to robot, dzięki któremu w ocenie sędziego nie doszło do kolizji, uważany jest za przegranego rundy. Jeśli roboty poruszają się w linii prostej i nie mają czasu na zderzenie w ciągu 5 sekund, to robot znajdujący się najbliżej swojego obszaru startowego jest uważany za przegranego rundy.

5. Zasady wyboru zwycięzcy

5.1. Jeśli robot nie porusza się bez kontaktu z innym robotem przez ponad 10 sekund, jest uważany za przegranego w rundzie.

5.2. Dotykając dowolnej części robota (nawet nie przymocowanej do robota) poza czarną ramką, robot przegrywa rundę.

5.3. Jeśli na koniec rundy żaden robot nie zostanie wypchnięty z okręgu, to robot znajdujący się najbliżej środka okręgu jest uważany za zwycięzcę rundy.

5.4. Jeżeli zwycięzcy nie można wyłonić metodami opisanymi powyżej, decyzję o zwycięstwie lub powtórkę podejmuje sędzia zawodów.

6. Sędziowanie

6.1. Organizatorzy zastrzegają sobie prawo do wprowadzania zmian w regulaminie zawodów, jeśli zmiany te nie przyniosą korzyści jednej z drużyn.

6.2. Kontrolę i podsumowanie przeprowadza skład sędziowski zgodnie z powyższymi zasadami.

6.3. Sędziowie mają pełne uprawnienia we wszystkich zawodach; wszyscy uczestnicy muszą przestrzegać swoich decyzji.

6.4. W przypadku jakichkolwiek zastrzeżeń dotyczących sędziowania, zespół ma prawo ustnie odwołać się od decyzji sędziów do Komitetu Organizacyjnego nie później niż do końca bieżącej rundy.

6.5. Powtórka może odbyć się decyzją sędziów w przypadku, gdy robot nie był w stanie ukończyć etapu z powodu ingerencji z zewnątrz lub gdy usterka wystąpiła z powodu złego stanu pola gry lub z powodu błędu popełnionego przez jury.

6.6. Członkowie zespołu i lider nie mogą ingerować w działania robota swojej drużyny lub robota przeciwnika, ani fizycznie, ani na odległość. Ingerencja prowadzi do natychmiastowej dyskwalifikacji.

6.7. Sędzia może zakończyć mecz według własnego uznania, jeśli robot nie jest w stanie kontynuować ruchu w ciągu 10 sekund.

12.2. Projekt robota na zawody „Sumo”.

Podstawowe zachowanie robota w „Sumo” bardzo podobny do zachowania robota w „Kegelring”. Robot musi również znaleźć obiekt wewnątrz pola i wypchnąć go z okręgu. Różnice jak zwykle tkwią w szczegółach: teraz ten obiekt z kolei szuka naszego robota i też chętnie go wypchnie jak najszybciej.

Niemniej jednak skupmy się na naszym celu: jeden z czujników zdolnych do wykrywania obiektów na odległość (podczerwień lub ultradźwięki) nadal pomoże nam szukać przeciwnika, a my w odpowiednim czasie określimy czarną granicę pola za pomocą czujnika koloru. Dlatego do tworzenia i debugowania programu robota sumo sugerujemy użycie tego samego robota, który przygotowaliśmy do lekcji #11 - Kegelring.

Aby uchronić czujnik znajdujący się z przodu przed interakcją z przeciwnikiem, zbudujemy zderzak i przymocujemy go do naszego robota. Poniżej znajdują się szczegółowe instrukcje budowania zarówno domowych, jak i edukacyjnych LEGO Mindstorms EV3. Zapraszam do eksperymentowania i wymyślenia własnego projektu.

Lego Mindstorms EV3 Strona główna

Lego Mindstorms EV3 Edukacja

Powstały element mocujemy na przedniej belce naszego robota.

Lego Mindstorms EV3 Strona główna

Lego Mindstorms EV3 Edukacja

Nasz robot treningowy jest gotowy. Zacznijmy tworzyć program robota sumo. Świetnie, jeśli masz możliwość debugowania programu za pomocą innego robota! Jeśli nie, to w porządku: możesz użyć jako przeciwnika na przykład modelu samochodu sterowanego radiowo lub tych samych kręgli od Kegelringa.

12.3. Stworzenie programu do konkursu „Sumo”.

Pierwszą myślą, jaka przychodzi mi do głowy, jest użycie programu do: „Kegelring” z kilkoma kosmetycznymi zmianami. Rzeczywiście, algorytmy zachowania robota w „Kegelring” i w „Sumo” bardzo podobna. Realizują poszukiwanie obiektu i wypychanie go z pola. Możesz pobrać program do zapaśnika sumo za „Kegelring”, ale taki zapaśnik sumo nie będzie działał bardzo wydajnie. Jednak wiedza zdobyta na poprzedniej lekcji przyda się nam teraz.

Czas wgrać nasz projekt do środowiska programistycznego "lekcje-2", utwórz w nim nowy program lekcja-12 i podłącz robota do środowiska programistycznego.

Model behawioralny zapaśnika sumo można podzielić na dwie części: szukaj przeciwnika oraz atak przeciwnika. Zacznijmy od realizacji pierwszej części - szukaj przeciwnika.

Opiszmy szczegółowo kolejność działań naszego robota po wykryciu przeciwnika na boisku:

  1. obracać się wokół własnej osi, aż czujnik znajdujący się z przodu wykryje przeciwnika;
  2. zatrzymaj się przed przeciwnikiem.

Ta sekwencja działań całkowicie powtarza algorytm wyszukiwania robota dla kręgli w „Kegelring”, ale ponieważ odległość między robotami w „Sumo” może przekroczyć odległość od robota do kołka, wówczas musimy wybrać inną wartość progową dla zastosowanego czujnika.

Ustaw przeciwników na polu naprzeciwko siebie, jak pokazano na poniższym rysunku.

Pozycja ta praktycznie odpowiada maksymalnej odległości między robotami od siebie podczas zawodów, więc aktualny odczyt czujnika mierzącego odległość do przeciwnika można przyjąć jako wartość progową. Ważny: ponieważ wartość progowa będzie wystarczająco duża, konieczne jest, aby poza polem w odległości około 1 m. podczas pracy robota nie było również ciał obcych, które mogłyby zakłócać wyszukiwanie.

Na „Strona sprzętu”, znajdujący się w prawym dolnym rogu środowiska programistycznego, wybierz zakładkę „Widok portu” (rys. 1, 2 poz. 1) i weź odczyt czujnika, który określa odległość do przeciwnika, ustawiając odpowiedni tryb wyświetlania odczytów.

W naszym przypadku czujnik ultradźwiękowy jest w trybie „Odległość w centymetrach” pokazuje wartość - 56,1 (rys. 1 poz. 2) 57 .

Ryż. jeden

Czujnik podczerwieni w trybie "Przybliżenie" pokazuje wartość - 68 (rys. 2 poz. 2). Jako wartość progową przyjmujemy liczbę - 70 .

Ryż. 2

Przez analogię z „Kegelring” możemy zaprogramować robota tak, aby znalazł przeciwnika, tylko po to, by trochę oddalić się od poprzedniej lekcji, zmieniamy kierunek obrotu robota na przeciwny:

czujnik ultradźwiękowy

  1. „Zielona paleta” "Włączyć" "B" ustawić równe -30 , wartość mocy dla portu "C" ustawić równe 30 (rys. 3 poz.1).
  2. Aby wyszukać przeciwnika, użyj bloku programu w trybie "Czujnik ultradźwiękowy - Porównanie - Odległość w centymetrach" 57 (rys. 3 poz. 2).
  3. wyłącz silniki (rys. 3 poz. 3).

Ryż. 3

czujnik podczerwieni

  1. Aby robot obracał się wokół własnej osi, używamy bloku programu „Niezależne sterowanie silnikiem” „Zielona paleta”, Ustaw tryb pracy bloku "Włączyć", wartość mocy dla portu "B" ustawić równe -30 , wartość mocy dla portu "C" ustawić równe 30 (rys. 4 poz. 1).
  2. Aby wyszukać przeciwnika, używamy bloku programu „Oczekiwanie” „Pomarańczowa paleta” w trybie "Czujnik Podczerwieni - Porównanie - Aproksymacja", z wartością progową zadziałania czujnika równą 70 (rys. 4 poz. 2).
  3. Po tym, jak robot znajdzie się naprzeciwko przeciwnika, za pomocą bloku programu „Niezależne sterowanie silnikiem” „Zielona paleta” wyłącz silniki (rys. 4 poz. 3).

Ryż. cztery

Na etapie debugowania tego algorytmu będziesz musiał wybrać wartości "Moc" Motoryzacja "B" oraz "C" a także wartość progową czujnika, aby uzyskać dokładne wykrycie przez robota i zatrzymać się bezpośrednio przed przeciwnikiem. Dopiero potem będzie można przystąpić do programowej implementacji algorytmu ataku.

Jeśli poszukiwanie przeciwnika w „Sumo” bardzo podobne do wyszukiwania kręgli w „Kegelring”, wtedy pchanie przeciwnika ma ważną różnicę! Rozpoczynając atak, pierwszą rzeczą do zrobienia jest pędzić prosto z maksymalną mocą silników w kierunku wykrytego przeciwnika, sprawdzając wykrycie granicy pierścienia czujnikiem koloru. Ale nasz przeciwnik też może się ruszać! Dlatego całkiem możliwe, że przeciwnik odstąpi od kierunku naszego ataku. W takim przypadku nasz robot, spudłowany, ruszy w kierunku granicy pierścienia, tracąc przeciwnika i cenny czas.

Dlatego musimy przeanalizować oba czujniki podczas ruchu na wprost i zatrzymać atak, jeśli robot straci przeciwnika LUB robot dotrze do granicy pierścienia. Dlatego musimy przestać używać bloku programu „Oczekiwanie” „Pomarańczowa paleta” i niezależnie w cyklu do odbierania i przetwarzania odczytów z dwóch czujników.

Przejdźmy do etapowej implementacji algorytmu ataki przeciwnika: w tym celu stworzymy w projekcie tymczasowy program lekcja-12-1 i zacznij wypełniać go blokami programu.

  1. Weźmy blok programu „Cykl” „Pomarańczowa Paleta”.
  2. Wewnątrz bloku "Cykl" umieść blok programu „Niezależne sterowanie silnikiem” „Zielona paleta” "Włączyć" (rys. 5 poz. 1), moc silnika "B" oraz "C" ustawić na wartość maksymalną - 100 (rys. 5 poz. 2).

Ryż. 5

  1. Za blokiem „Niezależne sterowanie silnikiem” umieść blok programu . Ustaw tryb działania bloku na „Porównanie — natężenie światła odbitego” (Rys. 6)

Ryż. 6

W tym trybie blok programu „Czujnik koloru” „Żółta paleta” wizualnie bardzo podobny do bloku oprogramowania „Oczekiwanie” „Pomarańczowa paleta” w trybie „Czujnik koloru – porównanie – natężenie światła odbitego”. Ale w przeciwieństwie do bloku "Oczekiwanie", ten blok programu nie czeka na warunek określony przez parametry „Typ porównania” (rys. 7 poz. 1) oraz „Wartość progowa” (rys. 7 poz. 2) i natychmiast podaje wartość logiczną ( "Prawdziwe" lub "Kłamstwo") w parametrze wyjściowym i wartości mierzonej w parametrze wyjściowym „Oświetlenie” (rys. 7 poz. 4).

Opcje „Typ porównania” oraz "Próg" na Ryż. 7 poz. 12 „Wynik porównania” (rys. 7 poz. 3) podał wartość logiczną "Prawdziwe" gdy czujnik koloru przekroczy czarną granicę pierścienia.

Ryż. 7

  1. W przypadku stosowania czujnika ultradźwiękowego za urządzeniem „Czujnik koloru” zainstaluj blok oprogramowania „Czujnik ultradźwiękowy” „Żółta paleta”. Ustaw tryb działania bloku na „Porównanie - Odległość w centymetrach” (rys. 8 poz. 1). Parametr „Rodzaj porównania” (rys. 8 poz. 2), parametr „Wartość progowa” (rys. 8 poz. 3) ustawić w taki sposób, aby parametr wyjściowy „Wynik porównania” (rys. 8 poz. 4) podał wartość logiczną "Prawdziwe"

Ryż. osiem

W przypadku korzystania z czujnika podczerwieni za urządzeniem „Czujnik koloru” zainstaluj blok oprogramowania „Czujnik podczerwieni” „Żółta paleta”. Ustaw tryb działania bloku na „Porównanie - aproksymacja” (rys. 9 poz. 1). Parametr „Rodzaj porównania” (rys. 9 poz. 2), parametr „Wartość progowa” (rys. 9 poz. 3) ustawić w taki sposób, aby parametr wyjściowy „Wynik porównania” (rys. 9 poz. 4) podał wartość logiczną "Prawdziwe" w przypadku utraty wzroku przez robota przeciwnika.

Ryż. 9

Przeanalizujmy jeszcze raz kod pośredni naszego algorytmu ataku: włączyliśmy silniki na maksymalną moc i posuwamy się do przodu, stale odpytując czujniki w cyklu. Jeśli nasz robot przekroczy czarną linię granicy pierścienia, to wartość parametru wyjściowego „Wynik porównania” „Czujnik koloru” nabierze znaczenia "Prawdziwe". Jeśli nasz robot straci przeciwnika, to wartość parametru wyjściowego „Wynik porównania” czujnik śledzący przeciwnika również przyjmie wartość "Prawdziwe". W każdym z tych przypadków powinniśmy przerwać atak, kończąc naszą pętlę. Pomoże nam w tym blok programu. Zapoznajmy się z tym blokiem bardziej szczegółowo: blok programu „Operacje logiczne” przeznaczony do wykonywania operacji na danych logicznych (rys. 10).

Ryż. dziesięć

Wybrany tryb bloku programu „Operacje logiczne” „Czerwona paleta” definiuje jedną z czterech operacji na danych binarnych: "I I)", "ALBO ALBO)", „XOR” oraz „Wyjątek (NIE)”. D va parametry wejściowe "a" oraz "b"(do pracy „Wyjątek (NIE)”- jeden parametr wejściowy "a") przekazuje wartości wejściowe do bloku programu, a wynikowa wartość jest wytwarzana przez parametr wyjściowy "Wynik". Jeśli wcześniej nie spotkałeś się z operacjami logicznymi, możesz zapoznać się z podstawową wiedzą w załączonej pomocy pod spoilerem.

Operacje logiczne

Operacje logiczne są wykonywane tylko na wartościach logicznych (danych), które również są wartością logiczną. Wartość logiczna może znajdować się w jednym z dwóch stanów: "Prawdziwe" lub "Kłamstwo". Operacje logiczne bardzo często zapisuje się w formie tabelarycznej jako: "parametr wejściowy 1" - "parametr wejściowy 2" = "wynik". Operacje logiczne realizowane przez blok programu „Operacje logiczne” „Czerwona paleta” w formie tabelarycznej można zapisać w następujący sposób:

Operacja logiczna „I (AND)”

Wynik operacji logicznej "I I)" będzie wartość "Prawdziwe" "Prawdziwe" "Kłamstwo".

"a" operacja "b" wynik
"Kłamstwo" "I I)" "Kłamstwo" = "Kłamstwo"
"Kłamstwo" "I I)" "Prawdziwe" = "Kłamstwo"
"Prawdziwe" "I I)" "Kłamstwo" = "Kłamstwo"
"Prawdziwe" "I I)" "Prawdziwe" = "Prawdziwe"

Operacja logiczna „LUB (LUB)”

Wynik operacji logicznej "ALBO ALBO)" będzie wartość "Kłamstwo" tylko wtedy, gdy obie wartości wejściowe są równe "Kłamstwo", we wszystkich pozostałych przypadkach wartość operacji wynosi "Prawdziwe".

"a" operacja "b" wynik
"Kłamstwo" "ALBO ALBO)" "Kłamstwo" = "Kłamstwo"
"Kłamstwo" "ALBO ALBO)" "Prawdziwe" = "Prawdziwe"
"Prawdziwe" "ALBO ALBO)" "Kłamstwo" = "Prawdziwe"
"Prawdziwe" "ALBO ALBO)" "Prawdziwe" = "Prawdziwe"

Operacja logiczna „XOR”

Wynik operacji logicznej „XOR” będzie wartość "Prawdziwe" tylko jeśli jedna z wartości wejściowych jest równa "Prawdziwe", we wszystkich pozostałych przypadkach wartość operacji wynosi "Kłamstwo".

"a" operacja "b" wynik
"Kłamstwo" „XOR” "Kłamstwo" = "Kłamstwo"
"Kłamstwo" „XOR” "Prawdziwe" = "Prawdziwe"
"Prawdziwe" „XOR” "Kłamstwo" = "Prawdziwe"
"Prawdziwe" „XOR” "Prawdziwe" = "Kłamstwo"

Operacja logiczna „Wyjątek (NIE)”

Operacja Boole'a „Wyjątek (NIE)” dotyczy tylko jednej wartości wejściowej. Wynik operacji logicznej „Wyjątek (NIE)” powyżej wartości wejściowej jest wartość przeciwna.

  1. Za blokiem programowania "Czujnik ultradźwiękowy" lub "Czujnik podczerwieni" umieść blok programu „Operacje logiczne” „Czerwona paleta”.
  • parametr wyjściowy „Wynik porównania” blok programu „Czujnik koloru” (rys. 11, 12 poz. 1) "a" blok programu „Operacje logiczne” (rys. 11, 12 poz. 4).
  • parametr wyjściowy „Wynik porównania” blok programu „Czujnik ultradźwiękowy (podczerwień)” (rys. 11, 12 poz. 2) Połącz się z parametrem wejściowym! "b" blok programu „Operacje logiczne” (rys. 11, 12 poz. 5).
  • Tryb działania bloku programu „Operacje logiczne” ustalać się "ALBO ALBO)" (rys. 11, 12 poz. 3). W takim przypadku wynik operacji logicznej przyjmie wartość "Prawdziwe", tylko jeśli spełniony jest jeden z warunków: czujnik koloru przekroczył czarną linię, robot stracił przeciwnika.
  • Poprzez ustawienie trybu bloku programu "Cykl" w znaczenie „Wartość logiczna” (rys. 11, 12 poz. 7), parametr wyjściowy "Wynik" blok programu „Operacje logiczne” (rys. 11, 12 poz. 6) Połącz się z parametrem wejściowym! "Dopóki prawda jest" blok programu "Cykl" (rys. 11, 12 poz. 8). Te ustawienia zakończą cykl, gdy "Prawdziwe" wynik operacji logicznej.

Ryż. jedenaście


Ryż. 12

Przetestujmy powstały algorytm ataku! Aby to zrobić, umieścimy naszego robota wewnątrz ringu, przeciwnie, zainstalujemy nieruchomego przeciwnika i uruchomimy program ataku do egzekucji. Nasz robot musi pewnie wypchnąć przeciwnika z ringu i zatrzymać się nad czarną granicą pola. Stało się? Więc nasz sumoista poprawnie kontroluje granicę ringu.

Przeprowadźmy drugi eksperyment: ponownie zainstalujemy nieruchomego przeciwnika przed robotem i uruchomimy program ataku. Gdy nasz robot rzuci się do przeciwnika i zbliży się dostatecznie, ostro odsuniemy przeciwnika na bok. Nasz robot po stracie przeciwnika musi się zatrzymać.

Podsumowując: wdrożyliśmy algorytm wyszukiwania przeciwników i pomyślnie go przetestowaliśmy, przetestowano również algorytm ataku.

Ukończony program zapaśnika sumo musi kolejno szukać przeciwnika w nieskończonej pętli, a następnie zaatakować przeciwnika. Możliwe byłoby połączenie obu części naszego programu, gdyby nie jeden mały dodatek. Jeśli nasz robot zatrzymał się nad granicą ringu, to przed rozpoczęciem poszukiwań robot powinien po odjechaniu trochę wrócić do ringu. Nasz program ataku uzupełnimy następującym kodem: poza pętlą ataku, użyjemy bloku programu " Przełącz "Pomarańczową paletę". Tryb pracy bloku "Przełącznik" ustalać się „Czujnik koloru – porównanie – natężenie światła odbitego”. Opcje „Typ porównania” oraz "Próg" ustawić w taki sam sposób, jak poprzednio używany w bloku programu „Czujnik koloru” „Żółta paleta”. Dlatego jeśli nasz robot zatrzymał się nad czarną linią, to wykonanie zostanie przeniesione do górnego kontenera bloku programu "Przełącznik". To właśnie w górnym pojemniku umieszczamy blok programu „Sterowanie” „Zielona paleta”, z ustawieniami parametrów, które powodują, że robot cofa się o jeden obrót silników. Do dolnego pojemnika bloku programu "Przełącznik" umieść blok programu, który wyłącza silniki (Rys. 13). Po ponownym przetestowaniu algorytmu ataku upewnimy się, że po tym, jak robot sumo wypchnął przeciwnika z ringu, wrócił trochę do tyłu.

Ryż. 13

Teraz możesz ukończyć tworzenie programu dla robota sumo. Wewnątrz pętli nieskończonej sekwencyjnie zagnieżdżamy program do wyszukiwania przeciwnika, a następnie program do atakowania przeciwnika. Spróbuj wykonać tę pracę samodzielnie, nie zaglądając do rozwiązania.

Wniosek:

Program, który omówiliśmy z tobą w tej lekcji, implementuje tylko jeden algorytm siły bezpośredniej dla zachowania robota sumo. Oznacza to, że w bezpośredniej konfrontacji o władzę robot z pewnością musi pokonać swojego przeciwnika. Ale nasz robot treningowy w niczym nie przypomina umięśnionego zapaśnika sumo. Aby pewnie wypaść w tej konkurencji, należy zwrócić szczególną uwagę przede wszystkim na konstrukcję robota, stworzenie solidnej, zabezpieczonej platformy, zwiększenie przyczepności z powierzchnią pierścienia za pomocą dodatkowe koła napędowe lub gąsienice. Popularny hosting wideo Youtube.com na prośbę „roboty sumo lego” znajdziesz wiele filmów z prawdziwych zawodów robotów, z których z pewnością zaczerpniesz dla siebie ciekawe pomysły do ​​realizacji we własnych projektach.

Głównym celem tej lekcji jest pokazanie metody ciągłego przetwarzania odczytów z pary czujników na praktycznym przykładzie. Czy nasz program można ulepszyć? Niewątpliwie! Na przykład za pomocą bloku programu „Wartość losowa” „Czerwona paleta”, zmień algorytm wyszukiwania przeciwnika w taki sposób, aby ustawić losowy obrót robota w lewo lub w prawo, tym samym dezorientując przeciwnika. Spróbuj samodzielnie wbudować ten dodatkowy kod do naszego programu. Zastanów się też, jakie zmiany musisz wprowadzić w programie, w przypadku konkursu na czarnym ringu z białą obwódką. Możesz mieć własne pomysły na ulepszenia: podziel się nimi w komentarzach do lekcji!