Competiții internaționale de roboți - Reguli - Exemple de roboți - Robot de traiectorie bazat pe LEGO EV3.

Acasă

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 o valoare prea mare 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. O creștere a 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:

Î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

Controler proporțional

Descriere

În controlul automat, acțiunea de control u(t) este de obicei o funcție a erorii dinamice - abaterea e(t) a variabilei controlate x(t) de la valoarea sa stabilită x0(t):

e(t) = x0(t) – x(t).

Acesta este principiul Polzunov-Watt de reglare prin abatere sau principiul feedback-ului. Expresia matematică a dependenței funcționale a acțiunii de control dorite u0(t) față de mărimile măsurate de regulator se numește legea sau algoritmul de control discutat mai sus.

Un controler proporțional este un dispozitiv care exercită un efect de control asupra unui obiect proporțional cu abaterea acestuia de la o stare dată:

Aici k este câștigul controlerului.

Starea dată x0 se numește de obicei punct de referință, iar abaterea de la aceasta e se numește rezidual. În plus, pentru claritate, vom desemna discrepanța prin abrevierea err (din cuvântul englezesc „error” - eroare).

Controlul motorului

Un războinic cu experiență nu va balansa o sabie așa cum o face un robot pe un controler cu releu. Trebuie să venim cu un algoritm care să țină motorul care ține sabia într-o poziție strict fixă ​​(Fig. 7.1). Regulatorul P va ajuta în acest sens.

Fie e ​​1 - citirile senzorului de viteză 1 de pe motorul A - să fie o variabilă reglabilă. Setarea x0 = 45, iar rezidual e = 45 – e 1. Atunci acțiunea de control asupra motorului este dată de formula

u = k ∙ (45 – e 1).

Aici k este factorul de câștig, de exemplu 5, care va îmbunătăți răspunsul motorului chiar și cu abateri mici de la valoarea de referință.

1 Nu confundați desemnarea matematică a e reziduală (din eroare) cu citirile codificatorului e 1 (din encoder), o variabilă de mediu Robolab predefinită.

La devierea într-o direcție pozitivă, motorului i se va aplica o acțiune de control negativ și invers. Acest control poate fi aplicat motorului într-un ciclu cu o scurtă întârziere de 1-10 ms pentru a elibera controlerul (Fig. 7.8).

Orez. 7.8. Algoritm de control al motorului folosind un controler proporțional.

Dacă factorul de câștig este crescut de la 5 la 100, controlerul nostru proporțional va începe să acționeze ca un releu, provocând fluctuații puternice din cauza efectului de depășire.

Limbajul RobotC nu are o notație atât de convenabilă pentru citirea codificatorului ca în Robolab, așa că programul arată puțin mai lung:

int k=5, u; nMotorEncoder=0; în timp ce (adevărat)

u=k*(45-nMotorEncoder); motor=u;

Mai mult, pentru a oferi o „lovitură cu sabia”, este suficient să aveți o variabilă în loc de numărul 45 și să îi schimbați valoarea din exterior, de exemplu, dintr-o sarcină paralelă. Acest lucru este tratat în secțiunea despre baterii roboți din Capitolul 8.

Acum să construim un controler care controlează nu numai poziția statică a motorului, ci și viteza de mișcare a acestuia. Urmând logica algoritmului, valoarea de referință, care până acum a fost o constantă și nu s-a schimbat, ar trebui să înceapă să se miște spre o creștere sau o scădere. Respectând regulatorul, motorul îl va urma inevitabil. Cel mai simplu instrument pentru creșterea continuă a valorii punctului de referință este un cronometru.

Controlerul NXT are patru temporizatoare încorporate, fiecare dintre acestea putând măsura timpul în zecimi, sutimi și miimi de secundă. Să stăpânim primul cronometru, care efectuează 10 „sfaturi” pe secundă.

kov". În Robolab este desemnat T1 sau Timer100ms1, iar în RobotC este timer100.

Să facem ca unghiul de deviere al motorului alfa, specificat în exemplul anterior la 45, să depindă de citirile temporizatorului cu coeficientul de accelerare k 2:

alfa = k2 ∙ T1.

Acțiunea de control va rămâne aceeași cu factorul de amplificare k 1:

u = k 1 ∙ (alfa – e 1).

