PROGRAM "MINI-SUMO ROBOT. Az utolsó cikk a mini-sumó robot összeszereléséről. A cikk első részében "Alváz mini-szumó robothoz" részletesen le volt írva, hogyan kell robotalvázat készíteni. Ebben a cikkben részletesen elemezzük egy robot program összeállítását.A robotunk készen van.Fázisú,az "agyok" funkcióját egy mikrokontroller látja el,a külvilággal való kommunikációt pedig szenzorok végzik majd.De , mindezek ellenére továbbra is mozdulatlanul fog állni az asztalon.És hogy ez ne történjen meg, ideje belelélegezni teremtő életünkbe, úgymond teljesen „alkotónak” érezni magunkat.A program, amit elkészítünk, nemcsak újraéleszti a robotot, hanem értelmesen és logikusan is viselkedik a ringben.


1. A program alapja az algoritmus.

Mint korábban, most sem nélkülözhetjük a tervet. Az előző cikkben a mi tervünk volt az alap kördiagramm. A programozásban a tervet algoritmusnak nevezzük. Vannak, akik tudják, mi az, valaki csak hallotta, de vannak, akik nem tudták, és most hallották először.

Nem fogok tudományos kifejezéseket használni, egyszerűen azt mondom, hogy az algoritmus bizonyos műveletek sorozatának leírása. Egész életünk különféle cselekvésekből áll; sétálunk, beszélünk, mozgatjuk a karjainkat-lábainkat, fordítjuk a fejünket. Mindennek megvan a maga jelentése - egy algoritmus, egy sorozat, amely meghatározza viselkedésünket, és ez összeállítható és leírható. Az érthetőség kedvéért mondok egy példát az életből. Minden reggel fogat mosol. Próbáld meg leírni, hogyan csinálod, hogyan írj magadnak programot. Ez történik: „Vegyünk egy fogkefét. Nyomd ki a pasztát. Fogat mosunk bal-jobb mozdulatokkal. kiöblítem a számat. Az ecsetem."

Elvileg minden stimmel, de ezt a kis programot ebédidőben, este, vagy minden étkezés után is előadhatjuk. De nem vettünk figyelembe olyan fontos tényezőket, amelyek minden erőfeszítésünket semmissé tehetik. Kezdetben a reggelről beszéltünk. Ez egy fontos tényező, és ha nem veszi figyelembe, akkor ágyban fekve és csukott szemmel kell fogat mosnia. Ezért minden programnak mindig rendelkeznie kell valamilyen eleje és vége, a ciklus megismétlésének lehetőségével. Az ismétlődő ciklus az ember számára a következő nap, amikor ismét reggel lesz, és újra fogat kell mosni. Ezért a következő algoritmust (műveletsorozatot) adjuk hozzá programunkhoz.

"Kelj fel. Kelj fel az ágyból...” Ha ebben a szakaszban abbahagyja az algoritmus létrehozását, és egyenesen a fogmosáshoz megy, a program leáll (lefagy). Miért? Mert megint nem vettünk figyelembe minden tényezőt. A hálószobád közepén állsz, és nem tudod végrehajtani a következő parancsot; „Vegyünk egy fogkefét”, mivel a kefe a fürdőszobában van, és még mindig be kell szállni. Nos, ha a fürdőszobában alszol, akkor semmi gond - a program futni fog! De a legtöbb esetben a normális emberek egy másik szobában alszanak. Ezt a megközelítést logikusnak nevezik, ami értelmes. Minden cselekedetünknek ésszerűnek kell lennie, és tartalmaznia kell egy bizonyos jelentést, különben a célt nem érjük el. Szóval "Ébredj fel. Felkelni. Menj ki a mosdóba" lenne a legjobb megoldás.

Térjünk vissza a munkához. Most hogyan tervezzük meg a miniszumó robot akcióit a ringben? Vannak szabályaink, ahol a cél egyértelműen meg van jelölve - "Lökd ki az ellenfelet a ringből." Ennek eléréséhez azonban bizonyos tényezőket figyelembe kell venni. A fő tényező az, hogy ne lépjünk túl magán a körön, vagy pontosabban: ne lépjünk túl a kör fehér határán. Íme, amit kaptunk:

Rizs. 1 A robot gyűrűbeli viselkedésének algoritmusa.

Az 1. ábrán egy blokkdiagram látható. Minden joggal így szokás az algoritmusokat összeállítani. Világos és érthető.

Az első blokk a "Start". Ettől a pillanattól kezdve a program elindítja a robot műveleteit a bekapcsolás után. Az első dolga, hogy megtalálja az ellenséget, a "Célkereső" blokkot. Sémánk következő blokkja egy „Cél megtalálva?” rombusz formájában van. Ez azt jelenti, hogy választhatunk a cselekvések közül egy bizonyos esemény eléréséhez. Ha a cél megtalálható (Igen), akkor folytatjuk a programot és továbblépünk a „Támadás” program következő részére, de ha a cél nem található (Nem), akkor a leglogikusabb a keresés folytatása. . A program addig folytatja a ciklust, amíg a robot nem észleli az ellenséget. Támadáskor a robot előre halad az ellenfél felé, megpróbálja kiszorítani őt a gyűrűből, ebben a pillanatban az "Elérted a gyűrű szélét?" blokk, ha nem éred el a gyűrű szélét, akkor a támadás. folytatódik, de ha az érzékelők fehér csíkot észlelnek az élen, akkor a támadás leáll, és a program továbblép a következő „Visszahajtás” és „Visszaállítás” blokkra. A fordulás után a főprogram ciklusa megismétlődik, vagyis a legelejéről indul és a robot ismét az ellenséget keresi. Okkal tették így. Ha a támadáskor az ellenségnek sikerült elmenekülnie a robotunk elől, akkor vissza kell térnünk a kereséséhez anélkül, hogy elhagynánk a gyűrű szélét. Mindent elmélettel. Térjünk át a gyakorlásra.

2. Arduino programírás szabályai.

Bár mondtam, hogy az elméleti résznek vége, de tanulmányozzuk a program felépítésének elvét Arduino mikrokontrollerek, bár ezek az elvek igazak lesznek az AVR család többi MK-jára is.

Rizs. 2 Programírás módszere Arduino számára.

Ez a blokkdiagram világosan megmutatja, hogy mit fontos pontokat, és milyen sorrendben kell figyelni a programírás során.

A program legelején szükség esetén további modulok csatlakoztathatók. Ezután a globális változókat deklarálják. Ezután jön a vezérlő inicializálási blokkja. Ez határozza meg a port hozzárendeléseket, legyen az bemenet vagy kimenet, és egyéb beállításokat. Ebből a blokkból további segédrutinok is hívhatók. Röviden, ezen a ponton a program előáll előbeállítások vezérlő. Ez a blokk egyszer végrehajtásra kerül a vezérlő indításakor vagy újraindításakor. Kérjük, vegye figyelembe, hogy a "késleltetés 5 másodperc" sor hozzáadásra került a blokkhoz. Nak nek Általános szabályok ez nem vonatkozik programírásra, de egy mini-szumó robot szükséges. A szabályok azt mondják, hogy a játékvezető utasítása után a robotoknak 5 másodperc múlva el kell indulniuk. Ez a késleltetés nem hajtható végre a program főhurkában, mivel folyamatosan ismétlődik, és a robot viselkedése sem változik jóra.

