Proiectarea și realizarea unui robot pentru ieșirea din labirint [309406]

Universitatea “ Lucian Blaga “ , [anonimizat] :

Șef.L. Dr. Ing . Crenganiș Mihai

Absolvent: [anonimizat]

2017

Proiectarea și realizarea unui robot pentru ieșirea din labirint

Scurtu Andra Roxana

Rezumat

Lucrarea de licență “Proiectarea și realizarea unui robot pentru ieșirea din labirint “ [anonimizat] a [anonimizat] .

[anonimizat] : parte mecanică ( cinematică , structuri mecanice ) , parte electrică ( acționare motoare electrice ) , respectiv programare ( elaborarea unui program C++ pentru comandarea robotului ) , [anonimizat] ( evoluția roboților autonomi de rezolvare labirint din trecut până în prezent ) , algoritmi utilizați de robot pentru deplasare prin labirint ( fiind fundamentul pe care se bazează însăși programarea ) , [anonimizat] ( proiectare componente robot în Catia V5 și analiză element finit în ANSYS ) , precum și modelare matematică ( calcul al motoarelor ).

Robotul proiectat pentru ieșirea din labirint conține o [anonimizat] o placuță Arduino Nano ATmega328p , două micromotoare cu reducție cu raport de 30:1 , două encodere cu rol în convertirea mișcării rotative într –o serie de impulsuri ( generează un total de 20 de pulsuri la rotirea a 360 de grade ) , o punte H dual L298N ( folosită pentru a [anonimizat] ) , 4 baterii AA care dau un total de 6V , [anonimizat] ( funcționează pe principiul trecerii timpului : se emite un fascicul de lumină care parcurge o [anonimizat] [ în cazul acesta peretele labirintului ] , [anonimizat] a parcurge calea de la robot la obiect și înapoi ) .

[anonimizat] . Pe cea inferioară sunt atașate la marginile spate cele 2 micromotoare de curent continuu pe axul cărora sunt atașate 2 roți , cele 2 [anonimizat] H [anonimizat] o [anonimizat] . [anonimizat] , stânga și dreapta senzorii de distanță . Cele două platforme folosesc ca distanțiere 3 șuruburi M6 x 100 , poziționate strategic în 3 puncte ( 2 față , 1 spate ) .

[anonimizat] , pus în fața unei intersecții ( intesecția semnificând faptul că există mai mult de două direcții posibile pe care se poate vira ) , va alege mereu să vireze spre stânga . [anonimizat] , [anonimizat]. [anonimizat] “U”.

[anonimizat] , constituit din pereți distanțați între ei astfel încât robotul să aibă posibilitatea de deplasare fără coliziuni.

Summary

The bachelor work “ Designing and building a robot to exit the maze “ covers the technical aspects of design , respectively creating an autonomous robot to exit the maze, generically known as maze solver.

The paper contains general aspects of mechatronics and robotics and all that involves this branch : mechanical part (kinematics, mechanical structures) , electrical part (electric engines), respectively programming (development of a C ++ program for robot control) , classifications of robots and mobile robots , the current state (the evolution of autonomous labyrinth solving robots from the past to the present) , algorithms used by the robot to move through the labyrinth (being the foundation on which programming itself is based) , sensory part , CAD module (design of robot components in Catia V5 and finite element analysis in ANSYS) , as well as mathematical modeling (engine computation).

The robot designed to exit the maze contains a number of components, including an Arduino Nano ATmega328p board , two micromotors with 30: 1 ratio reduction , two encoders with a role in converting rotating motion into a series of pulses (generating a total of 20 pulses at 360 degree rotation) , a double bridge L298N (used to control the DC motor – is provided with a voltage stabilizer circuit) , 4 AA batteries that give a total of 6V , with support , three Sharp IR remote sensors ( running on the principle of passing time : a beam of light travels over a certain distance , encounters an object that is reflected back to the source [in this case the maze wall] , thus measuring the required time of this beam to go through the path from the robot to the object and back ) .

The robot is made up of two platforms , lower and upper. On the lower one are attached to the rear edges the 2 micromotors of DC on the axle of which are attached 2 wheels, the 2 encoder modules , the H bridge and the Arduino Nano board in the middle of the platform , as well as a ball that constitutes the third equilibrium point . On the upper platform is attached the battery holder , around it being placed in the front direction , left and right the distance sensors. The two platforms use as spacers 3 M6 x 100 screws , strategically positioned in 3 points (2 front, 1 back) .

The algorithm used for programming the robot is that of the left hand on the wall, meaning that the robot , put in front of an intersection ( the intersection meaning the fact that there are more than two possible directions on which it can turn ) , it will always choose to run left. Otherwise , it will go forward , and if it can not, it will turn right. In case of a dead end, the robot will make a U-shaped turn.

The labyrinth is simple , without loops , consisting of walls spaced apart so the robot has the ability to move without collisions.

Capitolul 1. Introducere

1.1.Motivarea alegerii temei : “Dezvoltarea unui robot pentru ieșirea din labirint “

Am ales această temă , deoarece fiind un student la specializarea “Mecatronică” , aceasta tratează toate subdomeniile și le încorporează omogen , fiind un viu exemplu a ceea ce am învățat în decursul a celor 4 ani de stadiu de licență .

De asemenea , o altă motivație ar fi implicarea studenților din cadrul facultății la concursurile de roboți tip labirint care m-au determinat să doresc îmbunătățtirea acestui tip de robot , pentru o mai bună funcționare ( viteză , ocolire obstacole , rezolvare vibrații ale corpului robotului nedorite ș.a. ) , precum și ca aceștia să fie un progres în evoluția domeniului și chiar utilizați pentru ajutorarea personalului uman în industrie .

Fascinația pentru progresul tehnologic determină astfel curiozitatea încercării îmbunătățirii acestui tip de robot , a strategiei lui , fie de a ocoli obstacole în cadrul labirintului , fie de urmărire de perete pentru a ieși din labirint , ori prin simpla urmărire a unei linii care conduce robotul către ieșire , toate acestea însă duse la un cu totul alt nivel .

Viziunea SF adusă de filme domeniului Roboticii determină dorința în sine de a atinge un anumit tip de dezvoltare a domeniului astfel încât robotul să fie o inovație și să fie atribuit de către utilizatorii nespecializați acestei categorii promovate de literatură. Cu cât este mai complex robotul , cu cât sarcina sa este mai variata și cu cât acesta este adaptat să semene regnului uman ( să fie android de preferat ) , cu atât acesta este considerat de domeniul menționat mai sus. Estetica robotului proiectat este una dintre cele mai importante aplicații , pentru că majoritatea utilizatorilor nu trebuie să fie neapărat specializați ( ingineri , programatori etc ).

Inteligența artificială cu Arduino

Alegându-mi acest proiect , am învățat mai bine ce înseamnă în consecință un robot labirint , după un îndelungat studiu de caz . ( am studiat roboți micromouse din competiții japoneze , care sunt de altfel și cei mai performanți ).

Robotul meu este numit Nano Mouse pentru că este de mărimea unui robot Micro Mouse , dar folosește un microcontroler Arduino Nano.

De ce Nano Mouse?

Sunt mulți alți roboți pe piață la fel ca și designuri DIY ( Do It Yourself – Fă singur ) pe internet. De ce am ales să construiesc un Nano Mouse?

• Utilitate : Alți roboți / kituri folosesc în mod normal o varietate de senzori , dar nu îi utilizează . Prin focusarea asupra rezolvării labirintului , am învățat să rezolv o provocare pe termen lung.

• Testat pe teren cu profesori și studenți : Multe kituri / designuri includ componente care nu sunt practice și/sau derutante ( gândiți-vă la bateriile alcaline sau patru butoane tactile ramificate ) . Ca student, utilizând acest robot , pot observa inițial ce încurcă în proiectare și realizare și sunt capabilă să aduc îmbunătățiri conform acesteia.

• Depanare wireless : prin utilizarea modulului Bluetooth împreună fie cu o tabletă Android sau cu un Mac , se poate observa ce “ gândește “ robotul , ceea ce face depanarea mult mai ușoară.

• Placă pentru model experimental al circuitelor electronice : Mulți roboți utilizează PCB – uri pentru a reduce costul ( Printed Circuit Boards – Plăci de circuite integrate/imprimate ) . O placă pentru model experimental al circuitului permite conectarea robotului pentru a vedea cum funcționează circuitele. Permite realizarea de modificări ușor.

• Adaptabil : Se poate ( și am fost încurajată ) să îmbunătățesc designul sau să îl modific pentru a fi potrivit pentru scopul meu . ( ieșirea din labirint a robotului autonom ).

• Modular și reutilizabil : Controlerul , modulul Bluetooth , placa pentru model experimental al circuitului , servo , roțile , acumulatorii , și regularea și protecția pentru polaritate inversă pot fi ușor refolosite pentru următorul proiect ( au scopuri multiple ).

Ce am învățat din aceasta?

Realizarea unui robot pentru rezolvarea labirintului este un proiect bazat pe abordarea învățării care atinge multiple probleme matematice , știință , și concepte tehnologice. Mai degrabă de a arăta cum acest proiect se aliniază la Common Core ( Nucleu Comun ) , State sau standarde ISTE ( Internațional Society for Techonology in Education – Societatea Internațională pentru Tehnologie în Educație – care sunt de obicei foarte cuprinzătoare ) , am creat o lista a abilităților specifice și conceptele , pe care le-am deprins de-a lungul elaborarii proiectului de diplomă , nu numai din punct de vedere teoretic , ci și din punct de vedere practic . Targetul meu a fost acela de a-mi forma deprinderile și de a avea cunoștiintele necesare pentru a lua din fiecare pas minimul pentru a învăța din construirea acestui robot și a numeroaselor studii a alți roboți , precum și a aplicării la propriul meu proiect , cu propriul meu design. Deși nu este prima încercare de acest gen din domeniu , cu siguranță a adus ceva inovativ într-o oarecare proporție și m-a determinat să-mi doresc să adaug și alte module pe care nu le-am putut accesa momentan , însă pe viitor cu siguranță . Sper ca și colegii mei să fie motivați ca și mine de această temă , și de ce nu , chiar să îmbunătățească ceea ce deja am elaborat.

Electronică încorporată de bază

Intrări/ieșiri digitale

Intrări analogice

PWM ( Pulse Width Modulation – Modulare în lățime a impulsului ) [ ca aplicată servomotoarelor ]

Structuri de control

Funcții

Clase

Matrici

Filtrare

Nivelare

Calibrare de senzori

Control proporțional

Comunicare serială

Mapare

Depanare

Algoritmi

1.2.Introducere în Mecatronică

Mecatronica este percepută ca un domeniu tehnic interdisciplinar în care se folosesc metode din ingineria mecanică, ingineria electrică și din știința calculatoarelor pentru a proiecta, produce și utiliza produse cu preț scăzut sau/și raport preț/performanțe scăzut.

Există mai multe definiții pentru Mecatronică :

• Mecatronică = combinație sinergetică de discipline care concură la proiectarea produselor și proceselor. [1]

• Sistemele mecatronice = sisteme mecanice înzestrate cu sisteme senzoriale, sisteme de acționare, sisteme mecanice

Senzorii sistemelor mecatronice:

– Senzori care măsoară interacțiunea sistemelor mecatronice cu mediul lor de operare

– Senzori care măsoară variabile interne sistemelor mecatronice

Subsistemul mecanic este partea sistemului mecatronic care asigură mișcarea și la care se atașează senzori. Senzorii convertesc informația specifică în semnale electrice.

Subsistemul electronic convertește aceste semnale în format numeric pentru ca acestea să poată fi folosite de subsistemul de conducere.

Domeniul Mecatronicii presupune aplicarea sinergetică a ingineriei mecanice, electronice, automaticii și calculatoarelor în dezvoltarea sistemelor și produselor electromecanice printr-o abordare a proiectării integrată. [2]

Sisteme mecatronice

Un sistem mecatronic tipic conține un “schelet” mecanic, senzori, actuatori, controlere, dispozitive de prelucrare semnale, hardware digital/calculator, software, dispozitive de interfațare și surse de putere.

Fig 1.1. Componentele unui sistem mecatronic

Modelare și proiectare

• O proiectare poate utiliza excesiv factori de siguranță și specificații de genul “cel mai rău caz posibil” (de exemplu pentru sarcinile mecanice și electrice).

• Aceasta nu va furniza o proiectare optimală sau nu va conduce către performanțele cele mai bune.

• Proiectarea pentru performanțe optime nu conduce în mod necesar către proiectarea cea mai economică (cel puțin ca preț).

• Când se dorește o adevărată proiectare optimală, trebuie optimizată o funcție obiectiv care ia în considerare toți factorii importanți (performanțe, calitate, costuri, viteză, ușurință în operare, siguranță, impact asupra mediului, etc.). [3]

Fig 1.2. Modelare și proiectare în mecatronică

Componentele mecanice

Domeniul mecatronicii se ocupă cu integrarea mecanicii cu electronică, automatică, tehnologia informației. Într-un produs mecatronic, mecanica joacă un rol vital, ce poate include suport structural, mobilitate, transmiterea mișcării, manipulare. Sistemul mecanic trebuie să fie proiectat (integrat cu partea electronică și de control) pentru a satisface carecterisitici dorite precum greutate mică, rezistență mare, viteză mare, vibrații și zgomot redus, durata de utilizare mare, puține părți în mișcare, fiabilitate ridicată, preț de cost scăzut, întreținere rară și cu costuri reduse. În mod clar, aceste cerințe pot fi în conflict unele cu altele și este nevoie de o optimizare a proiectării.

Componentele mecanice obișnuite ale unui sistem mecatronic pot fi clasificate în câteva grupuri după utilitățile lor, precum:

• componente structurale (proprietăți de rezistență și de material/suprafață)

• componente de fixare (rezistență)

• componente de separare dinamică (transmisibilitate)

• componente de transmisie (conversia mișcării)

• actuatoare mecanice (cuplu/forță generată)

• controlere mecanice (distribuirea energiei controlat)

Actuatoarele mecanice sunt utilizate pentru a genera forțe (și cupluri) pentru aplicații diverse. Actuatoarele obișnuite sunt electromagnetice (ca tip, de exemplu motoarele electrice) și nu pur și simplu mecanice. Deoarece forțele magnetice sunt forțe “mecanice” care generează cupluri mecanice, motoarele electrice pot fi considerate ca dispozitive electromecanice.

Clasificările menționate ale componentelor mecanice sunt prezentate în figura alăturată.

Fig 1.3. Clasificare a componentelor mecanice ale unui sistem mecatronic

Componentele de transmisie

Dispozitivele de transmisie sunt indispensabile în aplicațiile mecatronice. Un dispozitiv de transmisie lucrează ca o unitate integrată cu celelalte componente, în particular cu actuatorul, unitatea de comandă electronică, și sarcina sistemului. De aceea proiectarea sau selectarea transmisiei trebuie să implice o tratare integrată a tuturor componentelor ce interacționează.

Probabil cel mai cunoscut dispozitiv de transmisie este cutia de viteze.

Sisteme de transmitere a mișcării în cazul roboților

Restricțiile privind realizarea unei transmisii sunt determinate de:

• caracterisiticile acționării (cupluri, forțe, viteze)

• exigențele impuse obiectului în mișcare, prin limitele mărimilor cinematice (în mișcare de rotație și de translație)

• puterea mecanică transmisă elementului acționat

• o bună rigiditate a structurii și o inerție cât mai mică a maselor în mișcare de translație sau rotație, de maniera reducerii deformațiilor elastice, statice (efectul greutății) și dinamice (vibrații), de limitare a forțelor și cuplurilor necesare în faza de accelerare, maximizarea vitezelor critice și a pulsațiilor de rezonanță a elementelor elastice cât mai departe de zona vitezelor de lucru