Pe scurt, în programul în limbajul Robolab, vom aplica acțiunea de control direct la motor, având inițializat în prealabil cronometrul

Orez. 7.9. Controlul vitezei motorului este de o rotație pe secundă.

Coeficientul k 2 = 36 determină că într-o secundă valoarea alfa crește la 360, ceea ce corespunde unei rotații complete a motorului:

int k1=2, k2=36, u, alfa; nMotorEncoder=0; ClearTimer(T1); în timp ce (adevărat)

alfa=timer100*k2; u=k1*(alpha-nMotorEncoder); motor=u;

Folosind diviziunea întregului, așa cum a fost adoptată în C (și Robolab) pentru variabile de tip întreg, este posibil să se realizeze modificări discrete de unghi, i.e. o crește o dată pe secundă:

alfa = T 1 / 10 ∙ k 2.

Cu un coeficient k 2 = 60, mișcarea fasciculului va corespunde mișcării acelui secund pe cadranul ceasului. Dar asta nu este suficient

sesizabil. Pentru claritate, puteți seta k2 = 30, apoi săgeata va face o revoluție completă în 12 „căpușe” de 30 de grade fiecare. Fiți atenți la succesiunea operațiilor de împărțire și înmulțire a întregilor, schimbarea ordinii sau „reducerea” acestora va schimba cu siguranță rezultatul (Fig. 7.10).

Orez. 7.10. Imitație accelerată a mișcării acelui ceasului.

Și în sfârșit, un exemplu de toboșar matematic. În loc să se deplaseze constant înainte, acul va oscila înainte și înapoi sub controlul regulatorului P. Operația de împărțire cu un rest, care în C este notat cu semnul %, va ajuta în acest sens. Restul unui număr întreg nenegativ împărțit la 2 va fi întotdeauna 0 sau 1:

alfa = T 1% 2 ∙ k 2.

Mărind abaterea cu k 2 = 15 ori, obținem un punct de referință oscilant alfa, care va forța controlerul să miște motorul de 5 ori pe secundă, fie 0º, fie 15 grade. Modificările în program sunt minore. Să ne uităm la un exemplu în RobotC:

int k1=3, k2=15, u, alfa; nMotorEncoder=0; ClearTimer(T1); în timp ce (adevărat)

alfa=timer100%2*k2; u=k1*(alpha-nMotorEncoder); motor=u;

Acest prototip baterist lovește masa la intervale regulate. Principalul lucru este să începi în poziția corectă. Folosind matematica cu numere întregi, puteți seta un model ritmic mai complex, de exemplu (Tabelul 7.1):

alfa = T 1% 5% 2 ∙ k 2.

centru = S3.

Coeficientul este determinat în ciclul:

k 1 = c + (S 3 - centru) / k 2.

Orez. 7.36. Mișcarea de-a lungul liniei pe un controler proporțional cu coeficient de plutire.

Legea de control a câștigului rezultată poate fi aplicată nu numai componentei proporționale, ci și oricărei alte componente, precum și acțiunii de control în ansamblu (Fig. 7.36).

Controler PID

Controlerul proporțional-integral-derivat (PID) este unul dintre cele mai populare și este utilizat într-un număr mare de tipuri diferite de dispozitive care necesită un răspuns rapid și o poziționare precisă a sistemului. După cum sugerează și numele, acest regulator constă din suma a trei componente și este reprezentat grafic în Fig. 7.37.

Orez. 7.37. Circuitul controlerului PID.

Aceasta este o diagramă simplificată. Valoarea erorii dinamice e (t) este furnizată la intrarea controlerului, iar acțiunea de control u (t) este generată la ieșire:

u (t) = p + i + d = k p ∙ e (t) + k i ∙ ò t

e (τ)d τ + k d ∙

de.

Componenta proporțională, prezentată în diagramă sub formă de triunghi, este responsabilă de poziționarea sistemului într-o stare dată. În unele cazuri, poate provoca depășiri cu auto-oscilații ulterioare. Adică, regulatorul P poate „exagera” și robotul va începe să se deplaseze dintr-o parte în alta.

Componenta integrală acumulează experiență negativă (însumează erorile) și produce un efect compensator. Cu abateri minime, componenta proporțională „slăbește”, iar componenta integrală, datorită creșterii rapide prin însumare, ajută la „atingerea” valorii controlate la punctul de referință.

