Competiții internaționale de roboți - Reguli - Exemple de roboți - Robot de traiectorie bazat pe LEGO EV3. Competiții internaționale de roboți - Reguli - Exemple de roboți - Robot de traiectorie bazat pe LEGO EV3 Line care conduce controlerul pid ev3

Robotica este un domeniu nou interesant, care probabil va fi dezvoltat în continuare în cursurile școlare de informatică și tehnologie. Boom-ul roboticii se datorează în mare măsură faptului că ne permite să răspundem la întrebarea: „De ce învățăm de fapt programarea?”

În plus, în cursul roboticii vă puteți familiariza cu conceptele elementare ale teoriei controlului automat.

Această pagină prezintă simulatoare de programare și plăci Arduino dezvoltate de autor. Ele pot ajuta în cazurile în care din anumite motive nu este posibil să se utilizeze hardware real. Simulatoarele folosesc capabilități HTML5, așa că vor funcționa numai în browserele moderne (cel mai bine este să utilizați Google Chrome).

sau Mozilla Firefox

Ştiri
acum și pe canalul Telegram 27 noiembrie 2015 Traseul „embrion” a fost adăugat la simulatoare (

M.V. Lazarev
, Orekhovo-Zuevo).
13 octombrie 2015

Acum vă puteți încărca propriile piste (câmpuri pentru robot) în simulatoarele de roboți LEGO. Cum să faci asta? Vedea.

Au fost adăugate noi simulatoare - roboți LEGO cu doi, trei, patru senzori de lumină. Limbajul de control al robotului (Pentru a controla roboții în simulatoare, se folosește un limbaj de programare simplu, care a primit numele de lucru).

SiRoP

Programare simplă a roboților Control robot cu senzor de lumină Senzorul de lumină permite robotului să navigheze pe suprafața mesei, de exemplu, să se deplaseze de-a lungul graniței dintre zonele albe și negre (de-a lungul marginii

linie neagră

). O fotodiodă luminează suprafața, un fotodetector „prinde” razele reflectate și măsoară intensitatea acestora.

Cea mai populară sarcină de acest tip este deplasarea de-a lungul unei linii. Folosind simulatorul, puteți studia diverse legi de control - releu, proporțional și chiar control PID (proporțional-integral-derivat).

Exemple de programe pentru un robot cu senzor de lumină

Principal ( în timp ce 1 ( în timp ce senzorul > 128 ( motor = 100 motor = 100 așteptare(10) ) înapoi () întoarcere() ) ) înapoi ( motor = -100 motor = -100 așteptare(260) ) întoarcere ( motor = -50 motor = 50 așteptați(50) )

Control robot cu doi senzori de lumină

Doi senzori de lumină permit robotului să navigheze mai bine și să conducă de-a lungul unei linii subțiri. Sunt aduse puțin înainte și răspândite în lateral. Ca și în cazul sarcinilor cu un singur senzor, acest simulator poate fi folosit pentru a studia diverse legi de control.

Exemple de programe pentru un robot cu trei senzori de lumină

Control robot cu patru senzori de lumină

Patru senzori de lumină permit robotului să detecteze mai bine virajele strânse. Senzorii interni sunt utilizați pentru reglarea fină; Doi senzori externi sunt plasați ușor înainte și depărtați. Sunt folosite atunci când se întâlnește o viraj bruscă. Câștigul pentru control bazat pe citirile senzorilor perechii externe este selectat mai mare decât pentru perechea internă (vezi. L.Yu. Ovsyanitskaya et al., Algoritmi și programe pentru mișcarea robotului Lego Mindstorms EV3 de-a lungul liniei, M.: „Pero”, 2015).

Exemple de programe pentru un robot cu patru senzori de lumină

În timp ce 1 ( d0 = senzor > 128 d1 = senzor > 128 d2 = senzor > 128 d3 = senzor > 128 dacă d1 & !d2 ( motor = 100 motor = 0 ) dacă! d1 & d2 ( motor = 0 motor = 100 ) dacă d1 == d2 ( motor = 100 motor = 100 ) dacă d0 & !d3 ( motor = 30 motor = 0 ) dacă!d0 & d3 ( motor = 0 motor = 30 ) așteptați(10) )

K1 = 0,2 k2 = 0,4 în timp ce 1 ( u1 = senzor - senzor u2 = senzor - senzor motor = 50+k1*u1+k2*u2 motor = 50-k1*u1-k2*u2 wait(10) )