A program fő ciklusának blokkjában a robot gyűrűben való viselkedésének fő algoritmusa kerül végrehajtásra, amelyet az 1. ábrán vettünk figyelembe. 1. A főhurok működése során lehetőség lesz szubrutinokhoz való hozzáférésre. A programozók nagyon gyakran használnak szubrutinokat a kód optimalizálására és csökkentésére. Például egy előre- vagy hátralépési programot logikusabb kiemelni egyedi modulok, és nem szerepel a program törzsében. Ettől hatalmas, teljesen olvashatatlan lesz, és nagyon problémás lesz hibát találni, vagy apró változtatást végrehajtani.

3. Arduino IDE fejlesztőeszköz.

Töltse le az Arduino.ru webhelyről legújabb verzió Arduino IDE. A program külön telepítést nem igényel, elég az archívum tartalmát kicsomagolni Jó helyen. A cikk végén található az Ultrasonic rangefinder könyvtárfájl. Ki kell csomagolni a Libraries mappába.

Elindítjuk az alkalmazást. Ellenőrizzük a könyvtár helyes telepítését, lépjen a "Fájl" - "Példák" menübe. Szinte a legalsó részen az Ultrasonic elemnek meg kell jelennie, mint az ábra. 3.

Rizs. 3 Ellenőrizze, hogy az Ultrasonic könyvtár megfelelően van-e telepítve.

Ha minden rendben van, lépjen a "Szolgáltatás" - "Fizetés" elemre. Ki kell választanunk a táblánkat - Arduino Pro Mini 5v.

Rizs. 4 vezérlőkártya beállítása

A soros portot azt kell kiválasztani, amelyik ezután jelenik meg Arduino kapcsolatok a számítógéphez. Egy kicsit szólni kell az Arduino Pro Mini-ről. Az Arduino család többi vezérlőjétől eltérően a Pro Mini nem rendelkezik beépített számítógépes csatlakozási modullal. Táblaként külön kapható. USB adapter az UART(TTL)-hez, és négy vezetékkel csatlakozik a vezérlőkártyához.

Rizs. 5 USB-UART (TTL) adapter.

ábrán. A 6. ábra bemutatja a vezérlő és az adapter megfelelő csatlakoztatását.

Rizs. 6. A vezérlő csatlakoztatása az USB-UART adapterhez.

A jelvezetékek vett csatlakozásától eltérően az RX-TX és TX-RX helyett ezeket a vonalakat kell közvetlenül csatlakoztatni: RX-RX, TX-TX. Amikor először csatlakoztatja az adaptert a számítógéphez, az illesztőprogramok telepítése automatikusan megkezdődik. Meg kell várnia a telepítés befejezését. A vezérlő másik jellemzője a szoftver hiánya Visszaállítás programozáskor. Ez persze egy kicsit kényelmetlen, de nem elég a Pro Mini elutasításához. Elegendő megnyomni a Reset gombot a vezérlőn, miután a „Compiling” felirat „Download”-ra változik, ábra. 7.

Rizs. 7. Információk megjelenítése az MK programozás folyamatáról.

4. Megírjuk a kódot.

Ebben a fejezetben nem foglalkozom a parancsok, direktívák és operátorok leírásával. Feltételezhető, hogy már rendelkezik bizonyos alapvető ismeretekkel. Ellenkező esetben a hivatalos weboldalon található dokumentációra vagy a hálózat egyéb forrásaira kell hivatkozni.A programkódot egyértelműen az általunk összeállított tervnek vagy algoritmusnak megfelelően írjuk le. Az algoritmus bizonyos blokkjaihoz kódot adtam, amelyeket most részletesebben a 2. ábrán fogunk megvizsgálni. nyolc.

Rizs. 8. A program kezdő blokkjának megírása.

Az első blokk: a # direktíva összekapcsolja a modulvezérlő könyvtárat a projektünkkel.

Második blokk: Változókat deklarálunk, és nullával egyenlő kezdeti értékeket írunk beléjük. Kérjük, vegye figyelembe, hogy nem hozunk létre neveket az MK kimeneti portjaihoz. Szándékosan hagytam őket digitális formában, hogy könnyen hivatkozhassatok rájuk kördiagramm. Ebben a blokkban csak három változót deklarálunk - ezek a gyűrű bal és jobb érzékelői (_ és _), ezek tárolják az ADC értékeket. Az ultrahangos távolságmérő távolságváltozóján (_) kívül az akadálytól mért távolságot centiméterben rögzíti.

Az Ultrasonic ultrasonic (4, 2) sor nem más, mint egy változó deklarációja az ultrahangos távolságmérőhöz, a mellékelt könyvtár példájából. Zárójelben vannak azok a portok, amelyekhez az érzékelő lábak és csatlakoznak.

A harmadik blokk: (), ebben konfiguráljuk a mikrokontroller összes bemenetét és kimenetét. A bejövő jeleket a 15-ös, 17-es portokon fogjuk fogadni, így hozzájuk rendelünk (Input). Négy portunk van a motorok vezérlésére: 3,5 a bal motorhoz és 6,9 a jobb motorhoz, ezeket kimenetként rendeljük hozzá.

Miért használunk két portot egy motorhoz? Minden egyszerű; Ha feszültséget kapnak a motor érintkezői, akkor az egyik irányba, mondjuk az óramutató járásával megegyező irányba, forogni kezd. De ha megváltoztatod a polaritást, pl. változtassa meg a "plusz" és "mínusz" értéket - a motor tengelye a másik irányba forog. Ezt az ingatlant teljes értékű manőverekhez használjuk.

5. A főhurok hurok.

Ebben a ciklusban a vezérlő főprogramja fut le. Nem lehet belőle teljesen kilépni, vagy befejezni. Ebből csak külső eljárások, úgynevezett szubrutinok hívása lehetséges.

Tekintsük ciklusunk felépítését az ábra algoritmusa alapján. 9

Rizs. 9. A fő hurok algoritmusa Hurok.

Már a kezdetektől meg kell szereznünk az összes érzékelő leolvasását, ehhez hívjuk az alprogramot:

void check_sensor() // Alprogram az érzékelők ellenőrzéséhez.

R_Sensor=analogRead(15); // olvassa le a megfelelő szenzorértékeket

L_Sensor=analogRead(17); // olvassa le a bal oldali érzékelő leolvasását

késleltetés(10); //késleltetés az ADC átalakítás befejezéséhez

dist_cm = ultrahang.Ranging(CM); // olvassa le az ultrahangos távolságmérő leolvasását

késleltetés(10); // Késleltetés az átalakítás befejezéséhez

