Jucării intelectuale – constructori de roboți programabili. Robotică: de unde să începi să studiezi, unde să studiezi și care sunt perspectivele

Lucrând la intersecția dintre cibernetică, psihologie și behaviorism (știința comportamentului) și un inginer care alcătuiește algoritmi pentru sisteme robotice industriale, ale căror instrumente principale includ matematică superioară și mecatronică, aceștia lucrează în cea mai promițătoare industrie din următorii ani - robotica . Roboții, în ciuda noutății comparative a termenului, au fost mult timp familiari omenirii. Iată doar câteva fapte din istoria dezvoltării mecanismelor inteligente.

Oameni de Fier Henri Droz

Chiar și în miturile Greciei Antice erau menționați sclavii mecanici, creați de Hefaistos pentru a efectua lucrări grele și monotone. Iar primul inventator și dezvoltator al unui robot umanoid a fost legendarul Leonardo da Vinci. Cele mai detaliate desene ale geniului italian au supraviețuit până în zilele noastre, descriind un cavaler mecanic capabil să imite mișcările umane cu brațele, picioarele și capul.

Crearea primelor mecanisme automate cu control program a început la sfârșitul secolului al XV-lea de către ceasornicarii europeni. Specialiștii elvețieni, tatăl și fiul Pierre-Jacques și Henri Droz, au avut cel mai mare succes în acest domeniu. Au creat o serie întreagă („băiat scriitor”, „desenator”, „muzician”), al cărei control se baza pe mecanisme de ceas. În onoarea lui Henri Droz, mai târziu, toate automatele umanoide programabile au început să fie numite „androidi”.

La originile programării

Bazele programării roboților industriali au fost puse la începutul secolului al XIX-lea în Franța. Aici au fost dezvoltate primele programe pentru mașini automate textile (filare și țesut). Armata în creștere rapidă a lui Napoleon avea mare nevoie de uniforme și, în consecință, de țesături. Un inventator din Lyon, Joseph Jacquard, a propus o modalitate de a reconfigura rapid un răzbătut pentru a produce diferite tipuri de produse. Adesea, această procedură a necesitat o cantitate imensă de timp, un efort enorm și atenția unei întregi echipe. Esența inovației a fost utilizarea cardurilor de carton cu găuri perforate. Acele, ajungând în locurile tăiate, au mutat firele în modul necesar. Schimbarea cardurilor a fost efectuată rapid de către operatorul mașinii: carte perforată nouă - program nou - tip nou de țesătură sau model. Dezvoltarea franceză a devenit prototipul sistemelor automate moderne, roboți cu capacități de programare.

Ideea propusă de Jacquard a fost folosită cu entuziasm de mulți inventatori în dispozitivele lor automate:

  • Șeful departamentului de statistică S. N. Korsakov (Rusia, 1832) - în mecanismul de comparare și analiză a ideilor.
  • Matematicianul Charles Babbage (Anglia, 1834) - în Motorul Analitic pentru rezolvarea unei game largi de probleme matematice.
  • Inginer (SUA, 1890) - într-un dispozitiv pentru stocarea și prelucrarea datelor statistice (tabulator). Pentru înregistrare: în 1911 compania. Hollerith a fost numit IBM (International Business Machines).

Cardurile perforate au fost principalele medii de stocare până în anii 60 ai secolului trecut.

Mașinile inteligente își datorează numele unui dramaturg ceh În piesa „R.U.R.”, care a fost publicată în 1920, scriitorul a numit un robot o persoană artificială creată pentru zone dificile și periculoase de producție (robota. (cehă) - muncă grea). Ce diferențiază un robot de mecanisme și dispozitive automate? Spre deosebire de acesta din urmă, robotul nu numai că efectuează anumite acțiuni, urmând orbește algoritmul stabilit, dar este și capabil să interacționeze mai strâns cu mediul și cu persoana (operatorul), și să își adapteze funcțiile atunci când semnalele și condițiile externe se schimbă.

Este general acceptat că primul robot de lucru a fost proiectat și implementat în 1928 de inginerul american R. Wensley. Humanoidul „intelectual de fier” a fost numit Herbert Televox. Biologul Makoto Nishimura (Japonia, 1929) și soldatul englez William Richards (1928) pretind și ei lauri de pionier. Mecanismele antropomorfe create de inventatori aveau o funcționalitate similară: puteau să-și miște membrele și capul, să execute comenzi vocale și sonore și să răspundă la întrebări simple. Scopul principal al dispozitivelor a fost de a demonstra realizările științifice și tehnice. Următoarea rundă în dezvoltarea tehnologiei a făcut posibilă crearea în curând a primilor roboți industriali.

Generație după generație

Dezvoltarea roboticii este un proces continuu, incremental. Până în prezent, au apărut trei generații distincte de mașini „inteligente”. Fiecare este caracterizat de anumiți indicatori și domenii de aplicare.

Prima generație de roboți a fost creată pentru un tip îngust de activitate. Mașinile sunt capabile doar să efectueze o anumită secvență de operații programată. Dispozitivele de control al roboților, circuitele și programarea exclud practic funcționarea autonomă și necesită crearea unui spațiu tehnologic special cu echipamentul suplimentar și sistemele de informare și măsurare necesare.

Mașinile din a doua generație sunt numite senzori sau adaptive. Programarea roboților se realizează luând în considerare un set mare de senzori externi și interni. Pe baza analizei informatiilor provenite de la senzori se dezvolta actiunile de control necesare.

Și, în sfârșit, a treia generație este roboți inteligenți care sunt capabili de:

  • Rezumă și analizează informațiile,
  • Îmbunătățiți și auto-învățați, acumulați abilități și cunoștințe,
  • Recunoașteți imaginile și schimbările din situație și, în conformitate cu aceasta, organizați activitatea sistemului dvs. executiv.

Inteligența artificială se bazează pe algoritmi și software.

Clasificare generala

La orice expoziție modernă reprezentativă de roboți, varietatea de mașini „inteligente” poate uimi nu numai oamenii obișnuiți, ci și specialiștii. Ce tipuri de roboți există? Clasificarea cea mai generală și semnificativă a fost propusă de omul de știință sovietic A.E. Kobrinsky.

Pe baza scopului și funcțiilor lor, roboții sunt împărțiți în producție, industrial și cercetare. Primul, in concordanta cu natura muncii prestate, poate fi tehnologic, de ridicare si transport, universal sau specializat. Cele de cercetare sunt concepute pentru a studia zone și zone care sunt periculoase sau inaccesibile pentru oameni (spațiul cosmic, intestinele pământului și vulcanii, straturile adânci ale oceanului mondial).

După tipul de control putem distinge biotehnice (copiere, comandă, cyborg, interactiv și automat), prin principiu - programabil rigid, adaptabil și programabil flexibil. Dezvoltarea rapidă a tehnologiei moderne oferă dezvoltatorilor oportunități aproape nelimitate atunci când proiectează mașini inteligente. Dar un circuit și o soluție excelentă de proiectare vor servi doar ca un shell costisitor fără software-ul adecvat și suport algoritmic.

Pentru ca siliciul cu microprocesor să preia funcțiile creierului robotului, este necesar să „umplem” programul corespunzător în cristal. Limbajul uman obișnuit nu este capabil să ofere o formalizare clară a problemelor, acuratețea și fiabilitatea evaluării lor logice. Prin urmare, informațiile necesare sunt prezentate într-o anumită formă folosind limbaje de programare a robotului.

În conformitate cu sarcinile de management în curs de rezolvare, se disting patru niveluri ale unui astfel de limbaj special creat:

  • Nivelul cel mai scăzut este utilizat pentru a controla actuatoarele sub formă de valori precise ale mișcării liniare sau unghiulare a părților individuale ale sistemului inteligent,
  • Nivelul manipulatorului permite controlul general al întregului sistem, poziționând corpul de lucru al robotului în spațiu de coordonate,
  • Nivelul operațiunilor servește la formularea unui program de lucru prin indicarea secvenței acțiunilor necesare pentru a obține un anumit rezultat.
  • La cel mai înalt nivel - sarcini - programul indică fără detalii ce trebuie făcut.