Controlul unui robot cu un senzor de distanță (sonar)

Senzorul de distanță (sonar) vă permite să determinați distanța până la cel mai apropiat obstacol în timp ce robotul se mișcă. Emite un semnal ultrasonic și primește semnalul reflectat. Cu cât timpul dintre semnalele emise și recepționate este mai lung, cu atât distanța este mai mare.

Folosind un senzor de distanță, robotul poate fi programat să navigheze automat într-un labirint de formă cunoscută, dar de dimensiune necunoscută.

Această problemă este clasică, simplă ideologic, poate fi rezolvată de multe ori și de fiecare dată vei descoperi ceva nou.

Există multe abordări pentru a rezolva problema următoarei linii. Alegerea unuia dintre ele depinde de designul specific al robotului, de numărul de senzori, de locația lor față de roți și unul de celălalt.

În exemplul nostru, trei exemple de robot vor fi analizate pe baza modelului educațional principal al Robot Educator.

Pentru început, asamblam modelul de bază al robotului educațional Robot Educator, pentru aceasta puteți folosi instrucțiunile din software MINDSTORMS EV3.

De asemenea, de exemplu, vom avea nevoie de senzori de culoare EV3. Acești senzori de lumină sunt ca nimeni alții în cel mai bun mod posibil potrivite pentru sarcina noastră atunci când lucrăm cu ei, nu trebuie să ne facem griji cu privire la intensitatea luminii din jur. Pentru acest senzor, în programe vom folosi modul de lumină reflectată, în care este estimată cantitatea de lumină reflectată din lumina roșie de fundal a senzorului. Limitele citirilor senzorului sunt 0 - 100 de unități, pentru „fără reflexie” și respectiv „reflexie totală”.

Ca exemplu, vom analiza 3 exemple de programe pentru deplasarea pe o traiectorie neagră, reprezentată pe un fundal plat și deschis:

· Un senzor, cu regulator P.

· Un senzor, cu regulator PC.

· Doi senzori.

Exemplul 1. Un senzor, cu regulator P.

Proiecta

Senzorul de lumină este instalat pe un fascicul amplasat convenabil pe model.


Algoritm

Funcționarea algoritmului se bazează pe faptul că, în funcție de gradul de suprapunere a fasciculului de iluminare al senzorului cu o linie neagră, citirile returnate de senzor variază gradient. Robotul menține poziția senzorului de lumină pe marginea liniei negre. Prin conversia datelor de intrare de la senzorul de lumină, sistemul de control generează o valoare pentru viteza de rotație a robotului.


Deoarece pe o traiectorie reală senzorul generează valori în întregul său interval de funcționare (0-100), 50 este selectat ca valoare la care se străduiește robotul. În acest caz, sunt generate valorile transmise funcțiilor de rotație intervalul -50 - 50, dar aceste valori nu sunt suficiente pentru o viraj abruptă a traiectoriei. Prin urmare, intervalul ar trebui extins de o dată și jumătate la -75 - 75.

Drept urmare, în program, funcția calculatorului este un simplu controler proporțional. Funcția căreia ( (a-50)*1,5 ) în domeniul de funcționare al senzorului de lumină generează valori de rotație în conformitate cu graficul:

Exemplu de funcționare a algoritmului

Exemplul 2. Un senzor, cu regulator PK.

Acest exemplu se bazează pe aceeași construcție.

Probabil ați observat că în exemplul precedent robotul s-a legănat excesiv, ceea ce nu i-a permis să accelereze suficient. Acum vom încerca să îmbunătățim puțin această situație.

La controlerul nostru proporțional adăugăm, de asemenea, un controler cub simplu, care va adăuga o îndoire funcției controlerului. Acest lucru va reduce balansarea robotului în apropierea graniței dorite a traiectoriei, precum și va face smucituri mai puternice atunci când este departe de acesta.

Una dintre mișcările de bază în construcția ușoară este urmărirea liniei negre.

Teoria generală și exemplele specifice de creare a unui program sunt descrise pe site-ul web wroboto.ru

Voi descrie cum implementăm acest lucru în mediul EV3, deoarece există diferențe.

Primul lucru pe care robotul trebuie să-l cunoască este semnificația „punctului ideal” situat la granița alb-negru.

Locația punctului roșu din figură corespunde exact acestei poziții.

Opțiunea ideală de calcul este măsurarea valorilor alb-negru și luarea mediei aritmetice.