Az adatok beérkezése után fel kell dolgoznunk azokat. Először is meg kell határoznunk a helyzetünket, függetlenül attól, hogy a ringben vagyunk-e vagy sem. Ha ellenőrizzük az ellenfél jelenlétét 40 cm-en belül a ringben, ha nincs ellenfél, akkor a bal oldali eljáráshoz fordulva keressük:

void go_left() // keressen egy célt, vagy menjen balra

analógWrite(5, 100); //BAL MOTOR

analógWrite(6, 100); //JOBB MOTOR

A motorok teljesítményének értéke majdnem a felére csökken, ha túl gyorsan pörögünk, tehetetlenséggel átcsúszhatunk az észlelt célponton.

Ha a célpontot észleljük, meg kell támadnunk, teljes sebességgel haladva előre.

void go_forward() //Támadás - előrelépés

analógWrite(3, 0); //BAL MOTOR

Ha a támadáskor befutottunk a gyűrű szélére és fehér csíkot találtunk, akkor meg kell állni, ki kell hátrálni, meg kell fordulni és egy kicsit előre kell hajtani, majd újra kell folytatni a keresést. Ehhez hívja meg az eljárásokat sorrendben:

go_stop(); // állj meg

késleltetés(100); //várj 10 ms-t

menjen vissza(); // Hátrál

késleltetés(1000); //1 másodperc.

menj jobbra(); //Jobbra

késleltetés(300); //300ms

menj előre(); //Menj tovább

késleltetés(300); //300ms

void go_stop() //stop

analógWrite(5, 255); //BAL MOTOR

analógWrite(9, 255); //JOBB MOTOR

void go_back () //visszamegy

analógWrite(3; 255); //BAL MOTOR

analógWrite(6; 255); //JOBB MOTOR

analógWrite(9, 0); //JOBB MOTOR

void go_right () //cél keresése vagy jobbra lépés

analógWrite(3, 100); //BAL MOTOR

analógWrite(5, 0); //BAL MOTOR

analógWrite(6, 0); //JOBB MOTOR

analógWrite(9, 100); //JOBB MOTOR

void go_forward() //Előre mozgás támadása

analógWrite(3, 0); //BAL MOTOR

analógWrite(5, 255); //BAL MOTOR

analógWrite(6, 0); //JOBB MOTOR

analógWrite(9, 255); //JOBB MOTOR

Az eljárások közötti időkésések határozzák meg a motorok időtartamát a különböző mozgási irányokban. Ha növeli vagy csökkenti, akkor elérheti különféle szögek fordulatot vagy azt a távolságot, amelyet a robot megtesz a következő parancs végrehajtása előtt.

A teljes letölthető vázlat a cikk végén található.

A bemutatott kód természetesen nem végleges és nem a legmegfelelőbb a megfelelő opciót, mindenkinek joga van kiegészíteni vagy javítani az igényei szerint, mert a cikk általános lényege, hogy megtanítsa a kezdő robotikusokat logikusan és szisztematikusan gondolkodni, helyesen megoldani a feladatokat minden rendelkezésre álló erőforrás felhasználásával.

Archívum 1

Archívum 2 a "Minisumo robot programja" cikkhez.

Ha kérdésed van, írj a FÓRUMBA vagy az Online chaten a robotikáról, megbeszéljük!

Figyelem! Az anyagok teljes vagy részleges másolása az adminisztráció engedélye nélkül tilos!

Szia! Szeretne egy olyan robotot összeállítani, amelyet nem nehéz összeszerelni? Jó helyre jöttél! =) Oldalunkon részletes cikkeket találhat az első robotjának lépésről lépésre történő összeszereléséről, valamint sok más robotról, sőt versenyekről is.

Nagyon örülünk, hogy cikkeink segítenek Önnek, kezdőnek a robotikában, hogy elsajátítsa ezt a legérdekesebb területet, és ebbe az irányba pumpálja tudását. Azt is szeretnénk megjegyezni, hogy ezeknek a cikkeknek megfelelően mi, a SERVODROID webhely fejlesztői, órákat tartunk ingyenes robotika körei, és nagyon szeretünk mindenkinek tanítani és elmondani, hogy mi is az a BEAM robotika.

Segítse projektünket! Regisztráljon weboldalunkon, és gyere el online chat-ünkre vagy fórumunkra, és ossza meg mesterségeit és fejlődését – elvégre az Ön tevékenysége az, ami egyre több figyelmet vonz a kezdők robotikájára – ők az Ön sikerét nézik, és ugyanolyan menők akarnak lenni , és mi igazán Örülök, hogy minden jól működik az Ön számára. És ha valami nem sikerül, mi segítünk ;)

Szumó- az egyik legizgalmasabb Lego Ev3 robotverseny. Ebben a versenyben a robotnak ki kell löknie az ellenfél robotját a körből anélkül, hogy magát a kört elhagyná.

A verseny legelején a robotokat a kör közepére helyezik, a réteg után elindulnak a programok és a robotoknak 3 másodpercet kell várniuk, ami után a robotoknak el kell érniük a kör határát és csak ezután az ellenség megtámadásának lehetősége. A portál tartalmazza a Lego szumóhoz tartozó robotok sémáit és az összeszerelési utasításokat

Leírjuk Szumó algoritmus és program EV3 robothoz

1 Akció.

A robot vár 3 másodpercet, elhajtunk a kör közepétől a határig, megyünk előre, forogunk, keressük az ellenséget, megyünk az ellenséghez, ha a határtól hajtunk, akkor visszafelé hajtunk.

Állítsa be a várakozást 3 másodpercre.

2 Akció. Visszahajtunk a határhoz.


3 akció. Miután a robot a határhoz hajtott, előre kell haladnia. Előre mozgás.

4 Akció. Felállítottunk egy végtelen hurkot. A robot addig támadja az ellenséget, amíg ki nem löki, vagy amíg le nem telik a verseny ideje.

Egy ultrahangos érzékelővel ellátott forgási ciklust teszünk bele. (Infravörös érzékelőt is használhat)


5 Akció. Addig megyünk előre, amíg a színérzékelő meg nem lát egy fekete vonalat, a kör határát.

6. Akció A határ megtekintése után visszafelé hajtunk.

Gyakorlat.

Írja vissza az indulást az 1. lecke segítségével.

Szia Geektimes!

Bevezetés

Régóta tudjuk, hogy a robotok jelentik a jövőnket. A robotikának sok ága van. Katonai fejlesztés, szociális, szórakoztató és csak működő robotok.
De ezúttal a MIREA főiskolai csapata nevében szeretnék mesélni a versenykomponensről, de pontosan a szumórobotokról.

Egy kicsit a csapatunkról

2014 óta létezünk. A legtöbb verseny, Robofinist, Robofest, MIPT Spartakiad és kisebb versenyek győztesei és díjazottai, és mi vagyunk Oroszország abszolút bajnokai 2016-2017-ben a mini-sumo jelölésben.

Egyáltalán kik ezek a szumórobotok?

Kezdetben, amikor először értesültünk az ilyen versenyekről, a szumóbirkózók főleg Lego-ból készültek. De ez elég rossz ötlet, erről majd később.