Robotiștii se străduiesc să reducă roboții de programare la comunicarea cu ei în limbaje de nivel superior. În mod ideal, operatorul stabilește sarcina: „Asamblați motorul cu ardere internă al unei mașini” și se așteaptă ca robotul să ducă la bun sfârșit sarcina.

Nuanțe de limbaj

În robotica modernă, programarea roboților se dezvoltă de-a lungul a doi vectori: programarea orientată spre robot și programarea orientată spre probleme.

Cele mai comune limbaje orientate spre robot sunt AML și AL. Primul a fost dezvoltat de IBM doar pentru controlul mecanismelor inteligente de producție proprie. Al doilea, un produs al specialiștilor de la Universitatea Stanford (SUA), se dezvoltă activ și are un impact semnificativ asupra formării de noi limbi din această clasă. Un profesionist poate discerne cu ușurință trăsăturile caracteristice ale lui Pascal și Algol în limbă. Toate limbajele orientate spre robot descriu un algoritm ca o secvență de acțiuni ale unui mecanism „inteligent”. În acest sens, programul se dovedește adesea a fi foarte greoi și incomod în implementarea practică.

La programarea roboților în limbaje orientate spre probleme, programul specifică o secvență nu de acțiuni, ci de obiective sau poziții intermediare ale unui obiect. Cel mai popular limbaj din acest segment este limbajul AUTOPASS (IBM), în care starea mediului de lucru este reprezentată sub formă de grafice (vârfuri - obiecte, arce - conexiuni).

Antrenamentul robotilor

Orice robot modern este un sistem de învățare și de adaptare. Toate informațiile necesare, inclusiv cunoștințele și abilitățile, îi sunt transferate în timpul procesului de învățare. Acest lucru se realizează atât prin stocarea directă a datelor relevante în memoria procesorului (programare detaliată - eșantionare), cât și prin utilizarea senzorilor robotului (prin demonstrație vizuală) - toate mișcările și mișcările mecanismelor robotului sunt stocate în memorie și apoi reproduse în lucrare. ciclu. În timp ce învață, sistemul își rearanjează parametrii și structura și formează un model informațional al lumii exterioare. Aceasta este principala diferență dintre roboți și linii automate, mașini industriale cu o structură rigidă și alte instrumente tradiționale de automatizare. Metodele de predare enumerate au dezavantaje semnificative. De exemplu, la eșantionare, reconfigurarea necesită ceva timp și forță de muncă din partea unui specialist calificat.

Un program de programare a roboților prezentat de dezvoltatorii Laboratorului de Tehnologia Informației de la Massachusetts Institute of Technology (CSAIL MIT) la conferința internațională de automatizare industrială și robotică ICRA-2017 (Singapore) pare foarte promițător. Platforma C-LEARN creată de ei are avantajele ambelor metode. Acesta oferă robotului o bibliotecă de mișcări elementare cu constrângeri specificate (de exemplu, forța de prindere pentru un manipulator în conformitate cu forma și rigiditatea piesei). În același timp, operatorul demonstrează mișcările cheie robotului într-o interfață 3D. Sistemul, bazat pe sarcina la îndemână, generează o secvență de operații pentru a finaliza ciclul de lucru. C-LEARN vă permite să rescrieți un program existent pentru un robot cu un design diferit. Operatorul nu necesită cunoștințe aprofundate de programare.

Robotică și inteligență artificială

Experții de la Universitatea Oxford avertizează că tehnologia mașinilor va înlocui mai mult de jumătate din locurile de muncă actuale în următoarele două decenii. Într-adevăr, roboții lucrează de mult timp nu numai în zone periculoase și dificile. De exemplu, programarea a înlocuit semnificativ brokerii umani pe bursele mondiale. Câteva cuvinte despre inteligența artificială.

În mintea omului obișnuit, acesta este un robot antropomorf care poate înlocui o persoană în multe domenii ale vieții. Acest lucru este parțial adevărat, dar într-o măsură mai mare inteligența artificială este o ramură independentă a științei și tehnologiei, folosind programe de calculator, simulând gândirea „Homo sapiens”, opera creierului său. În stadiul actual de dezvoltare, AI ajută oamenii mai mult și îi distrează. Dar, potrivit experților, progresele suplimentare în domeniul roboticii și inteligenței artificiale pot pune o serie de întrebări morale, etice și juridice omenirii.

La târgul de roboți din acest an de la Geneva, cel mai avansat android din lume, Sophia, a anunțat că învață să fie om. În octombrie, Sophia a fost recunoscută drept cetățean al Arabiei Saudite cu drepturi depline, pentru prima dată în istoria inteligenței artificiale. Primul semn?

Tendințe majore în robotică

În 2017, experții din industria digitală au remarcat câteva soluții remarcabile în domeniul tehnologiilor de realitate virtuală. Nici robotica nu a fost omisă. Direcția de îmbunătățire a controlului unui mecanism robotic complex printr-o cască virtuală (VR) pare foarte promițătoare. Experții prezic cererea pentru o astfel de tehnologie în afaceri și industrie. Cazuri de utilizare probabile:

  • Controlul echipamentelor fără pilot (încărcătoare de depozit și manipulatoare, drone, remorci),
  • Efectuarea cercetărilor medicale și a operațiilor chirurgicale,
  • Dezvoltarea de obiecte și zone greu accesibile (fundul oceanului, regiuni polare). În plus, roboții de programare le permit să funcționeze autonom.

O altă tendință populară este mașina conectată. Mai recent, reprezentanții gigantului Apple au anunțat începutul dezvoltării propriei „drone”. Tot mai multe companii își exprimă interesul pentru crearea de mașini capabile să se deplaseze în mod independent pe drumuri accidentate, păstrând încărcătura și echipamentele.

Complexitatea crescândă a algoritmilor de programare a roboților și a învățării automate impune cerințe sporite resurselor de calcul și, în consecință, hardware-ului. Aparent, soluția optimă în acest caz ar fi conectarea dispozitivelor la infrastructura cloud.

Un domeniu important este robotica cognitivă. Creșterea rapidă a numărului de mașini „inteligente” îi obligă pe dezvoltatori să se gândească din ce în ce mai mult la cum să-i învețe pe roboți să interacționeze armonios.

Multe controlere robotizate sunt implementate folosind limbaje de programare speciale. De exemplu, multe programe de arhitectură generală au fost implementate în limbajul comportamentului, care a fost definit de Brooks. Acest limbaj este un limbaj de control în timp real, bazat pe reguli, care, atunci când este compilat, produce controlere AFSM. Reguli individuale ale acestui limbaj, specificate folosind sintaxele de tipul Lisp, sunt compilate în automate AFSM, iar grupurile de automate AFSM sunt combinate folosind un set de mecanisme pentru transmiterea mesajelor locale și globale.

La fel ca arhitectura generică, limbajul de comportament este limitat deoarece urmărește să creeze AFSM-uri simple cu o definiție relativ îngustă a fluxului de comunicare între module. Dar recent, pe baza acestei idei au fost efectuate noi cercetări, care au dus la crearea unui număr de limbaje de programare, asemănătoare în spirit cu limbajul comportamental, dar mai puternice și care asigură o execuție mai rapidă.

Una dintre aceste limbi este limbaj robotic universal, sau pe scurt GRL (Limbajul robotic generic). GRL este un limbaj de programare funcțional pentru crearea de sisteme de control modulare mari. La fel ca un limbaj de comportament, GRL folosește mașini cu stări finite ca blocuri de bază. Dar, ca o setare pe deasupra acestor automate, GRL oferă o listă mult mai largă de constructe pentru definirea fluxului de comunicare și sincronizarea constrângerilor între diferite module decât un limbaj de comportament. Programele GRL sunt compilate în programe eficiente în limbaje de comandă, cum ar fi CU.

Un alt limbaj de programare important (și arhitectura asociată) pentru software-ul de robotică paralelă este sistemul de planificare a acțiunii reactive sau RAPS (sistem de plan de acțiune reactiv). Sistemul RAPS permite programatorilor să specifice obiectivele, planurile asociate cu acele obiective (sau să definească parțial politici) și să specifice condițiile în care aceste planuri sunt susceptibile de a fi implementate cu succes.