Puteți face acest lucru manual. Dar dezavantajele sunt vizibile imediat: chiar și într-o perioadă scurtă de timp, iluminarea se poate schimba, iar valoarea calculată va fi incorectă.

Deci, puteți obține un robot care să o facă.

În timpul experimentelor, am aflat că nu este necesar să se măsoare atât alb, cât și negru. Numai albul poate fi măsurat. Iar valoarea ideală a punctului este calculată ca valoarea albă împărțită la 1,2 (1,15), în funcție de lățimea liniei negre și de viteza robotului.

Valoarea calculată trebuie scrisă într-o variabilă pentru a o accesa mai târziu.

Calculul „punctului ideal”

Următorul parametru implicat în mișcare este coeficientul de rotație. Cu cât este mai mare, cu atât robotul reacționează mai puternic la schimbările de iluminare. Dar prea mult mare valoare va face robotul să se clătinească. Valoarea este selectată experimental individual pentru fiecare proiect de robot.

Ultimul parametru este puterea de bază a motoarelor. Afectează viteza robotului. Creșterea vitezei de mișcare duce la o creștere a timpului de răspuns al robotului la schimbările de iluminare, ceea ce poate duce la îndepărtarea de la traiectorie. Valoarea este selectată și experimental.

Pentru comoditate, acești parametri pot fi, de asemenea, scriși în variabile.

Raportul de rotație și puterea de bază

Logica deplasării de-a lungul liniei negre este următoarea: se măsoară abaterea de la punctul ideal. Cu cât este mai mare, cu atât robotul ar trebui să se străduiască să revină la el mai puternic.

Pentru a face acest lucru, calculăm două numere - valoarea puterii fiecăruia dintre motoarele B și C separat.

Sub formă de formulă arată astfel:

Unde Isens este valoarea citirilor senzorului de lumină.

În sfârșit, implementarea în EV3. Cel mai convenabil este să-l aranjați sub forma unui bloc separat.

Implementarea algoritmului

Acesta este exact algoritmul care a fost implementat în robot pentru categoria de mijloc a WRO 2015

Detalii Autor: Konovalov Igor     Controlerul proporțional este o îmbunătățire. Principalul dezavantaj al releului este că nu îi pasă cum diferă valorile curente de valoarea normală a senzorului. Are doar două stări - fie încercați să creșteți valorile senzorului cu un anumit număr constant dacă sunt mai mici decât valoarea normală, fie să o creșteți. Din această cauză, oscilațiile apar cu o amplitudine constantă, ceea ce este foarte ineficient.
    Este mult mai logic să determinați cât de „departe” sunt citirile curente față de normal și să schimbați amplitudinea în funcție de aceasta. Pentru a fi mai clar, să ne uităm la un exemplu. Exemplul, ca și în articolul precedent, este același: un robot de la Lego Mindstorms EV3 conduce pe o linie neagră folosind un senzor de culoare în modul de lumină.

Robotul încearcă să conducă de-a lungul graniței dintre alb și negru, iar acolo senzorul arată aproximativ 50% din iluminare. Și cu cât este mai departe de poziția normală, cu atât robotul face mai mult efort pentru a reveni la 50%.
    Pentru a scrie un program, vom folosi termenii „eroare” și „acțiune de control”. Eroarea este diferența dintre citirea curentă a senzorului și cea normală. În cazul nostru, dacă robotul vede acum 20% din iluminare, atunci eroarea este 20-50 = -30%. Semnul de eroare indică direcția în care trebuie să se îndrepte robotul pentru a scăpa de eroare. Acum trebuie să spunem motoarelor în ce direcție să rotească robotul, cu ce viteză și cu cât de ascuțit. Este necesar să se exercite un efect de control asupra motoarelor, ceea ce înseamnă cât de repede ar trebui să revină la poziția normală. Acțiunea de control (UP) este calculată ca eroare (eroare) înmulțită cu factorul de proporționalitate (k). Acest coeficient este utilizat pentru a spori sau reduce influența erorii asupra acțiunii de control. Acțiunea de control este furnizată către director, unde este setată viteza medie a robotului.
    Cum se ajustează factorul de proporționalitate? Selectați valorile în mod experimental; pentru parcurgerea traiectoriei poate fi, de exemplu, de la 0,2 la 1,5, în funcție de viteza și designul robotului. Dacă coeficientul este prea mare, atunci robotul se va clătina foarte mult, dacă este mic, se va conduce fără probleme, dar la un moment dat va aluneca la întoarcere din cauza intrării de control insuficiente. Să scriem două versiuni ale programului - cu variabile (pentru cei care le-au studiat deja) și fără.


    Dar acest regulator poate fi consolidat și prin introducerea unei componente proporționale și integrale descrierea va fi în articolele următoare. Pe curând!