A Ebben a pillanatban a helyes szumóbirkózót nagyon egyszerűen leírják: egy teljesen autonóm vasdarab kerekeken, agyvel és egy pár érzékelővel, ami egy hasonló vasdarabot üt ki a ringből.

4 típusa van:

1. Mega szumóbirkózó
2. Mini szumóbirkózó
3. Mikro szumóbirkózó
4. Nano szumóbirkózó

Mindenki más, nemcsak külsőleg, hanem belsőleg is.

Mega - a legnagyobb és legveszélyesebb robotok. A maximális súly legfeljebb 3 kg, különféle "szívók" elhelyezése, ami más robotokkal nem megengedett.

Mini - kellemes, kis robotok 500 grammig 10 x 10 cm-ig Nem nehéz forrasztani, könnyű felállítani és összeszerelni. Ők a legnépszerűbb jelölések a szumóban.

Mikro és nano - kicsinyített mini másolatok. Mikro 5x5x5, nano 2,5x2,5x2,5. Nehéz forrasztani és felvenni az alkatrészeket. Népszerűbb, mint a mega szumó.

Miből készültek?

Térjünk vissza a Lego-hoz. Valószínűleg sokan próbáltak már valamit egy programozható Lego konstruktorral, vagy legalább látták, hogyan csinálják. Még külön jelölés is van az ilyen robotokra 15x15-ben, de ez borzasztóan unalmas és csak nagyon kezdőknek vagy kis robotikusoknak megfelelő. A házi készítésű mintákhoz képest ez mindenben veszít, kivéve az összeszerelés bonyolultságát.

Először is alacsony sebesség. Másodszor, a mérete óriási. Harmadszor, az érzékelők alacsony reakciósebessége. És maga a vezérlő is sok kívánnivalót hagy maga után.

Bővebben az összeszerelésről és a csomagolásról

A versenyzõ szumóbirkózók arduinón dolgoznak. Használnak rá textolit táblákat, forrasztó szenzorokat, vezérlőt, drivert, stb.. Szenzorok széles választéka is van az ellenség észlelésére, de érdemes infravörös vagy lézereset használni, mert a szonárok nagyon lassúak és terjedelmesek. Természetesen motorok és kerekek szükségesek a robot mozgásához. Korlátlan számban rakhatod be őket, de a gyakorlat azt mutatja, hogy a robot két, hátul elhelyezett keréken halad a legjobban. És persze a robot nem tud élni vödör és horog nélkül. A vödör csak egy tok, burkolat és védelem a deszkának és az elemeknek. Leggyakrabban acél vagy vas. A horgok írószer kések pengéiből készülnek, de vannak olyan esetek, amelyek nem szabványos megközelítést alkalmaznak, például kihegyezett fa vonalzót vagy vattát, de ez a megközelítés kevéssé hasznos.

A legnehezebb dolog (a programozás mellett) egy robotot megtervezni.

Első fázis



Ezt hívják a legelső szakasznak - a motorok és érzékelők elhelyezése. Itt is megfigyelhető két kis szenzor a horog előtt, tehát ezek a zsinórérzékelők.

A tartományon lévő fehér vonal észlelésére szolgálnak, hogy elkerüljék a véletlen kiesést a gyűrűből, de nem kötelező alkatrész, és valójában nem használják túl gyakran. nagy sebességek gyakran nem hagynak időt megállni.

Második fázis



És itt már a vezérlő, a meghajtó, a kapcsolók és az akkumulátor csatlakozója van felhelyezve.
Nem marad más hátra, mint kinyomtatni a nyomvonalat és áthelyezni egy textolit táblára, majd kidolgozni a nyomokat.

Így néz ki a kész táblán:

Kész tábla



Robot futásra készen:

Amint látja, nincs itt semmi különösebben bonyolult. Az alábbi problémákról.

Térjünk át a programozásra

A legegyszerűbb módja arduino vagy arduino-kompatibilis vezérlők használata. Ezenkívül az Arduino IDE segít nekünk. Által szabványos séma a robotnak 5 érzékelője van. Tehát az államok lehetnek

Kizárjuk azt a helyzetet, amikor az oldalsó érzékelők egyszerre látják az ellenséget (mert ez nem fordulhat elő, és ha igen, akkor az egyik érzékelőben meghibásodás van), valamint azt a helyzetet, amikor az oldalsó és a két elülső szenzorok 0-t adnak (azaz lásd), mert ez sem lehet, vagy túl kicsi az esély.

Ahhoz, hogy az ellenséghez kerüljön, csak fel kell szerelnünk a csapokat, feszültséget kell kapcsolnunk a motorokra, és le kell olvasnunk az érzékelő leolvasását:

Robot kód

// Az érzékelők tűinek beállítása int pin_left=10; int pin_center_left=11; int pin_center_right=4; int pin_center=12; int pin_right=7; // Tűk a motorokhoz int pin_motor_left_forward=9; int pin_motor_left_back=6; int pin_motor_jobbra_előre=3; int pin_motor_right_back=5; // Lekérdezési érzékelők eredményének tárolására szolgáló változók int cl,cc,cr,l,r; // Lekérdezési érzékelők függvénye void GLAZ() ( cl = digitalRead(pin_center_left); cc = digitalRead(pin_center); cr = digitalRead(pin_center_right); l = digitalRead(pin_left); r = digitalRead(pin_right); ) // Funkció mozgás, 0-tól 255-ig terjedő sebességek elfogadásával az egyes motorok betáplálása üres 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);} }


Csak javítani kell a kódon.

Fontos!
Az érzékelők 1-et adnak vissza, ha nem látnak semmit, és 0-t, ha akadály van.

A kód USB-n keresztüli letöltése után a robot készen áll a versenyre.

Megfontolásra érdemes

Először is ott vannak az elemek. Az általunk használt szenzorok (éles 340) meglehetősen ritkák vagy egyáltalán nem léteznek. Ezért, ha lehetséges, akkor egyszerre sokat kell vennie, vagy meg kell találnia a paraméterek szempontjából megfelelő analógot.

Másodszor, nem okozhat semmilyen kritikus kárt az ellenséges robotban, és nem használhat például mágneseket a felvételhez. Ez némileg korlátoz bennünket a küzdelem eszközeinek megválasztásában.

Ne felejtse el a kerekeket sem. Az ívek, a vékony és csúszós ívek nem működnek, egyszerűen nem fog tudni manőverezni, és nem lesz elegendő erőpillanat. Mindenképpen tesztelje le a gumikat.

Amikor motorokkal dolgozik, ne feledje, hogy maximális terhelés mellett kell dolgozniuk, és elég gyakran égnek.

Érdemes kivehető elemeket is készíteni, mert. A robot elég gyorsan lemerül, és sokáig tart a töltés.

A szükséges vásárlások listája:

1. Forrasztópáka, forrasztóanyag, folyasztószer (opcionális)
2. Textolit táblák (a maratáshoz le kell zárni az összes pályát, majd az egészet hidrogén-peroxid + citromsav + só oldatba kell tenni több órára, majd letépni pl. a papírt, ami alatt a pályák voltak rejtett)
3. Sharp 340 érzékelők
4. Motorok, válasszon ízlés szerint, minél több fordulatszám, annál jobb.
Érdemes ezek közül választani: polulu. (hozzáadva)
5. Akkumulátorok (javaslom, hogy vegyél lítium polimert) + töltőállomás
6. Kulcs (kapcsoló gomb, táblára forrasztva) és elektromos elemek (a képen van nyomával)
7. Sofőr
8. Vezérlő, kezdésnek kipróbálhatod a Polulu A-Star 32u4 micro-t és oda feltöltheted az arduino bootloadert
9. Fémlemez a testhez
10. Fúrjon lyukakat a táblán
11. Indító és indító modul
P.S. Ha valamit kihagytam - írj, javítom.

Verseny

A következő versenyek Szentpéterváron, a Robofinistben lesznek, ezért most keményen készülünk rájuk, és ha részt akarsz venni, akkor mindent világosan és gyorsan kell megtenned.

De nem ezek a versenyek az egyetlenek, Oroszországban elég sok van, a legnagyobbakat Moszkvában rendezik. Körülbelül havonta-kétszer megélheti a boldogságot és versenyezhet.

Nem ritkák az ilyen külföldi versenyek, és mi is szeretnénk oda eljutni. Íme egy hozzávetőleges térkép a világ versenyeiről:

Nagyon reméljük, hogy a robotszumó csak hazánkban fog fejlődni, és mindenkit meghívunk, hogy vegyen részt robotunk megalkotásában. Nagyon epikusnak tűnik, amikor egy robotról darabok repülnek el.

Bemutatkozó cikkünk ezzel véget ért, és sok sikert kívánunk a robotikához, szívesen látunk a versenyeken!

1. Általános szabályok

1.1. A robotnak ki kell löknie az ellenfél robotját a fekete vonalból (határon kívül).

1.2. A verseny kezdete után a robotoknak egymás felé kell haladniuk az ütközésig.

1.3. Az ütközés után a robotoknak meg kell próbálniuk kapcsolatot teremteni egymással.

1.4. A verseny ideje alatt a csapattagok nem érinthetik meg a robotokat.

1.5. Két autonóm robotot helyeznek el a ringben (kerek mező). A robotok megpróbálják kiszorítani az ellenfelet a ringből.

1.6. A legtöbb kört megnyerő robot nyeri a mérkőzést.

1.7. Ha „mindegyikével” játszunk, a legjobb robot nyerte a legtöbb mérkőzést.

1.8. Nagyszámú résztvevővel lehetőség van az "olimpiai rendszer" szerinti rangsor rendezésére (indulásra).

2. Robot

2.1. A robotokat csak LEGO Mindstorms alkatrészek felhasználásával kell megépíteni.

2.2. A teljes kör alatt:

A robot mérete nem haladhatja meg a 25x25x25 cm-t.

A robot súlya nem haladhatja meg az 1 kg-ot.

2.3. A versenybírók véleménye szerint az a robot, amely más robotokat szándékosan károsít, vagy más módon rongálja a pálya felületét, a verseny teljes időtartamára kizárásra kerül.

2.4. Szigorúan tilos a robot tervezésénél használni:

Ragasztók.

2.5. A mérkőzés előtt a robotok méretét és súlyát ellenőrzik.

2.6. A robotnak több programja lehet, amelyek közül a kezelő minden kört kiválaszthat.

2.7. A mérkőzések között megengedett a robotok kialakításának és programjainak változtatása.

3. Terület

3.1. 1 m átmérőjű fehér kör 5 cm vastag fekete szegéllyel.

3.2. A körben piros csíkokkal jelöljük a robotok kiindulási zónáit.

3.3. A piros pont a kör közepét jelöli.

3.4. A mezőny 16 mm magas dobogóra kerül.

4. Versenyek tartása

4.1. A versenyek mérkőzések sorozatából állnak. A mérkőzés dönti el, hogy a benne résztvevő két robot közül melyik a legerősebb. A mérkőzés 3 menetből áll, 30 másodpercesek. A mérkőzést az a robot nyeri, amelyik a legtöbb kört nyeri. A bíró további kört is használhat a vitatott helyzetek tisztázására.

4.2. A fordulókat egymás után tartják.

4.3. A kör elején a robotokat a piros csíkok mögé (a ring közepétől) helyezik el a rajtterületükön, a robot minden mezőt érintő részének a rajtterületen belül kell lennie.

4.4. A játékvezető utasítására jelzést adnak a robotok indítására, míg a robotok kezelőinek el kell indítaniuk a programot a robotokon és 5 másodpercen belül 1 méternél nagyobb távolságra kell eltávolodniuk a pályától. Ugyanebben az 5 másodpercben a robotoknak egyenes vonalban kell haladniuk és ütközniük kell egymással.

4.5. Kezdőknek: Az ütközés után a robotok nem tudnak manőverezni a ring körül.

4.6. Gyakorlottaknak: Az ütközés után a robotok tetszés szerint manőverezhetnek a ring körül.

4.7. Ha a robotok a kör kezdete után 5 másodpercen belül nem ütköznek össze, akkor az a robot számít a forduló vesztesének, amely miatt a bíró véleménye szerint nincs ütközés. Ha a robotok egyenes vonalban haladnak, és nincs idejük 5 másodpercen belül összeütközni, akkor a kiindulási területéhez legközelebb eső robot számít a kör vesztesének.

5. A nyertes kiválasztásának szabályai

5.1. Ha a robot nem mozog anélkül, hogy 10 másodpercnél tovább ne érintkezne egy másik robottal, akkor a kör vesztesének minősül.

5.2. Ha megérinti a robot bármely részét (még ha nem is a robothoz van rögzítve) a fekete határon túl, a robot elveszíti a kört.

5.3. Ha a kör végén egyetlen robot sem tolódik ki a körből, akkor a kör közepéhez legközelebb eső robotot tekintjük a kör győztesének.

5.4. Ha a győztes a fent leírt módszerekkel nem határozható meg, a győzelemről vagy a visszajátszásról a versenybíró dönt.

6. Játékvezetés

6.1. A szervezők fenntartják a jogot a versenyszabályzat változtatására, amennyiben ezek a változtatások valamelyik csapat számára nem jelentenek előnyt.

6.2. Az ellenőrzést és az összesítést a zsűri végzi a fenti szabályok szerint.

6.3. A bírók minden versenyen teljes jogkörrel rendelkeznek; minden résztvevőnek be kell tartania döntéseit.

6.4. Ha a játékvezetéssel kapcsolatban kifogás merül fel, a csapatnak joga van szóban fellebbezni a bírók döntése ellen a Szervező Bizottságnál, legkésőbb az aktuális forduló végéig.

6.5. A bírók döntése alapján ismétlést lehet tartani abban az esetben, ha a robot külső beavatkozás miatt nem tudta befejezni a szakaszt, vagy ha a meghibásodás a játéktér rossz állapota, vagy az általa elkövetett hiba miatt következett be. az ítélőtábla.