În mod crucial, RAPS include și prevederi pentru a face față defecțiunilor inevitabile care apar în sistemele robotice reale. Programatorul poate specifica proceduri pentru detectarea diferitelor tipuri de defecțiuni și poate oferi o procedură pentru eliminarea unei situații de excepție pentru fiecare tip de defecțiune. În arhitecturile cu trei niveluri, RAPS este adesea folosit la nivel executiv, ceea ce îi permite să facă față cu succes situațiilor neașteptate care nu necesită reprogramare.

Există, de asemenea, câteva alte limbi care oferă instrumente de raționament și de învățare pentru roboți. De exemplu, Golog este un limbaj de programare care permite interacțiunea fără întreruperi între instrumentele algoritmice de rezolvare a problemelor (planificare) și instrumentele de control reactiv specificate direct folosind specificația.

Programele în limbajul Golog sunt formulate în termeni de calcul situațional, ținând cont de posibilitatea suplimentară de utilizare a operatorilor de acțiune nedeterminiști. Pe lângă specificarea unui program de control cu ​​capacități de acțiune nedeterministă, programatorul trebuie să ofere și un model complet al robotului și al mediului său.

Odată ce programul de control atinge un punct de alegere nedeterminist, planificatorul (specificat sub forma unui demonstrator de teoreme) este chemat pentru a determina ce să facă în continuare. În acest fel, programatorul poate defini controlere parțial specificate și se poate baza pe utilizarea programatoarelor încorporate pentru a face selecția finală a planului de control.

Principala caracteristică atractivă a limbajului Golog este integrarea perfectă a controlului reactiv și a controlului algoritmic. Deși Golog are cerințe stricte (observabilitate completă, stări discrete, model complet), limbajul a creat controale la nivel înalt pentru o gamă de roboți mobili de interior.

Limbajul JSk CES (prescurtare de la C++ pentru sistemele încorporate) este o extensie a limbajului C++ care combină instrumente probabilistice și de învățare. Tipurile de date CES includ distribuții de probabilitate, permițând programatorului să facă calcule folosind informații incerte fără efortul asociat de obicei cu implementarea metodelor probabilistice.

Mai important, limbajul CES oferă personalizarea software-ului robotizat prin învățare bazată pe exemple, la fel ca ceea ce se face în algoritmii de învățare. Limba CES permite programatorilor să lase „goluri” în cod, care sunt umplute cu funcții de antrenament; De obicei, aceste intervale sunt reprezentări parametrice diferențiabile, cum ar fi rețelele neuronale. Ulterior, la etapele individuale de învățare, pentru care profesorul trebuie să stabilească comportamentul de ieșire necesar, învățarea inductivă are loc folosind aceste funcții. Practica a arătat că limbajul CES poate fi folosit cu succes în zonele problematice caracteristice unui mediu parțial observabil și continuu.

Limbajul ALisp este o extensie a limbajului Lisp. Limba ALisp permite programatorilor să specifice puncte de selecție nedeterministe, similare cu punctele de selecție din limbajul Golog. Dar ALisp nu folosește un demonstrator de teoreme pentru a lua decizii, ci mai degrabă un instrument de învățare inductiv care folosește învățarea prin întărire pentru a determina acțiunea corectă. Prin urmare limbajul ALisp poate fi văzută ca o modalitate convenabilă de introducere a cunoștințelor despre domeniul problemei într-o procedură de învățare prin întărire, în special cunoștințe despre structura ierarhică a „procedurilor” pentru comportamentul dorit. Până acum, ALisp a fost folosit doar pentru a rezolva probleme de robotică în studiile de simulare, dar ar putea deveni baza unei metodologii promițătoare pentru crearea roboților care pot învăța interacționând cu mediul lor.

Programarea roboților industriali în SprutCAM

Nikolai Konov,
Director al companiei KROKK, d.o.o., Slovenia, Ljubljana (www.krokk.si)

Roboți industriali în industria modernă

Piața globală a robotilor

Utilizarea roboților industriali în întreaga lume crește în fiecare an. Până în 2018, peste 1,3 milioane de roboți vor fi desfășurați în întreaga lume. Densitatea medie a roboților în producție, conform datelor din 2014, este de 66 de unități la 10 mii de muncitori. În 21 de țări, acest indicator este peste medie (Figura 1).

Acestea includ majoritatea țărilor industrializate din Europa, SUA, Canada și regiunea asiatică (Coreea de Sud, Japonia, Taiwan). Slovenia nu este ultimul loc pe această listă și, cu un indicator de 100 de roboți la 10 mii de oameni, ocupă o poziție de lider în automatizarea producției. Roboții sunt cei mai folosiți în industria auto, unde există o densitate mai mare a producției robotizate (Fig. 2).

Aplicații ale roboților

Cea mai comună zonă de aplicare a roboților este efectuarea de operațiuni repetitive pe liniile de producție, cum ar fi sudarea, piesele mobile, vopsirea, asamblarea etc. De regulă, roboții pe astfel de linii funcționează ciclic conform unui program și efectuează aceleași operațiuni. , înlocuind munca umană de rutină. Acest lucru vă permite să automatizați procesul de producție cât mai mult posibil, să reduceți factorul de eroare umană și să maximizați productivitatea. Dar pentru roboții moderni, efectuarea de operațiuni simple de mișcare nu este limita capacităților lor.

Robotul, datorită prezenței a șase grade de libertate, poate face și mișcări complexe pe mai multe axe de-a lungul traiectoriei necesare, efectuând astfel orice procesare care anterior era posibilă doar pe mașini specializate. Acest lucru devine realitate în primul rând datorită anilor de evoluție a roboților și controlerelor industriali. Roboții industriali au devenit mai precisi și mai rigizi - este posibil să poziționați un robot cu o precizie de câteva sutimi de milimetru. Controlerele roboților au devenit, de asemenea, mai avansate - vă permit să controlați mai mulți roboți simultan, precum și să interpolați mișcările robotului cu axe liniare și rotative suplimentare. Toate acestea au creat premisele pentru utilizarea roboților în acele industrii în care până acum era posibil să se utilizeze doar mașini CNC specializate.

Capabilitățile roboților industriali în prelucrarea materialelor

Tendința de utilizare a roboților industriali pentru diferite tipuri de prelucrare a materialelor devine din ce în ce mai populară în industria globală. Și există o explicație pentru aceasta: roboții au o serie de avantaje față de mașinile CNC clasice, cum ar fi: șase grade de libertate; zonă mare de procesare; folosind același robot pentru a apuca piesa de prelucrat; cost scăzut; utilizarea unor axe suplimentare de poziționare a pieselor.

Să ne uităm la aceste avantaje și să analizăm exemple specifice și domenii de aplicare ale unui robot industrial pentru prelucrarea materialelor. Desigur, nu toate tipurile de procesare pot fi înlocuite cu ajutorul roboților, deoarece există limitări în ceea ce privește precizia și rigiditatea. În continuare, vom lua în considerare exemple de utilizare a roboților în acele zone în care este fezabilă din punct de vedere economic și îndeplinește calitatea cerută a produselor finale.

Prelucrare pe cinci axe disponibile

Mașinile CNC, care permit prelucrarea unei piese în cinci grade de libertate, sunt cu siguranță mai scumpe în comparație cu mașinile simple cu trei axe. Și dacă o astfel de mașină este destinată procesării pieselor de dimensiuni mari, atunci costul său crește exponențial.

Toți roboții industriali, precum și mașinile cu cinci axe, au inițial capacitatea de a poziționa unealta, dar costul unei astfel de soluții este uneori de câteva ori mai mic decât o mașină cu caracteristici similare. Ca rezultat, prelucrarea complexă pe cinci axe a produselor care nu necesită precizie devine accesibilă chiar și întreprinderilor mici. Un exemplu izbitor în acest sens este prelucrarea artistică a pietrei (Fig. 3).

Prelucrarea artistică a materialelor - nu doar piatra, ci și lemnul, ipsosul, plasticul etc. - este unul dintre cele mai potrivite zone pentru utilizarea roboților. Precizia ridicată nu este necesară aici și, de regulă, piesele de prelucrat au dimensiuni destul de impresionante și au întotdeauna o suprafață de formă complexă. Utilizarea unui robot permite prelucrarea de orice complexitate și în întregime în modul multi-ax.