• frecări cât mai mici în cuplele cinematice

• eliminarea jocurilor sau compensarea acestora

• asigurarea cel puțin a unei echilibrări statice parțiale, care să permită reducerea cuplurilor și forțelor de accelerare și efectul greutății asupra preciziei de poziționare și evitarea mișcărilor necontrolate la acționare defectuoasă.

Din punct de vedere constructiv mecanismele de transmitere folosite în construcția manipulatoarelor și roboților pot fi:

• transmisii prin angrenaje cu axa fixă (reductoare cilindrice sau conice), sau cu axa mobilă (reductoare armonice), care transformă parametrii mișcării de rotație

• transmisii șurub-piuliță, care transformă mișcarea de rotație în mișcare de translație, fiind adesea utilizate pentru realizarea cuplelor de translație și echilibrarea statică a corpurilor în rotație (transmisiile trebuie montate în articulații în manieră de a permite mișcări relative ale diferitelor elemente unele în raport cu altele, dar au o mare sensibilitate la deformații și vibrații)

• transmisii prin curele, cabluri și lanțuri realizate cu roți și pinioane cu axe paralele, care transformă parametrii mișcării, utilizate de regulă la acționarea articulațiilor, în scopul echilibrării statice prin plasarea acționarilor spre bază și atunci când elementele mecanismului de transmisie sunt depărtate între ele

• transmisii prin pârghii articulate sub formă de paralelogram care asigură o bună rigiditate, elementele paralelogramului sunt componente ale structurii mecanice, iar solicitările sunt de tracțiune-compresiune

• transmisii cu cilindri hidraulici și pneumatici

Senzori utilizați în structura roboților mobili

Subsistemul mecanic este partea sistemului mecatronic care asigură mișcarea și la care se atașează senzorii. Senzorii convertesc informația specifică în semnale electrice. Subsistemul electronic convertește aceste semnale în format numeric pentru ca acestea să poată fi folosite de sistemul de conducere.

Informația furnizată de senzori poate fi utilizată în moduri diferite în funcție de tipul sistemului în care senzorii sunt incluși:

• monitorizarea proceselor

• controlul proceselor

• analiza datelor experimentale

În sistemele mecatronice, datorită prezenței mișcării, trebuie detectate sau măsurate:

– proximitatea (contactul, prezența)

– poziția și viteza

– forța și presiunea

– vibrația și accelerația etc. [4]

Sisteme de acționare a structurilor mecatronice

Pentru acționarea structurilor mecatronice se utilizează atât metode și dipozitive clasice (motoare electrice de curent continuu sau alternative, motoare pas cu pas, actuatoare pneumatice sau hidraulice) cât și metode și dispozitive care, prin noutate, se pot numi neconvenționale (actuatoare electrostatice, actuatoare cu polimeri electroactivi, actuatoare bazate pe lichide electro sau magnetorheologice, actuatoare bazate pe materiale inteligente).

Sisteme de acționare a roboților

Sistemul de acționare cuprinde totalitatea elementelor generatoare de cupluri și/sau forțe din structura sistemului robot, care asigură modificarea configurației structurii mecanice a robotului, în baza transformării energiei primare în energie mecanică. Sistemul de acționare realizează deplasarea axelor articulate din structura mecanică, pentru deplasarea terminalului pe o anumită traiectorie, în scopul îndeplinirii sarcinilor tehnologice (prinderea și deplasarea obiectelor, și/sau funcția tehnologică).

Se poate realiza o clasificare a actuatoarelor utilizate în mecatronică:

• actuatoare electrice :

a) motoare de curent continuu

b) motoare de curent alternativ

c) motoare pas cu pas

Sisteme de acționare a roboților

Sistemul de acționare cuprinde totalitatea elementelor generatoare de cupluri și/sau forțe din structura sistemului robot, care asigură modificarea configurației structurii mecanice a robotului, în baza transformării energiei primare în energie mecanică. Sistemul de acționare realizează deplasarea axelor articulate din structura mecanică, pentru deplasarea terminalului pe o anumită traiectorie, în scopul îndeplinirii sarcinilor tehnologice (prinderea și deplasarea obiectelor, și/sau funcția tehnologică).

Acționarea electrică

Dispozitivele de acționare electrică se bazează pe convertirea energiei câmpului electromagnetic în energie mecanică. În fapt se utilizează câmpul magnetic, având în vedere densitatea de energie mai mare a acestui câmp decât cea a câmpului electric.

Mașinile electrice

Mașinile electrice, ca dispozitive de acționare a structurilor mecatronice, convertesc energia electrică în lucru mecanic de translație sau, cel mai adesea, de rotație.

Motorul de curent continuu

Turația motorului de curent continuu este influențată de tensiunea aplicată la perii și de fluxul magnetic.

Fig 1.4. Legătura dintre tensiune și timp ( semnal digital PWM )

Motorul sincron funcționează în mod normal la o singură turație, turația de sincronism.

Motoare pas cu pas

Ca dispozitiv de acționare, motorul pas cu pas are marele avantaj că este compatibil cu tehnica numerică a semnalelor. El este un convertor electromecanic întocmai ca și cele deja discutate, construit special pentru a fi alimentat în impulsuri. [5]

Dispozitive fluidice de acționare

În structurile mecatronice elementele și dispozitivele fluidice se utilizează pentru realizarea funcțiilor logice de comutație sau pentru acționarea elementelor mobile.

Fig 1.5. Circuit hidraulic de acționare

Micro și nanotehnologii în mecatronică

Odată cu evoluția tehnologică, cu apariția unor noi tehnologii, a fost posibilă fabricarea de micro și nanoactuatori cu inerții mici ale pieselor mecanice mobile și care sunt utilizați în acționarea structurilor mecatronice care necesită forțe sau cupluri relativ mici. Este vorba, în special, de microproteze medicale sau de mecanisme speciale cum ar fi acela de orientare a unor microcamere de luat vederi pentru roboți autonomi.

Microactuatoare

Microactuatoarele utilizate pe scară largă sunt cele la care forța activă este forța electrostatică. Piesa mobilă este sustentata de un sistem elastic, așa că forța utilă dezvoltată este forța electrostatică din care se scade forța elastică. [6]

Sisteme de conducere

Un sistem de conducere al unui sistem mecatronic se poate baza pe:

• o structură de conducere cablată (din ce în ce mai puțin întâlnită) doar pentru sisteme mecatronice simple cu aceeași funcționare pe toată durata lor de utilizare

• o structura de conducere flexibilă/programabilă [7]

Fig 1.6. Schema sistemelor de conducere în mecatronică

În funcție de mărimea cuvântului de date, care este legată de mărimea registrilor și de lărgimea magistralei de date, microntrolerele sunt de 4, 8, 16 sau 32 de biți. O arhitectură tipică de microcontroler este prezentată în figura de mai jos.

Fig 1.7. Arhitectură tipică a unui microcontroler

Pentru a elibera resursele CPU care pot fi folosite în alte scopuri, există circuite de ceas care se reîncarcă (reload timer) automat după terminarea numărării (figura de mai jos).[8]

Fig 1.8. Circuit de ceas

O aplicație mecatronică des întâlnită este aceea în care trebuie reglată turația motoarelor de curent continuu. Se poate folosi metoda PWM (Pulse Width Modulation) care utilizează circuitele de ceas ale microcontrolerului (figura următoare).

Fig 1.9. Metoda PWM

Sistemele de control furnizează mărimi de comandă numerice care trebuie convertite în semnale analogice pentru a putea fi aplicate sistemelor de acționare. Această funcție este îndeplinită de convertoarele CNA (figura următoare).

Fig 1.10.Fluxul CAN

Programarea unui microcontroler se poate face la trei nivele:

– Cod mașină,

– Asamblare,

– Limbaje de nivel înalt.

Testarea programului se poate face în mai multe moduri diferite:

• direct în EPROM,

• pe un sistem de dezvoltare,

• pe un simulator,

• pe un emulator.

Automate Programabile

Un automat programabil a fost definit de Capiel (în 1982) ca fiind: "un sistem electronic operând digital, proiectat pentru utilizarea în mediul industrial, care utilizează o memorie programabilă pentru memorarea internă de instrucțiuni pentru implementarea unor funcții specifice precum funcții logice, secvențiale, temporizări, contorizări și funcții aritmetice, pentru a controla, prin intermediul modulelor de intrare/ieșire digitale sau analogice, diverse tipuri de mașini și procese".

Sistemele cablate au funcția de control fixată permanent (având elementele sistemului conectate, de exemplu electric), în timp ce într-un sistem programabil funcția de control este programată (și memorată) într-o memorie și poate fi modificată prin reprogramare, dacă acest lucru devine necesar.

Tabelul 1.1.Sisteme cablate

Automatele programabile (AP) sunt echipamente electronice destinate automatizării proceselor industriale cu caracter preponderent secvențial, situate din punct de vedere al complexității între echipamentele cu relee sau tranzistorizate și calculatoarele electronice.

Prin concepția sa, automatul programabil:

• este adaptat pentru funcționarea în mediu industrial,

• poate opera într-o plajă largă de temperatură și umiditate,

• este ușor adaptabil la interfațarea cu orice proces și

• nu pune probleme deosebite privind instruirea personalului de deservire, datorită facilităților de programare oferite.

Automatele programabile sunt destinate conducerii proceselor secvențiale de complexitate medie, din diverse ramuri de activitate, cum ar fi:

• mașini-unelte, mașini de injecție, prese;

• linii de turnare sau galvanizare de complexitate medie, linii de transfer;

• manipulatoare și roboți industriali etc.

Tipuri de automate programabile

Categoria de automat programabil se bazează pe eliminarea în cât mai mare măsură a structurilor logice cablate și pe înlocuirea acestora cu structuri logice standard programabile cum ar fi:

• memorii,

• rețele logice programabile,

• secvențiatoare logice programabile,

• microprocesoare și

• circuite specializate programabile.

Metodele specifice de descriere a comportării automatelor programabile rămân metodele organigramei de stări (ASM), metoda Grafcet, respectiv metoda ladder.

Tabelul 1.2. Caracteristici suplimentare ale automatului programabil

Terminologie. Există câțiva termeni diferiți, utilizați pentru a descrie automatele programabile, în literatura de specialitate de limba engleză:

• PC – "programmable controller" = controler programabil (origine: Marea Britanie);

• PLC – "programmable logic controller" = controler logic programabil (origine: americană);

• PBS – "programmable binary system" = sistem binar programabil (origine: suedeză).

Principii de realizare a programelor de conducere a sistemelor mecatronice cu automate programabile

Metodele specifice de descriere a comportării sistemelor mecatronice/proceselor, pe baza cărora se realizează programele de conducere, sunt:

• metoda diagramei (sau organigramei, sau grafului) de stări

• metoda Grafcet

• metoda ladder.

Metoda instrucțiunilor folosind diagrame de stări

Această metodă de realizare a programelor de conducere utilizând instrucțiunile automatului programabil poartă denumirea în limba engleză de "statement list" (STL).

Elaborarea documentului sursă sub forma unei diagrame de stări, care să acopere toate condițiile de funcționare formulate inițial. În acest sens, diagrama de stări trebuie să redea detaliat stările funcționale, condițiile de comutare de la o stare la alta, mărimile de ieșire generate în fiecare stare, ciclurile, regimurile de lucru de tip subrutină etc.

• se alocă variabile de intrare, de ieșire, de memorie (interne) specifice automatului programabil folosit, care să acopere semnalele de intrare furnizate de proces, variabilele de comandă către proces și variabilele de stare; de asemenea se alocă și alte tipuri de variabile dacă este necesar (de exemplu variabile de temporizare, de numărare etc.);

• se scrie programul de conducere folosind setul de instrucțiuni al automatului programabil.

Metoda diagramelor ladder

O diagramă ladder, în schemele electrice, este formată din două bare verticale ce asigură potențialul electric necesar și o rețea de contacte și bobine:

Fig 1.11. Diagramă ladder în scheme electrice

O diagramă ladder, reprezentată cu o logică similară cu cea oferită de schemă electrică, dar utilizând simboluri specifice automatelor programabile, arată astfel:

Fig 1.12. Diagramă ladder utilizând simboluri specifice automatelor programabile

Pentru a se arăta legătură dintre un circuit fizic și o reprezentare ladder, se prezintă circuitul electric al unui motor:

Fig 1.13. Circuit electric al unui motor

Motorul este conectat la o sursă de putere prin intermediul a trei comutatoare în serie și un comutator de suprasarcină (I1-I4). Motorul pornește când toate comutatoarele sunt închise. [9]

Diagrama ladder echivalentă arată astfel:

Fig 1.14. Diagramă ladder echivalentă

Metoda diagramelor Grafcet

Simbolizarea Grafcet-ului nu este unică. O metodă utilizată frecvent în aplicații de conducere a proceselor industriale este prezentată în figura următoare:

Fig 1.15. Conducere a proceselor industriale

Sistem integrat CAD / CAM

Mecatronică = ingineria integrată

• Ingineria integrată -> echipe de proiectare multidisciplinare; modificări la nivelul hardware și software de asistență a activităților de analiză – sinteză, comunicare, sinteză [10]

Capitolul 2.Roboți mobili. Stadiul actual al cunoașterii.

2.1. Noțiuni generale despre roboți mobili

Unul din obiectivele esențiale ale roboticii este elaborarea roboților autonomi. Asemenea roboți ar putea executa sarcinile de îndeplinit fără alte intervenții umane. Comenzile primite vor preciza ce dorește utilizatorul și nu modul în care robotul să execute comenzile. Roboții capabili să îndeplinească aceste operații vor fi echipați cu senzori de percepere a mediului înconjurător, aflate sub controlul unui sistem de calcul .

Roboții autonomi sunt acei roboți care îndeplinesc anumite sarcini fără intervenție umană.

Se programează printr-un program special aferent plăcii care ajută la conducerea robotului.

Pentru a se deplasa în condiții de siguranță într-un mediu necunoscut , robotul trebuie să urmărească o traiectorie și să fie capabil să evite obstacole ce pot apărea în mediu.

Traiectoria reprezintă felul în care robotul se poate mișca între două puncte date ( pe care le denumim locații ) – pot exista și puncte via – planificarea acesteia fiind o etapă importantă în navigare.

Robotul are o platforma de susținere a mecanismului de antrenare prin intermediul căruia se execută mișcările. Mecanismul e alcătuit din 2 roți care sunt antrenate de 2 motoare de curent continuu.

Roțile sunt plasate la marginea platformei și la mijlocul acesteia , motoarele fiind orientate către interior.

Deplasările sunt în mod normal lineare , iar acestea sunt calculate cu ajutorul unui sistem de coordonate XoY încorporat.

Deplasarea perfect liniară ( caz ideal ) e imposibilă datorită perturbatiilor atât mecanice , cât și electrice.

Unul din obiectivele esențiale ale roboticii este elaborarea roboților autonomi. Asemenea roboți ar putea executa sarcinile de îndeplinit fără alte intervenții umane. Comenzile primite vor preciza ce dorește utilizatorul și nu modul în care robotul să execute comenzile. Roboții capabili să îndeplinească aceste operații vor fi echipați cu senzori de percepere a mediului înconjurător, aflate sub controlul unui sistem de calcul .

2.2.Clasificarea roboților mobili

Din punct de vedere al gradului de libertate există două categorii:

– Roboți ficși;

– Roboți mobili.

Din punct de vedere al sistemului de locomoție, roboții mobili pot fi:

– Roboți cu roți;

– Roboți cu șenile;

– Roboți pășitori;

– Roboți târâtori. [11]

Fig 2.1. Robot cu roți Fig 2.2. Robot cu șenile