Componenta diferenţială (componenta D) monitorizează rata de schimbare a stării sistemului şi previne o posibilă depăşire. În unele cazuri, componenta D este opusă ca semn cu cea proporțională, iar în altele este aceeași.

Suntem deja familiarizați cu componenta proporțională, cea diferențială este descrisă în capitolul anterior 6. Să o luăm pe integrală. Această componentă este determinată dinamic, însumată cu valoarea anterioară:

i = i + ki × e(t) × dt.

Sensul fizic al mărimii e(t) × dt este că este

proportional cu durata de aflare a sistemului intr-o stare de eroare. Deoarece coeficientul k i este scos din paranteze, putem vorbi despre valoarea i ca suma duratelor erorii. Astfel, găsim integrala prin însumare.

Să luăm în considerare utilizarea unui controler PID folosind exemplul unui robot care se echilibrează pe două roți. Această problemă clasică poate fi rezolvată folosind diferiți senzori într-o varietate de moduri. Exemplul propus folosește un senzor de lumină și cea mai simplă formă de controler PID. Cu toate acestea, obținerea stabilizării robotului va necesita utilizarea unor citiri mai precise ale senzorului.

Format RAW

Datele senzorului intră în controlerul NXT sub formă brută, neprocesată. Toți senzorii transmit o valoare digitală de la 0 la 1023 către sistemul de operare, care este apoi procesată de driverul corespunzător și redusă la o formă mai ușor de înțeles (distanță 0...255, iluminare 0...100, atingere 0 sau 1, etc.). Dar datele pot fi primite direct, ocolind șoferul. Acest format brut se numește de obicei RAW (din engleză „raw”). În unele cazuri, poate fi folosit pentru a obține o precizie mai mare. De exemplu, intervalul de valori ale senzorului de lumină poate crește de aproximativ 10 ori. Această oportunitate este folosită în continuare.

Puteți primi date în format RAW atât în ​​Robolab, cât și în RobotC. Pentru a face acest lucru, senzorul este inițializat în consecință și datele sunt citite din acesta folosind o variabilă specială predefinită.

Robot de echilibrare

Designul robotului Segway este prezentat în Fig. 7.38: controler poziționat vertical, roți apropiate și senzor de lumină orientat în jos. Algoritmul va fi ceva mai complicat.

Principiul stabilizării unui Segway într-o poziție echilibrată este următorul. Dacă robotul se aplecă înainte, citirea senzorului de lumină crește din cauza luminii reflectate. Ca răspuns la aceasta, este generată o acțiune de control, forțând robotul să se deplaseze înainte și prin urmare să preia din nou o poziție verticală.

Când se deplasează înapoi, citirile senzorului scad și robotul începe să se miște înapoi. Componenta proporțională este responsabilă de toate acestea. Rolul componentelor integrale și diferențiale este jucat de asigurarea împotriva depășirii.

Orez. 7.38. Robot Segway de echilibrare.

În fig. 7.39 arată algoritmul în Robolab. Cea mai mare parte este ocupată de inițializarea variabilelor. Pentru a îmbunătăți acuratețea, nu numai că datele senzorului sunt citite în format RAW, dar majoritatea variabilelor sunt declarate în format real float. Algoritmul PID în sine este într-o buclă.

Orez. 7.39. Algoritmul de echilibrare se bazează pe un controler PID.

Urmând tradiția deplasării de-a lungul liniei, folosim variabila gri ca punct de referință - citirile medii ale senzorului de lumină în poziția de echilibru. Noul parametru de scară specifică scalarea acțiunii de control. Acesta este în esență un factor de atenuare deoarece valoarea produsă de regulator este prea mare pentru motoarele NXT. Ar fi posibil să-l adăugați în interiorul coeficienților existenți, dar pentru RobotC acest parametru va fi diferit, dar coeficienții vor fi aceiași.

Cu coeficienții dați, robotul se stabilizează bine pe un linoleum sau un birou simplu, de culoare deschisă. Adică nu necesită o culoare albă a suprafeței. Pentru a lansa, trebuie să setați cu precizie Segway-ul în poziția de echilibru. Dacă robotul începe cu o anumită înclinare înainte sau înapoi, va începe imediat să se miște în direcția înclinării.