Aria mare de procesare

Foarte des produsul care trebuie prelucrat necesită zone mari de mișcare din echipament. Printre exemple se numără corpurile bărcilor, șasiul remorcii, prototiparea produselor de dimensiuni mari, pregătirea matrițelor pentru turnare etc. Pentru prelucrarea unor astfel de produse sunt necesare mașini specializate cu suprafețe mari de mișcare, al căror cost este proporțional cu dimensiunea lor.

Cu toate acestea, robotul poate fi plasat pe o platformă mobilă, a cărei lungime de mișcare poate fi aproape orice. Controlerele moderne de roboți industriali permit interpolarea mișcărilor robotului și, în plus, până la trei axe liniare de mișcare ale robotului însuși. Acest lucru face posibilă utilizarea unui robot industrial într-un spațiu aproape nelimitat. Un exemplu este o celulă robotizată pentru prelucrarea corpului unei nave (Fig. 4).

Prelucrarea corpului unei nave necesită nu numai o orientare complexă a sculei, ci și o zonă mare de mișcare. Utilizarea unui robot instalat pe un portal mobil facilitează procesarea întregii carene a bărcii. În același timp, mișcările robotului de-a lungul portalului sunt complet sincronizate cu mișcările articulațiilor și permit sculei să se deplaseze de-a lungul întregului corp, menținând orientarea corectă.

Utilizarea multifuncțională a robotului

Un robot industrial poate fi folosit atât pentru a prinde o piesă de prelucrat, cât și pentru a o muta printr-o unealtă în același proces. Așa-numita schemă „blank to tool” face posibilă implementarea unui întreg lanț tehnologic de procesare a produsului, precum și mutarea produsului în locația necesară pentru operațiuni ulterioare pe un singur robot (Fig. 5).

După modelarea scaunului scaunului în mașina de turnat prin injecție, este necesar să tăiați, șlefuiți marginile și lustruiți scaunul scaunului. Toate aceste operațiuni se efectuează secvenţial cu robotul prinzând scaunul în timp ce sculele sunt în poziţii fixe.

Grade suplimentare de libertate

Controlerele roboților moderne pot controla nu numai mișcările liniare suplimentare ale robotului în sine, ci și axe suplimentare de rotație ale mesei de lucru cu o piesă de lucru atașată la acesta. Această soluție oferă un grad suplimentar de libertate piesei de prelucrat și permite utilizarea unui robot mai compact pentru a prelucra piesa de prelucrat din toate părțile. Desigur, controlul axelor suplimentare este complet sincronizat cu mișcările articulațiilor robotului (Fig. 6).

Pentru sudarea rezervorului din toate părțile, se folosește o axă rotativă suplimentară, care este controlată sincron cu axele robotului și permite efectuarea operației din toate părțile simultan.

Astfel, roboții industriali moderni pot fi folosiți pentru multe operațiuni de prelucrare în care înainte era imposibil de imaginat: frezare (metal, piatră, lemn, cauciuc, plastic etc.), șlefuire, lustruire, tundere, debavurare, tăiere (plasmă, apă, laser). Astfel de soluții sunt folosite în multe industrii și sunt disponibile chiar și pentru întreprinderile mici, ceea ce le permite să se dezvolte cu investiții reduse.

SprutCAM pentru programarea robotilor

Capacități standard de creare a programelor

Toate exemplele de mai sus necesită programarea mișcărilor complexe ale sculei și, ca urmare, a axelor robotului. În programarea clasică a roboților, mișcările sunt specificate secvenţial - de la un punct la altul. Această abordare este foarte dificil de aplicat pentru traiectorii complexe care sunt, de asemenea, legate de orientarea instrumentului. O astfel de programare va necesita, de asemenea, mult timp, timp în care robotul va fi efectiv ocupat și nu va fi implicat în procesul de producție. Mulți producători oferă posibilitatea de a crea programe pentru un robot în cod G sau un format similar, atunci când programatorul ia în considerare doar coordonatele punctului central al instrumentului și creează un program în spațiul cartezian obișnuit și poziția axelor reale. al robotului este recalculat de controler. În acest caz, se poate face o analogie cu mașinile CNC, care au capacități similare.

Este posibil să programați mișcări simple în acest fel, dar când vine vorba de modelare complexă sau de utilizarea axelor suplimentare, finalizarea sarcinii într-o perioadă rezonabilă de timp devine problematică, iar scrierea manuală a unui astfel de program este o sarcină destul de dificilă, și uneori aproape imposibil.

Utilizarea unui sistem CAM pentru programare

Ieșirea logică din această situație, urmând analogia cu mașinile-unelte clasice, în care sistemele CAM sunt folosite pentru a crea programe de prelucrare a formelor complexe, este utilizarea CAM pentru programarea robotului. Într-adevăr, crearea unei căi de sculă nu este diferită de crearea acesteia pentru o mașină. Singura diferență este că, ulterior, mișcările sculei trebuie convertite în mișcări ale axelor robotului și axelor suplimentare. Nu orice sistem CAM are această capacitate.

În plus, sistemul CAM trebuie să înțeleagă cinematica robotului și să ia în considerare toate capacitățile acestuia de poziționare a sculei, evitând singularitățile și coliziunile.

Compania SPRUT-Technology dezvoltă software-ul SprutCAM de mai bine de 20 de ani. Una dintre opțiunile acestui produs este capacitatea de a crea programe pentru roboți industriali pe baza unui model 3D descărcabil al produsului.

Folosind o varietate de strategii de prelucrare, programatorul poate defini traseele sculei necesare. SprutCAM, pe baza cinematicii reale a robotului, va calcula poziția și orientarea sculei în fiecare punct și va calcula coordonatele fiecăreia dintre axele robotului. O simulare detaliată vă va permite să simulați pe deplin comportamentul real al robotului, să evitați coliziunile și să vedeți rezultatul procesării. Instrumentele pentru optimizarea poziției articulațiilor robotului fac posibilă determinarea optimă a coordonatelor axei pentru fiecare punct.

Funcții SprutCAM

Strategii de procesare

Fiind un sistem CAM multifuncțional, SprutCAM conține un număr mare de strategii pentru orice tip de prelucrare: frezare (degroșare, finisare, operații multi-axe); tăiere; sudare (Fig. 7).

În plus, SprutCAM are strategii unice de aditivi și instrumente de cuțit. Toate aceste strategii pot fi folosite la programarea unui robot.

A sustine

SprutCAM a implementat deja suport pentru cei mai cunoscuți producători de roboți: modelele cinematice sunt cunoscute și postprocesoarele sunt gata. Interacțiunea cu roboții de la producători de top a fost deja finalizată și complet ajustată pentru utilizator (Fig. 8). Implementarea unui produs pentru o anumită sarcină necesită o perioadă minimă de timp.

Beneficiile utilizării SprutCAM pentru programarea roboților

  • Programarea offline a roboților crește sarcina utilă;
  • crearea programului mult mai rapidă decât punct la punct;
  • programare ușoară a roboților cu axe suplimentare;
  • optimizare automată și căutare pentru mișcări fără probleme;
  • simularea și testarea realistă a programelor;
  • postprocesoare gata făcute pentru generarea de programe în limbajul controlerului;
  • crearea de programe este la fel de ușoară ca și programarea mașinilor CNC.  

Programarea roboților virtuali în Java

Robotica a depășit de mult limitele romanelor științifico-fantastice și este în prezent una dintre forțele motrice care determină progresul în multe domenii, precum automatizarea industrială, medicina, spațiul etc. Simulatoarele software joacă un rol important în robotică, deoarece... Ele nu numai că ușurează munca inginerilor, dar le permit și cercetătorilor să testeze cei mai noi algoritmi de inteligență artificială (AI) și de învățare automată. Un astfel de simulator este Simbad, un proiect open source dezvoltat pe baza tehnologiei Java 3D (vezi). În acest articol, vă vom arăta cum să programați roboți virtuali folosind setul de instrumente Simbad pentru a obține o mai bună înțelegere a uneia dintre filozofiile de proiectare a roboților - arhitectura de absorbție ( arhitectura de subsumare).