Fig 2.3. Robot pășitor

Roboții mobili au următoarele caracteristici comune:

1. structura mecanică este un lanț cinematic serie sau paralel respectiv tip

“master-slave”;

2. sistemul de acționare utilizat este electric pentru sarcini mici și medii și

hidraulic pentru sarcini mari;

3. sistemul senzorial utilizează senzori interni (de turație, poziție, efort) la

nivelul articulațiilor, senzori externi(camere TV) pentru scanarea mediului și senzori de

securitate( de proximitate, de prezență cu ultrasunete);

4. sistemul de comandă este ierarhizat, de obicei multiprocesor;

5. limbajele de programare utilizate sunt preluate de la roboții staționari.

2.3.Sistemul senzorial al roboților mobili

În cel mai general caz, senzorii pot fi împărți în două categorii , și anume:

• Senzori de stare internă – senzori care oferă informații despre starea internă a robotului mobil, spre exemplu nivelul bateriei sau poziția roților.

• Senzori de stare externă – senzori care oferă informații despre mediul ambiant în care

robotul funcționează.

Un senzor poate fi activ sau pasiv. Senzorii activi sunt acei senzori care emit energie în mediu pentru a putea observa anumite caracteristici ale acestuia, spre deosebire de senzorii pasivi care primesc energie din mediu pentru a putea prelua informația.
De asemenea, toate tipurile de senzori sunt caracterizate printr -o serie de proprietăți, cele mai importante fiind :

– Sensibilitatea: raportul dintre semnalul de ieșire și semnalul de intrare;

– Liniaritatea: exprimă dacă raportul dintre intrare și ieșire este constant;

– Intervalul de măsurare: diferența între distanța minimă și maximă măsurabilă;

– Timpul de răspuns: timpul necesar pentru ca informația de la intrare să fie observabilă la ieșire;

– Acuratețea: diferența între semnalul măsurat si semnalul real;

– Repetabilitatea: diferențele intre măsurători succesive ale aceleiași entități;

– Rezoluția: exprimă cea mai mică unitate de incrementare a semnalului măsurat;

– Prețul senzorului;

– Puterea de calcul necesară pentru a interpreta rezultatele;

– Tipul de semnal la ieșire;

– Greutatea, mărimea și cantitatea de energie consumată pentru a face o măsurătoare.

Orice model al unui senzor ar trebui să includă și un model intern al zgomotului care poate afecta senzorul în momentul citirii informației. Problema de a recupera informația din mediu din datele primite de la senzor poate fi destul de complexă.

Orice tip de senzor poate fi afectat de mai multe tipuri de erori. Dintre acestea, cele mai importante sunt erorile incidentale, erorile sistematice și erorile stohastice.

În lumea roboților mobili se întâlnesc o mare varietate de tipuri de senzori. O clasificare de bază a acestora ar putea fi :

• Senzori de distanță – senzori care oferă informații despre distanța între senzor și obiectul de măsurat din mediu;

• Senzori de poziție – senzori care oferă informații despre poziția robotului în termeni absoluți;

• Senzori de mediu – senzori care oferă informații despre diverse proprietăți și caracteristici ale mediului (exemplu: temperatură, culoare);

• senzori inerțiali – senzori care măsoară proprietăți de mișcare ale robotului. [12]

2.3.1.Senzori de stare externă

2.3.1.1.Senzori de contact

Cel mai des întâlnit tip de senzori de contact în lumea roboților mobili este reprezentat de senzorii tactili. Termenul de senzor tactil se referă la un traductor care este sensibil la atingere, forță sau presiune. Acești senzori pot fi piezorezistivi, piezoelectrici, capacitivi sau electrorezistivi .

2.3.1.2.Senzori în infraroșu (IR)

Senzorii în infraroșu (IR) constituie categoria cea mai simplă de senzori de distantă folosită la un robot mobil. Metoda lor de funcționare este foarte simplă, fiecare senzor fiind echipat cu un emițător și un detector. Emițătorul transmite un fascicol de lumină în spectrul infraroșu (de regulă sunt folosite lungimi de undă în intervalul 880-990nm), fascicol care se propagă în mediu, iar apoi se reflectă de obiectele aflate în acesta . [13]

2.3.1.3.Senzori ultrasonici

Categoria de senzori cea mai des întâlnită la un robot mobil o constituie categoria senzorilor ultrasonici. Întâlniți în literatura de specialitate și sub denumirea de sonar, senzorii ultrasonici folosesc un principiu oarecum asemănător cu senzorii IR., dar în loc de a transmite fascicole luminoase, ei folosesc semnale acustice. Un emițător transmite un semnal acustic în mediu, urmând apoi ca reflecția acestuia să fie recepționată de componenta detector a senzorului. Timpul în care semnalul este receptat înapoi de senzor precum și atenuarea semnalului reprezintă aspecte exploatate de diferitele tipuri de senzori sonar .

2.3.1.4.Senzori GPS

Sistemul de poziționare globală prin satelit (Global Positioning System) a fost inițial dezvoltat de către Departamentul de Apărare al SUA începând cu anul 1973. Sistemul este alcătuit din aproximativ 21 de sateliți , si permite oricărui receptor autorizat să-și calculeze poziția și viteza cu care se deplasează.

2.3.1.5.Senzori video

Senzorii vizuali sunt reprezentați de regulă în lumea roboților mobili de camere video. În momentul de față senzorii de imagine folosesc două tehnologii: CCD și CMOS.

2.3.2.Senzori de stare internă

Senzorii de stare internă sunt acei senzori care oferă informații despre starea internă a robotului mobil. Senzorii din această categorie oferă fie informații legate de poziția robotului (odometrie), fie informații referitoare la vitezele sau accelerațiile liniare, respectiv unghiulare ale robotului (accelerometru, giroscop).

Senzorii care oferă informații despre poziție, se regăsesc de regulă sub forma encoderelor la motoarele robotului. Encoder-ul este un dispozitiv (circuit, traductor, software) care transformă semnalul primit (numărul de rotații) într-un semnal electric. Prin măsurarea rotației roților robotului, și apoi interpretarea acestei informații se poate estima poziția robotului. Semnalul provenit de la encodere poate oferi informații despre direcția în care se deplasează robotul, viteza cu care se deplasează robotul precum și distanța aproximativă care a parcurs-o robotul de la ultima evaluare .

Senzorul care permite determinarea vitezelor sau accelerațiile unghiulare ale robotului este giroscopul. Elementul component fundamental al tuturor dispozitivelor giroscopice – indiferent de destinația acestora – îl constituie giroscopul în formă de volant având rolul de purtător de moment cinetic.

2.3.3.Considerații privind navigația roboților mobili

Pentru navigație au fost folosite numeroase principii : odometrie (măsurarea relativă a poziției prin analiza numărului de rotații și orientarea roților) , navigație inerțială (pe baza măsurătorilor relative realizate prin intermediul giroscopului), ghidare activă (calculul poziției absolute prin măsurarea distantei până la cel puțin trei repere), recunoașterea punctelor de reper artificiale și recunoașterea puncte de reper naturale (se folosesc puncte de reper existente din mediul înconjurător).

2.3.4.Metodele de navigație a roboților autonomi

Metodele de navigație a roboților autonomi sunt din cele mai diverse, dată fiind gama largă de utilizare a roboților și aplicațiile acestora. Mediul înconjurător robotului are o importanță crucială pentru funcționarea și orientarea acestuia, și de aceea toate abordările acestei probleme pornesc de la mediu. După acest considerent, se pot evidenția trei principii de navigație :

1. Navigația globală – raportare directă prin coordonate absolute la harta mediului înconjurător;

2. Navigația locală – prin determinarea poziției relativ față de obiecte imediat apropiate de robot, staționare sau în mișcare;

3. Navigația individuală – aflarea poziției robotului cu ajutorul unor dispozitive dedicate monitorizării deplasărilor făcute de acesta.

2.3.4.1.Navigația globală

Acest tip de navigație se aplică la roboții ce au de parcurs distanțe mari, în spații deschise, fără repere imediate și la distanțe foarte mari față de puncte de referință.

2.3.4.2.Navigația locală

În cazul navigației locale, se folosesc metode de detecție vizuală a mediului cu ajutorul a diferiți senzori, cum ar fi senzorii vizuali, infraroșu, laser, sau ultrasonici. . În cadrul navigării locale este vizată o modelare și o interpretare a mediului de către robot, fără ca informațiile despre mediu sa îi fie furnizate în prealabil. Această interpretare duce la diferite tipuri de reprezentări ale mediului înconjurător, făcute după modele în funcție de aplicație. Pe baza interpretării mediului, robotul poate realiza hărți bidimensionale sau tridimensionale pentru o orientare mai bună și prin recunoașterea anumitor părți din mediu, procesul de navigație poate fi optimizat .

2.3.4.3.Navigația individuală

Navigația individuală, este utilizată în combinație cu metodele de navigație globală și locală, prin calcularea poziției robotului relativ la mediu prin măsurări directe asupra vitezei și traiectoriei parcurse de către robot. Această metodă, numită și odometrie, oferă o corecție mai bună a erorilor de deplasare și totodată este relativ simplu de implementat, soluția regăsindu-se la roboții ieftini sau cu aplicații simple. Pentru că majoritatea roboților mobili utilizează roți sau șenile, această soluție a devenit practic omniprezentă la aproape toți roboții mobili.

2.3.5.Module de navigație ale roboților mobili

Sistemul de navigație al roboților mobili este împărțit în trei module principale:

– Cercetarea și detecția;

– Planificarea traseului (drumului);

– Controlul mișcării.

2.3.6.Metoda de localizare și construcție a hărții traseului

Metoda de localizare și construcție a hărții simultan este folosită pentru navigația roboților mobili în spații mari, folosindu-se mai multe tipuri de senzori.

2.3.7.Planificarea traseului (drumului)

Problema planificării mișcării unui robot mobil este aceea a găsirii unei mișcări pentru un robot care trebuie să se deplaseze de la o configurație dată, la o destinație stabilită, într -un mediu care conține o mulțime de obstacole prestabilite, astfel încât robotul să nu intre în coliziune de nici unul din acestea.

Abilitatea ocolirii obstacolelor în mișcare este indispensabilă pentru orice robot real.

Optimizarea unei probleme de planificare, în contextul amintit, presupune un consum foarte mic de energie, dar, în același timp, trebuie să se acorde atenție și studiului vitezelor și accelerațiilor robotului mobil. Astfel problema planificării mișcării printre obiecte mobile este în mai multe feluri diferită și mai complexă decât problema planificării mișcării cu obstacole staționare .

2.3.8.Controlul mișcării

a) Unități centrale de procesare

În funcție de tipul de sarcini atribuite unui robot mobil, procesarea și descompunerea sarcinilor în acțiuni simple pe care robotul le poate executa necesită prezena unei unități centrale de procesare .

Unitatea centrală de procesare se poate afla fie pe robot (en. onboard), fie la distanță conectată de acesta prin diverse metode (en. offboard). În mod normal, se dorește ca robotul mobil să fie autonom, deci să poată duce la bun sfârșit oarecum independent și sarcini mai complexe, fără intervenția unui program de control din partea utilizatorului, aflat la distanță

Evident soluția cea mai bună este ca robotul să poate funcționa atât autonom prin intermediul unei unități de procesare onboard, cât și în regim de comunicare cu alte unități de procesare mai performante, care pot asigura necesitățile computaționale pentru sarcini mai complexe .

b) Sisteme de comunicare

Roboții mobili trebuie să posede capacități de comunicare fie cu alți roboți din mediu fie cu un operator uman, pentru a raporta dacă o anumită sarcină dată a fost îndeplinită cu succes, sau nu. Sistemele de comunicare aferente roboților mobili pot fi de 2 categorii: cu fir respectiv fără fir.

Comunicația cu fir este modalitatea cea mai simplă de transfer de date între robot și operator.

Un dezavantaj direct al folosirii unui sistem de comunicare cu fir, ar fi faptul că spațiul de lucru al robotului va fi limitat de lungimea maximă admisibilă a cablului. De asemenea, cablul ar putea interfera cu sistemul de locomoție sau chiar cu senzorii, aceștia putând raporta valori eronate.

Sistemele de comunicare fără fir se folosesc de o serie de tehnologii de transmitere a datelor prin aer dintre care amintim: transmisia prin unde în spectrul infraroșu, bluetooth, radio modem-uri, WiFi și altele.O problemă a acestor tehnologii ar fi faptul că sunt consumatoare de energie, lucru care nu este prielnic robotului mobil.

2.4. Comandarea cu buclă închisă cu ajutorul controlerului PID

Un controler proporțional-integral-derivat (controler PID) este un mecanism de feedback (controller) de buclă de reacție utilizat în mod obișnuit în sistemele de control industrial. Un controler PID calculează continuu o valoare de eroare e (t) ca diferență între o valoare de referință dorită și o variabilă de proces măsurată și aplică o corecție bazată pe termeni proporțional, integral și derivat (uneori denumiți P, I și respectiv D) care dau numele lor tipului de controler.

Pentru sistemele cu timp discret, se folosește adesea termenul PSD (diferență sumară-proporțională).

Fig 2.4. Buclă de reacție

O diagramă bloc a unui controler PID într-o buclă de feedback. R (t) este valoarea dorită a procesului sau "setpoint", iar y (t) este valoarea procesului măsurat.

P reprezintă valorile actuale ale erorii. De exemplu, dacă eroarea este mare și pozitivă, ieșirea de control va fi de asemenea mare și pozitivă.

I evidențiază valorile anterioare ale erorii. De exemplu, dacă ieșirea curentă nu este suficient de puternică, integritatea erorii se va acumula în timp și controlerul va răspunde aplicând o acțiune mai puternică.

D reprezintă posibile tendințe viitoare ale erorii, pe baza ratei actuale de schimbare . De exemplu, continuând exemplul P de mai sus, când ieșirea de control pozitivă mare reușește să aducă eroarea mai aproape de zero, aceasta pune și procesul pe o cale spre erori negative mari în viitorul apropiat; În acest caz, derivatul devine negativ, iar modulul D reduce puterea acțiunii pentru a preveni această depășire.

Utilizarea algoritmului PID nu garantează un control optim al sistemului sau chiar stabilitatea acestuia. Nu este garantat să funcționeze ; În mod evident, aceasta poate fi afectată de întârzieri (eroarea calculată nu vine imediat sau acțiunea de control nu se aplică instantaneu), necesitând compensarea întârzierii de decalaj pentru a fi eficientă. Răspunsul controlerului poate fi descris în termeni de reacție la o eroare, gradul în care sistemul depășește o valoare de referință și gradul oricărei oscilații a sistemului.

Dar este aplicabil în general deoarece un controler PID se bazează numai pe variabila de proces măsurată, nu pe cunoașterea procesului de bază]. Un controler PID are trei parametri pentru a face față cerințelor specifice procesului. [14]

Termen proporțional

Termenul proporțional produce o valoare de ieșire care este proporțională cu valoarea curentă de eroare. Răspunsul proporțional poate fi ajustat prin înmulțirea erorii cu o constantă Kp, numită constantă a câștigului proporțional.

Fig 2.5. Reacția pe care o dă termenul proporțional

(2.1.)

Termenul integral

Fig 2.6. Reacția pe care o dă termenul integral

Contribuția din termenul integral este proporțională atât cu magnitudinea erorii, cât și cu durata erorii. Integralul într-un controler PID este suma erorii instantanee în timp și oferă compensarea acumulată care ar fi trebuit să fie corectată anterior. Eroarea acumulată este apoi înmulțită cu termenul integral (Ki) și adăugată la ieșirea controlerului.

(2.2.)

