RobotEye

RobotEye este un sistem real-time hibrid, ce are ca scop urmarirea punctelor luminoase. Pe scurt, robotul “observa” o sursa de lumina, ii analizeaza traiectoria, si in functie de cum a fost programat, reactioneaza ca atare. Pentru observarea punctului luminos am folosit o camera web obisnuita, plasata pe un sistem mobil cu 2 grade de libertate (RobotHead). Fluxul de imagini preluat de camera web este transmis la un PC, unde se proceseaza si se decide actiunea (motorie): deplasarea sistemului intr-una din pozitiile sus, jos, stanga, dreapta; acest fapt simuleaza reactia robotului la lumina: el se va indrepta in directia indicata de punctul luminos. Pentru generarea punctului luminos e de preferat sa se utilizeze lumina laser, pentru o cat mai buna detectie a spotului luminos.

Asadar, RobotEye este format din 3 componente:

  • sistemul hardware de deplasare (RobotHead)
  • programul software de procesare a imaginii
  • circuit electronic de conditionare a semnalului (driver)

Sistemul hardware de deplasare trebuie sa permita deplasari atat in planul orizontal (pentru directiile stanga-dreapta) cat si in planul vertical (sus-jos); de acest lucru se ocupa 2 motorase, eventual trecute printr-un angrenaj. Personal am utilizat 2 motorase extrase din casetofoane vechi. Angrenajul este util atat pentru reducerea vitezei motorului cat si pentru cresterea fortei de lucru. Si da, este nevoie de un pic de forta: daca motorul planului vertical are doar sarcina deplasarii senzorului optic(a camerei web), motorul de jos – pentru planul orizontal – trebuie sa roteasca intreg planul motorului vertical, incluzand camera web. Sistemul hardware nu este greu de realizat, e
nevoie doar de rabdare.

Programul software de procesare a imaginii utilizat in proiect este tip Motion Detector (open-source) pe care l-am modificat, introducand partea de reactie a robotului (directia de deplasare functie de directia spotului luminos). Mai jos este linkul de download al programului executabil, cat si al codului sursa.

[RobotEye_bin],
[RobotEye_src]

Principiul pe care se bazeaza interpretorul e simplu: imaginile primite de la camera web sunt analizate color, se ignora fundalul si se retine traiectoria luminoasa a punctului luminos (care la un moment dat devine o linie <rosie, daca se utilizeaza lumina laser>); aceasta este parametrizata, cunoscandu-i-se punctul de inceput si cel de sfarsit. Daca linia parametrizata este de la Nord la Sud de exemplu, este generata o miscare in jos capului robotului. Idem pentru celelalte directii. Generarea miscarii presupune furnizarea unui impuls de iesire circuitului electronic driver. Pentru cele 4 directii este nevoie de un registru de 4 biti: in acest scop a fost utilizat portul paralel al PC-ului, anume primii 4 biti din registrul de date (D0-D3). La fiecare directie a spotului detectata, programul raspunde, deci, prin “aprinderea” unuia din cei 4 biti.

Circuit electronic driver are rolul de a prelua comanda transmisa de PC prin portul paralel, si de a o transforma in miscare fizica (va actiona motorul corespunzator in directia corespunzatoare). Circuitul este format din 2 circuite in punte H si eventual circuite de izolare electrica. (pentru izolare se poate folosi circuitul prezentat in cadrul articolului Controler GSM pentru actionari la distanta). In functie de puterea motoraselor, circuitele in punte difera prin tipul de tranzistori utilizati. Pentru motorase de putere mica se poate utiliza schema de aici

Bolt_smokeless_Hbridge

Pentru fiecare din cele 2 motoare se va construi un astfel de circuit. Aplicarea unui potential 5v (‘1’ logic) pe una din intrarile A sau B si potentialul masei (‘0’ logic) pe cealalta echivaleaza cu rotirea motorului intr-o directie; inversarea potentialelor inverseaza si directia de deplasare a motorului. Asadar, daca notam A1,B1 intrarile pentru primul motor (A1-stanga, B1-dreapta) si A2, B2 intrarile pentru al doilea motor, combinatiile de 4 biti pentru A1 B1 A2 B2 au urmatoarea insemnatate:

0 0 0 0 – stationare totala
0 0 0 1 – motorul 1 stationeaza, motorul 2 se misca la dreapta
0 0 1 0 – motorul 1 stationeaza, motorul 2 se misca la stanga
0 0 1 1 – stationare totala
0 1 0 0 – motorul 1 se misca la dreapta, motorul 2 stationeaza
0 1 0 1 – ambele motoare se misca la dreapta
0 1 1 0 – motorul 1 se misca la dreapta iar motorul 2 la stanga
0 1 1 1 – motorul 1 se misca la dreapta, motorul 2 stationeaza
1 0 0 0 – motorul 1 se misca la stanga, motorul 2 stationeaza
1 0 0 1 – motorul 1 se misca la stanga iar motorul 2 la dreapta
1 0 1 0 – ambele motoare se misca la stanga
1 0 1 1 – motorul 1 se misca la stanga, motorul 2 stationeaza
1 1 0 0 – stationare totala
1 1 0 1 – motorul 1 stationeaza, motorul 2 se misca la dreapta
1 1 1 0 – motorul 1 stationeaza, motorul 2 se misca la stanga
1 1 1 1 – stationare totala

Ex. Daca dorim deplasarea oblica SV-NE, copiem in registrul paralel de date valoarea 5 (z) = 0101 (b)

2 comments for “RobotEye

  1. February 6, 2010 at 20:35

    Nu sunt foarte pricepul la partea asta de tehnica, dar e chiar interesant robotelul! 😀

  2. September 1, 2014 at 22:41

    I read a lot of interesting posts here. Probably you spend a lot of time writing,
    i know how to save you a lot of work, there is an online tool that creates unique, SEO friendly
    posts in seconds, just search in google – laranitas free content source

Leave a Reply