Începutul articolului este dedicat unei scurte imagini de ansamblu asupra roboticii și conceptului de arhitectură de absorbție. Vom trece apoi la setul de instrumente Simbad și vom explica cum poate fi folosit pentru implementarea acestei arhitecturi. După aceasta, va veni timpul să creăm un robot simplu în conformitate cu arhitectura descrisă. În cele din urmă, te vei cufunda în lumea distractivă a labirinturilor și vei crea un al doilea robot care, la fel ca Homer din The Simpsons (vezi), va putea să iasă din ele independent. Desigur, roboții creați vor fi „virtuali”, adică. va locui în mediul virtual Simbad.

Programarea robotilor

În prezent, nu există o definiție unică, universal acceptată a termenului „robot”. În articolul nostru, prin robot vom înțelege ceva care constă cel puțin din următoarele componente:

  • Recrutare senzori
  • Program care determină comportamentul robotului
  • Recrutare unitățiȘi efectori

Robotica tradițională

Robotica tradițională se referă de obicei la perioada de dezvoltare a acestui domeniu până în 1986. Caracteristica acelei vremuri a fost ideea unui robot ca mecanism controlat de un controler central (creier), care își actualizează constant ideea despre lumea din jurul său și dezvoltă un plan de comportament bazat pe această idee. Informații noi despre lume provin de la senzori, de exemplu, atingere, lumină, ultrasunete etc. Creierul analizează toate informațiile de la senzori și își actualizează înțelegerea asupra mediului, apoi ia o decizie cu privire la o anumită acțiune. Toate acțiunile sunt efectuate folosind actuatori și efectori. Primele sunt de obicei un fel de motoare conectate la dispozitive care interacționează direct cu lumea exterioară - efectori. Exemple ale acestora din urmă sunt roțile sau brațele. În același timp, uneori sub unități(actuatori) se referă atât la actuatorii înșiși, cât și la efectori.

Astfel, un robot tradițional primește date de la mai mulți senzori, combină aceste date în procesul de actualizare a unei imagini a lumii, apoi dezvoltă un plan de acțiune bazat pe această imagine și, în final, îl realizează. Din păcate, această abordare este plină de anumite dificultăți. În primul rând, necesită o cantitate mare de calcul. În al doilea rând, menținerea unei imagini la zi a lumii din jurul nostru este o sarcină foarte dificilă, deoarece lumea se schimbă constant. În același timp, se știe că multe organisme, de exemplu, insectele, există în siguranță fără sprijinul unei imagini complete a lumii, în plus, fără să aibă măcar memorie ca atare. Deci, poate că merită să încercați să adoptați abordarea lor în ceea ce privește funcționarea? Astfel de gânduri au devenit punctul de plecare al unei noi tendințe în robotică, care este în prezent dominantă. A primit numele „robotică comportamentală”(robotică bazată pe comportament - BBR).

Arhitectura de achizitie

O modalitate de a organiza roboții BBR este arhitectura de absorbție, propusă în 1986 de Rodney A. Brooks – în prezent șef al laboratorului de inteligență artificială de la Massachusetts Institute of Technology (MIT) – în lucrarea sa fundamentală intitulată „Elephants Don’t Play”. șah” (vezi). Potrivit lui Brooks, roboții comportamentali pot fi priviți ca o colecție de simpli și independenți nodurile comportamentale(comportamente), fiecare dintre acestea fiind determinat de două lucruri - ceea ce cauzează comportamentul (de obicei informații provenind de la senzori) și acțiunea care rezultă din acesta (de obicei efectuată de un efector). Comportamentele se pot suprapune și pot intra în conflict între ele. În acest caz, intră în joc un mecanism special arbitraj, care decide ce comportament are în prezent prioritate. Punctul cheie este că comportamentul robotului în ansamblu nu este predeterminat, dar războaie din interacţiunea nodurilor sale comportamentale. În plus, potrivit susținătorilor BBR, comportamentul global este mai mult decât o simplă suprapunere a părților sale. Aceasta absoarbe fiecare dintre comportamentele locale, de nivel scăzut. Practic, ideea este că, în loc să proiectați un robot și să specificați exact cum se va comporta acesta în toate situațiile, puteți pur și simplu să adăugați noduri comportamentale și să vedeți ce se întâmplă.

Simbad: Mediu de simulare a robotului

LEGO Mindstorms

Acest articol discută despre crearea agenților software (roboți), dar dacă sunteți interesat de roboții fizici reali, atunci acordați atenție LEGO Mindstorms - un set de instrumente minunat pentru robotică.

Sloganul de la sediul LEGO Mindstorms spune: „Vom face pentru robotică ceea ce a făcut iPod-ul pentru muzică”. Prima versiune Mindstorms a fost introdusă în 1998 și a depășit imediat așteptările de vânzări ale LEGO. Prețul setului (250 USD) poate părea puțin ridicat, dar nu uitați că iPod Classic costă la fel și aproape toată lumea are unul. toata lumea.

Cu toate acestea, iPod-ul nu oferă astfel de de interes pentru hacking precum Mindstorms. De îndată ce a apărut prima versiune a Mindstorms, diferite tipuri de hackeri au început să pirateze și să analizeze blocurile RCX, care sunt „creierele” roboților. LEGO a fost oarecum perplex și la început nu a putut decide dacă să lase totul așa cum este sau să emită o cerere oficială pentru a opri astfel de acțiuni. Spre meritul conducerii companiei, ei au decis să ofere hackerilor libertate de acțiune completă în legătură cu Mindstorms.

Acest lucru a dus la înflorirea comunității Mindstorms (vezi). Una dintre consecințe a fost portarea unei terțe părți a platformei Mindstorms în alte limbaje, cum ar fi C și Java, în timp ce setul de instrumente în sine a fost furnizat inițial doar cu limbajul de programare grafică NXT-G. Drept urmare, mai mult de jumătate dintre utilizatorii setului de instrumente sunt profesioniști adulți.

Simbad este proiectat pentru modelarea software a roboților. Potrivit paginii Web a proiectului, Simbad „oferă instrumente software pentru dezvoltarea roboților, caracterizarea impactului acestora asupra mediului și utilizarea senzorilor. Simbad a fost conceput în primul rând pentru cercetătorii care au nevoie de instrumente simple pentru studiul inteligenței artificiale situaționale, a învățării automate și a algoritmilor de inteligență artificială în general, mai ales dacă se aplică roboților și agenților autonomi.”

Simbad a fost dezvoltat în Java de Louis Hugue și Nicolas Bredeche. Proiectul este găzduit pe serverul SourceForge.net și poate fi utilizat sau modificat în mod liber în conformitate cu GNU GPL (General Public License).

Detalii tehnice

Lumea din mediul Simbad poate conține atât agenți (roboți), cât și diverse obiecte neînsuflețite, precum cutii, pereți, surse de lumină etc. Timpul în această lume este discret, adică. împărțit în intervale. Simbad include un planificator care distribuie timpul între agenți. Similar cu roboții reali, agenții Simbad au atât senzori (distanță, atingere, lumină etc.) cât și dispozitive de acționare (de obicei roți). În orice moment de timp alocat acestuia, robotul poate efectua o anumită acțiune.

Clasele care implementează agenți trebuie să suprascrie metoda performBehavior(), care descrie comportamentul lor. În cadrul acestei metode, robotul poate analiza informațiile primite de la senzori și poate modifica componentele de rotație și translație ale vitezei de mișcare. Metoda performBehavior() durează doar o perioadă scurtă de timp pentru a fi executată, astfel încât comenzi precum „înainte cu un metru” nu pot fi emise. Pentru a ocoli această limitare, de obicei trebuie să monitorizați constant starea în care se află robotul. În plus, puteți utiliza un cronometru pentru a urmări numărul de intervale de timp în care robotul a fost în starea curentă.

Simbad API