Termenul integrat accelerează mișcarea procesului spre valoarea de referință și elimină eroarea reziduală la starea de echilibru care apare cu un controler proporțional pur. Cu toate acestea, deoarece termenul integrat răspunde la erorile acumulate din trecut, poate provoca depășirea valorii de referință a valorii actuale

Termen derivativ

Fig 2.7. Reacția pe care o dă termenul derivativ

Derivatul erorii procesului se calculează prin determinarea pantei erorii în timp și înmulțirea acestei rate de modificare cu blocul de gain derivat Kd.

(2.3.) [15]

2.5.Stucturi performante de roboți autonomi

350 î.Hr – Architas din Tarent – a construit primul mecanism propulsat de abur .

200 î.Hr – Ctesibus din Alexandria a proiectat un sistem controlat – ceasul cu apă.

1495 – Leonardo da Vinci – mașinărie asemănătoare unui cavaler cu armură, care încerca să redea mișcările naturale ale unui om.

Două secole și jumătate mai târziu – Jacques de Vaucanson a inventat primul robot în adevăratul sens al cuvântului – "Cântărețul la flaut", care putea reda 12 melodii. "Rața cu digestie", o mașinărie care putea să dea din aripi singură, să măcăie, să se hrănească, să digere grăunțele și "să iasă afară".

1770 – Pierre Jaquet-Droz și fiul acestuia, Henri Louis. Ei au construit trei păpuși complexe – Scriitorul , Muziciana și Desenatorul . Aceste dispozitive s-au numit "androizi" și sunt considerate precursoarele computerului modern.

Începând cu 1822 – Deși nu a construit nici o astfel de mașinărie funcțională, Babbage este considerat astăzi părintele computerului, lucrările sale aflându-se la baza sistemului binar.

1898 – Nikola Tesla – o bărcuță cu telecomandă.

1936 – Alan Turing a creat un sistem de executare mecanică a unui set limitat de operații atomice, sistemul servind ca fundament teoretic pentru computerul modern.

2.5.1. Min7 robot micromouse

Fig 2.8. Robot autonom Min7

Min7 este primul robot pe 4 roți dezvoltat de Ng. Acesta cântărește doar 90 de grame și măsoară 10 x 7,5 x 2,5 cm. Are o viteză de linie dreaptă de 3,5 m / s și utilizează un procesor Hitachi 2633R de 20 MHz drept creier.

Ng și Min7 au câștigat datorită vitezei robotului, care trebuie văzut pentru a fi crezut. A reușit să navigheze în labirint în doar 3.921 secunde, ceea ce reprezintă și un record.

2.5.2. Robot PoliArdo de labirint

Fig 2.9. Robot autonom PoliArdo

Baterii și senzori ultrasonici

Bateriile sunt consumate foarte rapid, datorită faptului că unitățile de control a capacității nu au voie să pună o baterie mai puternică. Cel mai adesea s-a întâmplat ca amperajul să scadă repede la zero. Au instalat un stabilizator de tensiune 7806 și au lucrat cu baterii mai puternice.

După cum se știe deja, senzorii cu ultrasunete funcționează pe principiul radarului.

Două unități de comandă

Deoarece robotul are două unități de control pe unul, au atașat motoare și senzori ultrasonici pe cel de-al doilea senzor de culoare, afișaj și difuzor

Misiune

Algoritmul de monitorizare a peretelui este unul dintre algoritmii cei mai populari pentru găsirea unei ieșiri din labirint și este, de asemenea, cunoscut sub numele de "Rule of the left hand" și "rule of the right hand".

PoliArdo purta pentru această sarcină trei senzori cu ultrasunete pentru a monitoriza peretele, un senzor de culoare care număra liniile și recunoștea culorile, au existat și difuzoarele care au dat un semnal robotului care a trecut linia roșie și un afișaj care a arătat numărul de linii.[17]

2.5.3. Masinuță autonomă Arduino de rezolvare labirint

Fig 2.10. Robot Arduino de rezolvare labirint

În el a fost folosit hardware-ul gratuit pentru platformele electronice de platformă, ARDUINO, care, prin limbajul său de programare, Wiring, un derivat al C / C ++, puteți scrie programul cu logica necesară pentru dezvoltarea automatizării în jurul robotului, senzori ultrasonici pentru măsurarea și monitorizarea distanțelor de la pereții labirintului.

La baza care sprijină robotul sunt trei roți, cu două motoare individuale controlate de un circuit integrat conectat la Arduino care manipulează vitezele acestor motoare și o roată fără motor pentru a se deplasa.

Provocarea a fost aceea de a crea un vehicul autonom și de a urma o cale stabilită de DARPA (Defense Advanced Research Projects Agency), Proiecte de Cercetare Avansată a Agenției de Apărare a Statelor Unite, agenția responsabilă pentru dezvoltarea de noi echipamente militare în Statele Unite .

2.5.4.Robot autonom pentru rezolvare labirint cu control prin Bluetooth

Fig 2.11. Robot autonom echipat cu terminal Bluetooth

Robotul a fost echipat cu un terminal Bluetooth, astfel încât să poată transmite datele obținute de la senzorii externi către un alt terminal Bluetooth, încorporat în cadrul unui telefon mobil sau chiar al unei tablete. Datele transmise de acesta trebuie interpretate la receptor de o altă aplicație de nivel înalt, capabilă să îi ofere utilizatorului o interfață prietenoasă 3D a mediului respectiv (Android).

2.5.4.1.Arhitectura robotului

Mașina a fost realizată având la bază o placă Freedom Board (FRDM-KL46Z) dezvoltată de Freescale Semiconductor peste care au fost adăugate mai multe module pentru a i se extinde funcționalitatea.

2.5.4.2. Modulul Bluetooth

Standardul Bluetooth, așa cum este definit el, prevede existența a două tipuri de entități virtuale: un dispozitiv master și un dispozitiv slave . Această lucrare definește dispozitivul master ca fiind robotul, iar dispozitivul slave ca fiind telefonul.

2.5.4.3. Driverul de motor

Comandarea celor două motoare de curent continuu atașate robotului are loc prin intermediul unui driver ce are la bază un circuit integrat capabil să împartă tensiunea de intrare în mod egal sau în mod diferit către cele două ieșiri. Driverul este bazat pe circuitul integrat L298N și poate oferi la ieșire un curent maxim de 2A.

2.5.4.4. Senzorul de distanță cu ultrasunete

Senzorul este fără contact și funcționează pe principiul ecolocației. El poate măsura distanța până la un obstacol cu o precizie de aproximativ 3mm și, de asemenea, între următoarele limite: 2cm este limita inferioară și 4m limita superioară.

2.5.4.5.Descrierea algoritmului de explorare

Inițial, robotul va fi poziționat undeva în labirint, în așa fel încât senzorii laterali să poată detecta zidurile ca și obstacole (L și R). Atunci când mașina ar trebui să mergă în linie dreaptă, reglarea traiectoriei se va face folosind valorile obținute de la senzorii laterali.

Condiția de găsire a ieșirii labirintului mai aduce o limitare în ceea ce privește construcția lui, în sensul în care acesta din urmă nu poate conține intersecții în X, ci doar în T. Viteza mașinii în linie dreaptă va fi direct proporțională cu distanța oferită de senzorul frontal, conducând la o îmbunătățire a timpului de parcurgere a labirintului.

În fine, ultimul caz rămas este ce comportament ar trebui să aibă mașina atunci când ajunge într-o fundătură. Nu mai poate evita întoarcerea, motiv pentru care va face un artificiu și va merge cu spatele până când ajunge într-o intersecție în care a mai fost (distanța detectată de senzorul frontal este aproximativ egală cu distanța detectată la un moment anterior de același senzor atunci când era în respectiva încrucișare de drumuri). [19]

Capitolul 3. Fundamente matematice privind proiectarea robotului mobil

3.1. Modelare matematică

Asupra robotului acționează următoarele forțe :

Forța normală

Greutatea

Forța de frecare

Forța de tracțiune

Forța de inerție

toate acestea incidente sub un unghi α pe care îl denumim unghi al pantei . ( robotul este reprezentat mai jos pe un plan înclinat care reprezintă o suprafață plană care cu orizontala formează un anumit unghi. ) . Planul înclinat este utilizat la ridicarea obiectelor grele la o anumită înălțime folosindu-se o forță mai mică decât în cazul ridicării lor pe o direcție verticală . Trebuie menționat însă că lucrul mecanic efectuat nu devine mai mic , deci rămâne neschimbat. În aceste cazuri , după un studiu amănunțit , unghiul α poate lua valori între 30 și 40 de grade.

3.1.1.Forța normală

N reprezintă forța normală exercitată asupra obiectelor.

Forța normală este forța de respingere între atomii aflați în contact strâns. Când norii de electroni ai atomilor aflați în apropiere se suprapun, respingerea Pauli (cauzată de natura de fermioni a electronilor) are ca rezultat forța ce acționează normal la suprafața de contact între două obiecte. Forța normală, de exemplu, este responsabilă pentru integritatea structurală a meselor și clădirilor, și este forța ce răspunde atunci când o forță exterioară apasă un obiect solid. Un exemplu de forță normală în acțiune este la impactul unui obiect pe o suprafață fixă.

3.1.2.Greutatea

unui corp este forța cu care un câmp gravitațional acționează asupra corpului. De exemplu greutatea unui corp aflat la suprafața Pământului este

(3.1.2.)

unde m este masa corpului, iar este vectorul accelerației gravitaționale la suprafața Pământului, orientat spre centrul planetei și cu valoarea standard de 9,80665 m/s² (valoarea reală depinde de poziția geografică și de altitudine).

3.1.3.Forța de frecare

este componenta tangențială la suprafața de contact dintre două corpuri a forței de sprijin pe care unul din corpuri o exercită asupra celui de-al doilea. În timpul deplasării, forța de frecare are sens opus mișcării adică încetinește mișcarea. Ea depinde de natura și de masa corpului și apare la alunecare și rostogolire. Totdeauna forța de frecare la alunecare este mai mare decât forța de frecare la rostogolire.

În caz că singurele forțe dintre corpuri provin din accelerația gravitațională, relația de calcul a forței de frecare este: coeficientul de frecare înmulțit cu reactiunea normală creată de corp :

. (3.1)

3.1.4.Tracțiune

Acțiunea de deplasare a unui vehicul cu ajutorul unei forțe aplicate la partea lui anterioară; forță care pune în mișcare un vehicul.

Forță pe care un organ de propulsie (motor etc.) o exercită asupra unui sistem tehnic (autovehicul etc.) pentru a-l pune sau a-l menține în mișcare; mișcare a vehiculelor terestre sub acțiunea acestor forțe.

(3.2)

3.1.5.Momentul de inerție

este o mărime fizică tensorială care exprimă măsura prin care un corp se opune modificării stării sale de repaus relativ sau de mișcare de rotație uniformă la acțiunea unui moment al forței. Conceptul a fost introdus de Leonhard Euler în 1765. Deorece privește rotația corpurilor, termenul este uneori interpretat ca inerție rotațională. Momentul de inerție este analog masei (masă inerțială) de la mișcarea liniară, care măsoară rezistența (inerția) corpurilor la schimbarea stării lor de mișcare în linie dreaptă. Descrie relația matematică dintre momentul cinetic și viteză unghiulară ca și dintre momentul forței și accelerație unghiulară. Inerția este proprietatea generală a corpurilor de a se opune schimbării stării de repaus sau de mișcare rectilinie uniformă.

Datorită inerției corpurile se comportă diferit la schimbarea stării de repaus sau de mișcare rectilinie și uniformă.Proprietății de inerție a unui corp i se asociază mărimea fizică numită masă (m). Cu cât inerția unui corp este mai mare cu atât masa lui este mai mare.

3.1.6. Exemplificare calcule motor

Fig 3.1. Forțe care acționează asupra robotului

Robotul este reprezentat mai sus într-o vedere ca și cum ar urca pe o pantă cu unghiul α. Totuși , aceasta este doar o reprezentare teoretică , deoarece robotul se deplasează pe direcția orizontală și nu pe un plan înclinat , rezultând faptul că unghiul α este de 0 grade.

α= 0◦ (3.3.)

Ff2 și Ff1 sunt forțele de frecare care apar la contactul dintre roțile robotului și suprafața pe care acesta se deplasează. De reamintit că există două tipuri de forțe de frecare , și anume frecare de rostogolire și frecare de alunecare , și că frecarea de alunecare este mereu mai mai mare decât cea de rostogolire.

μ1 – frecare de rostogolire cauciuc / suprafață lucioasă

(3.4.){\displaystyle \mathrm {F_{f}=\mu \,N} }

(3.5.)

μ2 – frecare de alunecare

Fi – forță de inerție

Forța de tracțiune , cea care ajută robotul să se pună în mișcare , este mai mare sau egală decât suma forțelor de inerție , de frecare și a componentei pe direcția x a greutății . Trebuie specificat că

(3.6.) ( componenta tangențială )

(3.7.)

Dar ( pentru că α=0◦) (3.8.) =>

(3.9.)

Momentul este exprimat ca forța înmulțit cu brațul forței , care reprezintă lungimea perpendicularei dusă dintr-un punct pe dreapta suport a forței.

( d – brațul fortei ) (3.10.)

(3.11.)

(3.12.)

(3.13.)

(3.14.)

Se îndeplinește condiția deci.

(3.15.)

(3.16.)

(3.17.)

Dar α=0 => (3.18.)

(3.19.)

Cuplul pe care trebuie să îl avem la motor

Fig 3.2. Legătura dintre viteză și accelerație

r = 18 [mm] = 18/ 1000 [m] = 0,018 [m] (3.20.)

Fig 3.3. Reprezentarea vitezei și a vitezei unghiulare pe robot

(3.21.)

ω – viteza unghiulară

(3.22.)

(3.23.)

Turație de mers în gol : 1069 [ rot/min ]

(3.24.)

(3.25.)

(3.26.)

Am ales micro motorul cu reducție de 30:1 de la Pololu în urma calculelor , dar și în urma unei analize mai complete a roboților de labirint din trecut până în prezent. Majoritatea roboților de rezolvare labirint , cât și cei pentru urmărirea liniei utilizează motoare micro din metal de la Pololu.

Tensiunea evaluată a motorului : 6 V

Tip motor : Perii de carbon de mare putere ( HPCB – High Power Carbon Brushes )

Curent de frânare : 1600 mA ( raportat la tensiunea evaluată )

Turația când nu avem încărcări : 1000 [rot/min] ( raportat la tensiunea evaluată )

Momentul de cuplare aproximativ : 0,06355 [Nm] ( raportat la tensiunea evaluată )

Un singur arbore ( cutie de viteze doar ) : 30 : 1 HPCB 6 V

Cu 2 arbori ( cutie de viteze și motor ) : 30 : 1 HPCB 6V 2 arbori

Limita superioară pentru cuplu instantaneu la motoarele care au un raport de 1000:1 este de 2,5 kgcm , pe când la cel utilizat în lucrarea prezentă de 30:1 este de 2 kgcm. Notăm cuplul instantaneu la motor cu Mi :

(3.27.)

Dar știm că 1 [kgm] = 9,80665 [Nm]. Atunci :

(3.28.)

Raportul exact al roților din angrenajul de reducție este următorul :

(3.29.)

Însă adoptăm cel mai apropiat număr de 29,8609 și anume 30.

Supraîncărcarea motorului scade durata de viață și poate rezulta într-o avariere imediată. Limita superioară recomandată pentru cuplul instantaneu este de 2 kgcm pentru raportul roților pe care îl are motorul achiziționat , însă este recomandat ca încărcările aplicate să fie mult sub această limită. Blocajele pot rezulta rapid în defectări din punct de vedere termic la înfășurările și periile motorului , în special la acele versiuni de motor care folosesc putere mare ( HP și HPCB ) ; o recomandare generală pe care producătorul o face este aceea de a opera motorul de curent continuu la 25% din capacitatea acestuia din curent de frânare.