6.6. A csapattagok és a vezető sem fizikálisan, sem távolról nem zavarhatja meg csapatuk robotjának vagy az ellenfél robotjának tevékenységét. A beavatkozás azonnali kizáráshoz vezet.

6.7. A játékvezető saját belátása szerint befejezheti a mérkőzést, ha a robot 10 másodpercen belül nem tud tovább mozogni.

12.2. A robot tervezése a "Sumo" versenyhez.

A robot alapvető viselkedése "Sumo" nagyon hasonlít egy robot viselkedéséhez "Kegelring". A robotnak a mezőn belül is meg kell találnia egy tárgyat, és ki kell tolnia a körből. A különbségek szokás szerint a részletekben rejlenek: most ez az objektum viszont a mi robotunkat keresi, és arra is vágyik, hogy mielőbb kitolja.

Ennek ellenére koncentráljunk a célunkra: a tárgyakat távolról érzékelni képes szenzorok egyike (infravörös vagy ultrahangos) továbbra is segít az ellenfél felkutatásában, illetve egy színérzékelő segítségével időben meghatározzuk a pálya fekete határát. Ezért a szumórobot program létrehozásához és hibakereséséhez azt javasoljuk, hogy ugyanazt a robotot használja, amelyet a 11. leckéhez – Kegelring – készítettünk.

Annak érdekében, hogy megvédjük az elöl található érzékelőt az ellenféllel való interakciótól, lökhárítót építünk és rögzítünk a robotunkra. Az alábbiakban részletes építési útmutató található otthoni és oktatási Lego mindstorms EV3-hoz. Nyugodtan kísérletezzen, és készítse el saját tervezését.

Lego Mindstorms EV3 Home

Lego Mindstorms EV3 oktatás

A kapott elemet a robotunk elülső gerendájára rögzítjük.

Lego Mindstorms EV3 Home

Lego Mindstorms EV3 oktatás

Oktatórobotunk készen áll. Kezdjük el egy szumó robot program készítését. Nagyon jó, ha lehetőséged van másik robot segítségével hibakeresni a programot! Ha nem, akkor nem baj: használhatsz ellenfélként például egy rádióvezérlésű autómodellt vagy ugyanazokat a Kegelring teket.

12.3. A „Sumo” verseny programjának elkészítése.

Az első gondolat, ami eszünkbe jut, az a program használata "Kegelring" némi kozmetikai változtatással. Valójában a robot viselkedési algoritmusai bekerülnek "Kegelring"és be "Sumo" nagyon hasonló. Megvalósítják egy tárgy felkutatását és a mezőből való kilökését. Letölthet egy programot a szumóbirkózó számára "Kegelring", de egy ilyen szumóbirkózó nem fog túl hatékonyan dolgozni. Az előző leckében szerzett ismeretek azonban most hasznosak lesznek számunkra.

Ideje feltölteni projektünket a programozási környezetbe "lecke-2", hozzon létre benne egy új programot lecke-12és csatlakoztassa a robotot a programozási környezethez.

A szumóbirkózó viselkedési modellje két részre osztható: ellenfelet keresniés az ellenfél támadása. Kezdjük az első rész megvalósításával - ellenfelet keresni.

Írjuk le részletesen robotunk akciósorozatát, amikor ellenfelet észlelünk a pályán:

  1. forog a tengelye körül, amíg az elöl elhelyezett érzékelő ellenfelet észlel;
  2. megállni az ellenfél előtt.

Ez a műveletsor teljesen megismétli a robot tekercskeresési algoritmusát "Kegelring", de mivel a robotok közötti távolság be "Sumo" meghaladhatja a robot és a tű távolságát, akkor más küszöbértéket kell választanunk a használt érzékelőhöz.

Állíts fel ellenfeleket a pályára egymással szemben, az alábbi ábra szerint.

Ez a pozíció gyakorlatilag megfelel a robotok verseny közbeni maximális távolságának, így az ellenfél távolságát mérő szenzor aktuális leolvasása vehető küszöbértéknek. Fontos: mivel a küszöbérték elég nagy lesz, szükséges, hogy a robot működése közben a mezőn kívül kb. 1 m távolságra ne legyenek olyan idegen tárgyak, amelyek zavarhatják a keresést.

A "Hardver oldal", amely a programozási környezet jobb alsó sarkában található, válassza ki a fület "Kikötő nézet" (1. ábra, 2. poz. 1)és a leolvasások megfelelő megjelenítési módjának beállításával vegye le az ellenfél távolságát meghatározó érzékelő leolvasását.

Esetünkben az ultrahangos érzékelő módban van "Távolság centiméterben"értéket mutat - 56.1 (1. ábra, 2. poz.) 57 .

Rizs. egy

Infravörös érzékelő módban "Közelítés"értéket mutat - 68 (2. ábra, 2. poz.). A küszöbértékhez a következő számot vesszük - 70 .

Rizs. 2

-vel analógiával "Kegelring" beprogramozhatjuk a robotot, hogy ellenfelet találjon, csak hogy kicsit elhatárolódjunk az előző leckétől, a robot forgásirányát fordítva fordítjuk:

ultrahangos érzékelő

  1. "Zöld paletta" "Bekapcsol" "B" egyenlőre állítva -30 , a port teljesítményértéke "C" egyenlőre állítva 30 (3. ábra, 1. poz.).
  2. Ellenfél kereséséhez használja a programblokkot a módban "Ultrahangos érzékelő - Összehasonlítás - Távolság centiméterben" 57 (3. ábra, 2. poz.).
  3. kapcsolja ki a motorokat (3. ábra, 3. poz.).

Rizs. 3

infravörös érzékelő

  1. Annak érdekében, hogy a robot a tengelye körül forogjon, a programblokkot használjuk "Független motorvezérlés" "Zöld paletta", Állítsa be a blokk üzemmódot "Bekapcsol", a port teljesítményértéke "B" egyenlőre állítva -30 , a port teljesítményértéke "C" egyenlőre állítva 30 (4. ábra, 1. poz.).
  2. Ellenfél kereséséhez a programblokkot használjuk "Várakozás" "Narancs paletta" módban "Infravörös érzékelő - Összehasonlítás - Közelítés", az érzékelő működésének küszöbértékével egyenlő 70 (4. ábra, 2. poz.).
  3. Miután a robot az ellenféllel szemben áll, a programblokk segítségével "Független motorvezérlés" "Zöld paletta" kapcsolja ki a motorokat (4. ábra, 3. poz.).

Rizs. négy

Az algoritmus hibakeresésének szakaszában ki kell választania az értékeket "Erő" motorok "B"és "C" valamint az érzékelő küszöbértéke, hogy a robot pontosan érzékelje, és közvetlenül az ellenfél előtt álljon meg. Csak ezután lehet folytatni a támadási algoritmus szoftveres megvalósítását.