Exemplele din acest articol abordează în principal probleme legate de următoarele două pachete incluse în API-ul Simbad:

  • simbad.sim: Clasele acestui pachet descriu atât roboții înșiși, cât și lumea din jurul lor. Clasele principale sunt:
    • Agent: Roboții înșiși.
    • Arc: arcade pe care roboții le pot înconjura sau sub.
    • Caseta: Descrieți obstacolele din calea robotului.
    • CameraSensor: Vă permite să accesați o imagine a lumii înconjurătoare din punctul de vedere al robotului.
    • EnvironmentDescription: Descrie mediul în care puteți adăuga atât roboți, cât și obiecte neînsuflețite, cum ar fi pereții și alte obstacole.
    • LampActuator: lumini pe care le puteți adăuga la robotul dvs.
    • LightSensor: Senzori de lumină.
    • RangeSensorBelt: Un set de senzori de distanță care pot fi plasați în jurul perimetrului robotului.
    • RobotFactory: Folosit pentru a adăuga diferiți senzori la robot.
    • Perete: Un alt tip de obstacol pentru deplasarea robotului.
  • simbad.gui: Clasele din acest pachet afișează robotul însuși și vă permit să-l controlați. Clasa principală sunt următoarele:
    • Simbad: O fereastră care afișează o imagine a lumii robotului, informații provenite de la senzorii săi, precum și elemente de control.

Implementarea unei arhitecturi de achiziție folosind Simbad

Rumba

În timp ce scriu asta, Roomba aspiră covorul de sub picioarele mele (în timp ce se lovește periodic de un pisoi). Rumba este un robot dezvoltat de iRobot, o companie fondată de trei absolvenți ai MIT: Rodney Brooks, Colin Angle și Helen Greiner. A fost creat în conformitate cu principiile arhitecturii de absorbție și oferă o interfață deschisă care vă permite să-i schimbați comportamentul în orice mod posibil. Carte de Tod E. Kurt „Hacking Rumba” vorbește despre multe astfel de posibilități (vezi).

Vom începe să implementăm arhitectura de absorbție bazată pe Simbad declarând o clasă descendentă de Agent numită BehaviorBasedAgent. Fiecare instanță a acestei clase va conține o serie de comportamente (obiecte de tip Behavior), precum și o matrice booleană care stochează informații despre absorbția lor pe perechi.

comportamente private de comportament; suprimări booleene private;

Clasa BehaviorBasedAgent acționează ca un planificator de comportament. Lista 1 arată o bucată de cod care iterează printr-o serie de comportamente și controlează modul în care sunt declanșate. În acest caz, variabila currentBehaviorIndex este utilizată pentru a stoca o referință la comportamentul care ar trebui activat în următorul pas al algoritmului.

Listare 1. Buclă pentru activarea secvențială a comportamentelor și rezolvarea conflictelor
protected void performBehavior() ( boolean isActive = boolean nou; pentru (int i = 0; i< isActive.length; i++) { isActive[i] = behaviors[i].isActive(); } boolean ranABehavior = false; while (!ranABehavior) { boolean runCurrentBehavior = isActive; if (runCurrentBehavior) { for (int i = 0; i < suppresses.length; i++) { if (isActive[i] && suppresses[i]) { runCurrentBehavior = false; break; } } } if (runCurrentBehavior) { if (currentBehaviorIndex < behaviors.length) { Velocities newVelocities = behaviors.act(); this.setTranslationalVelocity(newVelocities .getTranslationalVelocity()); this .setRotationalVelocity(newVelocities .getRotationalVelocity()); } ranABehavior = true; } if (behaviors.length >0) ( currentBehaviorIndex = (currentBehaviorIndex + 1) % behaviors.length; ) ) )

Rețineți că metoda performBehavior() supraîncarcă o metodă similară în clasa simbad.sim.Agent.

Clasa Behavior are două metode abstracte:

  • este activ(): Metoda returnează o valoare booleană care indică dacă comportamentul dat trebuie activat la un moment dat, având în vedere informațiile provenite de la senzori. În acest caz, toate instanțele clasei Behavior au acces la un set comun de senzori.
  • act(): Metoda returnează noile valori ale vitezei de translație și rotație (în această ordine) rezultate din activarea comportamentului.

Un exemplu de robot rătăcitor atras de sursele de lumină

Acum este timpul să creați un robot software (sau bot) care va include cele 4 comportamente de mai jos, stocate în ordinea descrescătoare a priorității. Codul bot este afișat în listele de la două la cinci (exemplul de cod pentru acest articol este disponibil pentru ).

  • Evitare: Schimbă direcția după o coliziune sau în încercarea de a evita o coliziune.
  • Căutare lumină: direcționează mișcarea către sursa de lumină.
  • Rătăcire: schimbă periodic direcția la întâmplare.
  • Linie dreaptă: direcționează mișcarea în linie dreaptă.