Îl putem determina relativ simplu :

(3.30)

Puterea motorului se calculează astfel :

(3.31.)

(3.32.)

Dar se mai poate calcula și în alt fel :

(3.33.)

Acum că am aflat atât rezistența , cât și puterea motorului , putem calcula și energia acestuia :

(3.34.)

Știm că la tensiunea evaluată de 6V, avem 1000 [rot/min] . Transformăm aceste rot/min în rot/s după formula :

(3.35.)

Într-o secundă deci axul se rotește de 16,66 ori.

Mai departe transformăm rot/s în rad/s , pentru că 2π știm că semnifică parcurgerea completă a cercului trigonometric ( deci o rotație completă ).

(3.36.)

Revenim la formula energiei și considerăm că parcurgem doar doi metri , ceea înseamnă că timpul este de o secundă ( pentru că v = 2 m/s ).

(3.37.)

Știm însă că un Joule este egal cu lucrul mecanic efectuat de o forță de un Newton care își deplasează punctul de aplicație pe o distanță de un metru pe direcția și în sensul forței. Este de asemenea utilizat și pentru transferul tuturor formelor de energie , incluzând căldura.

(3.38.)

Având energia în Jouli , o putem calcula în kWh.

(3.39.)

Se produce o căldură de 9,6 J prin întrefierul motorului la trecerea unui curent 2,56 A.

(3.40.)

(3.41.)

(3.42.)

De ce motorul de curent continuu și nu alt motor? Explicația este simplă. Motorul de curent continuu este cel mai simplu de comandat , având două borne , plus și minus. Dacă firele se leagă invers la terminalele acestuia , motorul pornește rotația în sens invers. Acest lucru se poate face și printr-o punte H însă , nefiind necesară inversarea firelor. Un alt avantaj îl reprezintă domeniu larg de variație a vitezei.

Dezavantajul este reprezentat de costul ridicat de fabricație și întreținere , acest lucru fiind determinat de uzura periilor și a colectorului , fiind un pericol și în funcționarea acestuia , atunci când se supraîncălzește și poate chiar exploda.

Capitolul 4. Modelarea tridimensională a robotului mobil

Întreg modelul tridimensional este prezentat în figura de mai jos ( softul ales este Catia V5 R20 , datorită flexibilității și interfeței intuitive ).

Fig 4.1. Robot maze solver asamblat

Legendă :

1 – Plăcuță Arduino Nano V3 Atmega328p

2 – Carcasă suport minge

3 – Platformă inferioară

4 – Șurub distanțier M6 x 100

5 – Piuliță M6

6 – Senzor de distanță Sharp

7 – Baterie alcalină AA

8 – Platformă superioară

9 – Carcasă suport baterii AA

10 – Modul Encoder

11 – Micro motor cu suport

12 – Roată robot

13 – Punte H duală L298N

Pentru modelarea întregului robot mobil am utilizat componentele următoare :

4 x baterii AA

Carcasă suport minge

Carcasă suport baterie

Minge susținere platforma

Modul encoder

Micro motor cu reducție cu suport

Placuță Nano V3 Atmega 328p

9 x piuliță M6

Platformă inferioară

Platformă superioară

Punte H dublă L298N

2 x roată robot

Senzor de distanță Sharp IR

Șurub distanțier H6x100

În urma unui studiu al stadiului actual al roboților autonomi , am ales să folosesc componentele prezentate mai sus.

Asamblarea robotului

După etapa calculelor de dimensionare , am achiziționat componentele menționate mai sus . Trecand la etapa de proiectare , am considerat de cuviință să îmi fac 2 platforme pentru robot,una inferioară și una superioară , cu dimensiunile de 116 pe 120 [mm]. După proiectarea plăcii inferioare , a motoarelor , a roților , suportilor , carcasei , bateriilor , senzorilor și a tuturor celorlalte componente , am început asamblarea.

După întocmirea unei schițe în prealabil , am poziționat cele două micromotare pe platforma inferioară în spatele acesteia . Am atașat apoi cele două roți înafara platformei, dar pe axul motorului . Motoarele le-am asamblat în prealabil cu suporții aferenți , care ajută la fixarea motorului pe platformă cu ajutorul a două șuruburi. În apropierea celor două motoare , pe partea interioară , am plasat la o oarecare distanță cele două encodere , simetric , care se conectează la motoare printr-un tub. ( pentru a se putea conecta la cel de-al doilea ax ).

Pe partea centrală a platformei inferioare sunt poziționate puntea H duală L298N de comandare a motoarelor , și spre partea din față plăcuța de programare Arduino Nano. ( care reprezintă un ansamblu de mai multe piese ). Tot pe partea frontală , însă pe față opusă acestor componente , am atașat carcasa suport minge și mingea menită să mențină echilibrul robotului.

Urmează apoi distanțierea făcută cu cele 3 șuruburi M6x100 și fixarea lor între cele două plăci cu 9 piulițe M6.

Pe platforma superioară am poziționat central suportul de baterii în interiorul cărora se află bateriile , și cei trei senzori de distanță : unul pe partea stângă , unul pe partea dreapta și unul pe direcția înainte. Sunt atașați strategic de carcasa bateriilor alcaline.

Șuruburile distanțiere sunt poziționate tot pe principiul minimului de 3 puncte necesare pentru echilibru din mecanică.

Analiză cinematică ( soft ales : Catia V5 R20 , modul DMU Kinematics )

Din meniul Start -> Digital Mockup -> DMU Kinematics .

Am selectat ansamblul robotului de labirint. Primul pas a fost crearea unui nou mecanism pentru a putea stabili ca element fix platforma inferioară a robotului.

Fig 4.2. Creare mecanism

Am creat o cuplă rigidă între platformă și motorul cu suport . Similar am făcut și pentru celălalt motor.

Fig 4.3. Creare cuplă rigida

Am creat o cuplă de revoluție între roată și axul micro motorului pentru a simula mișcarea robotului.

Fig 4.4.Creare cuplă de revoluție

Am selectat Linia 1 , și anume axa roții robotului cu diametru de 18 [ mm ].

Fig 4.5.Selectarea liniei roții robotului

Am ascuns roata și am selectat Linia 2 , și anume cea a axului motorului. Este recomandat să dăm hide din arborele de specificații , altfel după ce creăm linia și planul 1 și dorim revenirea la roată pentru a selecta cel de-al doilea plan , roata rămâne în spațiul “invizibil”. Există însă o soluție , și anume de a selecta roata din Swap visible space.

Fig 4.6. Selectarea liniei axului motorului

Având deja ascunsă roata , am profitat de acest lucru și am selectat primul plan , și anume partea metalică a micro motorului. De specificat că cele două plane trebuie să fie paralele.

Fig 4.7. Selectare plan motor

Am dat click dreapta pe Part-ul “Roată robot” din arborele de specificații și am selectat opțiunea Hide/Show pentru a mi se reafișa roata în spațiul vizibil de lucru. Am selectat al doilea plan , paralel cu primul , fiind cel exterior al roții .

Fig 4.8. Selectare plan roată

Am selectat opțiunea Angle driven pentru a putea simula rotația roții. ( fără această comandă mecanismul nu poate fi simulat). Facem la fel și pentru cealaltă roată și micro motor.

Fig 4.9. Selectarea opțiunii pentru varierea unghiului

Această fereastă care apare la încheierea cuplei ( după apăsarea butonului Ok de mai sus ) ne arată faptul că mecanismul poate fi simulat.

Fig 4.10. Afișaz posibilitate simulare mecanism

Acum mai rămâne doar să comandăm cele două roți , trăgând de cursoarele care se află pe linia dintre afișajul -360 și 360 pentru a putea simula mișcarea roților. Fiind un mecanism cu conducere diferențială , înseamnă că roțile sunt independente una de cealaltă ( nu există un ax între cele două roți ).

Fig 4.11. Simulare mecanism

La finalul simulării , când roțile încetează să se mai rotească , apăsăm butonul de reset pentru a se readuce roțile și axul în poziția inițială.

Execuția componentelor robotului de labirint

Câteva desene de execuție a componentelor mai reprezentative generate cu modulul Drawing al Catia V5 R20:

Fig 4.12.Motor cu suport

Fig 4.13.Plăcuță Arduino Nano V3 Atmega328p

Fig 4.14..Modul encoder

Fig 4.15.Punte H duală L298N

Fig 4.16.Senzor de distanță Sharp

Capitolul 5 .Partea experimentală.

5.1. Fundamentele realizării părții experimentale

Proiectul constă într-un robot mic , cu performanță ridicată , autonom , creat pentru rezolvarea problemei de labirint.

Alimentat de patru baterii AA și un sistem de energie unic care face motoarele să meargă la o tensiune de regulă la 6 V , robotul este capabil de viteze de până la 2 m/ secundă în timp ce realizează întoarceri și rotații precise care nu variază cu tensiunea bateriei . Aceasta are ca efect performanțe înalte , consistente și repetabile a unui cod bine pus la punct pe măsură ce bateriile se termină . Robotul vine complet asamblat cu două motoare din micro metal , trei senzori de distanță , două module encoder, o punte H duală și mai multe , toate conectate la un microcontroler Nano V3 238p programabil de către utilizator . Măsoară aproximativ 11,6 cm x 12 cm x 13 cm și cântărește 432 g cu baterii.

Este bazat pe un microcontroler ATmega328 , funcționând la 20 Mhz . Roboții care folosesc ATmega328 includ 32 KB de memorie de program Flash , 2 KB RAM , și 1 KB de memorie EEPROM persistentă . Utilizarea microcontrolerului ATmega face robotul compatibil cu populara platformă de dezvoltare Arduino . Uneltele de dezvoltare gratuite C și C++ sunt de asemenea disponibile , și un set extins de librării o fac ușor de utilizat pentru a interfața cu toate componentele hardware integrate . Programele de probă sunt disponibile pentru a fi expuse – cum să utilizăm diverse componente robotului , precum și cum să îndeplinim un comportament mult mai complex ca și urmărirea de linie și soluționarea unui labirint.

5.2.Pornirea robotului

Primul pas în a utiliza robotul este de a insera patru baterii AA în suportul pentru baterii .

Spre deosebire de robotul Pololu , acest robot nu vine incorporat cu un ecran LCD , deci nu necesită avertizări și precauții suplimentare , cum sunt cele de îndepărtare LCD pentru a putea insera bateriile. [20]

5.3. Prezentare componente utilizate

Cele 4 baterii AA sunt alcaline , dând un total de 6 V cumulat ( motiv pentru care le-am ales deoarece corespund nevoilor roboților de acest tip ) , pentru că este o acționare diferențială , având 2 motoare de curent continuu. Motoarele sunt de tip inductiv , fiind în regim de comutație.

Fig 5.1.Baterii alcaline cu o tensiune de 1,5 V fiecare

Carcasa pentru suport baterie a fost achiziționată dintr-un pur simț estetic , bateriile fiind organizate într-un spațiu compact și vizibil plăcut.

Fig 5.2. Suport baterii AA

Mingea de susținere platformă ( am fost inspirată de mingile din interiorul mouse-ului ) este aleasă din punct de vedere mecanic , și anume din nevoia de un al treilea punct de echilibru. ( în mecanica clasică se consideră că un corp pentru a se afla în echilibru are nevoie de cel puțin 3 puncte de susținere ).

Modul encoder

Modulul cu codor rotativ se alimentează la 5V și are un consum foarte mic. Rolul acestuia este de a converti mișcarea rotativă într-o serie de impulsuri, astfel calculând numărul de rotații.

Acest encoder generează un total de 20 de pulsuri la rotirea a 360 de grade.

Una din cele mai importante aplicații este reprezentată de conectarea lui la un ax motor și calcularea numărului de rotații pe minut.

Fig 5.3. Modul encoder

Specificații:

Alimentare: 5V

ciclu de pulsuri: 20

Fig 5.4. Atribuire pini la modul encoder

Micromotor cu reducție

Tensiune alimentare maximă: 6V

Dimensiuni: 12x26mm

Dimensiuni ax: 3x10mm

Fig 5.5. Comparație mărime micro motor din metal și un stick obișnuit

În urma unui calcul riguros a rezultat necesitatea achiziționării acestui micro motor de curent continuu cu reducție cu raport de 30:1 ( deși raportul real este de 29,86 , ca rezultat din o calculare mai precisă ). Turația acestuia când nu avem încărcări pe axul motor este de 1000 [rot/min] , momentul de cuplare aproximativ de 0,06355 [Nm] , curentul de stall fiind de 1600 [mA]. Are un singur arbore ( la cutia de viteze doar ) , iar limita superioară pentru cuplul instantaneu este de 2 [kgcm] ( 0,02 [kgm] ).

Placa de dezvoltare compatibilă Arduino NANO V3 ATmega328p

Fig 3.2.1.6. Atribuire pini plăcuță Nano V3 Atmega 328p

Am ales această placă de dezvoltare pentru că este mică , are un număr suficient de intrări/ieșiri pe care le necesită comandarea robotului și este foarte prietenoasă cu plăcile de simulare ale componentelor electronice. Ca dezavantaj îl constituie faptul că folosește un port USB mini , în loc de unul standard.

Fig 5.6. Plăcuță Arduino Nano V3

Punte H dual L298N

L298N este un circuit integrat monolitic de voltaj și curent mare, dublu punte H proiectat să accepte nivele logice standard TTL pentru control.

Poate fi folosit pentru a controla relee, solenoide, motoare în curent continuu sau pas cu pas.

Fiecare punte poate fi activată sau dezactivată independent de la pinii ENA, ENB.

Fig 5.7. Punte H duală pentru comandarea motoarelor

Modulul conține și un circuit stabilizator de tensiune (5V) care permite funcționarea la tensiuni mari.

Fig 5.8. Schema electrică a circuitului stabilizator de tensiune

Specificații:

-Tensiune de operare: până la 40V

-Curent de operare: până la 3A (25W în total)

-Curent mic de saturație

-Protecție la supraîncingere

-Poate opera cu 2 motoare simultan

-Imunitate mare la zgomot: Nivel logic "0" input până la 1,5V

-Incorporat regulator de tensiune 78M05. Pentru evitarea defectării acestui integrat, folosiți o sursă logica externă de 5 V, atunci când tensiunea de alimentare depășește 12 V

Cum se controlează un motor:

Pentru a controla viteza motorului, pinul ENA se leagă la un pin PWM de la Arduino.

Tabelul 5.1. Controlul unui motor cu puntea H

Senzorul de distanță Sharp măsoară pe o distanță de 10 până la 80 cm. Ieșirea este analogică , iar domeniul de temperatură suportată este -10 până la 60 de grade Celsius. Metoda lor de funcționare este foarte simplă, fiecare senzor fiind echipat cu un emițător și un detector. Emițătorul transmite un fascicol de lumină în spectrul infraroșu (de regulă sunt folosite lungimi de undă în intervalul 880-990nm ), fascicol care se propagă în mediu, iar apoi se reflectă de obiectele aflate în acesta .( în cazul acesta labirintul ).

Fig 5.9. Senzor de distanță Sharp

5.4. Principiile pe care se bazează funcționarea robotului

5.4.1. Baterii

Sistemul de generare începe cu bateriile , deci este important să înțelegem cum funcționează . O baterie conține o reacție chimică atent ținută sub control care trage electronii din terminalul pozitiv și îi scoate din terminalul negativ . Cel mai uzual tip este bateria alcalină , care se bazează pe o reacție între zinc și mangan cu ajutorul unei soluții de hidroxid de potasiu . Odată ce bateriile alcaline se descarcă complet , nu pot fi refolosite.