Un controler proporțional este un dispozitiv care exercită o acțiune de control u(t) asupra unui obiect proporțional cu abaterea sa liniară e(t) de la o stare dată x0(t);

e(t)=x0(t)-x(t), unde x(t) este starea în în acest moment timp;

u(t)=ke(t), unde k este factorul de amplificare.
Adică, cu cât robotul se abate mai mult de la cursul dat, cu atât motoarele trebuie să lucreze mai activ pentru a-l nivela.

Mișcarea liniei cu un senzor de lumină folosind un controler P

Mișcarea de-a lungul graniței alb-negru poate fi construită și pe regulatorul P. Deși în exterior, problema pare a fi rezolvată doar cu ajutorul unui controler cu releu, deoarece sistemul are doar două stări vizibile pentru ochiul uman: alb și negru. Dar robotul vede totul diferit, pentru că nu există o limită clară între aceste culori. Putem spune că este miop și vede o tranziție în gradient de nuanțe de gri.

Acest lucru va ajuta la construirea unui regulator P.
Prin definirea stării de lucru ca citiri de la senzorul de lumină, vom învăța să exercităm un efect de control proporțional asupra motoarelor conform următoarei legi:
e=s1-gri, unde s1 este citirile curente ale senzorului, iar gri este valoarea setată.

Coeficientul k (egal cu 2 în acest exemplu) ar trebui să fie destul de mic (de la 1 la 3). Un astfel de regulator funcționează eficient doar pentru unghiuri mici de deviere, astfel încât robotul trebuie plasat în direcția de mișcare, astfel încât senzorul să fie aliniat partea stângă de la linia neagră. Este ușor de observat că mișcarea de-a lungul liniei de pe regulatorul P este lină. iar în unele zone de lucru se deplasează aproape drept sau urmând exact coturile liniei.

Calibrarea senzorului

Să ne uităm la numărul 48 folosit în formulă. Aceasta este media aritmetică a citirii senzorului de lumină pe alb-negru, de exemplu (40+56)/2=48. Cu toate acestea, citirile senzorilor se schimbă adesea din diverse motive: o suprafață diferită, o schimbare a iluminării generale a încăperii, o ușoară modificare a designului etc. Prin urmare, vom calibra robotul manual determinând citirile senzorului de lumină pe alb și negru.

Mișcarea liniei cu doi senzori de lumină folosind un controler P
Este destul de dificil să navighezi corect într-o intersecție cu un senzor de lumină. Dacă doriți să faceți acest lucru la o viteză suficient de mare, aveți nevoie de cel puțin doi senzori plasați la o distanță de două lățimi de linii (sau mai late).
În timpul conducerii, sunt posibile patru stări ale senzorului:

  • ambele pe alb - deplasându-se drept;
  • stânga (s1) nu pe negru, dreapta (s2) pe alb - mișcare spre stânga;
  • stânga pe alb, dreapta pe negru - mișcare la dreapta;
  • ambele pe negru - drept înainte.
Că. cu citiri egale ale senzorului (ambele albe sau ambele negre), robotul conduce drept. Înainte de a porni robotul, vom auto-calibra ambii senzori. Apoi algoritmul de deplasare de-a lungul unei linii cu un regulator P va arăta astfel:

Coeficientul k poate varia într-un interval destul de larg (de la 1 la 20 sau mai mult) în funcție de curbura liniei, de manevrabilitatea robotului și de diferența dintre alb și negru pe teren.
Stare importantă. Calibrarea automată trebuie efectuată pe o suprafață cu o singură culoare și, de preferință, la iluminarea care va ocupa cea mai mare parte a traseului. De exemplu, dacă robotul se mișcă de-a lungul unei linii negre pe un câmp alb, atunci acesta trebuie calibrat pe un câmp alb. Aceste. Poziția robotului la pornire ar trebui să fie astfel:


Și încă o notă. Există senzori ale căror citiri diferă cu 10-20%. Este recomandabil să nu le asociați cu un regulator cu un coeficient mare, deoarece cu o schimbare bruscă a iluminării generale, chiar și pe un câmp alb uniform, abaterile se pot dovedi a fi diferite, ceea ce va duce la consecințe neașteptate.