Lista 2. Clasa de evitare (bazată pe demonstrația SingleAvoiderDemo.java din distribuția Simbad)
public boolean isActive() ( return getSensors().getBumpers().oneHasHit() || getSensors().getSonars().oneHasHit(); ) public Velocities act() ( double translationalVelocity = 0,8; double rotationalVelocity = 0; RangeSensorBelt sonare = getSensors().getSonars(); double rotationalVelocityFactor = Math.PI / 32; if (getSensors().getBumpers().oneHasHit()) ( // A avut loc o coliziune translationalVelocity = -0.1; rotationalVelocity = Math.PI / 8 - (rotationalVelocityFactor * Math.random()); else if (sonars.oneHasHit()) ( // Citirea citirilor ecolocatorului dublu stânga = sonars.getFrontLeftQuadrantMeasurement(); dublu dreapta = sonars.getFrontRightQuadrantMeasurement(); front dublu = sonare. getFrontQuadrantMeasurement(); // Obstacolul este aproape dacă ((front< 0.7) || (left < 0.7) || (right < 0.7)) { double maxRotationalVelocity = Math.PI / 4; if (left < right) rotationalVelocity = -maxRotationalVelocity - (rotationalVelocityFactor * Math.random()); else rotationalVelocity = maxRotationalVelocity - (rotationalVelocityFactor * Math.random()); translationalVelocity = 0; } else { rotationalVelocity = 0; translationalVelocity = 0.6; } } return new Velocities(translationalVelocity, rotationalVelocity); }
Lista 3. Clasa LightSeeking (bazată pe demonstrația LightSearchDemo.java din distribuția Simbad)
public boolean isActive() ( float llum = getSensors().getLightSensorLeft().getAverageLuminance(); float rlum = getSensors().getLightSensorRight().getAverageLuminance(); luminanță dublă = (llum + rlum) / 2.0; // Activare dacă sursa de lumină este în apropiere return luminance > LUMINANCE_SEEKING_MIN ) public Velocities act() ( // Rotire către sursa de lumină float llum = getSensors().getLightSensorLeft().getAverageLuminance(); float rlum = getSensors().getLightSensorRight() .getAverageLuminance (); double translationalVelocity = 0,5 / (llum + rlum dublu rotationalVelocity = (llum - rlum) * Math.PI / 4 return new Velocities(translationalVelocity, rotationalVelocity);
Lista 4. Clasa rătăcitoare
public boolean isActive() ( returnează aleator.nextDouble()< WANDERING_PROBABILITY; } public Velocities act() { return new Velocities(0.8, random.nextDouble() * 2 * Math.PI); }
Lista 5. Clasa StraightLine
public boolean isActive() ( returnează adevărat; ) public Velocities act() ( returnează viteze noi (0,8, 0,0); )

Lista 6 arată absorbția unor comportamente în altele.

Lista 6. Declarația unei matrice booleene care descrie absorbția pe perechi a comportamentelor
private void initBehaviorBasedAgent(BehaviorBasedAgent behaviorBasedAgent) ( Senzori senzori = behaviorBasedAgent.getSensors(); Comportamentele comportamentale = ( noi Avoidance (senzori), noi LightSeeking (senzori), noi Wandering (senzori), noi StraightLine (senzori), ); subsumuri booleene = (( fals, adevărat, adevărat, adevărat), ( fals, fals, adevărat, adevărat), ( fals, fals, fals, fals) );

În acest exemplu, setul de comportamente este complet ordonat în funcție de prioritate. În general, acest lucru nu este necesar.

Ca exercițiu, puteți încerca să implementați următoarele lucruri:

  • Comportament social: îndreptarea către prieteni și departe de inamici.
  • Evitarea surselor de lumină.
  • Adăugați faruri unor roboți, astfel încât să înceapă să se atragă unul pe altul.

Labirinturi

„Ei bine, în sfârșit am știut că poți ieși din acest labirint folosind algoritmul Tremo!” — Lisa Simpson

Din întreaga masă de algoritmi pentru ieșirea din labirinturi, doi se remarcă prin faptul că folosesc o cantitate de memorie care nu depinde de dimensiunea labirintului în sine. Ele sunt cunoscute după nume „Urmând zidul”(urmărirea peretelui) și Algoritmul lui Pledge. Acesta din urmă a fost numit după Jon Pledge din Exeter, care a inventat algoritmul la vârsta de 12 ani. Pe lângă aceasta, există și un magnific Algoritmul Tremo(Algoritmul Tremaux) - algoritmul preferat al Lisei Simpson - dar de dragul simplității le vom lua în considerare doar pe primele două.

Algoritmi de generare a labirintului

Interesanți nu sunt doar algoritmii pentru ieșirea din labirinturi, ci și generarea acestora. Labirinturile discutate în acest articol sunt numite perfect(perfect), datorită faptului că există una și o singură opțiune de trecere între oricare două puncte ale labirintului. Datorită acestei condiții, buclele, insulele și zonele izolate sunt excluse. Majoritatea algoritmilor care generează labirinturi perfecte funcționează astfel: încep cu un labirint simplu, care este doar peretele exterior, și adaugă treptat secțiuni interne. În același timp, la fiecare pas este necesar să se excludă posibilitatea apariției buclelor, secțiunilor izolate etc.

Urmând zidul

Acest algoritm este atât de simplu încât mulți oameni îl învață în copilărie. Tot ceea ce este necesar pentru a ieși este să miști mâna stângă de-a lungul peretelui stâng (sau mâna dreaptă de-a lungul peretelui drept) până când întâlnești ieșirea. Este ușor de observat că acest algoritm funcționează impecabil pentru labirinturile în care intrarea și ieșirea sunt situate pe perimetru. Din păcate, algoritmul nu poate fi aplicat dacă ieșirea este activată insulă- o parte a labirintului care nu este legată de restul pereților. În această situație, algoritmul nu va găsi o cale de ieșire, deoarece este imposibil să sari peste spațiul gol către insulă fără a-ți lua mâna de pe perete.

Algoritmul lui Pledge

Algoritmul lui Pledge este mai complex, dar este capabil să găsească o cale de ieșire dintr-un număr mai mare de labirinturi datorită posibilității tranzițiilor de la o insulă la alta. Ideea algoritmului este că trebuie să alegeți o anumită direcție absolută (nord, sud, vest sau est) și să încercați întotdeauna să o urmați. Să-l sunăm direcția preferată. Dacă lovești un perete, faci dreapta și te miști conform algoritmului „urmărește peretele” până când sunt îndeplinite două condiții. Prima este o viraj în direcția preferată, iar a doua este suma tuturor turelor efectuate anterior este egală cu zero (în acest caz, fiecare rotație în sens invers acelor de ceasornic este luată ca unu și, respectiv, în sensul acelor de ceasornic, ca minus unu). După aceea, continuați să vă deplasați în direcția preferată cât mai mult posibil și așa mai departe. Condiția pentru o sumă zero de viraje este necesară pentru a evita diferite tipuri de capcane, de exemplu, secțiuni de labirinturi care au forma G(desenează-l pe hârtie și vei înțelege imediat ce vreau să spun).

Algernon: un robot care scapă din labirinturi

Este timpul să-ți surprinzi prietenii creând un robot pe nume Algernon, a cărui sarcină va fi să scape din labirinturi.

Design robot

Pentru a implementa atât algoritmul Pledge, cât și urmărirea peretelui, este necesar să se determine cu exactitate momentul în care robotul se apropie de o ramură din labirint și, de asemenea, să fie capabil să indice ce direcție să ia.

Cu siguranță acest lucru poate fi implementat în multe moduri, dar vom folosi un senzor special - un ecolocator situat pe partea stângă a robotului. Acest senzor va trimite semnale atunci când traversează ramuri din stânga în sensul de mers. Pentru a determina că există o fundătură în față, vom adăuga un alt senzor - un senzor tactil situat în partea frontală a robotului.

Implementarea algoritmului de urmărire a peretelui

Tot codul Algernon va fi plasat în pachetul algernon.subsumption (tot codul este disponibil pentru ). Algernon este un robot destul de simplu și poate fi programat procedural. În același timp, chiar și pentru un robot atât de simplu, abordarea de absorbție a comportamentului face codul mult mai curat, mai ușor de înțeles și, de asemenea, promovează o mai bună organizare a modulelor.

Vom face încă o presupunere pentru a simplifica exemplul: vom presupune că toți pereții se intersectează în unghi drept. Cu alte cuvinte, toate virajele la stânga și la dreapta se fac exclusiv cu 90 de grade.

Algoritmul de urmărire a peretelui pentru stângaci poate fi descompus în patru comportamente diferite:

  • mergeţi înainte.
  • Când loviți de perete, faceți dreapta.
  • Când întâlniți o ramură la stânga, întoarceți-vă.
  • Oprește-te când găsești o ieșire.

Comportamentele trebuie prioritizate. În acest exemplu, le vom selecta în aceeași ordine în care sunt listate mai sus. Ca rezultat, vom avea nevoie de patru clase descendente de comportament:

  • Mergeţi înainte
  • Obligatoriu Dreapta
  • Viraj la stânga
  • Atinge obiectivul

Lista 7 arată codul pentru clasa GoStraight, unde TRANSLATIONAL_VELOCITY este o constantă egală cu 0,4:

Lista 7. Implementarea comportamentului pentru deplasarea în linie dreaptă
public boolean isActive() ( returnează adevărat; ) public Velocities act() ( dublă viteză de rotație = 0,0; returnează viteze noi (TRADUCERE_VELOCITATE, viteză de rotație); )

Codul pentru clasa TurnRight este afișat în Lista 8. Metoda getRotationCount() returnează numărul de intervale de timp necesare pentru a se roti cu 90 de grade la o viteză de rotație dată.

Lista 8. Implementarea comportamentului pentru viraj la dreapta
public boolean isActive() ( if (turningRightCount > 0) ( return true; ) RangeSensorBelt bumpers = getSensors().getBumpers(); // Verificați bara față. if (bumpers.hasHit(0)) ( backingUpCount = 10; turningRightCount = getRotationCount(); return true; else ( return false; ) ) public Velocities act() ( if (backingUpCount > 0) ( // Robotul a lovit peretele. Trebuie să vă întoarceți puțin înainte de a întoarce backingUpCount-- ; returnează viteze noi (- TRANSLATIONAL_VELOCITY, 0.0 else ( turningRightCount--; returnează viteze noi (0,0, -Math.PI / 2); ) )

Pentru a vira la stânga, Algernon trebuie mai întâi să înainteze puțin, astfel încât peretele din stânga lui să se termine. Apoi se întoarce la stânga și mai înaintează puțin, astfel încât pe partea stângă să fie din nou un zid. Codul este afișat în Lista 9.

Lista 9. Implementarea comportamentului de viraj la stânga
public boolean isActive() ( dacă (postGoingForwardCount > 0) ( returnează adevărat; ) Sonare RangeSensorBelt = getSensors().getSonars(); // Verificați sonarul din stânga dacă (sonars.getMeasurement(1) > 1.0) ( // În stânga este coridorul preGoingForwardCount = 20; if (turnLeftCount > 0) ( turnLeftCount--; returnează viteze noi (0,0, Math.PI / 2); ) else ( postGoingForwardCount --; returnează viteze noi (VELOCITATE_TRADUCERE, 0,0); ) )

Codul pentru clasa ReachGoal este afișat în Lista 10.

Lista 10. Comportament la detectarea unei ieșiri dintr-un labirint
public boolean isActive() ( Sonare RangeSensorBelt = getSensors().getSonars(); // Există spațiu deschis în față? Cu alte cuvinte, am găsit o cale de ieșire din labirint? dublu clearDistance = 1.2; return sonars.getMeasurement(0 ) > clearDistance && sonars getMeasurement(1) > clearDistance && sonars.getMeasurement(3) > clearDistance && sonars.getMeasurement(2) > clearDistance ) public Velocities act() ( // Stop return new Velocities(0,0, 0,0); )

Metoda principală care definește comportamentul lui Algernon este prezentată în Lista 11.

Lista 11. Codul de control al comportamentului Algernon
private void initBehaviorBasedAgent(algernon.subsumption.BehaviorBasedAgent behaviorBasedAgent) ( algernon.subsumption.Sensors senzori = behaviorBasedAgent.getSensors(); algernon.subsumption.Behavior behaviors = (nou ReachGoal(senzori), nou TurnLeft(senzori), noi TurnLeft(senzori), noi , new GoStraightAlways(senzori) ; ) ); behaviorBasedAgent.initBehaviors(comportamente, subsumuri)

Figura 1 îl arată pe Algernon deplasându-se prin labirint.

Figura 1. Algernon care se deplasează prin labirint

Rețineți că robotul rezolvă cu succes problema de ieșire, în ciuda faptului că niciuna dintre componentele sale nu știe nimic nu numai despre labirinturi, ci chiar despre pereți. Nu există un nod central care să acționeze ca un creier, calculând calea de ieșire. Aceasta este esența arhitecturii de absorbție: comportamentul complex, aparent conceput special pentru a rezolva o problemă specifică, reiese din interacțiunea unor comportamente simple, stratificate.

Concluzie

Acest articol a analizat crearea unui robot software simplu. Programarea unui robot real, existent fizic este mult o sarcină mai complexă, în principal datorită faptului că este necesar să se țină cont de toate aspectele influenței lumii înconjurătoare. De exemplu, în exemplul discutat, a fost suficient să faci robotul să se miște drept de-a lungul peretelui. În lumea reală, cu suprafețele sale neuniforme, este foarte dificil să implementezi mișcarea unui robot în așa fel încât să nu lovească peretele și în același timp să nu se îndepărteze prea mult de acesta. Așa că, chiar dacă îți place programarea, nu este un fapt că roboții de programare îți vor face plăcere, pentru că... aceasta necesită adesea mai multă muncă mecanică decât muncă creativă.

Consultați setul de instrumente LEGO Mindstorms dacă sunteți interesat de proiectarea și programarea roboților. Alternativ, puteți lucra cu roboți BEAM (Biological Electronic Aesthetics Mechanics). BEAM dezvoltă în continuare ideea de robotică comportamentală, eliminând cu totul programarea ca atare. Comportamentul global al robotului este determinat de conexiuni strict definite ale nodurilor comportamentale care operează pe reflexe. Pentru nu mai mult de 30 USD poți construi primul tău robot BEAM. De asemenea, puteți proiecta un robot după desenele pe care le veți găsi în cartea lui Gareth Branwyn. „Crearea de roboți pentru începători absoluti”(cm. ). Și, în sfârșit, poți oricând să cumperi Rumba și să-l piratezi.

Unul dintre lucrurile uimitoare la care am ajuns când am început să programez roboți și, după ce am citit pe scurt codul altora, este că nu trebuie să scrii programe lungi pentru a crea un robot care are o mulțime de funcționalități. În același timp, însă, de multe ori trebuie să lustruiți programul pentru o lungă perioadă de timp și să experimentați cu constante, astfel încât robotul să facă exact ceea ce este necesar. Folosind instrumentele LEGO Mindstorms, puteți crea cu ușurință un robot simplu într-o seară.

Robotica este o subcultură fascinantă, cu cărți, concursuri, videoclipuri etc. Este foarte posibil să existe un club sau cerc de iubitori de roboți chiar și nu departe de tine.

Întregul proces constă din două etape: asamblare și programare. Pentru a asambla un robot bun, aveți nevoie de cunoștințe de mecanică. Pentru a programa un robot să efectueze anumite acțiuni, trebuie să cunoașteți o limbă pe care placa de sistem sau unitatea software o vor înțelege. Cunoștințele școlare de informatică nu sunt suficiente aici.

De unde pot lua materialul?

Mai întâi trebuie să decideți cum doriți să asamblați robotul: din truse gata făcute sau selectând singur materialele. Avantajul setului este că nu trebuie să căutați piesele separat. Cel mai adesea, mai multe dispozitive pot fi asamblate dintr-un set.

O structură care nu este asamblată dintr-un kit gata făcut se numește sistem deschis. Are și avantajele sale: robotul tău va avea propria personalitate, iar tu însuți vei putea îmbunătăți designul. Dar cu siguranță vei petrece mai mult timp și efort.

În ce constă un robot?

Carcasa - metal sau plastic "corp", de care sunt atașate părțile rămase. Fiecare robot are o sursă de energie - baterii sau acumulator. În funcție de sarcina pe care o va îndeplini robotul, se aleg senzori: aceștia pot detecta culoarea și lumina și pot răspunde la atingere.

Pentru a face robotul să se miște, veți avea nevoie de motoare. "Cap"întregul mecanism - placa de sistem sau unitatea software. Cu ajutorul lor, robotul se conectează la un computer și primește un set de sarcini.

Cum pot să-l fac să facă ceva?

Pentru ca robotul să efectueze o anumită acțiune, trebuie să creați un program de calculator. Complexitatea acestei etape depinde de asamblare. Dacă robotul este asamblat dintr-un set Lego Mindstorms sau mBot, atunci chiar și copiii își pot gestiona software-ul.

Dacă construiți singur robotul, va trebui să învățați elementele de bază ale programării și limbajul în care veți scrie programul, cum ar fi C++.

De ce ar putea un robot să nu execute un program?

Când ajunge într-un loc nou, poate deveni confuz și poate executa incorect programul. Pentru ca robotul să facă totul corect, senzorii trebuie reglați. De exemplu, iluminarea prea puternică vă poate împiedica să recunoașteți culorile în mod adecvat. In functie de suprafata pe care se misca robotul se regleaza puterea motoarelor.

Puteți învăța să asamblați și să programați la școală?

În ciuda faptului că robotica nu este inclusă în programa școlară, profesorii de fizică și informatică pot învăța un copil cum să asambleze și să programeze. În Belgorod, unele școli au cluburi în care fac roboți.

„După lecții cu profesori de fizică și informatică, învățăm să programăm. Știm deja cum să lucrăm în LegoMindstorms și Robolab ( software pentru roboți - aprox. auto). De asemenea, uneori învățăm să facem desene 3D ale pieselor”, au spus studenții de la Belgorod Engineering Youth Boarding Lyceum și participanții la RoboFest 2018. Anton PershinȘi Dmitri Cernov.

Unde, în afară de școală, poți deveni robotician?

La școala de ingineri BelSU există o clasă în care se învață cum să asamblați și să programați roboți. În 2017, Quantorium s-a deschis la Belgorod, unde robotica este predată elevilor de la vârsta de nouă ani.

Pentru a deveni un robotist adevărat, te poți înscrie la departamentul de robotică. În Belgorod nu există încă astfel de oameni, dar la BSTU. Şuhov are un departament de cibernetică tehnică. Elevii ei primesc premii la competiții de robotică din toată Rusia.

Este posibil să înveți pe cont propriu?

Da. Există multe resurse pe Internet unde poți învăța ce să construiești și cum să programezi un robot.

Va fi util robotul?

Poate fi adaptat pentru sarcinile de zi cu zi și transformat într-un asistent în casă. Există multe exemple pe Internet despre cum inventatorii de acasă creează roboți pentru coacerea clătitelor sau pentru curățarea unui apartament.

Cum îți poți dovedi succesul în crearea roboților?

Participați la competiții precum RoboFest. În funcție de vârstă și direcție, există nominalizări diferite. Practic, fiecare tip de robot are o pistă pe care îndeplinește sarcini: apucă un cub sau trage o linie. Există și sisteme statice în care judecătorii evaluează prezentarea proiectului și funcționarea mecanismelor.

De regulă, participanții vin la competiții cu roboți asamblați și, în timpul pregătirii, își petrec timpul doar cu calibrarea senzorilor și ajustarea programului.

Editorii doresc să mulțumească participanților la RoboFest 2018 pentru asistența acordată în crearea materialului. Dmitri Agafonov, Dmitri Cernov, Anton PershinaȘi Danila Migrina.

Natalia Malykhina