O baterie alcalina are o tensiune de 1,5 V . Ca să înțelegem câtă putere putem lua dintr-o baterie , trebuie să știm și câți electroni poate bateria împinge per secundă – acesta este curentul electric , măsurat în amperi ( A ) . Un curent de un amper corespunde cu aproximativ 6 x 1018 electroni care trec dintr-o parte în cealaltă în fiecare secundă , fiind un număr atât de mare încât este mai simplu să vorbim în termen de amperi.

Pentru orice baterie , dacă se încearcă extragerea unei cantități din ce în ce mai mare de curent , tensiunea produsă de baterie va scădea , eventual scăzând până la zero la partea scurtă a circuitului : curentul care trece dacă conectăm o parte direct la cealaltă cu o sârmă groasă.

Graficul de mai jos arată un bun model de cum tensiunea unei baterii tipice poate scădea în timp ce curentul crește :

Fig 5.10.Tensiune baterie vs intensitatea curentului

5.4.2. Gestionarea energiei

Tensiunea bateriei scade odată ce bateriile sunt folosite , dar multe componente electrice cer o tensiune specifică. O componentă specială numită regulator de tensiune ajută prin convertirea tensiunii bateriei într-o tensiune constantă specificată . Pentru o lungă perioada de timp , 5 V a fost cea mai uzuală tensiune regulată utilizată în electronica digitală ; acesta mai este denumit nivel TTL.

5.4.2. Motoare și cutii de viteze

Motorul este o mașinărie care convertește energia electrică în mișcare . Există diverse tipuri de motoare , dar cel mai important pentru robotică cu costuri scăzute este motorul de curent continuu.

Fiecare motor are o viteză maximă ( când nicio forță nu e aplicată ) și un cuplu maxim ( când motorul e oprit complet ) . Numim această viteză în gol și cuplu de frânare . În mod natural , un motor utilizează cel mai puțin curent când nicio forță nu i se opune , iar curentul extras din baterii crește până când intră în scădere , deci curentul de mers în gol și curentul de frânare sunt de asemenea parametrii importanți care caracterizează motorul . Curentul de frânare este de obicei mult mai mare decât curentul de mers în gol , ca în graficul de mai jos :

Fig 5.11. Curent vs viteză și cuplu

Viteza de mers în gol a unui motor de cc mic este uzual multe mii de rotații pe minut ( rpm ) , mult mai mare decât viteza pe care o dorim pentru ca roțile robotului să se rotească . O cutie de viteze este un sistem de roți care convertesc viteza înaltă , cuplu scăzut de ieșire al motorului într-o viteză mai mică , cuplu înalt de ieșire care este o opțiune mult mai potrivită pentru a conduce un robot. Raportul angrenajului folosit este de 30 : 1 , ceea ce înseamnă că pentru fiecare 30 de rotații ale axului motorului , axul de ieșire se rotește o dată. Aceasta reduce viteza cu un factor de 30 , și descrește ( ideal ) cuplul cu un factor de 30.

Un lucru bun la motoarele de cc este că se poate schimba direcția de rotație prin comutarea polarității tensiunii aplicate . Dacă există o pierdere la baterie sau motor , se poate vedea făcând conexiunile într – un sens , apoi rotind bateria invers pentru a face motorul să se învârtă în sens opus . Desigur , nu e de dorit să scoatem bateriile și să le întoarcem de fiecare dată când e necesar – în schimb , un aranjament special de patru butoane , denumit punte H , permite motorului să se învârtă fie înapoi , fie înainte . Aici este o diagramă care arată cum funcționează o punte H .

Fig 5.12. Comandarea punții H

Dacă întrerupătoarele 1 și 4 sunt închise ( poza din centru ) , curentul curge prin motor de la stânga la dreapta și motorul se învârte în față . Închizând întrerupătoarele 2 și 3 face ca curentul să își schimbe direcția și ca motorul să se învârtă în spate.

O punte H poate fi construită cu întrerupătoare mecanice , dar majoritatea roboților , folosesc tranzistori care comută curentul electric.

5.4.3.Întoarcerea cu o conducere diferențială

Robotul are un motor independent și roată pe fiecare parte , care permite o metodă de locomoție numită conducere diferențială . Este cunoscută ca “ conducere tanc “ de vreme ce așa se conduce un tanc. Este complet diferit de sistemul de direcție al automobilului , care folosește un singur motor de conducere și roți pe față dirijabile. Întoarcerea cu conducere diferențială e realizată cu două motoare acționate la viteze diferite.

5.4.4. Strategie rezolvare labirint

5.4.4.1. Rezolvarea unui labirint

Următorul pas de la simpla urmărire de linie este de a învăța robotul să navigheze pe căi cu viraje bruște , înfundături și intersecții . Se face o rețea complicată de pereți , se adăugă un cerc să reprezinte ținta , și se obține un labirint , care este un mediu provocator pentru robot să exploreze. Într-un concurs de labirint , roboții se deplasează cât mai rapid posibil de-a lungul liniilor imaginare de la un start asignat până la țintă ; ținând seama de intersecțiile pe care le parcurg în calea lor . Roboților li se dau mai multe șanse să parcurgă labirintul , în așa fel încât pot urma calea cea mai rapidă posibil după ce cunosc toate înfundăturile.

Labirinturile pe care am învățat să le rezolv au o proprietate specială : nu au bucle. Aceasta înseamnă , că nu este nicio cale să reviziteze orice punct de pe labirint fără să reproducă pașii. Rezolvarea acestui tip de labirint este mult mai ușoară decât rezolvarea unui labirint cu buclă , de vreme ce o strategie simplă permite explorarea întregului labirint. Am vorbit despre acea strategie în următorul paragraf.

De obicei construim labirinturile utilizând numai linii drepte desenate pe o rețea normală , dar aceasta este în majoritate doar pentru a face traseul ușor de reprodus – strategia de rezolvare labirint descrisă în acest tutorial nu cere aceste proprietăți.

5.4.4.2. Lucrul cu multiple fișiere C în Atmel Studio

Sursa de cod C pentru un exemplu de rezolvare labirint linie e disponibilă în folderol examples\atmegaxx8\mazesolver. [21]

Schița de probă Arduino este conținută într-un singur fișier.

Acest program este mult mai complicat decât exemplele pe care le-am văzut până acum , deci a trebuit să împart informația în fișiere multiple. Folosind fișierele multiple o face mai ușor să se țină ordinea codului. Spre exemplu , fișierul turn.c conține doar o singură funcție , folosită să ia viraje la intersecții .

Prima linie a fișierului , ca orice fișier C care se scrie pentru robot , conține o comandă “include” care conferă acces la funcțiile din librăria AVR. În conformitate cu turn(), folosim librăria de funcții delay_ms() și set_motors() pentru a executa viraje la stânga , viraje la dreapta , și viraje “ U “ . “Virajele” drepte sunt conduse de asemenea de această funcție , deși nu cer efectuarea vreunei acțiune. Vitezele motorului și sincronizarea pentru viraje sunt parametrii care trebuie adaptați pentru robot ; pe măsură ce se lucrează să se facă rezolvarea labirintului mai rapidă , acestea sunt câteva numere pe care va trebui să le adaptez.

Pentru a accesa această funcție din alte fișiere C , e nevoie de un fișier de “antet” , care este denumit turn.h. Antetul conține o singură linie :

Această linie declară funcția turn() fără să includă propriu-zis o copie a codului. Pentru a accesa declararea , fiecare fișier C care necesită să cupleze turn() adaugă următoarea linie :

Se acordă atenție ghilimelelor duble care sunt folosite în loc de paranteze unghiulare. Aceasta indică compilatorului C că fișierul antet este în directorul proiect , mai curând decât a fi un fișier de sistem antet ca robot.h. De amintit mereu : punerea codului pentru funcții în fișierul C în loc de fișierul antet! Dacă se face invers , se face o copie separată a fiecărui cod în fiecare fișier care include antetul.

Fiserul follow-segment.c conține de asemenea o singură funcție , care va conduce robotul de-a lungul unui segment de linie imaginar până când ajunge la o intersecție sau la un sfârșit de linie.

Între codul PID și detecția de intersecție , sunt acum șase parametrii în plus care pot fi adaptați. Am ales valori aici care permit robotului să rezolve labirintul la o viteză sigură , controlată ; încercând să creștem viteza , se va da rapid de probleme care vor trebui descurcate cu un cod mult mai complicat.

Plasarea fișierelor C și a fișierelor antet în proiectul este ușoară cu Atmel Studio.

Pe partea dreaptă a ecranului , în panoul “ Solution explorer “ , este o listă de fișiere în proiectul elaborat . Apăsâd click dreapta pe numele proiectului va exista o opțiune de adăugare de fișiere listei. Când se crează proiectul , Atmel Studio va compila automat toate fișierele C în proiect împreună pentru a produce fișiere hex.

5.4.4.3. Mâna stânga pe perete

Strategia de bază pentru rezolvarea unui labirint fără buclă este numită “ mâna stângă pe perete “.

Se imaginează ipoteza că o persoană se plimbă printr-un labirint real – un labirint de dimensiunile unui om construit cu pereți din piatră – în timp ce acesta își ține mâna stângă pe perete tot timpul. Va face stânga de fiecare dată când este posibil și dreapta doar când dă de o intersecție dacă nu este nici o altă ieșire. Uneori , când ajunge la o fundătură , se va întoarce 180 grade la dreapta și va începe să meargă înapoi pe unde a venit. În eventual , atâta timp cât nu sunt bucle , mâna se va deplasa de-a lungul fiecărei lungimi a peretelui în întregul labirint exact o dată , și va găsi calea înapoi către intrare. Dacă este o încăpere undeva în labirint cu un monstru sau o comoară , va găsi aceasta în calea lui , de vreme ce va merge pe fiecare culoar exact de două ori.

Am folosit această strategie simplă și de încredere în exemplul de rezolvare labirint.

Valorile returnate de select_turn() corespund cu valorile folosite de turn() , deci aceste funcții vor funcționa de minune împreună în bucla principală.

5.4.4.4. Bucla ( Buclele ) principală

Strategia programului este exprimată în fișierul maze-solve.c. Cel mai important , am vrut să țin cont de calea pe care am urmat-o , deci am definit o mulțime care stochează până la 100 ; acestea vor fi aceleași caractere utilizate în funcția turn( ). Trebuie ținut seama și de lungimea rutei curente ca să se știe unde să se pună caracterele în mulțime.

“Bucla principală” se găsește în funcția maze_solve() , care este apelată după calibrare , din main.c. Această funcție include de fapt două bucle principale – prima care descurcă rezolvarea labirintului , și a doua care reia soluția pentru cel mai rapid timp posibil. De fapt a două buclă este practic o buclă în buclă , de vreme ce am dorit să fie capabili să reia soluția de multe ori.

Prima buclă trebuie să scadă un segment al traseului , să decidă cum să vireze , și să înregistreze virajul pe calea variabilă. Pentru a trece raționamentul corect în select_turn() , trebuie examinată cu atenție intersecția în timp ce este străbătută. Notez că există o excepție pentru găsirea finalului labirintului.

Am aruncat o privire la a doua buclă principală , care este foarte simplă. Tot ce face robotul este să conducă spre următoarea intersecție și să vireze conform înregistrărilor. După terminarea ultimei întoarceri , robotul va fi la distanța de un segment de final , ceea ce explică follow_segment() ultima apelare în contorul maze_solve().

5.4.4.5. Simplificarea soluției

După fiecare viraj , lungimea căii întregistrate crește cu 1. Dacă labirintul, spre exemplu , are un pasaj lung în zigzag fără ieșiri laterale , se va observa o secvență ca ‘RLRLRLRL’ că apare pe ecranul LCD ( în caz că există). Nu există nicio scurtătură care să facă robotul să treacă prin această porțiune a căii mai rapid decât simpla urmărire a mâinii stângi pe perete ca strategie.

Totuși , de fiecare dată când se întâlnește o fundătură ,se poate simplifica traseul la ceva mai scurt.

Se consideră secvența ‘LBL’ , unde ‘B’ semnifică “înapoi” și este acțiunea făcută atunci când o fundătură este întâlnită. Acest lucru se întâmplă dacă există un viraj la stânga care se ramifică într-o cale dreaptă care conduce imediat către o fundătură. După un viraj de 90 de grade la stânga , 180 , și 90 la stânga din nou , efectul este că robotul se îndreaptă către direcția originală din nou. Traseul poate fi simplificat printr-un viraj de 0 grade : un singur ‘S’. Următoarea diagramă descrie acest scenariu , arătând cele două cai echivalente și funcționale de la început până la sfârșit :

Fig. 5.13. Cum poate reacționa robotul la o intersecție în cruce

Un alt exemplu e o intersecție în formă de T cu o fundătură pe stânga : ‘LBS’. Viraje sunt 90 de grade stânga , 180 , și 0 , pentru un total de 90 dreapta . Secvența ar trebui înlocuită cu un singur ‘R’.

De fapt , oricând există o secvență ca ‘xBx’ , se pot înlocui toate trei virajele cu un viraj corespunzând unghiului total , eliminând virajul în formă de U și accelerând soluția.

Un punct interesant în legătură cu acest cod este că există secvențe ce ar trebui să nu fie niciodată întâlnite de un robot care virează la stânga , ca ‘RBR’ , care ar trebui înlocuit cu ‘S’ potrivit acestui cod. Într-un program mult mai avansat , se vrea să se țină seama de inconsistențe ca aceasta , de vreme ce indică un fel de problemă care ar putea determina robotul să se piardă.

Acum am parcurs un labirint relativ mai complicat , care arată cum se poate simplifica traseul în timp ce e explorat :

Exploră în întregime labirintul utilizând strategia mâna stângă pe perete.

Fig 5.14. Cum explorează robotul întreg labirintul

Lista de deasupra de acțiuni este o înregistare a tuturor pașilor pe care robotul i-a făcut pentru a explora în întregime labirintul în timp ce caută ieșirea , care este marcată de un cerc mare negru. Scopul este acum de a reduce această listă pentru a reprezenta cea mai scurtă cale de la început la sfârșit prin eliminarea tuturor fundăturilor. O opțiune este să se facă această reducere când se termină labirintul , dar o abordare mai bună este de a performa această reducere de-a lungul traseului pentru a ține sub control lista din a crește extrem de mult și a necesita mai multă memorie decât de ceea ce dispun.

Eliminarea primei fundături imediat ce o identificăm.

Fig 5.15. Eliminarea primei fundături

Când am întâlnit prima intersecție după prima acțiune “spate” știu că am atins o fundătură care poate fi eliminată din lista de acțiuni. În acest caz , cele mai recente acțiuni în listă sunt secvența ‘SBL’ , și diagrama arată că această secvență poate fi simplificată într-un singur viraj ‘R’.

Eliminarea restului acestei ramuri de fundătură în timp ce se reia traseul

Fig 5.16. Reluarea traseului

În continuare se încheie cu secvența ‘RBL’ , ceea ce se reduce la un singur înapoi ‘B’ , și aceasta se combină cu următoarea acțiune pentru a produce secvența ‘LBL’ , care se reduce la o singură înaintare ‘S’.

Eliminarea fundăturii finale lasă calea cea mai scurtă de la început la sfârșit.

Fig 5.17. Eliminarea fundăturii

Ultima fundătură dă secvența SBL , care se reduce la un singur viraj la dreapta ‘R’. Lista de acțiuni este doar R acum și reprezintă cea mai scurtă cale de la început până la sfârșit.

În timp ce aș fi mers prin labirint , lista de acțiuni ar fi arătat ceva în genul :

1. L

2. LS

3. LSB

4. LSBL => LR ( “tăierea” se întâmplă aici )