Ha az ellenfél keresése be "Sumo" nagyon hasonlít a tekekereső kereséshez "Kegelring", akkor az ellenfél lökése fontos különbség! Támadás indításakor első lépésként a motorok maximális teljesítményével egyenesen az észlelt ellenfél felé rohanunk, színérzékelővel ellenőrizve a gyűrű határának észlelését. De az ellenfelünk is mozoghat! Ezért nagyon valószínű, hogy az ellenfél félreáll a támadásunk irányítása alól. Ebben az esetben a robotunk, miután kihagyta, a ring határa felé halad, elveszítve az ellenfelet és a drága időt.

Ezért mindkét érzékelőt elemezni kell egy egyenes előremozdulás során, és meg kell állítani a támadást, ha a robot elveszíti az ellenfelet VAGY a robot eléri a gyűrű határát. Ezért abba kell hagynunk a programblokk használatát "Várakozás" "Narancs paletta"és egymástól függetlenül egy ciklusban két érzékelő leolvasásának fogadására és feldolgozására.

Folytassuk az algoritmus szakaszos megvalósítását az ellenfél támadásait: ehhez létrehozunk egy ideiglenes programot a projektben lecke-12-1és kezdje el kitölteni programmondatokkal.

  1. Vegyünk egy programblokkot "Kiciklizés" "Narancssárga paletta".
  2. A blokk belsejében "Ciklus" tegyen egy programblokkot "Független motorvezérlés" "Zöld paletta" "Bekapcsol" (5. ábra, 1. poz.), motor erő "B"és "C" a maximális értékre állítva - 100 (5. ábra, 2. poz.).

Rizs. 5

  1. A blokk mögött "Független motorvezérlés" helyezze el a programblokkot. Állítsa be a blokk üzemmódot "Összehasonlítás – visszavert fény intenzitása" (6. ábra)

Rizs. 6

Ebben az üzemmódban a programblokk "Színérzékelő" "Sárga paletta" vizuálisan nagyon hasonlít a szoftverblokkhoz "Várakozás" "Narancs paletta" módban "Színérzékelő - Összehasonlítás - Visszavert fényintenzitás". De a blokkal ellentétben "Elvárás", ez a programblokk nem várja meg a paraméterek által megadott feltételt "Összehasonlító típus" (7. ábra, 1. poz.)és "Küszöbérték" (7. ábra, 2. poz.), és azonnal ad egy logikai értéket ( "Igaz" vagy "Hazugság") a kimeneti paraméterben, a mért érték pedig a kimeneti paraméterben "Világítás" (7. ábra, 4. poz.).

Lehetőségek "Összehasonlítás típusa"és "Küszöb" a Rizs. 7 poz. 12 "Összehasonlítási eredmény" (7. ábra, 3. poz.) logikai értéket adott "Igaz" amikor a színérzékelő átlépi a gyűrű fekete határát.

Rizs. 7

  1. Ultrahangos érzékelő használata esetén az egység mögött "Színérzékelő" telepítse a szoftverblokkot "Ultrahangos érzékelő" "Sárga paletta". Állítsa be a blokk üzemmódot "Összehasonlítás – Távolság centiméterben" (8. ábra, 1. poz.). Paraméter "Összehasonlítás típusa" (8. ábra, 2. poz.), paraméter "Küszöbérték" (8. ábra, 3. poz.)úgy állítsa be, hogy a kimeneti paraméter "Összehasonlítási eredmény" (8. ábra, 4. poz.) logikai értéket adott "Igaz"

Rizs. nyolc

Infravörös érzékelő használata esetén az egység mögött "Színérzékelő" telepítse a szoftverblokkot "Infravörös érzékelő" "Sárga paletta". Állítsa be a blokk üzemmódot "Összehasonlítás – Közelítés" (9. ábra, 1. poz.). Paraméter "Összehasonlítás típusa" (9. ábra, 2. poz.), paraméter "Küszöbérték" (9. ábra, 3. poz.)úgy állítsa be, hogy a kimeneti paraméter "Összehasonlítási eredmény" (9. ábra, 4. poz.) logikai értéket adott "Igaz" az ellenfél robotja látásának elvesztése esetén.

Rizs. 9

Elemezzük még egyszer a támadóalgoritmusunk köztes kódját: maximális teljesítményre kapcsoltuk a motorokat, és folyamatosan, ciklusonként lekérdezve haladunk előre. Ha robotunk átlépi a gyűrű határának fekete vonalát, akkor a kimeneti paraméter értéke "Összehasonlítási eredmény" "Színérzékelő"értelmét veszi fel "Igaz". Ha robotunk ellenfelet veszít, akkor a kimeneti paraméter értéke "Összehasonlítási eredmény" az ellenfelet követő szenzor is felveszi az értéket "Igaz". Ezen esetek bármelyikében meg kell állítani a támadást a ciklusunk befejezésével. Ebben segít nekünk a programblokk. Ismerkedjünk meg ezzel a blokkkal részletesebben: programblokk "Logikai műveletek" logikai adatokkal kapcsolatos műveletek végrehajtására tervezték (10. ábra).

Rizs. tíz

Kiválasztott programblokk mód "Logikai műveletek" "Piros paletta" négy logikai adatokon végzett művelet egyikét határozza meg: "ÉSÉS)", "VAGY VAGY)", "XOR"és "Kivétel (NEM)". D va bemeneti paraméterek "a"és "b"(működéshez "Kivétel (NEM)"- egy bemeneti paraméter "a") átadja a bemeneti értékeket a programblokknak, és a kapott értéket a kimeneti paraméter állítja elő "Eredmény". Ha korábban nem találkozott logikai műveletekkel, a spoiler alatti mellékelt súgóban megismerkedhet az alapismeretekkel.

Boole-műveletek

A logikai műveleteket csak logikai értékeken (adatokon) hajtják végre, ami szintén logikai érték. Egy logikai érték két állapot egyikében lehet: "Igaz" vagy "Hazugság". A logikai műveleteket gyakran táblázatos formában írják le: "1. bemeneti paraméter" - "2. bemeneti paraméter" = "eredmény". A programblokk által megvalósított logikai műveletek "Logikai műveletek" "Piros paletta" táblázatos formában a következőképpen írható:

Logikai művelet "ÉS (ÉS)"

Logikai művelet eredménye "ÉSÉS)" lesz értéke "Igaz" "Igaz" "Hazugság".

"a" művelet "b" eredmény
"Hazugság" "ÉSÉS)" "Hazugság" = "Hazugság"
"Hazugság" "ÉSÉS)" "Igaz" = "Hazugság"
"Igaz" "ÉSÉS)" "Hazugság" = "Hazugság"
"Igaz" "ÉSÉS)" "Igaz" = "Igaz"

Logikai művelet "OR (OR)"

Logikai művelet eredménye "VAGY VAGY)" lesz értéke "Hazugság" csak akkor, ha mindkét bemeneti érték egyenlő "Hazugság", minden más esetben a művelet értéke "Igaz".

"a" művelet "b" eredmény
"Hazugság" "VAGY VAGY)" "Hazugság" = "Hazugság"
"Hazugság" "VAGY VAGY)" "Igaz" = "Igaz"
"Igaz" "VAGY VAGY)" "Hazugság" = "Igaz"
"Igaz" "VAGY VAGY)" "Igaz" = "Igaz"