Un exemplu similar în RobotC este ușor diferit din mai multe motive. În primul rând, performanța lui NXT cu firmware-ul acestui mediu este de aproximativ 1,4 ori mai mare decât cea a Robolab, deci factorul de scară ar trebui crescut. În al doilea rând, valorile RAW sunt transmise în ordinea corectă și va trebui să setați motoarele să inverseze sau pur și simplu să aplicați o acțiune de control negativ:

int gri=SensorRaw; int err, errold=0;

plutitor kp=25, ki=350, kd=0,3; scară plutitoare=14;

float dt=0,001; float p, i=0, d, u; în timp ce (adevărat)

err= gri-SensorRaw; //Abatere cu semnul opus p=kp*err;

i=i+ki*err*dt; d=kd*(err-errold)/dt; erod=err; u=(p+i+d)/scara; motor=u; motor=u; așteptați1Msec(1);

Elemente ale teoriei controlului automat la școală1

O sarcină metodologică importantă și interesantă este aceea de a „arunca o punte” între ariile de cunoștințe ale unui specialist și ale unui elev, ajutând elevii să vadă perspectivele unei viitoare specialități, adică. efectuează orientare în carieră, iar studenții văd aplicabilitatea practică a cunoștințelor lor profesionale. Pentru a obține un efect similar, au fost dezvoltate metode de calculare a regulatorilor folosind aparate matematice care nu au depășit sfera programelor școlare de matematică și fizică. În special, în loc de ecuații diferențiale, sunt utilizate ecuații de diferență, care corespund bine naturii discrete a interacțiunii dintre obiect și controler în controlul computerului.

Să luăm în considerare, de exemplu, problema construirii controlerelor proporționale (P) și proporțional-derivate (PD) în problema controlului mișcării unui robot mobil de-a lungul unui perete. Să notăm cu x t distanța dintre robot și perete, cu θt - unghiul de direcție al robotului și cu u t - acțiunea de control în momentul cu numărul de serie t, respectiv, unde t = 0, 1, 2, ... - numere de momente de schimbare

reniu. Se crede că sondarea senzorilor și modificările amplitudinii acțiunii de control sunt efectuate la intervale egale de timp h. Pentru sarcinile de control ale roboților Lego NXT, este firesc să presupunem că acțiunea de control este diferența dintre vitezele unghiulare de rotație a roților, proporțională cu rata de modificare a unghiului de direcție:

Presupunând că abaterile de curs de la θt =0 nominal sunt mici, iar viteza medie a robotului este constantă: vt=v, dinamica modificărilor variabilelor de stare ale robotului poate fi descrisă într-o primă aproximare prin ecuații liniare de stare :

unde g = h2vr / b.

Să setăm distanța dorită până la perete x*> 0 și să determinăm obiectivul de control (CT) prin relație

xt → x* ca t→∞.

Acum să introducem în mod firesc la nivel de fond conceptul de stabilitate asimptotică ca proprietate a soluțiilor sistemului (4), asigurând atingerea valorii țintă (5) în orice condiții inițiale care diferă destul de puțin de cele țintă. Este ușor de observat că pentru u t = 0, soluția ecuației (4) este orice valoare constantă x t = x*. Dar întrucât ecuația (4), corespunzătoare modelului unui dublu integrator (dublu sumator), nu are proprietatea de stabilitate asimptotică, centrul de control (5) nu se realizează cu control constant. Acest lucru este ușor de demonstrat analitic prin însumarea unui număr de

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 la un moment dat;

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.

Acesta este ceea ce vă va ajuta să construiți un 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, așa că robotul trebuie plasat în direcția de mișcare, astfel încât senzorul să fie pe partea stângă a liniei negre. 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 mișcă 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 la 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 autocalibra 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.

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

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-ul MINDSTORMS EV3.

De asemenea, de exemplu, vom avea nevoie de senzori de culoare EV3. Acești senzori de lumină, ca nimeni alții, sunt cei mai potriviti 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.

Ca rezultat, î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.

Detalii Autor: Konovalov Igor     Controlerul proporțional este o îmbunătățire. Principalul dezavantaj al releului este că nu îi pasă cât de mult diferă valorile curentului 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 de-a lungul unei linii negre 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 ar trebui să se 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. Intrarea de control este trimisă către direcție, 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!

Încărcare...Încărcare...