5. LRB

6. LRBL => LB ( “tăierea” se întâmplă aici )

7. LBL => S ( “tăierea” se întâmplă aici )

8. SB

9. SBL => R ( “ tăierea” se întâmplă aici )

5.4.4.6. Îmbunătățirea codului de rezolvare a labirintului

Am parcurs cele mai importante părți ale codului ; celalalte frânturi și bucăți ( ca și funcția display_path() , secvența de start și calibrarea , etc ) pot fi găsite cu toate celălalte în folderul examples/atmegaxx8/mazesolver. Sunt multe lucruri care se pot face pentru a încerca să se îmbunătățească codul :

• Îmbunătățirea constantelor PIDului

• Creșterea vitezei de virare

• Identificarea situațiilor unde robotul s-a pierdut

• Ajustarea vitezei bazată pe ceea ce urmează ; ex. conducerea pe direcția înainte de-a lungul ‘S’ la viteză maximă

3pi a construit un prototip – are doar un LED albastru pentru putere , dar de atfel e funcțional identic cu versiunea finală – l-au programat pentru a concura în competiția LVBots Challenge 4.0. Codul este mult mai avansat ( și complicat ) ca modelul de cod de rezolvare labirint pe care l-au pus spre folosință inițial. Îmbunătățirile pe programul model include o bază ridicată de viteză de deplasare cu constante PID de urmărire linie mai bine tunate , viraje mai rapide și line , și viteză crescută pe segmente lungi de mers înainte.

Atunci când s-a încercat îmbunătățirea performanțelor 3pi pe labirint , primul pas a fost să îmbunătățească capacitatea de urmărire de linie prin o mai bună tunare a constantelor PIDului în timp ce au crescut ușor viteza maximă a robotului , și al doilea pas a fost să îmbunătățească virajele pentru a fi mai rapide și mai line. Foarte rapid , totuși , au observant că înaintarea în îmbunătățirea vitezei era limitată de intersecții. Dacă robotul se mișca prea rapid când ajungea la ele , inevitabil o dădea în bară undeva . [22]

Soluția lor a fost să cronometreze lungimea fiecărui segment pe care robotul o întâlnea în timpul fazei de învățare. Codul ar reseta temporizatorul la o intersecție și l-ar opri când 3pi ar fi ajuns la următoarea intersecție. Cum programul a stocat o mulțime a intersecțiilor vizitate , a stocat de asemenea segmentele de timp într-o mulțime paralelă , producând ceva de genul :

{ L , S , S , R , L , …}

{ 3 , 3 , 6 , 5 , 8 , ….}

Mulțimea de deasupra dă acțiunea făcută la fiecare intersecție vizitată ( L = viraj stânga , S = merge înainte , R = virează dreapta ) , și mulțimea de jos dă cantitatea de timp petrecută pentru a conduce de-a lungul segmentului ce conduce spre acea intersecție.

Unitățile segmentului de timp au fost alese pentru a furniza numere care permit robotului să diferențieze între segmentele lungi sau scurte care nu depășesc niciodată 255 pentru oricare segment din labirint. A doua restricție semnifică , că valorile care pot fi stocate într-o mulțime de caractere fără semn ( ex. fiecare segment de timp cere un bit de memorie ) , ceea ce ajută la menținerea unui nivel mic de utilizare a memoriei. ATmega168 are doar 1024 biți de RAM , deci este important ca aplicațiile ca aceasta să stocheze datele într-un mod eficient care lasă suficient loc pentru stivă , care este de asemenea stocat în RAM. O bună regulă este de a lăsa 300-400 biți de RAM disponibile pentru stivă și informația utilizată de librăria Pololu AVR ( sau mai mult dacă aveți funcții cuibărite adânc sau funcții cu multe variabile locale ) . Notez că ATmega328 are 2048 biți de RAM , ceea ce oferă puțin mai mult spațiu pentru informații.

Odată ce robotul a învățat labirintul , algoritmul de conducere prin labirint este esențial :

1. dacă robotul merge înainte la următoarea intersecție , conduce pe segmentul curent la viteză maximă ;

2. astfel , conduceți pe segmentul curent la viteză maximă până când timpul T s-a terminat , punct în care încetiniți la viteză normală până când următoarea intersecție este întâlnită.

Valoarea T este calculată dintr-o funcție care utilizează “lungimea” măsurată a segmentului anterior. Pentru segmente scurte , T este negativ și robotul conduce de-a lungul segmentului la viteză normală. Pentru segmente mai lungi , T este pozitiv și cauzează robotul să parcurgă majoritatea segmentului la viteză mare înainte de a încetini chiar la timp pentru a se descurca cu intersecția în mod sigur. Au inventat funcția T pe o foaie și apoi au demarat o serie de teste pentru a da de numeroasele constante potrivite.

În mod normal , se pot folosi encodere pentru a măsura lungimea segmentelor. Au fost capabili să folosească doar cronometrare pe 3pi , totuși , datorită sistemului de energie 3pi , care folosește o tensiune regulată pentru motoare și produce rezultate în proporție majoră repetabile.

Cu un sistem de energie mai tradițional , viteza motorului ar descrește în vreme ce bateriile se descarcă , și o abordare ca aceasta ar putea produce rezultate nefiabile. Spre exemplu , dacă ar fi să utilizeze un robot cu un sistem de putere mult mai tradițional , functia cu care ar veni pentru T cand bateriile sunt proaspat incarcate ar putea functiona slab cand sunt aproape goale.

Sugestie : Odată ce se începe creșterea significantă a vitezei rezolvării labirintului , performanța devine dependentă de tracțiunea cauciucurilor. Din păcate , tracțiunea descrește cu timpul deoarece cauciucurile preiau praf și mizerie de la cursă. Robotul rapid de rezolvare a labirintului necesită să îi fie cauciucurile curățate la fiecare câteva încercări sau începe să fandeze la viraje , ceea ce îl încetinește și poate chiar cauza să dea greș. Se pot curăța ușor cauciucurile prin ștergerea lor cu puțin alcool sanitar pe un șervețel.

5.4.5.Alte tipuri de algorimti :

5.4.5.1.Algoritm “mouse” aleator

Aceasta e o metodă trivială care poate fi implementată de un robot foarte “neinteligent” sau poate un șoricel. Este pur și simplu pentru a continua să urmărească pasajul curent până când o joncțiune este atinsă , și apoi pentru a lua o decizie aleatorie în legătură cu următoarea direcție de urmat. Deși o asemenea metodă o să găsească eventual soluția corectă mereu , algoritmul poate fi extrem de încet.

5.4.5.2.Urmăritor de perete

Fig 5.18.

Traversarea utilizând regula mâinii drepte

Urmăritorul de perete , cea mai cunoscută regulă pentru traversarea labirintului , este cunoscut fie ca regula mâinii stângi sau că regula mâinii drepte. Dacă labirintul este simplu conectat , adică , toți pereții sunt conectați “împreună” sau la limita exterioară a labirintului , atunci prin păstrarea unei mâini în contact cu un perete al labirintului rezolvatorul este garantat să nu se piardă și va atinge o ieșire diferită dacă există ; în caz contar , el sau ea se va întoarce la intrare traversând fiecare corridor vecin secțiunii conectate a pereților cel puțin o dată.

O altă perspectivă pentru care urmărirea de perete funcționează este topologică . Dacă pereții sunt conectați , atunci pot fi deformați într-o buclă sau un cerc. Atunci urmărirea de perete se reduce la mersul în jurul unui cerc de la început până la sfârșit. Pentru a promova această idee , remarcăm că dacă grupăm componente conectate ale pereților labirintului

limitele dintre acestea sunt soluții precise , chiar dacă există mai mult de o soluție ( vezi

figura de mai jos).

Fig 5.19.

Labirint cu două soluții

Dacă labirintul nu e simplu conectat ( ex. dacă începutul sau punctele de sfârșit sunt în centrul structurii înconjurate de pasaje tip buclă , sau căile se intersectează și sub fiecare și asemenea părți ale căii soluție sunt înconjurate de pasaje tip buclă ) , această metodă nu își va atinge scopul.

Urmărirea de perete poate fi făcută în 3D sau labirinturi de dimensiuni superioare dacă pasajele de dimensiuni superioare pot fi proiectate pe planul 2D într-o manieră deterministică. Spre exemplu , dacă într-un labirint 3D pasajele “sus” pot fi asumate să ducă spre nord-vest , și pasajele “jos” pot fi asumate să ducă spre sud-est , atunci regulile standard de urmărire de perete pot fi aplicate. Totuși , spre deosebire de 2D , aceasta cere ca orientarea curentă să fie cunoscută , pentru a determina care direcție este prima la stânga sau la dreapta.

5.4.5.3.Algoritmul Pledge

Fig 5.20

Stânga : Viraj la stânga rezolvator blocat

Dreapta : Soluție algoritm Pledge

Labirinturile disjuncte pot fi rezolvate cu metoda urmăritoare de perete , atâta timp cât intrarea și ieșirea din labirint sunt pe pereții exterior ai labirintului. Dacă totuși , rezolvatorul începe în interiorul labirintului , poate fi pe o secțiune disjunctă de ieșire , și urmăritorii de perete vor merge continuu în jurul inelului lor. Algoritmul Pledge ( numit după Jon Pledge ) poate rezolva această problemă.

Algoritmul Pledge , proiectat pentru a ocoli obstacole , cere o direcție arbitrar aleasă pentru a merge către ea. Când un obstacol e întâlnit , o mână ( să spunem că cea dreapta ) este ținută de-a lungul obstacolului în timp ce unghiurile întoarse sunt numărate. Când rezolvatorul întâmpină direcția originală din nou , și suma unghiurilor de întoarceri făcute este 0 , rezolvatorul părăsește obstacolul și continuă să se miște în direcția lui originală.

Mâna este îndepărtată de pe perete numai atunci când ambele “suma de întoarceri făcute “ și “poziția actuală “ sunt la zero. Aceasta permite algoritmului să evite capcane de formă literei mari “G”. Asumând că algoritmul întoarce stânga la primul perete , unul se va întoarce la maxim 360 de grade de către pereți. Un algoritm care ține evidență doar a “poziției actuale conduce către o buclă infintă odată ce părăsește peretele cel mai de jos cel mai din dreapta mergând stânga și dă în secțiunea curbată pe partea mâinii stângi din nou.

Algoritmul Pledge nu părăsește peretele cel mai din dreapta datorită “sumei întoarcerilor făcute” care nu sunt zero în acel punct ( notăm că 360 de grade nu este egal cu 0 grade ). Urmărește peretele tot drumul dimprejur , într-un final părăsindu-l îndreptându-se stânga afară și doar sub forma literei.

Algoritmul permite unei persoane cu un busolă să își găsească calea din orice punct din interior către o ieșire exterioară al oricărui labirint finit bidimensional , indiferent de poziția inițială a rezolvatorului. Totuși , acest algoritm nu va funcționa în a face invers , și anume găsind calea de la o intrare din exteriorul labirintului către o țintă în interiorul lui.

Fig 5.21.

Soluție de deasupra labirintului. Soluția este granița dintre limitele componentelor conectate ale peretelui labirintului , fiecare reprezentată de o culoare diferită.

5.4.5.4.Algoritmul lui Trémaux

Algoritmul Trémaux , inventat de Charles Pierre Trémaux , este o metodă eficientă de a găsi ieșirea dintr-un labirint care necesită desenarea liniilor pe podea pentru a marca traiectoria , și este garantat să funcționeze pentru toate labirinturile care au pasaje bine definite. O cale dintr-o joncțiune este fie nevizitată , marcată o dată sau marcată de două ori. Algoritmul funcționează conform următoarelor reguli :

Marchează fiecare cale o dată , când o urmărește . Reperul trebuie să fie vizibil la ambele sfârșituri ale căii. Prin urmare , dacă sunt făcute ca urme fizice , mai degrabă decât stocate ca o parte a unui algoritm computerizat , aceeași urmă ar trebui să fie făcută la ambele sfârșituri ale căii

Niciodată să nu se intre pe o cale care are două repere pe ea

Dacă se ajunge la o joncțiune care nu are repere pe ea ( exceptând posibil pe cea pe care s-a intrat ) , se alege arbitrar o cale nemarcată , se urmărește , și se marchează

În caz contrar :

o Dacă ruta pe care s-a venit are doar un reper , se întoarce și se revin de-a lungul acelei rute , marcând-o din nou. În particular acest caz ar trebui să se întâmple când se ajunge la o fundătură.

o Dacă nu , se alege arbitrar una dintre căile rămase cu cele mai puține marcaje ( zero dacă posibil , altfel una ) , se urmărește acea cale , și se marchează

Când într-un final se ajunge la o soluție , căile marcate exact o dată vor indica o cale înapoi către start. Dacă nu există nicio ieșire , această metodă va duce înapoi la intrare unde toate căile sunt marcate de două ori. În acest caz fiecare rută este umblată de două ori exact , o dată în fiecare direcție . Drumul rezultat este numit dublă depistare bidirecțională.

Esențial , acest algoritm , care a fost descoperit în secolul 19 , a fost utilizat aproximativ o sută de ani mai târziu ca prima căutare în adâncime.[23]

5.4.5.5.Completarea fundăturilor

Completarea fundăturilor e un algoritm pentru rezolvarea labirinturilor care completează toate fundăturile , lăsând numai căile corecte necompletate. Poate fi folosit pentru rezolvarea labirinturilor pe hârtie sau cu un program computerizat , dar nu este de folos unei persoane în interiorul unui labirint necunoscut de vreme ce această metodă caută în întregul labirint o dată. Această metodă este pentru 1) a găsi toate fundăturile din labirint , și apoi 2) “să completeze” calea de la fiecare fundătură până când prima joncțiune este întâlnită. Notăm că unele pasaje nu vor fi parte ale pasajelor fundătură până când alte fundături vor fi eliminate prima dată.

Completarea fundăturilor nu poate “izola” accidental începutul de sfârșit de vreme ce fiecare pas al procesului prezervă topologia labirintului. Mai mult , procesul nu se va opri “prea curând “ de vreme ce rezultatele finale nu pot conține nici o fundătură. Prin urmare dacă completarea fundăturilor este făcută pe un labirint perfect ( labirint fără bucle ) , atunci numai soluția va rămâne. Dacă este făcut pe un labirint parțial înfășurat ( labirint cu câteva bucle ) , atunci fiecare soluție posibilă va rămâne și nimic mai mult.

5.4.5.6.Algoritm recursiv

Dacă este dată o vedere omniscientă a labirintului , un simplu algoritm recursiv poate arăta cum se ajunge la final . Algoritmului îi va fi dată o valoare de start X și Y. Dacă valorile X și Y nu sunt pe un perete , metoda va apela ea însăși cu toate valorile adiacente X și Y , asigurându-se că nu a folosit deja acele valori X și Y. Dacă valorile X și Y sunt acelea ale locației de sfârșit , va salva toate instanțele anterioare ale metodei ca și cale corectă.

Acesta este un cod probă în Java :

int[][] maze = new int[width][height]; // Labirintul

boolean[][] wasHere = new boolean[width][height];

boolean[][] correctPath = new boolean[width][height]; // Soluția pentru labirint

int startX, startY; // Valorile de start X și Y ale labirintului

int endX, endY; // Valorile de final X și Y ale labirintului

public void solveMaze() {

maze = generateMaze(); // Crează labirint (1 = cale, 2 = perete)

for (int row = 0; row < maze.length; row++)

// Setează șiruri boolene la valori presetate

for (int col = 0; col < maze[row].length; col++){

wasHere[row][col] = false;

correctPath[row][col] = false;

}

boolean b = recursiveSolve(startX, startY);

// Vă va lăsa cu un șir boolean (cale corectă)

// cu calea indicată de valorile adevărate.

// Daca b este fals, nu există nicio soluție pentru labirint

}