"XOR" logikai művelet

Logikai művelet eredménye "XOR" lesz értéke "Igaz" csak akkor, ha az egyik bemeneti érték egyenlő "Igaz", minden más esetben a művelet értéke "Hazugság".

"a" művelet "b" eredmény
"Hazugság" "XOR" "Hazugság" = "Hazugság"
"Hazugság" "XOR" "Igaz" = "Igaz"
"Igaz" "XOR" "Hazugság" = "Igaz"
"Igaz" "XOR" "Igaz" = "Hazugság"

Logikai művelet "Kivétel (NEM)"

Boole-művelet "Kivétel (NEM)" csak egy bemeneti értékre vonatkozik. Logikai művelet eredménye "Kivétel (NEM)" a bemeneti érték felett az ellenkező érték.

  1. A programozási blokk mögött "Ultrahangos érzékelő" vagy "Infravörös érzékelő" tegyen egy programblokkot "Logikai műveletek" "Piros paletta".
  • kimeneti paraméter "Összehasonlítási eredmény" programblokk "Színérzékelő" (11. ábra, 12. poz. 1) "a" programblokk "Logikai műveletek" (11. ábra, 12. poz. 4).
  • kimeneti paraméter "Összehasonlítási eredmény" programblokk "Ultrahangos (infravörös) érzékelő" (11. ábra, 12, 2. poz.) csatlakoztassa a bemeneti paramétert "b" programblokk "Logikai műveletek" (11. ábra, 12. poz. 5).
  • Programblokk üzemmód "Logikai műveletek" beállít "VAGY VAGY)" (11. ábra, 12. poz. 3). Ebben az esetben a logikai művelet eredménye felveszi az értéket "Igaz", csak akkor, ha valamelyik feltétel teljesül: a színérzékelő átlépte a fekete vonalat, a robot elvesztette ellenfelét.
  • A programblokk mód beállításával "Ciklus" jelentésbe "Boole-érték" (11. ábra, 12. poz. 7), kimeneti paraméter "Eredmény" programblokk "Logikai műveletek" (11. ábra, 12, 6. poz.) csatlakoztassa a bemeneti paramétert "Amíg az igazság nem lesz" programblokk "Ciklus" (11. ábra, 12. poz. 8). Ezek a beállítások akkor fejezik be a ciklust, amikor "Igaz" logikai művelet eredménye.

Rizs. tizenegy


Rizs. 12

Teszteljük a kapott támadási algoritmust! Ehhez a robotunkat a ringbe helyezzük, ellenkezőleg, egy mozdulatlan ellenfelet telepítünk, és végrehajtásra indítjuk a támadóprogramot. Robotunknak magabiztosan kell kilöknie az ellenfelet a gyűrűből, és meg kell állnia a pálya fekete határa felett. Megtörtént? Tehát a sumoistunk helyesen szabályozza a gyűrű határát.

Végezzük el a második kísérletet: ismét egy mozdulatlan ellenfelet telepítünk a robot elé, és elindítjuk a támadóprogramot. Amikor a robotunk az ellenfélhez rohan és elég közel ér, élesen oldalra vesszük az ellenfelet. Robotunknak meg kell állnia, miután elveszítette ellenfelét.

Összefoglalva: implementáltunk egy ellenfélkereső algoritmust és sikeresen teszteltük, illetve a támadási algoritmust is teszteltük.

A szumóbirkózó befejezett programjának szekvenciálisan ellenfelet kell keresnie egy végtelen hurokban, majd meg kell támadnia az ellenfelet. Lehetőség lenne programunk mindkét részét kombinálni, ha nem egy kis kiegészítésre. Ha a robotunk megállt a gyűrű határa felett, akkor a keresés megkezdése előtt a robotnak egy kicsit visszafelé kell térnie a gyűrű belsejébe. Támadó programunkat a következő kóddal egészítjük ki: a támadási hurkon kívül a " programblokkot használjuk Kapcsolja be a "Narancssárga paletta". Blokkolás üzemmód "Kapcsoló" beállít "Színérzékelő - Összehasonlítás - Visszavert fényintenzitás". Lehetőségek "Összehasonlítás típusa"és "Küszöb" ugyanúgy beállítva, mint korábban a programmondatban "Színérzékelő" "Sárga paletta". Ezért ha robotunk megállt a fekete vonal felett, akkor a végrehajtás átkerül a programblokk felső konténerébe "Kapcsoló". A felső konténerbe helyezzük a programblokkot "Kormányzás" "Zöld paletta", olyan paraméter-beállításokkal, amelyek hatására a robot egy fordulattal hátrébb mozdítja a motorokat. A programblokk alsó konténeréhez "Kapcsoló" helyezzen el egy programblokkot, amely kikapcsolja a motorokat (13. ábra). A támadási algoritmus újbóli tesztelése után megbizonyosodunk arról, hogy miután a szumórobot kiszorította az ellenfelet a ringből, az egy kicsit visszafordult.

Rizs. 13

Most befejezheti a szumórobot programjának fejlesztését. A végtelen hurkon belül egymás után beágyazzuk az ellenfél keresésére szolgáló programot, majd az ellenfél megtámadására szolgáló programot. Próbálja meg saját maga elvégezni ezt a munkát anélkül, hogy belekukkantana a megoldásba.

Következtetés:

A program, amelyet ebben a leckében megbeszéltünk, csak egy közvetlen erő algoritmust valósít meg egy szumórobot viselkedésére. Ez azt jelenti, hogy egy közvetlen hatalmi konfrontációban a robotnak mindenképpen le kell győznie ellenfelét. De a mi edzőrobotunk természetesen semmiben sem hasonlít egy izmos szumóbirkózóhoz. A magabiztos szerepléshez ezen a versenyen a legnagyobb figyelmet kell fordítani mindenekelőtt a robot kialakítására, szilárd, védett platform kialakítására, a gyűrű felületével való tapadás növelésére további hajtókerekek vagy lánctalpok. Népszerű videotárhely Youtube.com kérésre "sumó lego robotok" sok videót találhatsz valódi robotversenyekről, amelyekből minden bizonnyal érdekes ötleteket meríthetsz magadnak, hogy megvalósítsd a saját terveidben.

Ennek a leckének az a fő célja, hogy egy gyakorlati példán keresztül mutasson meg egy módszert az érzékelőpárból származó leolvasások folyamatos feldolgozására. Lehet-e javítani a programunkon? Kétségtelenül! Például a programblokk használatával "Véletlenszerű érték" "Piros paletta", módosítsa az ellenfél megtalálásának algoritmusát oly módon, hogy a robot véletlenszerűen balra vagy jobbra forogjon, ezáltal megzavarva az ellenfelet. Próbálja meg saját maga beépíteni ezt a kiegészítő kódot a programunkba. Gondolja át azt is, milyen változtatásokat kell végrehajtania a programon, ha egy fehér szegélyű fekete gyűrűn versenyez. Lehetnek saját fejlesztési ötletei: ossza meg őket a lecke megjegyzéseiben!