public boolean recursiveSolve(int x, int y) {

if (x == endX && y == endY) return true; // Dacă ați atins finalul

if (maze[x][y] == 2 || wasHere[x][y]) return false;

// Dacă sunteți pe perete sau ați fost deja aici

wasHere[x][y] = true;

if (x != 0) // Verifică dacă nu este pe muchia stângă

if (recursiveSolve(x-1, y)) { // Reapelează metoda unu la stânga

correctPath[x][y] = true; // Setează că valoarea căii este adevărată;

return true;

}

if (x != width – 1) // Verifică dacă nu e pe muchia dreaptă

if (recursiveSolve(x+1, y)) { // Reapelează metoda unu la dreapta

correctPath[x][y] = true;

return true;

}

if (y != 0) // Verifică dacă nu e pe muchia de deasupra

if (recursiveSolve(x, y-1)) { // Reapelează metoda unu sus

correctPath[x][y] = true;

return true;

}

if (y != height- 1) // Verifică dacă nu e pe muchia de jos

if (recursiveSolve(x, y+1)) { // Reapeleaz metoda unu jos

correctPath[x][y] = true;

return true;

}

return false;

}

[24]

5.4.5.7.Algoritm de rutare labirint

Algoritmul de rutare labirint este o metodă redusă auzită pentru a găsi calea dintre oricare două locații ale labirintului. Algoritmul este inițial propus pentru multiprocesoare chip (CMPs) și garantează să lucreze pentru orice labirint bazat pe rețea.În completare pentru găsirea cailor între două locații ale rețelei ( labirintului ) , algoritmul poate detecta când nu este o cale între sursă și destinație. De asemenea , algoritmul este făcut pentru a fi utilizat de către un călător din interior fără o cunoaștere precedentă a labirintului cu complexitate a memoriei fixate indiferent de mărimea labirintului ; necesitând 4 variabile în total pentru a găsi ruta și a detecta locațiile de neatins. Cu toate acestea , algoritmul nu este utilizat pentru a găsi calea cea mai scurtă.

Algoritmul de rutare labirint folosește noțiunea de distanță Manhattan ( MD ) și se bazează pe proprietățile rețelei în care MD crește/descrește exact cu 1 când se mișcă dintr-o locație la oricare 4 locații vecine.

Aici este pseudocodul fără capabilitatea de a detecta locațiile care nu pot fi atinse :

Point src, dst;// Coordonate sursă și destinație

// cur indică de asemenea coordonatele locației curente

int MD_best = MD(src, dst);// Stochează cel mai apropiat MD pe care l-am avut pe dst

// O cale productivă este cea care face MD-ul nostru pentru dst mai mic

while(cur != dst){

if(there exists a productive path)

Take the productive path;

else{

MD_best = MD(cur, dst);

Imagine a line between cur and dst;

Take the first path in the left/right of the line;// Selecția stânga/dreapta afectează următoarea regulă a mâinii

while(MD(cur, dst) != MD_best || there does not exist a productive path)

Follow the right-hand/left-hand rule;// Opusul laturii liniei selectate

}

}

5.4.5.8.Algoritmul pentru calea cea mai scurta

Fig 5.22.

Un labirint cu soluții multiple și fără fundături , unde ar putea fi de ajutor găsirea căii cele mai scurte.

Când un labirint are soluții multiple , rezolvatorul poate vrea să găsească calea cea mai scurtă de la început la sfârșit.Există mai mulți algoritmi de găsire ale cailor cele mai scurte , majoritatea provenind de la teoria graficelor. Un algoritm posibil găsește calea cea mai scurtă implementând o primă căutare în lățime , în timp ce altul , algoritmul A* , folosește o tehnică euristică. Algoritmul de primă căutare în lățime utilizează un șir pentru a vizita celulele în ordinea distanței crescătoare de la început până la sfârșit. Fiecare celulă vizitată are nevoie de înregistrarea distanței de la început sau care celula adiacentă în apropiere de început a cauzat să fie adăugată la șir. Când locația de final este găsită , urmărește ruta de celule invers până la început , care este calea cea mai scurtă.

Prima căutare în lățime în cea mai simplă formă a ei are limitările ei, ca spre exemplu găsirea celei mai scurte cai în grafice ponderate.

5.4.5.9.Care sunt pasii in rezolvare labirint?

Sunt în principiu 2 pași. Primul este de a conduce prin labirint și de a-i găsi sfârșitul. Al doilea este de a optimiza ruta astfel încât robotul să poată merge înapoi prin labirint , dar de a o face perfect fără a merge către fundături.

Cum găsește robotul sfârșitul labirintului?

Utilizăm o tehnică numită mâna stângă pe perete. Imaginează-ți că ești într-un labirint și îți ții mâna stânga pe o margine a peretelui tot timpul. Făcând asta te-ar duce eventual afară dintr-un labirint fără bucle. Acest instructaj se ocupă cu labirinturi care nu crează bucle pe ele înșiși.

Acest algoritm mâna stângă pe perete poate fi simplificat în aceste condiții simple:

– Dacă poți vira stânga , virează stânga ( if… then)

– Altfel dacă poți conduce înainte , condu înainte ( else if…then )

– Altfel dacă poți vira dreapta , virează dreapta ( else if…then)

– Dacă ești la o fundătură,întoarce-te (if…then)

Robotul trebuie să ia aceste decizii când se află într-o intersecție. O intersecție este oricare punct de pe labirint unde ai oportunitatea să virezi. Dacă robotul dă peste oportunitatea să vireze și nu virează acesta consideră să meargă înainte. Fiecare mișcare făcută la o intersecție sau când se întoarce trebuie stocată.

L = viraj stânga [left]

R = viraj dreapta [right]

Fig 5.23. Viraj stânga

S = merge înainte după o întoarcere/viraj [straight]

Fig 5.24. Întoarcere

B = întoarcere ( merge înapoi ) [back]

Fig 5.25. Se înregistrează LBL Fig 5.26. Se înregistrează LBLL

Fig 5.27. Se face o întoarcere Fig 5.28. Înregistrare : LBLLBS

Fig 5.29. Final labirint

Capitolul 6. Concluzii

Roboții mobili autonomi reprezintă clasa cea mai performantă a roboților mobili. Un robot trebuie să realizeze diferite sarcini fără a-i fi specificată fiecare acțiune care urmează să

fie realizată. Pentru a realiza un robot autonom, este necesar să fie sintetizate multe tehnici, inclusiv unele elemente de inteligență artificială. În mod obișnuit, robotul trebuie să obțină informații din lumea înconjurătoare folosind senzori tactili vizuali și acustici, să elaboreze un plan pentru executarea sarcinii date, să rezolve fenomenele neașteptate care vin fie din mediul exterior, fie de la robot și să învețe din experiență pentru a-și îmbunătăți performanțele.

Obstacolele nu sunt întotdeauna statice, iar robotul nu poate fi modelat ca un singur obiect rigid. Este evident că un robot care se mișcă printre obstacolele mobile este capabil de performanțe mult mai mari și de o serie de sarcini mult mai complexe. ( ceea ce nu este cazul în această lucrare , deoarece singurele obstacole sunt pereții labirintului ,care sunt statici ).

Ce se poate spune este că sistemul senzorial al unui robot de orice tip, are cea mai importantă funcție în orientarea acestuia în spațiul de lucru.

În cazul acesta , senzorii folosiți pentru robotul de ieșire din labirint sunt senzori de distanță Sharp infraroșii care acționează pe o rază de 10 – 80 cm . În fața senzorului propriu-zis – în distanța focală – se găsește o cupolă sferică sau cilindrică de lentile mici curbe convexe albe, din material plastic noros, dar este în mod clar în infraroșu transparent. Aceste lentile multiple colectează lumină în infraroșu. Lumina în infraroșu ajunge la senzorul propriu-zis care transformă această energie infraroșie în energie electrică, care poate fi analizată de un circuit de procesare (procesor) și care va diferenția alarmele false de alarmele reale.

Față de alți roboți de altfel , virajele sunt mult mai precise datorită atașării celor două module encoder , fiecare aferent unuia dintre micro motoarele de curent continuu cu reducție . Encoderele măsoară viteza de rotație , sensul , poziția , unghiul și lungimea . În acest scop ele convertesc semnalele mecanice în semnale electrice , permițând astfel robotului să se deplaseze mai bine prin labirint , pentru că semnalul electric ajunge la plăcuța programabilă , iar robotul este capabil să-și adapteze deplasarea conform situației. Encoderele rotative ( ca și cel din prezenta lucrare ) sunt folosite în multe aplicații care cer precizie a rotației axului. Ca un dezavantaj al acestui tip de encoder este faptul că este foarte sensibil la praf , ca și de altfel roțile atașate , deoarece nu au aceeași aderență și pot da rezultate negative dacă nu sunt întreținute.

Plăcuța Arduino Nano este perfectă pentru aplicații în care roboții sunt mici. Este mică , completă , și extrem de prietenoasă cu dispozitivele de încercare a circuitelor electrice, bazată pe Atmega328. Ca dezavantaj menționez faptul că funcționează cu un cablu USB mini în loc de unul standard.

Totuși , ce face ca robotul proiectat și realizat de mine să fie o inovație ? Toate componentele contribuie într-o oarecare măsură , dar de menționat este faptul că nu neapărat partea mecanică îl face special , ci algoritmul de programare. Există mai multe tipuri de algoritmi , printre care Pledge , algoritmul lui Tremaux , al căii cele mai scurte , găsirea oarbă a traseului , și altele , dar acesta al mâinii stângi este atât rapid , cât și consumă puțină memorie , făcându-l în opinia mea cel mai bun dintre toate.

Algoritmul de rezolvare a labirintului constă , după cum și sugerează numele , în aplicarea mâinii stângi pe perete și urmărirea acestuia. Individul trebuie să facă un exercițiu de imaginație că e într-un labirint și trebuie să găsească ieșirea. Își va pune mâna pe peretele lateral din stânga și o va ține acolo. De fiecare dată când va putea , va face stânga , iar când este imposibil va face înainte sau dreapta. În caz că ajunge într-o fundătură , se va întoarce. Într-un final va găsi sfârșitul labirintului , însă asta înseamnă că a parcurs unele căi cel puțin o dată. Deși lui ca individ nu îi garantează succesul , robotului i-l va garanta , deoarece acesta poate parcurge de 2-3 ori traseul înainte de a-l rezolva la viteză maximă . Practic , acesta învață unde sunt fundăturile , le taie de pe traseu și se concentrează numai asupra ieșirii din labirint și a cunoașterii comportamentului său în cazul intersecțiilor , precum și să nu cauzeze coliziunii cu pereții ( se ia un factor de siguranță la realizarea labirintului în funcție de dimensiunile robotului , în acest caz de 11,6 x 12 x 13 ).

Robotul construit poate naviga printr-un labirint simplu având la bază o serie de algoritmi pentru menținerea traiectoriei, realizarea unor viraje, cât și găsirea ieșirii din labirint. Crearea unui labirint în care două sau mai multe intersecții sunt foarte apropiate sau a căror ziduri nu sunt perfect drepte poate conduce la o serie de probleme, cauzând imposibilitatea de a explora tot labirintul sau de a schimba direcția de mers fără a lovi obstacolele. Această limitare apare datorită faptului că nu utilizăm decât trei senzori de distantă cu infrarosu pentru interacțiunea cu mediul extern. Un giroscop ar fi fost foarte util în stabilirea și menținerea unei traiectorii, dar acest lucru ar fi avut repercusiuni asupra costului total al proiectului.

Grație evoluției tehnologice din ce în ce mai pregnante, o serie impresionantă de activități care până odinioară erau realizate exclusiv manual, s-au putut automatiza. Printre cele mai importante beneficii aduse de această evoluție se poate menționa creșterea gradului de siguranță pentru umanitate, deoarece omul se implică din ce în ce mai puțin în domenii cu un risc ridicat . Această evoluție pare că ar pune și probleme de ordin social cum ar fi reducerea locurilor de muncă, tocmai din cauza acestui proces de automatizare. Însă, presiunea cade pe societate, care trebuie să accelereze reorientarea sistemului educațional și reconversia profesională către zone de inovație, cu valoare adăugată, lăsând tot ceea ce înseamnă mașină să opereze activitățile de rutină și/sau cele cu un efort fizic ridicat.

Cu alte cuvinte: evoluția tehnologică creează și alimentează dezvoltarea societății din ziua de astăzi.

Bibliografie

[1] – Anca Lucia Chicea , Curs “Bazele sistemelor mecatronice”

[2] – Curs general de mecatronica – Facultatea de mecanica din Iasi ( Curs postuniversitar sustinut de Universitatea Catolica belgiana si Institul de Tehnologie )

[3] – Proiectarea sistemelor mecatronice – Universitatea Politehnica Timisoara – profesor doctor inginer Vasile Dolga

[4] – Călinoiu C., Senzori și Traductoare, Volumul 1, Editura Tehnică, 2009.

[5] – AILOAIE, Gheorghe. Curs de electrotehnică, acționări electrice și electronică. dr. ing. Gh. Ailoaie, ing. Gr. Fetecău. Galați, 1992.

[6] – Ilie Octavian Popp , Curs “ Microsisteme in mecatronica “

[7] – Claudia Emilia Girjob , Curs “Sisteme de conducere in robotica “

[8] – Ovidiu Spatari , Curs “Sisteme de achizitii de date”

[9] – Breaz Radu Eugen , Curs “ Automatizari si automate programabile”

[10] – Dorin Telea , “Sisteme flexibile de fabricatie si transfer”

[11] – Dorin Telea , “Bazele roboticii”

[12] – Popescu D., Senzori pentru roboți, Editura Electra (ICPE), 2004.

[13 ] – Țârulescu R., Țârulescu S., Infrared detection senzors for mobile robots, Academic Journal of Manufacturing Engineering, Supplement, Issue 2 / 2008, Editura Politehnica Timisoara, ISSN 1583-7904.

[14] – Michael Barr (2002-07-30), Introduction to Closed-Loop Control, Embedded Systems Programming, archived from the original on 2010-02-09

[15] – PID Control with MATLAB and Simulink

[16] – https://youtu.be/AuGe_DFHpbc

[17] – PoliArdo projects

[18] – https://create.arduino.cc/projecthub/MakerRobotics/arduino-robot-poliardo-maze-solver-b41341

[19] – Mihai Surdeanu – Software engineer (https://mcuoneclipse.com/ )

[20] – Pololu documentation ( Powering up the 3pi )

[21] – https://exploreembedded.com/wiki/AVR_C_Library

[22] – https://youtu.be/mJV-KDqHgDQ

[23] – Public conference, December 2, 2010 – by professor Jean Pelletier-Thibert in Academie de Macon (Burgundy – France) – (Abstract published in the Annals academic, March 2011 – ISSN 0980-6032)

[24] – Sedgewick, Robert (2002), Algorithms in C++: Graph Algorithms (3rd ed.), Pearson Education, ISBN 978-0-201-36118-6.

Anexa 2

Anexe

Desene :

1.Desen de execuție motor cu suport.

2. Desen execuție Arduino Nano.

3. Desen execuție modul encoder.

4. Desen executie Punte H.

5. Desen execuție Senzor.

6. Desen de ansamblu robot labirint.

OPIS

Prezentul proiect de diplomă conține :

1. Partea scrisă

– nr. de pagini :103 ;

– figuri în text : 84 ;

– tabele : 3 ;

– cd : 1 ;

2. Partea grafică :

– format A0 : 0;

– format A1 :1 ;

– format A2 : 0;

– format A3 : 0;

– format A4 : 5;

Similar Posts