Sunteți pe pagina 1din 151

Universitatea “POLITEHNICA” Timişoara

Facultatea de Automatică şi Calculatoare


Laboratoarele DSPLabs

LUCRARE DE DIPLOMĂ

SISTEM ROBOTIZAT MOBIL


TELEOPERAT, DESTINAT
STUDIULUI VEDERII ARTIFICIALE ŞI
STEREO-VIZIUNII

Alexandru JONI

COORDONATOR ŞTIINŢIFIC:
Şl. ing. Mihai V. MICEA

2003
Sistem robotizat mobil teleoperat Alexandru JONI

Cuprins
Lista figurilor.............................................................................................................................. 4
Lista secvenţelor de cod ............................................................................................................. 7

1 Introducere ......................................................................................................................... 8
1.1 Teleoperarea în domeniul roboticii ............................................................................ 8
1.2 Domeniile de aplicare ale teleoperării; exemple ........................................................ 9
1.2.1 Teleoperarea în medii ostile omului................................................................... 9
1.2.2 Teleoperarea în zone inaccesibile omului ........................................................ 19
1.3 Obiectivele proiectului ............................................................................................. 23
1.4 Cadrul general al proiectului .................................................................................... 24
1.5 Structura lucrării....................................................................................................... 24

2 Descrierea generală a sistemului ...................................................................................... 26


2.1 Componenţa sistemului ............................................................................................ 26
2.2 Modul general de operare......................................................................................... 27
2.3 Specificaţiile tehnice ................................................................................................ 27

3 Sistemul de acţionare al robotului.................................................................................... 29


3.1 Acţionarea unui motor de curent continuu............................................................... 29
3.1.1 Puntea tip “H” pentru acţionarea unui motor de curent continuu .................... 29
3.1.2 Tranzistorii MOS-FET ..................................................................................... 32
3.1.3 Tranzistorul IRFZ44N...................................................................................... 34
3.1.4 Tranzistorul IRF4905 ....................................................................................... 35
3.2 Sistemul de măsurare a deplasării cu ajutorul unui encoder .................................... 35
3.2.1 Tipuri de encodere............................................................................................ 36
3.3 Sistemul de comandă a punţii................................................................................... 39
3.3.1 Microcontrolerul P89C51RC+ ......................................................................... 41
3.3.2 Circuitul numărător 74HC193.......................................................................... 42
3.3.3 Circuitul supervizor de tensiune TL7705......................................................... 43
3.3.4 Convertorul analog numeric ADS7822............................................................ 44
3.4 Reglajul de viteză ..................................................................................................... 45
3.4.1 Implementarea a două semnale PWM.............................................................. 45
3.4.2 Bucla de reglaj automat al vitezei .................................................................... 48

4 Subsistemul de alimentare................................................................................................ 51
4.1 Bateria plumb-acid ................................................................................................... 51
4.2 Energia solară........................................................................................................... 51
4.2.1 Avantajele energiei solare ................................................................................ 51
4.2.2 Energia de dislocare ......................................................................................... 54
4.2.3 Conversia luminii în electricitate ..................................................................... 55
4.2.4 Principiul de funcţionare: Tip P, Tip N şi câmpul electric............................... 58
4.2.5 Materialele celulei solare ................................................................................. 60
4.2.6 Utilizare............................................................................................................ 61
4.3 Convertizorul 12V DC – 220V AC.......................................................................... 62

5 Subsistemul de comunicaţii.............................................................................................. 64
5.1 Reţeaua wireless WLAN (Wi-Fi)............................................................................. 64
5.1.1 Prezentare generală WLAN ............................................................................. 64
5.1.2 Ce este tehnologia wireless? ............................................................................ 65

Pagina 2 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

5.1.3 Echipamentele Wireless ................................................................................... 72


5.1.4 Avantajele WLAN............................................................................................ 75
5.1.5 Dezavantajele ................................................................................................... 76
5.2 Comunicaţiile client-server cu ajutorul socket-urilor............................................... 78
5.2.1 Aspectele teoretice ........................................................................................... 78

6 Platforma experimentală .................................................................................................. 84


6.1 Proiectarea, modelarea 3D ....................................................................................... 84
6.2 Realizare practică. Detalii constructive.................................................................... 86

7 Subsistemul video ............................................................................................................ 88


7.1 Camerele video cu semnal-video-complex .............................................................. 88
7.2 Dispozitivul de mişcare a camerelor cu două grade de libertate.............................. 88
7.3 Placa de captură a semnalului video ........................................................................ 89

8 Subsistemul de comandă .................................................................................................. 91


8.1 Componenţa ............................................................................................................. 91
8.2 Interfaţa prezentată utilizatorului ............................................................................. 91
8.3 Comanda robotului cu ajutorul joystickului............................................................. 92
8.3.1 Tipurile de Joy-stickuri .................................................................................... 92

9 Funcţionarea (operarea) sistemului .................................................................................. 97

10 Concluzii şi perspective ............................................................................................... 98

11 Bibliografie................................................................................................................... 99

Anexa 1 – Proiectul platformei experimentale....................................................................... 100

Anexa 2 – Schema punţii „H“ pentru comanda motoarelor DC ............................................ 106

Anexa 3 – Cablajul realizat aferent punţii „H“ ...................................................................... 107

Anexa 4 – Schema sistemului de comandă a punţii „H“........................................................ 108

Anexa 5 – Cablajul sistemului de comandă a punţii „H“. Faţa superioară ............................ 111

Anexa 6 – Cablajul sistemului de comandă a punţii „H“. Faţa inferioară ............................. 112

Anexa 7 – Codul sursă al sistemului de comandă a punţii „H“ ............................................. 113

Anexa 8 – Codul sursă al aplicaţiei server, care rulează pe sistemul de comandă al robotului
................................................................................................................................................ 123

Anexa 9 – Codul sursă al aplicaţiei de teleoperare ................................................................ 133

Pagina 3 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Lista figurilor
Figura 1 - Detectarea / distrugerea de mine în fosta Iugoslavie................................................. 9
Figura 2 - Robot mobil detector de mine ................................................................................. 10
Figura 3 - Robot mobil folosit la inspecţii în urma dezastrelor nucleare................................. 10
Figura 4 - Jet de apă folosit la distrugerea bombelor (disruptor) ............................................. 11
Figura 5 - Exemplu de robot mobil folosit la ameninţări cu bombe ........................................ 11
Figura 6 - Inspectarea unui autovehicul de către un robot mobil............................................. 12
Figura 7 - Robot mobil folosit la detectarea dispozitivelor explozive capcană ....................... 12
Figura 8 - Robot mobil echipat cu dispozitiv de distrugere a bombelor (disruptor)................ 13
Figura 9 - Robot mobil teleoperat din anii ‘60......................................................................... 13
Figura 10 - Comparaţie între roboţi mobili (în fundal Apollo 15 LRV anii 70, în plan apropiat
Sojourner – 1997)............................................................................................................. 14
Figura 11 - Şasiu experimental de robot mobil ........................................................................ 14
Figura 12 - Robot mobil Sojourner - roţile din faţă ................................................................. 15
Figura 13 - Depăşirea unui obstacol......................................................................................... 15
Figura 14 - Sojourner pregătit pentru transport........................................................................ 16
Figura 15 - Sojourner pregătit de funcţionare .......................................................................... 16
Figura 16 - Robot mobil experimental ..................................................................................... 16
Figura 17 - Pathfinder şi Sojourner .......................................................................................... 17
Figura 18 - Versiunea a doua a lui Sojourner........................................................................... 17
Figura 19 - Robotul mobil Sojourner preluând o mostră de rocă............................................. 18
Figura 20 - Design experimental de robot mobil ..................................................................... 18
Figura 21 - Detaliu al subsitemului video la un robot mobil ................................................... 19
Figura 22 - Robot mobil folosit la inspecţia ţevilor ................................................................. 19
Figura 23 - Exemplu de robot mobil folosit la inspecţia conductelor...................................... 20
Figura 24 - Robot mobil pentru inspecţia conductelor verticale.............................................. 20
Figura 25 - Robot mobil pentru zone greu accesibile .............................................................. 21
Figura 26 - Modificarea formei în timpul operării................................................................... 21
Figura 27 - Robot subacvatic teleoperat................................................................................... 21
Figura 28 - Robot subacvatic de recunoaştere ......................................................................... 22
Figura 29 - Robot mobil militar multifuncţional...................................................................... 22
Figura 30 - Robot mobil militar folosit la aprovizionarea cu medicamente ............................ 23
Figura 31 - Robot mobil folosit la decontaminări / înlăturarea obstacolelor ........................... 23
Figura 32 - Arhitectura sistemului ........................................................................................... 26
Figura 33 - Acţionarea unui motor de curent continuu ............................................................ 29
Figura 34 - Acţionare în sens invers......................................................................................... 29
Figura 35 - Schemă bloc a unei punţi tip „H“ .......................................................................... 30
Figura 36 - Deschiderea unei părţi a punţii .............................................................................. 30
Figura 37 - Deschidere inversă a punţii ................................................................................... 31
Figura 38 - Punte „H“ cu tranzistori......................................................................................... 31
Figura 39 - Diode de protecţie.................................................................................................. 32
Figura 40 - Tranzistor MOS-FET............................................................................................. 32
Figura 41 - Tranzistor P-MOS ................................................................................................. 33
Figura 42 - Tranzistori N-MOS................................................................................................ 33
Figura 43 - Detaliu constructiv a unui encoder ........................................................................ 36
Figura 44 - Semnale de la un encoder incremental .................................................................. 36
Figura 45 - Disc codor a unui encoder incremental ................................................................. 37

Pagina 4 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 46 - Semnale ale unui encoder incemental cu semnale de comutaţie pentru un motor
trifazic............................................................................................................................... 37
Figura 47 - Disc codor a unui encoder incremental cu semnale de comutaţie......................... 38
Figura 48 - Disc codor a unui encoder absolut (cod Grey) ...................................................... 38
Figura 49 - Disc codor a unui encoder absolut (cod binar)...................................................... 39
Figura 50 - Ordinograma sistemului de comandă .................................................................... 41
Figura 51 - Configuraţia pinilor – P89C51RC+....................................................................... 42
Figura 52 - Configuraţia pinilor – 74HC193............................................................................ 43
Figura 53 - Diagrama logică – 74HC193 ................................................................................. 43
Figura 54 - Configuraţia pinilor – TL7705 .............................................................................. 44
Figura 55 - Diagrama funcţională – TL7705 ........................................................................... 44
Figura 56 - Configuraţia pinilor – ADS7822 ........................................................................... 44
Figura 57 - Diagrame de timp – comunicaţie serială cu ADS7822 ......................................... 45
Figura 58 - Forma de undă a mărimii controlate cu factor de umplere de A. 95% B. 50% C.
5%..................................................................................................................................... 46
Figura 59 - Exemplu de semnale PWM ................................................................................... 46
Figura 60 - Ordinograma reglajului automat al vitezei ............................................................ 49
Figura 61 - Aplicare a tehnologiei solare ................................................................................. 52
Figura 62 - Panou solar ............................................................................................................ 52
Figura 63 - Energia solară ........................................................................................................ 53
Figura 64 - Procese în cadrul materialului ............................................................................... 54
Figura 65 - Energia absorbată de diferite materiale ................................................................. 55
Figura 66 - Celulă, modul, matrice .......................................................................................... 55
Figura 67 - Celula solară .......................................................................................................... 56
Figura 68 - Pământul ................................................................................................................ 57
Figura 69 - Spectrul radiaţiei solare ......................................................................................... 57
Figura 70 - Secţiune prin celula fotovoltaică ........................................................................... 58
Figura 71 - Procesul de fabricaţie al siliciului.......................................................................... 59
Figura 72 - Procesul de fabricaţie al siliciului.......................................................................... 59
Figura 73 - Aranjarea cristalelor de siliciu............................................................................... 60
Figura 74 - Exemple de aplicare a tehnologiei solare .............................................................. 61
Figura 75 - Exemple de aplicare a tehnologiei solare .............................................................. 61
Figura 76 - Ieşiri a diferitor tipuri de invertoare (semnal sinusoidal, cvasi-sinusoidal şi
rectangular)....................................................................................................................... 62
Figura 77 - Convertizor sinusoidal 12V DC - 220 V AC......................................................... 63
Figura 78 - Reţea wireless cu conexiune simplă punct la punct .............................................. 64
Figura 79 - Reţea wireless cu conexiuni multi-punct cu securitate.......................................... 65
Figura 80 - Comunicaţii prin infraroşu .................................................................................... 67
Figura 81 - Spectrul de emisie.................................................................................................. 68
Figura 82 - Câştig în domeniul 2.4 GHz .................................................................................. 69
Figura 83 - Antenă omnidirecţională ....................................................................................... 71
Figura 84 - Echipamente Wireless ........................................................................................... 72
Figura 85 - Stâlp BTS (Base Tranceiver Station) .................................................................... 73
Figura 86 - Antenă direcţională................................................................................................ 74
Figura 87 - Tower..................................................................................................................... 75
Figura 88 - Antenă satelit ......................................................................................................... 76
Figura 89 - Antenă direcţională................................................................................................ 77
Figura 90 - Modelare 3D a sistemului de acţionare. ................................................................ 84
Figura 91 - Prototip şasiu simulat ............................................................................................ 85
Figura 92 - Wireframe prototip. ............................................................................................... 85
Figura 93 - Modelare 3D a prototipului ................................................................................... 86

Pagina 5 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 94 - Realizare practică a şasiului .................................................................................. 87


Figura 95 - Sistemul teleoperat ................................................................................................ 87
Figura 96 -Cameră video Navigator......................................................................................... 88
Figura 97 - Dispozitiv de rotire (Pan-Tilt) a camerelor ........................................................... 89
Figura 98 - Interfaţa prezentată utilizatorului .......................................................................... 91
Figura 99 - Joystick digital....................................................................................................... 93
Figura 100 - Joystick ................................................................................................................ 96
Figura 101 - Schemă interconectare joystick cu un PC ........................................................... 96
Figura 102 - Aplicaţia server.................................................................................................... 97
Figura 103 - Subansamblu complet........................................................................................ 100
Figura 104 - Subansamblu complet........................................................................................ 101
Figura 105 - Părţi componente subansamblu ......................................................................... 101
Figura 106 - Ax ...................................................................................................................... 102
Figura 107 - Bucşă ................................................................................................................. 102
Figura 108 - Inel..................................................................................................................... 103
Figura 109 - Arbore................................................................................................................ 103
Figura 110 - Manşon de cuplare............................................................................................. 103
Figura 111 - Bucşă antrenare ................................................................................................. 104
Figura 112 - Suport Encoder .................................................................................................. 104
Figura 113 - Placă suport ....................................................................................................... 105
Figura 114 - Schema punţii „H“............................................................................................. 106
Figura 115 - Cablajul punţii „H“ – faţa superioară ................................................................ 107
Figura 116 - Cablajul punţii „H“ - faţa inferioară.................................................................. 107
Figura 117 - Schema sistemului de comandă a punţii - detaliu - microcontrolerul ............... 108
Figura 118 - Intrări separate galvanic .................................................................................... 108
Figura 119 - Ieşiri separate galvanic ...................................................................................... 109
Figura 120 - Formare impulsuri numărare ............................................................................. 109
Figura 121 - Una din cele trei ramuri cu numărătoare pe 24 de biţi ...................................... 110
Figura 122 - Cablajul sistemului de comandă : faţa superioară ............................................. 111
Figura 123 - Cablajul sistemului de comandă : faţa inferioară .............................................. 112

Pagina 6 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Lista secvenţelor de cod


Secvenţă cod 1 - Comenzi acceptate de la calculatorul gazdă ................................................. 40
Secvenţă cod 2 - Definiţii cazuri PWM ................................................................................... 47
Secvenţă cod 3 - Rutină timer 0 PWM..................................................................................... 48
Secvenţă cod 4 - Calcularea vitezei X...................................................................................... 49
Secvenţă cod 5 - Reglaj dinamic al vitezei .............................................................................. 50
Secvenţă cod 6 - Calcul variabile PWM .................................................................................. 50
Secvenţă cod 7 - Apelare socket .............................................................................................. 79
Secvenţă cod 8 - Familii de protocoale .................................................................................... 79
Secvenţă cod 9 - Funcţia connect............................................................................................. 80
Secvenţă cod 10 - Structura sockaddr_in ................................................................................. 80
Secvenţă cod 11 - Deschidere conexiune................................................................................. 80
Secvenţă cod 12 - Apel funcţie send ........................................................................................ 81
Secvenţă cod 13 - Apel funcţie receive.................................................................................... 82
Secvenţă cod 14 - Apel funcţie sendto ..................................................................................... 82
Secvenţă cod 15 - Structura sockaddr ...................................................................................... 82
Secvenţă cod 16 - Apel funcţie recvfrom................................................................................. 82
Secvenţă cod 17 - Închidere socket .......................................................................................... 83

Pagina 7 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

1 Introducere
Lucrarea de faţă îşi propune abordarea domeniului teleoperării. Teleoperarea este un
concept inovator care a fost recent introdus în practica curentă a domeniului automatizărilor.
Teleoperarea se poate aplica pe o gamă largă de echipamente, de la cei mai complecşi roboţi
industriali până la aplicaţii locale extrem de simple.
Teleoperarea necesită anumite particularităţi ale aplicaţiei tratate, printre care amintim:
• aplicaţia trebuie să suporte comanda prin acest procedeu, adică să nu existe restricţii
specifice;
• aplicaţia trebuie să fie compatibilă cu comanda prin teleoperare;
• aplicaţia trebuie să prezinte avantaje evidente în urma aplicării teleoperării.
Având în vedere aceste aspecte, putem conchide afirmând că teleoperarea nu a adus decât
îmbunătăţiri ale modului de lucru în domeniul industrial, că simplifică extrem de mult unele
procese de comandă, că este nu doar oportună ci chiar indispensabilă în anumite condiţii de
exploatare.

1.1 Teleoperarea în domeniul roboticii

Lucrarea prezintă o aplicaţie de comandă şi percepţie la distanţă, numită generic


teleprezenţă şi teleoperare. În esenţă, este vorba despre transmiterea la distanţă, prin mediul
informatic, a semnalelor captate de un echipament şi a comenzilor adresate echipamentului,
decise de un operator sau de un sistem de reglare automată. În mod generic, transmiterea
comenzilor către echipamentul aflat la distanţă este numită teleoperare, indiferent dacă cel
care decide comenzile este un operator uman sau un sistem de conducere automată.
Aplicaţiile în care operatorul este conectat la senzorii aflaţi la distanţă, ca şi cum s-ar
afla în mediul în care sunt instalaţi senzorii, sunt numite aplicaţii de teleprezenţă. Distanţa
între echipament şi operator nu va fi luată în considerare, în cadrul acestei lucrări, deşi
întîrzierea care apare în mediul de transmisiune este una din problemele cele mai dure, în
cazul unei operaţii de reglare (umană sau automată).
Scopul acestor aplicaţii este comanda sau percepţia la distanţă, şi poate fi impus de una
din situaţiile:
- echipamentul (robot mobil) operează într-un mediu ostil, periculos pentru operatorul
uman, cum ar fi reactoarele nucleare, zonele de război, etc.;
- echipamentul colectează informaţii (sub diverse forme fizice) din zone inaccesibile
operatorului (spaţiul extraterestru, spaţii înguste), dar pe care operatorul trebuie să le
perceapă ca şi cum ar fi prezent (cum ar fi cazul telechirurgiei);
- echipamentul trebuie configurat de la distanţă (inclusiv roboţi mobili sau echipamente
industriale);
- echipamentul este disponibil într-un număr mic de exemplare (poate fi chiar unicat) şi
trebuie folosit de mai mulţi utilizatori, aflaţi în zone geografice diferite (ca în cazul
experimentelor ştiinţifice sau al învăţămîntului la distanţă).

Structura generală a unei aplicaţii de teleoperare cuprinde următoarele elemente:


- un echipament aflat la distanţă faţă de operator (spre exemplu un robot mobil), capabil
să execute comenzile recepţionate, datorită elementelelor de execuţie proprii;
- un sistem de traductoare, instalat pe echipament, care furnizează informaţii despre
evoluţia mediului şi despre gradul de executare a comenzilor;

1. Introducere Pagina 8 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

- un sistem programabil, aflat la distanţă faţă de echipamentul operat, capabil să preia


comenzile operatorului sau să realizeze operaţia de automatizare (de obicei este vorba
de un calculator de uz general, dar poate fi şi unul dedicat);
- un mediu de transmisiune, prin care comunică cei doi corespondenţi. Mediul poate fi
unul dedicat aplicaţiei sau poate fi reţeaua Intranet sau Internet, cu comunicaţie pe fir,
prin modemuri radio, pe fibră optică, prin radiaţie infraroşie etc.;
- câte un mediu software pentru fiecare dintre corespondenţi, prin intermediul căruia se
exploatează resursele hardware. De regulă, principiul pe care se bazează programele
din cele două calculatoare aflate în legătură este principiul client/server.

1.2 Domeniile de aplicare ale teleoperării; exemple

Cele mai des întâlnite domenii de aplicare ale teleoperării sunt:


• acţiuni ce necesită precizie;
• se desfăşoară în medii ostile, inaccesibile omului sau în medii de mare puritate
(camere curate, medicină, fabricaţia medicamentelor, semiconductoarelor, etc.);
• beneficiază de îmbunătăţiri de performanţă prin introducerea roboţilor mobili.
În cele ce urmează vor fi prezentate câteva din domeniile cele mai des întâlnite de
aplicare a teleoperării roboţilor, atât mobili cât şi staţionari.

1.2.1 Teleoperarea în medii ostile omului


1.2.1.1 Detectarea minelor anti-personal
Una din problemele umanitare grave cu care se confruntă civilizaţia modernă o
constituie minele anti-persoană. Doar anul trecut au fost distruse 100.000 de mine, dar alte 2.5
milioane au fost amplasate (cu precădere în Asia de sud-est). Distrugerea acestor mine este o
operaţiune periculoasă şi costisitoare.

Figura 1 - Detectarea / distrugerea de mine în fosta Iugoslavie

Din acest motiv există în prezent mai multe proiecte ce încearcă rezolvarea acestei
probleme. Soluţiile alese constau de obicei dintr-un robot mobil (ca unitate de execuţie) un
algoritm de scanare a suprafeţei ce trebuie eliberată de mine, un element pentru detonarea sau
dezamorsarea minelor reperate. Reperarea se face în funcţie de tipul minelor folosite cu
diferiţi senzori: detector de metale, senzor infraroşu, electro-optic, multi spectral, cu
1. Introducere Pagina 9 din 151
Sistem robotizat mobil teleoperat Alexandru JONI

dispozitive radar cu diferite lungimi de undă, senzori cu unde acustice, detectarea particulelor
cu sarcini, rezonanţă, senzori chimic, biologici, câini, etc.

Figura 2 - Robot mobil detector de mine

1.2.1.2 Inspecţia în zone contaminate nuclear

În urma unui accident nuclear trebuie inspectată zona accidentului şi evaluate daunele.
Datorită faptului că de obicei nu se cunoaşte starea nucleului, a radiaţiilor sau a posibilelor
urmări se preferă trimiterea unui robot mobil pentru evaluarea daunelor.
Acest tip de robot trebuie să fie proiectat să facă faţă unei astfel de situaţii, să fie imun
la radiaţii ridicate, să poată depăşi obstacole de diferite forme (obstacole ce rezultă în urma
unei explozii), să fie capabili să furnizeze date corecte şi în aceste situaţii personalului de
teleoperare.

Figura 3 - Robot mobil folosit la inspecţii în urma dezastrelor nucleare

1.2.1.3 Intervenţiile în cazul ameninţărilor cu bombe şi a muniţiei neexplodate

În cazul unei amenţări cu bombe este encesară evacuarea zonei în cauză. Pentru a
preveni pierderea de vieţi umane şi pentru a putea relua activităţile normale cât mai repede se
folosesc şi în aceste cazuri tot mai des roboţi mobili.

1. Introducere Pagina 10 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 4 - Jet de apă folosit la distrugerea bombelor (disruptor)


Aceşti roboţi mobili au posibilitatea de a urca / coborî scări, deschide uşi, ridica obiecte,
etc. În majoritatea din cazuri sunt echipate cu un dispozitiv folosit la detonarea voită a
explozibilului. În acest scop se foloseşte cel mai des un jet de mare presiune de apă.

Figura 5 - Exemplu de robot mobil folosit la ameninţări cu bombe


În astfel de situaţii, siguranţa în funcţionarea robotului mobil depinde în principal de
stabilitatea acestuia (pentru evitarea răsturnării sub greutatea proprie sau a sarcinii purtate) şi
de aderenţa la terenul pe care se deplasează (pentru evitarea patinării chiar în condiţiile unui
sol cu caracteristici nefavorabile). Gabaritul redus (atât longitudinal cât şi transversal), ca şi
greutatea proprie redusă, reprezintă condiţii extrem de severe impuse roboţilor mobili; aceştia
trebuie să pătrundă în clădiri şi locuri mai puţin accesibile, să se deplaseze pe culoare sau în
pasaje proiectate iniţial numai pentru accesul operatorului uman.

1. Introducere Pagina 11 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 6 - Inspectarea unui autovehicul de către un robot mobil

Ţările puternic industrializate au în dotarea forţelor armate roboţi mobili înzestraţi cu


echipamente de lucru, care permit efectuarea operaţiilor de detecţie, manipulare şi neutralizare
a muniţiilor neexplodate şi a dispozitivelor explozive capcană. Montate la capătul ultimului
braţ al manipulatorului – robot, aceste echipamente de lucru pot fi: detector de metale sau
explozivi la adâncime, dispozitiv de prehensiune tip cleşte, instalaţie de control prin
radiografiere, disruptoare de diferite categorii.

Figura 7 - Robot mobil folosit la detectarea dispozitivelor explozive capcană

În domeniul protecţiei civile, roboţii mobili sunt folosiţi pentru a interveni în locuri
aglomerate (aeroporturi, gări, pieţe etc.) pentru a detecta şi neutraliza unele dispozitive
explozive capcană (colete, genţi diplomat etc.).

1. Introducere Pagina 12 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 8 - Robot mobil echipat cu dispozitiv de distrugere a bombelor (disruptor)

1.2.1.4 Roboţii mobili folosiţi în cercetarea spaţială

Încă din anii 60 institutele de cercetare spaţială au cercetat posibilitatea aplicării


tehnologiei de teleoperare a unor roboţi mobili în cadrul cercetării spaţiale.

Figura 9 - Robot mobil teleoperat din anii ‘60

Concepte legate de mărime, sisteme de acţionare, telecomunicaţii s-au modificat drastic


în ultimele 4 decenii de dezvoltare.

1. Introducere Pagina 13 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 10 - Comparaţie între roboţi mobili (în fundal Apollo 15 LRV anii 70, în plan apropiat Sojourner –
1997)
Poate că unul dintre cei mai cunoscuţi roboţi mobili teleoperaţi este Sojourner.
Sojourner a fost conceput de către JPL (Jet Propulsion Laboratory, laborator NASA) în
cadrul proiectului Mars Pathfinder. Probabil unul dintre cei mai mediatizaţi roboţi mobili,
Sojourner este un robot cu 6 roţi motoare pe un şasiu inovativ introdus de către NASA.

Figura 11 - Şasiu experimental de robot mobil

1. Introducere Pagina 14 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 12 - Robot mobil Sojourner - roţile din faţă

Acest tip de şasiu ales de către NASA a fost special conceput pentru a face faţă
problemelor apărute datorită suprafeţei plenetei marte. Aceasta este cunoscută pentru
multitudinea de obstacole de diferite dimensiuni întălnite. Datorită faptului că viteza de
deplasare a robotului mobil Sojourner este relativ mică (câţiva centimetri pe secundă) un
algoritm de evitare a tuturor obstacolelor s-a dovedit a fi foarte neproductiv.

Figura 13 - Depăşirea unui obstacol

1. Introducere Pagina 15 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 14 - Sojourner pregătit pentru transport

Figura 15 - Sojourner pregătit de funcţionare

Figura 16 - Robot mobil experimental

1. Introducere Pagina 16 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 17 - Pathfinder şi Sojourner

Figura 18 - Versiunea a doua a lui Sojourner

Una din problemele cela mai mari întâlnite în cazul robotului mobil Sojourner a fost
diferenţa foarte mare de temperatură ambiantă ce poate apare. Noaptea temperatura scade
până la cca. -96 de grade Celsius, ziua atingând temperaturi destul de ridicate. Din această
cauză a fost necesară crearea unui microclimat în interiorul robotului pentru a proteja
electronica de fluctuaţiile de temperatură şi pentru a o menţine funcţională.
Robotul mobil a fost echipat şi cu un element acţionator numit IDD (Instrument
Deplyment Device). Acesta este un braţ robotizat, ce permite utilizarea echipamentelor de
cercetare din dotare, cum ar fi: un ansamblu pentru preluare de imagini (format dintr-un
microscop şi o cameră de înaltă rezoluţie), un spectrometru Mössbauer, un spectrometru cu
raze X şi un dispozitiv pentru preluarea de mostre de rocă.

1. Introducere Pagina 17 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 19 - Robotul mobil Sojourner preluând o mostră de rocă

Figura 20 - Design experimental de robot mobil

1. Introducere Pagina 18 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 21 - Detaliu al subsitemului video la un robot mobil

1.2.2 Teleoperarea în zone inaccesibile omului

Nu doar în zonele periculoase se folosesc roboţi mobili, ci şi în zone inaccesibile sau


greu accesibile omului. Acestea pot fi: inspectarea ţevilor, conductelor, operaţii subacvatice la
mare adâncime, monitorizarea siguranţei scufundătorilor, operaţii de salvare subacvatice, pază
de coastă, operaţiuni de recunoaştere militară, evacuări medicale, suport logistic, inspecţii de
epave, etc.

1.2.2.1 Inspecţia conductelor

Figura 22 - Robot mobil folosit la inspecţia ţevilor

1. Introducere Pagina 19 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Sistemele de inspecţie a conductelor sunt formate uzual din mai multe părţi: robotul
mobil ce oferă platforma locomotorie, o cameră video uzual montată pe un dispozitiv ce
permite rotirea şi înclinarea acesteia şi unelte necesare efectuarea altor teste sau reparaţii.
Dintre testele ce pot fi efectuate amintim cele de natură nedistructivă, cum ar fi probe
cu lichide penetrante, scanări ultrasonice, cu raze x. Acestea se efectuează periodic pentru a
verifica parametrii conductei în cauză.
Sistemele folosite în practică sunt de obicei izolate etanş astfel încât este posibilă
operarea lor şi în conducte cu lichid, atâta timp cât lichidul permite efectuarea testelor
propuse.

Figura 23 - Exemplu de robot mobil folosit la inspecţia conductelor

Pentru a permite inspecţia conductelor verticale s-au dezvoltat roboţi mobili cu trei
şenile dispuse la o distanţă de 120 de grade, astfel asigurându-de o aderenţă maximă şi în
cazul operării pe verticală.

Figura 24 - Robot mobil pentru inspecţia conductelor verticale

1.2.2.2 Inspecţia în zone greu accesibile

Pentru a putea pătrunde în zone greu accesibile este nevoie de roboţi mobili de
dimensiuni foarte reduse. Aceste dimensiuni reduse au însă un impact asupra calităţii
teleprezenţei. În special calitatea imaginilor video teletransmise este scăzută datorită distanţei
la sol foarte mici. Pentru a depăşi acest inconvenient au fost concepuţi roboţi mobili ce îşi
modifică forma în timpul operării.

1. Introducere Pagina 20 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 25 - Robot mobil pentru zone greu accesibile

Figura 26 - Modificarea formei în timpul operării

Printre aplicaţiile cele mai importante pentru acest tip de roboţi mobili enumerăm:
descoperirea de victime în cazul cutremurilor sau a unor explozii, inspecţia clădirilor (în
special inspecţia fundaţiilor), etc.

1.2.2.3 Roboţii subacvatici

Aceştia operează uzual la adâncimi destul de mari, de până la 7-8000 de metri


adâncime. Printre aplicaţiile uzuale numărăm: cartografiere, detectarea de epave, readucerea
la suprafaţă a diferitor obiecte (cum ar fi bucăţi de epavă, chiar elicoptere sau alte aparate de
zbor), inspecţia epavelor (Magellan 725 a fost folosit acum câţiva ani în cadrul unei anchete
legate de scufundarea unui vas cargo, astfel s-a demonstrat că vasul a fost scufundat deliberat
pentru încasarea primei de asigurare), salvarea scufundătorilor sau a altor naufragiaţi, etc.

Figura 27 - Robot subacvatic teleoperat

1. Introducere Pagina 21 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 28 - Robot subacvatic de recunoaştere

1.2.2.4 Roboţii militari mobili

În cadrul militar folosirea roboţilor mobili aduce numeroase avantaje. Se pot efectua
operaţiuni de recunoaştere, de spionaj fără riscul pierderilor de trupe (sau de divulgare a
informaţiilor la capturarea acestora), suport logistic (transport de muniţie, medicamente,
combustibil), evacuare medicală a soldaţilor răniţi, operaţiuni de căutare şi salvare, etc.

Figura 29 - Robot mobil militar multifuncţional

1. Introducere Pagina 22 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 30 - Robot mobil militar folosit la aprovizionarea cu medicamente

Figura 31 - Robot mobil folosit la decontaminări / înlăturarea obstacolelor

1.3 Obiectivele proiectului

Lucrarea de faţă îşi propune abordarea domeniilor de teleoperare şi teleprezenţă,


domenii relativ noi, dar cu o creştere uimitoare în ultimii ani.

1. Introducere Pagina 23 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

În cele ce urmează se doreşte prezentarea, pe lângă stadiul actual de dezvoltare a


tehnicilor de teleoperare/teleprezenţă, şi prezentarea unei aplicaţii de teleoperare tipice. S-au
dezvoltat, şi sunt prezentate în cele ce urmează, componente de acţionare, de comandă, de
teletransmitere a diferiţilor parametri, precum şi algoritmi de control, de reglaj a vitezelor
împreună cu protocoale de comunicaţii între diferitele componente.

1.4 Cadrul general al proiectului

Marea majoritate a instituţiilor de învăţământ superior tehnic din lume manifestă în


ultimii ani un puternic interes faţă de tehnologia de teleoperare şi de teleprezenţă, dezvoltând
două sau chiar trei discipline de studiu în domeniu, alocând pentru acestea importante sume
de bani, oameni cu o înaltă calificare şi laboratoare echipate specific. De asemenea sistemele
teleoperate constituie un domeniu de interes pecial pentru cercetarea universitară, pentru
activităţile de doctorat şi masterat.

Departamentul de Ştiinţa şi Ingineria Calculatoarelor reprezentat prin laboratorul


DSPLabs, se încadrează la rândul său în tendinţa generală manifestată în acest domeniu atât în
mediul universitar cât şi de puternice companii din întreaga lume.

Înfiinţat în anii 1980 de prof. Dr. ing. Voicu GROZA laboratorul DSPLabs a cunoscut o
dezvoltare puternică în ultimii ani, atât din punct de vedere al dotării cât şi al numărului de
membri activi, componente esenţiale ce au contribuit la statutul său actual. În momentul de
faţă laboratorul DSPLabs condus de către şl. ing. Mihai V. MICEA şi coordonat de către prof.
Dr. ing. Ştefan HOLBAN şi prof. Dr. ing. Vladimir CREŢU a contribuit la finalizarea a peste
27 de contracte şi granturi majore de cercetare cu parteneri din ţară şi din străinătate,
dispunând de o puternică echipă de cercetare compusă din studenţi, masteranzi şi doctoranzi.
Participarea unor membri ai acesteia la concursuri internaţionale de calculatoare ( hard şi soft
) cu rezultate excepţionale ( locurile I şi II ) reprezintă o dovadă a calităţii resurselor umane de
care dispune laboratorul.

Experienţa câştigată în activităţile de cercetare / dezvoltare şi la concursurile din


domeniul prelucrării numerice a semnalelor şi comenzii numerice a sistemelor a contribuit în
mare măsură la iniţierea în anul 1999 a unei fructuoase colaborări cu compania Motorola din
SUA, colaborări ce continuă şi în prezent.

Astfel încheierea unui proiect de o asemenea anvergură în cadrul acestui laborator


reprezintă încă un exemplu legat ce demonstrează potenţialul acestui laborator.

1.5 Structura lucrării

Primul capitol este o introducere, care îsi propune să contureze obiectivele acestei
lucrări de diplomă şi cadrul general în care s-a născut. Sunt prezentate pe scurt posibilităţile
actuale în cadrul teleoperării, precum şi câteva aplicaţii semnificative.
În cel de-al doilea capitol este prezentată întreaga aplicaţie de teleoperare fără a se intra
însă în detalii constructive. Este prezentată componenţa sistemului, modul de operare precum
şi specificaţiile tehnice ale acestuia.
Capitolul al treilea prezintă întreg susbsistemul de acţionare, realizarea unei punţi de tip
“H”, realizarea unui sistem cu microcontroler pentru comanda acesteia, precum şi folosirea
unor encodere pentru măsurarea poziţiei şi a vitezei de deplasare.

1. Introducere Pagina 24 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

În cel de-al patrulea capitol este prezentat subsistemul de alimentare, bateria de 12V
125 Ah, panoul solar (împreună cu o descriere a tehnologiei solare), precum şi convertizorul
necesar pentru alimentarea PC-ului de pe robot.
Următorul capitol prezintă aspecte legate de comunicaţii, tehnologia WLAN folosită la
comanda robotului precum şi la realizarea teleprezenţei, folosirea socket-urilor pentru
comunicaţia interproces şi transmisia video a imaginilor de la cele două camere prin
streaming MPEG4.
Capitolul al şaselea prezintă realizarea practică a robotului împreună cu realizarea
virtuală a acestuia.
Următorul capitol prezintă aspecte legate de furnizarea imaginilor. Se prezintă camerele
folosite, împreună cu placa de captură folosită la digitizarea semnalului analogic. Se mai
prezintă şi dispozitivul ales pentru realizarea înclinării şi rotirii camerelor.
Cel de-al optulea capitol descrie sistemul de comandă. Este prezentată interfaţa
aplicaţiei de teleoperare, precum şi posibilitatea de comandă a robotului prin intermediul unui
joystick.
În următorul capitol este descrisă aplicaţia software ce stă la baza acestui robot, la baza
întregului sistem de teleoperare.
În cele ce urmează sunt descrise concluziile şi perspectivele acestei lucrări, posibilităţi
de îmbunătăţire ulterioară. Menţionăm că sistemul a fost astfel dimensionat, ca să permită
folosirea sa drept platformă experimentală pentru testarea mai multor senzori.

1. Introducere Pagina 25 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

2 Descrierea generală a sistemului


În cadrul acestei lucrări s-a dorit realizarea unei aplicaţii de teleoperare complete.
Componenţa şi intercomunicarea între diferitele componente vor fi prezentate pe scurt în cele
ce urmează şi în detaliu în capitolele aferente-

2.1 Componenţa sistemului

Aplicaţia de teleoperare este compusă din mai multe subsisteme prezentate schematic în
figura ce urmează.

Imagini video Imagini video


Aplicaţia de Aplicaţia
teleoperare, Date sistem Internet Date sistem SERVER,
rulează la rulează pe
utilizator robotul mobil
Comenzi Comenzi

RS232
Semnal video complex RS232

Sistemul de Sistemul de
Subsistemul acţionare a orientare a
video robotului camerelor

Figura 32 - Arhitectura sistemului

Cum reiese şi din figură aplicaţia de teleoperare este compusă din mai multe subsisteme:
• platforma robotului mobil şi sistemul de acţionare,
• sistemul video,
• sistemul de orientare a camerelor,
• subsistemul de comunicaţie,
• aplicaţiile software

Primul sistem, sistemul de acţionare împreună cu platforma robotului mobil, au un rol


principal în poziţionarea robotului. Sistemul este compus din două punţi de tip „H” ce
realizează comanda a două motoare DC, un sistem cu microcontroler care le comandă.

2. Descrierea generală a sistemului Pagina 26 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Sistemul video este compus dintr-o placă de achiziţie video, două camere alb/negru cu
senzor CCD şi un server soft, care realizează encodarea semnalelor video în format MPEG2 şi
teletransmiterea acestora la clientul ce realizează teleoperarea.
Pentru a îmbunătăţi calităţile de teleprezenţă, camerele video au fost montate pe un
dispozitiv de rotire / înclinare, comandat tot de către utilizatorul de teleoperare. Astfel de la
distanţă se pot roti şi orienta cele două camere.
Următoarele sisteme sunt implementate software. Acestea realizează intercomunicarea
între calculatorul gazdă al teleoperatorului şi calculatorul de pe platforma robotizată.
Interfaţa de teleoperare a fost realizată ţinându-se cont în primul rând de un proces de
învăţare cât mai scurt. Interfaţa a fost proiectată cât mai intuitiv, pentru a scuti utilizatorii de
teleoperare de o perioadă lungă de şcolarizare, acomodare.

2.2 Modul general de operare

Sistemul implementat în cadrul acestei lucrări de diplomă este un sistem complet de


teleoperare. Din acest considerent prezintă toate elementele unui sistem de teleoperare.
Acestea au fost prezentate pe scurt în subcapitolul anterior şi vor fi prezentate în detaliu pe
parcursul acestei lucrări. În cele ce urmează se prezintă modul general de operare a sistemului
de teleoperare.
După ce sistemul a fost pornit, robotul mobil este testat dacă este gata de funcţionare.
Se execută nişte teste interne de funcţionare, se verifică tensiunea bateriei principale şi
comunicaţia cu exteriorul. După îndeplinirea acestor condiţii sistemul mobil este pregătit să
accepte comenzi de teleoperare.
Utilizatorul va accesa software-ul de teleoperare, îl va configura cu nume de cont şi
parolă de acces, după care se va conecta la robotul mobil. Primul utilizator conectat va putea
lansa şi comenzi. Utilizatorii conectaţi ulterior nu vor putea interveni în acţiunile robotului
mobil, ci vor fi simplii privitori. Menţionăm că utilizatorii ulteriori au acces la transmisiunea
video. Acces la această transmisiune este oferit şi fără un software special, dintr-o simplă
fereastră web.
Utilizatorul va interacţiona cu robotul folosind un joystick, iar mişcările acestuia sunt
convertite în comenzi şi teletransmise robotului pentru a fi interpretate şi transformate în
acţiuni.

2.3 Specificaţiile tehnice

Platforma mobilă
Dimensiuni: 1010x830x1600 mm
Greutate: aprox. 80 kg
Baterie: 124 Ah
Panou solar: 50 Wh
Convertizor 220V: 200 W

Subsistemul de acţionare
Motoare: 2 x 150 W DC
Punte tip “H”: 2 x 10 A (DA 100%), cu limitare electronică
Siguranţe: F 15A

Camere video
Lentilă: 3.6 mm F 2.0 focus fix

2. Descrierea generală a sistemului Pagina 27 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Viteză shutter: 1/60 - 1/100,000


Iluminare minimă necesară: 0,5 Lux
Rezoluţie: 420 linii orizontale TV
Consum: 1,3 W

Dispozitiv rotire / înclinare


Alimentare: 5V, 12V
Consum: 5,2 W
Rotire: > 360 deg.
Înclinare: 180 deg.

WLAN
Viteză: 22 Mbps
Acoperire: 300 m câmp deschis
Antenă: 2 dBi

Calculator gazdă pe robot


Procesor: AMD K6-2 500 MHz
Memorie: 128 MB SDRAM
Sistem de operare: Windows 2000

2. Descrierea generală a sistemului Pagina 28 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

3 Sistemul de acţionare al robotului


3.1 Acţionarea unui motor de curent continuu

Pentru a antrena un motor de curent continuu este suficient să-l conectăm la o sursă de
tensiune. Astfel motorul începe o mişcare de rotire. Pentru a schimba sensul de rotaţie este
suficient să inversăm polaritatea.
Pentru a comanda un motor de către un microcontroler este necesar un element de
comutaţie care este capabil să pornească şi să întrerupă curentul ce trece prin motor.
În cele ce urmează prezentarea se face cu relee, ulterior acestea vor fi substituite cu
tranzistoare.

Figura 33 - Acţionarea unui motor de curent continuu

În prima figură este schema de conectare pentru acţionarea unui motor de curent continuu.
Dacă la intrarea A se aplică un nivel logic „1” (Obs. nivelul de tensiune trebuie să fie suficient
de mare pentru a putea acţiona releul) se va aclanşa releul, fapt ce va determina trecerea unui
curent prin spirele motorului, lucru care va duce la o mişcare de rotaţie a axului său.
Figura următoare arată posibilitatea de rotire a motorului în sens invers.

Figura 34 - Acţionare în sens invers

Similar cu cele discutatea anterior, dacă se aplică o tensiune logică la intrarea B motorul
va fi acţionat corespunzător.

3.1.1 Puntea tip “H” pentru acţionarea unui motor de curent continuu

Pentru a putea însă modifica direcţia de rotire a motorului şi în timpul funcţionării este
nevoie de o punte de tip „H“ ca în figura următoare.

3. Sistemul de acţionare Pagina 29 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 35 - Schemă bloc a unei punţi tip „H“


Pentru a roti motorul într-un sens este necesară închiderea a două relee. În următoarea
figură s-au închis releele A şi D iar B şi C au rămas deschise.

Figura 36 - Deschiderea unei părţi a punţii

Similar pentru a roti motorul în sens invers se comandă releele B şi C.

3. Sistemul de acţionare Pagina 30 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 37 - Deschidere inversă a punţii

Niciodată nu este permisă acţionarea simultană a releelor A şi C, respectiv B şi D. Dacă


acest caz apare, sursa de alimentare a circuitului este pusă la masă, lucru neacceptabil.

Pentru a controla mai bine comportamentul motorului, şi pentru a putea regla viteza în
locul releelor se folosesc tranzistori.
Astfel schema devine:

Figura 38 - Punte „H“ cu tranzistori

Pentru a proteja tranzistorii de tensiunea suplimentară generată de către motor în


momentul frânării circuitului mai trebuie adăugate nişte diode de protecţie.

3. Sistemul de acţionare Pagina 31 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 39 - Diode de protecţie

Tranzistorii, fiind circuite semiconductoare, au o rezistenţă internă. Crescând curentul ce


trece prin ei, va creşte şi cantitatea de căldură ce trebuie disipată.
Suplimentar la realizarea practică schema prezentată mai sus a fost îmbunătăţită prin
adăugarea mai multor componente. S-a adăugat o limitare de curent, realizată cu un shunt în
serie cu motorul. Căderea de tensiunea de pe acest shunt este comparată de un amplificator
operaţional cu o tensiune prestabilită.
Ca element de protecţie suplimentar s-au adăugat siguranţe de 15A pe alimentările
motoarelor, astfel dacă protecţia electronică de curent nu funcţionează se protejează sursa de
alimentare a montajului.
O schemă completă a punţii realizate se găseşte în Anexa 1 la pagina 100.

3.1.2 Tranzistorii MOS-FET

Spre deosebire de tranzistori bipolari, tranzistorii cu efect de câmp (MOS-FET) au o


rezistenţă internă scăzută, astfel permit trecerea unui curent mai mare, fără a se încălzi prea
tare.

Un tranzistor metal-oxid-semiconductor cu efect de câmp (MOSFET) este format dintr-o


suprapunere a mai multor straturi de metal, oxid şi un strat semiconductor. Cele mai recente
circuite folosesc însă o grilă din polisiliconi în locul celei metalice.

Figura 40 - Tranzistor MOS-FET

3. Sistemul de acţionare Pagina 32 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Există două tipuri de bază de tranzistori MOSFET. Tranzistori MOSFET cu canal P (P-
MOSFET sau PMOS) şi tranzistori cu canal N (N-MOSFET sau NMOS). În aplicaţii se mai
foloseşte şi aşa numitul CMOS (MOSFET complementar) care este de fapt o combinaţie a
celor doi. În momentul de faţă CMOS este elementul cel mai folosit în proiectarea VLSI,
deoarece consumă mult mai puţin faţă de alte tehnologii.

3.1.2.1 Tranzistorii P-MOS

Este un tranzistor cu canal indus de tip P. Prin acest canal circulă goluri ca purtătoare de
curent. Sursa şi drena, precum se poate observa din figura următoare, sunt fabricate din
material dopat P, iar grila este dintr-un strat de polisilicon ce se află deasupra stratului de
oxid.

Figura 41 - Tranzistor P-MOS

În figura din dreapta se observă stratul format din goöuri în imediata apropiere a stratului
de oxid al grilei în momentul aplicării unei tensiuni negative grilei. Dacă sursei i se aplică o
tensiune pozitivă va apărea o scurgere de goluri dinspre sursă spre drenă.

3.1.2.2 Tranzistorii N-MOS

Similar cu tranzistorii P-MOS cei N-MOS sunt formaţi din material dopat de tip N (la
sursă şi drenă) şi dintr-un strat de polisilicon deasupra stratului de oxid al grilei.

Figura 42 - Tranzistori N-MOS

3. Sistemul de acţionare Pagina 33 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

În figura din dreapta se observă canalul de electroni ce se formează în momentul aplicării


unei tensiuni pozitive asupra grilei. Dacă se aplică o tensiune drenei, va apare o scurgere de
electroni dinspre sursă înspre drenă.

3.1.3 Tranzistorul IRFZ44N

Este un tranzistor MOSFET de tip N. În tabelul următor sunt prezentate câteva din
caracteristicile acestuia.

Simbol Caracteristică Valoare Unitate


VDSS Tensiune sursă drenă maximă 60 V
ID Curent de drenă continuu (T=25°C) 50 A
Curent de drenă continuu (T=150°C) 35.4
IDM Curent de drenă pulsat 200 A
VGS Tensiune grilă-sursă ±20 V
PD Putere maximă disipată (T=25°C) 126 W
RθJC Rezistenţă termică joncţiune carcasă 1.19 °C/W
RθCS Rezistenţă termică carcasă radiator 0.5 °C/W
RθJA Rezistenţă termică joncţiune ambient 62.5 °C/W
RDS(on) Rezistenţă drenă sursă la o tensiune grilă sursă = 0.024 Ω
10V şi un curent ID=25A

În cele ce urmează vom face câteva clarificări legate de modelul folosit pentru a alege
tranzistorul şi pentru a determina cantitatea de energie disipată, precum şi calităţile
radiatorului.

Tranzistorul este ambalat într-o capsulă de tip TO-220AB, care permite un transfer de
aprox. 75A, astfel nu s-a ales un tranzistor cu ID > 70A (IRF1405 are un ID=169A, dar care
din cauza capsulei nu se poate atinge).

Din documentaţia tranzistorului preluăm şi temperatura maximă a joncţiunii


TJ=175°C, precum şi o relaţie între curent şi temperatura capsulei, dată de
RθJC=1.19°C/W(rezistenţa termică joncţiune-carcasă).
Astfel dacă tranzistorul este blocat, nu trece curent prin el, temperatura joncţiunii va fi
identică cu cea a capsulei. Dacă avem un curent de 10A diferenţa de temperatură va fi de
11.9°C.

Puterea disipată de către tranzistor este dată de formula lui Ohm:

P = I2R

R în această formulă este rezistenţa drenă sursă, RDS(on) = 0.024Ω.


Calculăm întăi puterea maximă ce poate fi disipată.

(175-25) = 1.19 * W

rezultă 126W, valoare ce corespunde şi cu modelul teoretic din documentaţie.

3. Sistemul de acţionare Pagina 34 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Pentru a calcula valoarea curentului ce poate trece prin tranzistor fără răcire
suplimentară folosim RθJA. La o temperatură a joncţiunii de 175°C şi o temperatură a
ambientului de 25°C (temperatura camerei) puterea disipată va fi:

P = 150 / RθJA
P = 2.4 W
dar
P = I2R,
rezultă curentul I = sqrt(P/R)
I = 10A

Datorită faptului că temperatura ambiantă poate creşte datorită anumitor factori,


refacem calculele pentru T = 40°C, şi astfel obţinem un curent I = 9.5A

Putem astfel, fără răcire să încărcăm tranzistorul pănă la 9.5A. Calculăm şi


temperatura capsulei:

TC=175°C – (2.4 W * 1.19 °C / W)


TC=172.14°C

Din acest motiv s-a ales utilizarea unui radiator de aproximativ 3W, pentru a nu pune
în pericol eventuale persoane ce ating din greşeală carcasa vreunui tranzistor. Al doilea motiv
este faptul că, deşi curentul de aproape 10A ar fi suficient pentru motorul ales, în cazul unei
probleme neprevăzute s-ar putea ajunge la un curent mai mare, lucru care ar duce cu siguranţă
la deteriorarea tranzistorilor.

3.1.4 Tranzistorul IRF4905

Este un tranzistor MOSFET de tip P. În tabelul următor sunt prezentate câteva din
caracteristicile acestuia.

Simbol Caracteristică Valoare Unitate


ID Curent de drenă continuu (T=25°C) 64 A
Curent de drenă continuu (T=150°C) 45
IDM Curent de drenă pulsat 260 A
VGS Tensiune grilă-sursă ±20 V
PD Putere maximă dispipată (T=25°C) 150 W
RθJC Rezistenţă termică joncţiune carcasă 1.0 °C/W
RθCS Rezistenţă termică carcasă radiator 0.5 °C/W
RθJA Rezistenţă termică joncţiune ambient 62 °C/W
RDS(on) Rezistenţă drenă sursă la o tensiune grilă sursă = 0.02 Ω
10V şi un curent ID=25A

3.2 Sistemul de măsurare a deplasării cu ajutorul unui encoder

Pentru a putea măsura distanţa parcursă, respectiv derivata acesteia viteza este necesar
un dispozitiv ce transformă mişcarea motorului şi a roţilor într-un semnal digital.

3. Sistemul de acţionare Pagina 35 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Un encoder este format, precum reiese şi din figura următoare, dintr-o sursă de lumină
(uzual un LED) ce luminează printr-un disc (care prezinte un număr binedefinit de fante) un
detector de lumină, care cu ajutorul unei circuistici generează un semnal digital (sau analogic)
ce este trimis la sistemul de comandă a acţionării.

Figura 43 - Detaliu constructiv a unui encoder

3.2.1 Tipuri de encodere

Dacă se foloseşte un encoder ca element de reacţie, de feedback, există o multitudine de


soluţii la care se poate apela. În cele ce urmează sunt prezentate pe scurt variantele utilizate în
momentul de faţă în soluţii industriale.

3.2.1.1 Encoder incremental (TTL)

Foarte multe modele de la diferiţi producători sunt în momentul actual de acest tip.
Prezintă o precizie foarte bună, cu până la 5000 de impulsuri pe rotaţie. Este foarte facilă
adăugarea de semnale speciale cum ar fi o referinţă de zero a motorului.

Figura 44 - Semnale de la un encoder incremental

3. Sistemul de acţionare Pagina 36 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 45 - Disc codor a unui encoder incremental

3.2.1.2 Encoder incremental cu semnale de comutaţie (TTL)

Foarte folosit în prezent mai ales în Statele Unite şi în Japonia. Din păcate nu
beneficiază de un standard industrial, lucru care nu sporeşte răspândirea acestei metode.
Configuraţiile de montare, tipurile de semnal şi tensiunile de alimentare diferă foarte mult.
Precizia este de până la 8000 de impulsuri per rotaţie. Acest tip de encoder este folosit la
motoare cu 2, 4, 6 sau 8 poli, şi din acest motiv alimentarea fazelor trebuie făcută intermitent
pentru a se obţine o rotaţie. Semnalele de comutaţie sunt folosite pentru a schimba
alimentarea fazelor. Cum reiese din figura următoare acestea determină momentul când o fază
trebuie alimentată şi când alimentarea trebuie întreruptă.

Figura 46 - Semnale ale unui encoder incemental cu semnale de comutaţie pentru un motor trifazic

3. Sistemul de acţionare Pagina 37 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 47 - Disc codor a unui encoder incremental cu semnale de comutaţie

3.2.1.3 Encoder incremental cu comutaţie (semnal sinusoidal)

Folosit mai ales în Europa, acest tip de encoder prezintă o ieşire sinusoidală cu o
amplitudine (vârf la vârf) de 1 volt.

3.2.1.4 Encoder absolut cu o singură tură (TTL / paralel)

Mai puţin folosit la aplicaţii de acţionare, de obicei sunt prezintă o rezoluţie de 10 sau
12 biţi. Există şi în variante cu rezoluţie mai bună, dar de obicei sunt folosite doar în aplicaţii
foarte specializate.

Figura 48 - Disc codor a unui encoder absolut (cod Grey)

3. Sistemul de acţionare Pagina 38 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 49 - Disc codor a unui encoder absolut (cod binar)

3.2.1.5 Encoder absolut multitură (incremental sinusoidal, serial absolut)

Acest tip de encoder este compus de obicei dintr-un encoder cu o singură tură cu 12 sau
13 biţi de precizie la care s-a adăugat un numărător de rotaţii pe 12 biţi, astfel ajungându-se la
24 sau 25 de biţi precizie. Cu toate că există de ceva vreme, nu au fost foarte folosiţi datorită
costului relativ ridicat. În ultima vreme însă, datorită cercetărilor avansate, preţul a început să
scadă şi folosirea lor în aplicaţii practice a început să ia amploare.
Encoderele de acest tip prezintă de obicei ieşiri incrementale de tip A, B şi impuls de
referinţă, o interfaţă serială pentru transferul poziţiei absolute (de obicei RS485 sau RS422) şi
ieşiri de comutaţie. Din LSB-ul poziţiei absolute se generează un semnal incremental cu 2048
sau 4096 impulsuri pe rotaţie pentru folosirea în sisteme rapide de reglaj de tip servo.

Menţionăm că în aplicaţii mai pretenţioase în locul encoderelor se folosesc rezolvere,


dar care, datorită faptului că depăşesc cadrul acestei lucrări, nu vor fi prezentaţi.

3.3 Sistemul de comandă a punţii

Pentru comanda punţii s-a ales o soluţie dedicată bazată pe un sistem cu microcontroler.
Sistemul este compus dintr-un microcontroler Phillips P89C51RC+, un generator de semnal
de reset de tipul TL7705, trei canale de numărătoare pe 24 de biţi descrise amănunţit în cele
ce urmează, un convertor analog-numeric de tipul ADS7822, trei ieşiri directe separate
galvanic, opt ieşiri cu încărcare într-un registrul paralel de tipul 74HC574 separate galvanic,
două intrări directe separate galvanic, opt intrări cu încărcare într-un registru paralel separate
galvanic, un conector şi circuistica necesară conectării unui afişaj cu cristale lichide şi un
circuit de tipul MAX232 pentru conversia semnalului serial din nivele de tensiune TTL în
nivele EIA.
Sistemul a fost conceput pentru a putea fi utilizat la comanda unui centru de prelucrare
cu comandă numerică, cu trei grade de libertate. Din acest motiv sistemul prezintă trei canale
de numărare cu o precizie pe 24 de biţi. Pe fiecare canal sunt preluate, prin intermediul unui
optocuplor de viteză mare, semnalele de la un encoder de tip incremental, acestea sunt
prelucrate pentru a se diferenţia direcţia de rotaţie şi apoi sunt conectate la numărătoare de
tipul 74HC193. Acestea sunt numărătoare pe 4 biţi cascadate câte 6 pe fiecare canal, pentru a
se asigura precizia de 24 de biţi.

3. Sistemul de acţionare Pagina 39 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Pe fiecare dintre canale informaţia din numărătoare trebuie încărcată în câte trei registre
pe 8 biţi, conectate la magistala de date. Aceste registre sunt accesate prin intermediul a două
circuite decodificatoare 74HC138 conectate la magistrala de adrese.
Circuitul ADS7822, un convertor analog numeric cu o precizie de 12 biţi, descris în
subcapitolul 3.3.4 la pagina 44, este folosit la citirea tensiunii bateriei şi astfel la determinarea
gradului de încărcare a acesteia.
Pe acest sistem rulează un program, codul sursă se găseşte în Anexa 7 – Codul sursă al
sistemului de comandă a punţii „H“ la pagina 113, care se comportă conform ordinogramei
următoare.
La pornire se vor configura porturile de intrare / ieşire, timerele, interfaţa serială cu
calculatorul gazdă, interfaţa serială cu convertorul analog numeric.
Timer 0 odată pornit va tot genera semnale de tip PWM cu condiţia ca sistemul de
acţionare să fie validat, pentru fiecare dintre gradele de libertate. Timer 1 va compara viteza
momentană cu cea prescrisă şi dacă constată o diferenţă între cele două va opera asupra
factorului de umplere pentru a compensa această diferenţă.
După ce configurările au fost efectuate sistemul aşteaptă comenzi de la calculatorul
gazdă.

#define GET_BUFF_LEN 0x01


#define START 0x02
#define STOP 0x03
#define OK 0x04
#define DOWNLOAD 0x05
#define BUFFER_OVERRUN 0x06
#define GET_COUNTER 0x07
#define GET_X_POS 0x08
#define GET_Y_POS 0x09
#define RESET 0x0A
#define SET_PWM 0x0B
#define SET_X_SPEED 0x0C
#define SET_Y_SPEED 0x0D
#define START_X 0x0E
#define START_Y 0x0F
#define STOP_X 0x10
#define STOP_Y 0x11
Secvenţă cod 1 - Comenzi acceptate de la calculatorul gazdă

3. Sistemul de acţionare Pagina 40 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

START
Lansare rutine timer
Iniţializare sistem descrise în 3.4.2

Configurare pini,
timere, port serial

da Comandă nu
validă?

Comandă da
acţionare?

Relativ la comanda unei anumite


nu axe, se operează modificarea de
viteză aferentă acesteia. Dacă
este cazul, se poate opri
acţionarea sau inversa sensul de
rotaţie.

Se furnizează
informaţiile necesare,
care pot fi: distanţa
parcursă, parametrii de
funcţionare, încărcarea
bateriei, etc.

Figura 50 - Ordinograma sistemului de comandă

3.3.1 Microcontrolerul P89C51RC+

Caracteristici P89C51RC+:
• compatibil cu familia MCS-51;
• 32 KB de memorie Flash reprogramabilă; anduranţă 1000 de cicluri scriere / ştergere;
• programabil ISP (“In System Programming”);
• operare total statică: 0 Hz la 33 MHz;
• 512 x 8 biţi memorie RAM internă;
• 4 porturi de intrare / ieşire pe 8 biţi;
• 3 registre timer / counter pe 16 biţi;

3. Sistemul de acţionare Pagina 41 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

• 7 surse de întrerupere;
• canal serial UART programabil;
• timer watchdog;
• comparator analogic on-chip;
• moduri de operare: cu consum redus şi suspend.

P89C51 RC+ este un microcontroler pe 8 biţi, în tehnologie CMOS avansată, cu 32 KB


de memorie Flash programabilă şi cu memorie RAM internă de 512 kB expandabilă extern
până la 64 kB.
Dispozitivul este construit utilizând tehnologia phillips de memorie nevolatilă de mare
densitate şi este compatibil cu setul de instrucţiuni al standardului industrial MCS-51.
Un boot loader (program de încărcare) programat în ROM permite programarea în
sistem a memoriei Flash. Utilizatorul poate şterge / reprograma memoria Flash cu ajutorul
rutinelor programate în ROM.

Figura 51 - Configuraţia pinilor – P89C51RC+

3.3.2 Circuitul numărător 74HC193

Circuitul 74HC193 este un dispozitiv de numărare realizat în tehnică high-speed


CMOS. Este circuit de numărare sincron, binar pe 4 biţi cu posibilitate de numărare
crescătoare şi descrescătoare. Prin intermediul semnalelor de clock diferite pentru cele două
moduri de numărare operarea acestui circuit este simplificată.
În tabelul următor sunt descrise câteva din caracteristicile principale.

Simbol Parametru Valoare Unitate de măsură


tPHL Timp propagare 20 Ns
fmax Frecvenţă maximă de 45 MHz
operare
CI Capacitate de intrare 3.5 pF

3. Sistemul de acţionare Pagina 42 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 52 - Configuraţia pinilor – 74HC193

Figura 53 - Diagrama logică – 74HC193

3.3.3 Circuitul supervizor de tensiune TL7705

Familia TL77xxA de circuite integrate de supervizat tensiuni sunt concepute pentru


folosirea în aplicaţii cu microcontrolere şi/sau microprocesoare. Circuitul asigură un semnal
de reset de o durată bine stabilită, în momentul în care tensiunea de alimentare trece de 3.6V.
Chiar şi în timpul funcţionării aplicaţiei în cazul în care apare o scădere de tensiune
momentană circuitul TL7705 va genera un nou semnal de reset pentru a asigura buna
funcţionare a aplicaţiei.

3. Sistemul de acţionare Pagina 43 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 54 - Configuraţia pinilor – TL7705


Durata semnalului de reset se setează cu ajutorul unei capacităţi externe în funcţie de
aplicaţia specifică după formula:
td = 1.3 x 104 x CT,
unde CT este valoarea în farazi a capacităţii externe.

Figura 55 - Diagrama funcţională – TL7705

3.3.4 Convertorul analog numeric ADS7822

Circuitul integrat ADS7822 este un convertor analog numeric cu o rată de eşantionare


ridicată, de 75 kHz. Dacă nu este folosit la aşa o frecvenţă de eşantionare ridicată, şi în cadrul
aplicaţiei curente sunt suficiente rate de eşantionare de ordinul Hertzilor şi chiar mai mici,
circuitul se va afla majoritatea timpului într-un mod de consum redus. La o frecvenţă de
7.5kHz puterea disipată este de doar 60µW, astfel că circuitul este ideal pentru aplicaţii
alimentate cu baterii.

Figura 56 - Configuraţia pinilor – ADS7822

Comunicaţia cu microcontrolerul se face printr-o interfaţă serială sincronă cu 3


semnale. Semnalul DCLOCK este folosit pentru sincronizare, DOUT este semnalul pe care

3. Sistemul de acţionare Pagina 44 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

circuitul furnizează rezultatul conversiei, iar CS/SHDN este linia prin care microcontrolerul
cere o conversie nouă.

Figura 57 - Diagrame de timp – comunicaţie serială cu ADS7822

3.4 Reglajul de viteză

Pentru a regla viteza motoarelor este nevoie de două componente descrise în cele ce
urmează. Prima componentă este cea decizională, cea care realizează autoreglajul efectiv.
Aceasta este o rutină software descrisă în 3.4.2. A doua componentă este cea executantă. Un
semnal rectangular de tip PWM generat de către microcontroler acţionează asupra punţii şi
implicit asupra vitezei de rotaţie a motorului.

3.4.1 Implementarea a două semnale PWM

În cele ce urmează este descris semnalul de tip PWM, împreună cu avantajele acestei
soluţii.
Pentru a controla un motor de curent continuu este nevoie de o sursă de alimentare
reglabilă. Totuşi, dacă se ia un motor de 12 V şi se alimentează, se observă că motorul
accelerează, până ajunge la viteza nominală: motoarele de curent continuu nu răspund
instantaneu. Dacă se opreşte alimentarea motorul va începe să decelereze. Dacă repetăm
aceste două operaţii destul de des, motorul se va învârti cu o anume viteză, viteză ce poate fi
variată între 0 şi viteza maximă.
Exact aceste operaţiuni le face şi un sistem de acţionare cu PWM. PWM este
alternativa la comanda analogică, prin tensiune. PWM, prescurtarea de la Pulse Width
Modulation, reprezintă un semnal rectangular cu factor de umplere variabil.
Tensiunea analogică rezultată este valoarea medie a tensiunii la ieşire. Astfel dacă
creştem factorul de umplere al semnalului rectangular, creştem valoarea medie a tensiunii şi
astfel creştem viteza de rotaţie a motorului de curent continuu.

3. Sistemul de acţionare Pagina 45 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 58 - Forma de undă a mărimii controlate cu factor de umplere de A. 95% B. 50% C. 5%

Totuşi nu este suficientă pornirea şi oprirea curentului către motor, acest lucru trebuie
făcut cu o anumită frecvenţă. Dacă frecvenţa este prea mică, motorul va funcţiona într-un
regim cu întreruperi, lucru ce va duce la încălzirea lui. El va genera căldură pe perioada
activă, dar şi o căldură datorită frânării pe durata în care semnalul rectangular prezintă
valoarea logică „0”. Datorită acestui lucru uzual frecvenţa de lucru este undeva între 1 şi 20
de kHz. Teoretic o valoare cât mai mare este avantajoasă, deoarece scade stresul motorului
(constanta de timp a motorului devine mult mai mare decât perioada, astfel încât motorul
„vede” o tensiune analogică la borne), scade consumul şi dispar efectele sonore, deoarece ne
îndepărtăm de domeniul auzului uman. Din păcate frecvenţa maximă este limitată de
elementele de comutaţie, tranzistoare MOS-FET în cazul nostru, astfel încât nu este indicat să
se treaca de 15 kHz. Peste această frecvenţă tranzistoarele nu au destul timp să se satureze
complet, şi lucrând într-un regim de conducţie nesaturat, se vor încălzi prea tare. Din acelaşi
motiv, va creşte şi consumul, dacă nu sunt saturate rezistenţa drenă sursă este mult mai mare.

Figura 59 - Exemplu de semnale PWM

3. Sistemul de acţionare Pagina 46 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Pentru a realiza practic semnalul PWM pe sistemul cu microcontroler P89C51RC+, s-


a folosit TIMER0. Acest timer este configurat să genereze o întrerupere de câte ori conţinutul
numărătorului ajunge la valoarea maximă şi se generează o depăşire. În cadrul rutinei apelate
la apariţia întreruperii conţinutul numărătorului trebuie reîncărcat. Reîncărcarea se face dintr-
o variabilă a cărei valoare este calculată în cadrul rutinei de reglare a vitezei, rutină descrisă în
capitolul următor.
Pentru a implementa fără dificultăţi prea mari două semnale de tip PWM, a fost nevoie
de nişte limitări. S-a stabilit ca cele două semnale să aibă aceeiaşi perioadă, doar factorul de
umplere să fie diferit în funcţie de necesitate.
Din acest punct de vedere în cadrul unei perioade s-au considerat 4 evenimente ce pot
apare. Primul eveniment este începutul perioadei, caz în care ambele semnale trebuie să
prezinte nivelul logic „0”. Următorul eveniment apare în momentul în care primul semnal
PWM devine activ. Din acest punct de vedere diferenţiem trei cazuri.

#define PWM_CASE_NONE 0
#define PWM_CASE_X_FIRST 1
#define PWM_CASE_Y_FIRST 2
#define PWM_CASE_EQUAL 3
Secvenţă cod 2 - Definiţii cazuri PWM

Cazul PWM_CASE_X_FIRST apare dacă semnalul PWM aferent canalului X va fi


cel care trece primul din inactiv în activ (adică prezintă un factor de umplere mai mare).
Similar cazul PWM_CASE_Y_FIRST se referă la cazul în care semnalul aferent canalului Y
prezintă un factor de umplere mai mare, cum reiese şi din figură. Ultimul caz
PWM_CASE_EQUAL defineşte cazul în care cele două semnale PWM sunt identice, prezintă
acelaşi factor de umplere.
În fragmentul de cod ce urmează se poate observa împărţirea perioadei în intervalele
de timp exemplificate mai sus.

void Timer0Int(void) interrupt 1 using 1{

switch (period) {
case 1 :
TL0=TL0_reload_1;
TH0=TH0_reload_1;
if (PWM_X_CHANNEL_ENABLED)
X_CHANNEL_OUTPUT=OFF;
if (PWM_Y_CHANNEL_ENABLED)
Y_CHANNEL_OUTPUT=OFF;
if (PWM_CASE==PWM_CASE_EQUAL) period++; //sarim
//peste 2 la urmatoarea executie
break;

case 2 :
TL0=TL0_reload_2;
TH0=TH0_reload_2;

switch (PWM_CASE) {
case PWM_CASE_X_FIRST:
if (PWM_X_CHANNEL_ENABLED)
X_CHANNEL_OUTPUT=ON;
if (PWM_Y_CHANNEL_ENABLED)
Y_CHANNEL_OUTPUT=OFF;
break;
case PWM_CASE_Y_FIRST:

3. Sistemul de acţionare Pagina 47 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

if (PWM_X_CHANNEL_ENABLED)
X_CHANNEL_OUTPUT=OFF;
if (PWM_Y_CHANNEL_ENABLED)
Y_CHANNEL_OUTPUT=ON;
break;
}
break;
case 3 :
TL0=TL0_reload_3;
TH0=TH0_reload_3;
if (PWM_X_CHANNEL_ENABLED)
X_CHANNEL_OUTPUT=ON;
if (PWM_Y_CHANNEL_ENABLED)
Y_CHANNEL_OUTPUT=ON;
period=0;
break;
}
period++;
}
Secvenţă cod 3 - Rutină timer 0 PWM

Se observă faptul că pentru fiecare dintre subintervalele perioadei există nişte variabile
din care se reîncarcă numărătorul aferent timerului 0. Aceste variabile TL0_reload_1,
TL0_reload_2, TL0_reload_3 respectiv TH0_reload_1, TH0_reload_2, TH0_reload_3 sunt
calculate în cadrul rutinei de reglaj automat al vitezei.

3.4.2 Bucla de reglaj automat al vitezei

Pentru a putea menţine şi regla viteza impusă de către utilizator este necesară
informaţia despre viteza actuală. Odată ce mişcarea de rotaţie a fost transformată conform
capitolului 3.2 într-un semnal rectangular de frecvenţă variabilă, frecvenţă direct
proporţională cu viteza, este destul de simplu de aflat viteza de deplasare pe fiecare din axele
robotului.

se reia procedura
Calcularea vitezei
momentane a axei

Se comandă o Se comandă o
scădere a factorului creştere a factorului
de umplere al mai mare Compararea mai mică de umplere al
semnalului PWM vitezei cu cea semnalului PWM
direct proporţională prescrisă direct proporţională
cu diferenţa între cu diferenţa între
viteza prescrisă şi viteza prescrisă şi
cea momentană cea momentană
egală

3. Sistemul de acţionare Pagina 48 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 60 - Ordinograma reglajului automat al vitezei


Semnalul rectangular este folosit ca intrare într-un circuit de numărătoare pe 24 de biţi.
Cu ajutorul acestor numărătoare se înregistrează deplasarea efectuată. Derivata acesteia în
raport cu timpul este viteza.
Pentru a simplifica calculele derivata s-a realizat cu ajutorul metodei diferenţelor
finite. În acest scop s-a folosit al doilea timer prezent în microcontrolerul sistemului de
acţionare a punţii. La momentul întreruperii generate de timer 1 se apelează rutina de reglaj
automat a vitezei. Prima acţiune care este realizată este determinarea vitezei actuale pentru
ambele axe ale robotului, precum reiese şi din secvenţa următoare de cod.

// get x speed
P10=0; //activate LdA
P10=1; //deactivate LdA
//se încarcă din numărătoare în reg. pe 8 biţi

tempA1=*buf4;
tempA2=*buf5;
x_pos=tempA2*256+tempA1;
//se încarcă valoarea din numărătoare

if (x_pos > old_x_pos)


x_speed_get=x_pos-old_x_pos;
else
x_speed_get=old_x_pos-x_pos;

old_x_pos=x_pos; //se calculează viteza


Secvenţă cod 4 - Calcularea vitezei X

După ce a fost calculată viteza momentană, aceasta este comparată cu viteza prescrisă.
Dacă se observă o abatere, pozitivă sau negativă, se intervine asupra semnalului PWM de
comandă a punţii ce acţionează motorul. Intervenţia constă în modificarea factorului de
umplere. Acest lucru nu se realizează static, ci dinamic, în sensul că la o diferenţă mare între
viteza prescrisă şi cea momentană corecţia aplicată este mai mare, astfel modificarea
factorului de umplere al semnalului PWM este direct proporţională cu diferenţa între cele
două viteze. Acest lucru reiese şi din secvenţa de cod ce urmează.

if (x_speed_get > x_speed_set)


// trebuie scăzută viteza
if (PWM_X_OFF > SPEED_PAS) {
PWM_X_ON+=SPEED_PAS;
PWM_X_OFF-=SPEED_PAS;
switch ((x_speed_set-x_speed_get)/10) {
default:
if (PWM_X_OFF > SPEED_PAS) {
PWM_X_ON+=SPEED_PAS;
PWM_X_OFF-=SPEED_PAS;
}
case 2:
if (PWM_X_OFF > SPEED_PAS) {
PWM_X_ON+=SPEED_PAS;
PWM_X_OFF-=SPEED_PAS;
}
case 1:
if (PWM_X_OFF > SPEED_PAS) {
PWM_X_ON+=SPEED_PAS;

3. Sistemul de acţionare Pagina 49 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

PWM_X_OFF-=SPEED_PAS;
}
case 0: break;
}
}
Secvenţă cod 5 - Reglaj dinamic al vitezei

Lucrurile stau la fel şi în cazul invers, în care viteza momentană este mai mică decât
cea prescrisă. Aceleaşi corecţii se vor face şi pentru cealaltă parte de acţionare a robotului.
După ce au fost calculate perioadele de timp aferente celor două semnale PWM,
trebuie compuse cele două semnale şi trebuie determinate cazul de PWM precum şi valoarea
înscrisă în variabilele TL0_reload_1, TL0_reload_2, TL0_reload_3 respectiv TH0_reload_1,
TH0_reload_2, TH0_reload_3 (vezi subcapitolul anterior).

if (PWM_X_ON < PWM_Y_ON) {

PWM_CASE = PWM_CASE_X_FIRST;
TL0_reload_1 = (uchar) ((MAX_INT-PWM_X_ON) & 0xFF);
TH0_reload_1 = (uchar) ((MAX_INT-PWM_X_ON) >> 8);

TL0_reload_2 = (uchar) ((MAX_INT-(PWM_Y_ON-PWM_X_ON)) & 0xFF);


TH0_reload_2 = (uchar) ((MAX_INT-(PWM_Y_ON-PWM_X_ON)) >> 8);

TL0_reload_3 = (uchar) ((MAX_INT-PWM_Y_OFF) & 0xFF);


TH0_reload_3 = (uchar) ((MAX_INT-PWM_Y_OFF) >> 8);
}
else if (PWM_Y_ON < PWM_X_ON) {

PWM_CASE = PWM_CASE_Y_FIRST;
TL0_reload_1 = (uchar) ((MAX_INT-PWM_Y_ON) & 0xFF);
TH0_reload_1 = (uchar) ((MAX_INT-PWM_Y_ON) >> 8);

TL0_reload_2 = (uchar) ((MAX_INT-(PWM_X_ON-PWM_Y_ON)) & 0xFF);


TH0_reload_2 = (uchar) ((MAX_INT-(PWM_X_ON-PWM_Y_ON)) >> 8);

TL0_reload_3 = (uchar) ((MAX_INT-PWM_X_OFF) & 0xFF);


TH0_reload_3 = (uchar) ((MAX_INT-PWM_X_OFF) >> 8);
}
else { //PWM_X_ON = PWM_Y_ON
PWM_CASE = PWM_CASE_EQUAL;
TL0_reload_1 = (uchar) ((MAX_INT-PWM_X_ON) & 0xFF);
TH0_reload_1 = (uchar) ((MAX_INT-PWM_X_ON) >> 8);

TL0_reload_3 = (uchar) ((MAX_INT-PWM_X_OFF) & 0xFF);


TH0_reload_3 = (uchar) ((MAX_INT-PWM_X_OFF) >> 8);
}
Secvenţă cod 6 - Calcul variabile PWM

Rutina de reglaj automat al vitezei este implementată ca rutină de întrerupere şi este


apelată de fiecare dată când timer 1 generează depăşire. În practică s-au obţinut rezultate
foarte bune cu perioade de reglaj de aproximativ 80-100 ms. Menţionăm că, cu cât se scade
această perioadă reglajul este mai rapid, dar la un moment dat se va observa un fenomen de
oscilare. Oscilarea poate fi redusă cu ajutorul unor filtre aplicate asupra mărimii vitezei
momentane. S-au încercat în practică diferite filtre median care însă nu au adus îmbunătăţiri
ale performanţei, care să justifice overhead-ul computaţional.

3. Sistemul de acţionare Pagina 50 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

4 Subsistemul de alimentare
4.1 Bateria plumb-acid

Acumulatorul, sau celula secundarã, ce poate fi reîncărcată inversând reacţia chimică, a


fost inventată în 1859 de către fizicianul francez Gaston Plante. Celula lui Plante era o baterie
plumb-acid, tip folosit pe scară largă astăzi. Bateria plumb-acid, care este alcătuită din trei sau
şase celule conectate în serie, e folosită la automobile, avioane şi alte vehicule. Marele avantaj
al său este că poate furniza un curent puternic pentru a porni un motor; totuşi, capacitatea sa
[Ah] este limitată. Electrolitul este o soluţie diluatã de acid sulfuric, electrodul negativ fiind
alcătuit din plumb şi cel pozitiv din dioxid de plumb. În timpul utilizării, electrodul negativ de
plumb se separă în electroni şi ioni pozitivi de plumb. Electronii trec prin circuitul electric
extern iar ionii pozitivi de plumb se combină cu ionii de sulfat din electrolit pentru a forma
sulfatul de plumb. Când electronii reintră în celulă la electrodul pozitiv, are loc o altă reacţie
chimică: dioxidul de plumb se combină cu ionii de hidrogen din electrolit pentru a forma apă,
eliberând ionii de plumb în electrolit pentru a forma, din nou, sulfatul de plumb.
Un acumulator plumb-acid se consumă atunci când acidul sulfuric e transformat
complet în apă iar electrozii - în sulfat de plumb. Când bateria se reîncarcă, reacţiile chimice
descrise anterior se desfăşoară invers, până când chimicalele au ajuns la starea lor originalã. O
baterie plumb-acid are o viaţă de aproximativ patru ani. Produce aproximativ 2V pe celulã.
Recent au fost construite - pentru aplicaţii speciale - baterii cu plumb cu o viaţă de la 50 până
la 70 de ani.
O altă baterie secundară des folosită este celula alcalină, sau bateria nichel-fier,
construită de inventatorul american Thomas Edison în anii 1900. Principiul funcţionării este
acelaşi cu cel al celulei plumb-acid exceptând faptul că electrodul negativ este alcătuit din
fier, cel pozitiv din oxid de nichel, iar electrolitul dintr-o soluţie de hidroxid de potasiu.
Celula nichel-fier are dezavantajul că elimină hidrogenul gazos la reîncărcare. Bateria Edison
are o viaţă de aproximativ 10 ani şi produce în jur de 1.15 V.
O altă celulă alcalină, similară cu bateria lui Edison, este celula nichel-cadmiu, în care
electrolitul de fier este înlocuit printr-unul de cadmiu. Are, de asemenea, aproximativ 1.15 V,
iar durata sa de folosinţă atinge aproximativ 25 de ani.
Un număr mare de noi tipuri de baterii au fost produse pentru folosinţă în vehicule
electrice. Versiuni îmbunătăţite ale acumulatorilor au fost produse pentru maşini electrice, dar
încă suferă de dezavantajul puterii scăzute, al preţului mare, al mărimii, sau al problemelor cu
mediul înconjurător.

4.2 Energia solară


4.2.1 Avantajele energiei solare

În climatul actual de creştere a cererii de energie şi a problemelor de protecţie a


mediului, trebuie investigate alternative la utilizarea combustibililor fosili. Una din aceste
alternative este energia solară.

4. Subsistemul de alimentare Pagina 51 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 61 - Aplicare a tehnologiei solare


Energia solară este destul de simplu de utilizat, direct de la soare şi colectată în mod
normal pe Pământ. Soarele creează energia printr-un proces termonuclear ce converteşte
650.000.000 tone de hidrogen în heliu în fiecare secundă. Procesul generează căldură şi
radiaţii electromagnetice. Căldura rămâne în soare, fiind vitală în menţinerea reacţiilor
termonucleare. Radiaţia electromagnetică (inclusiv lumina vizibilă, infra-roşie şi ultra-violetă)
este emanată în toate direcţiile în spaţiu.

Doar o mică fracţiune din radiaţia totală produsă atinge Pământul. Radiaţia ce atinge
suprafaţa terestră este indirect sursa a aproape fiecărei forme de energie utilizată în prezent.
Excepţiile sunt energia geotermală, fisiunea şi fuziunea nucleară. Chiar şi combustibilii fosili
îşi datorează originea soarelui; cu mult timp în urmă, aceştia erau plante şi animale vii care
depindeau de energia soarelui.

Figura 62 - Panou solar


Datorită naturii energiei solare, sunt necesare 2 componente pentru a obţine un generator
solar funcţional. Aceste 2 componente sunt colectorul şi o unitate de stocare. Colectorul
colectează radiaţia incidentă şi converteşte o fracţiune din ea în alte forme de energie
(electricitate sau doar căldură). Unitatea de stocare este necesară datorită naturii inconstante a
energiei solare, în anumite momente fiind posibilă receptarea doar a unei mici cantităţi de
radiaţii. În timpul nopţii sau în zile foarte înnorate de exemplu, cantitatea de energie produsă
de colector va fi infimă. Unitatea de stocare poate păstra energia suplimentară produsă în

4. Subsistemul de alimentare Pagina 52 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

timpul perioadelor de activitate maximă şi o poate elibera în perioade cu activitate scăzută a


panoului solar. În practică se mai adaugă şi o baterie de rezervă, pentru situaţiile în care
cantitatea de energie necesară este mai mare decât cantitatea de energie produsă şi cea din
unitatea de stocare. Metodele de colectare şi stocare a energiei solare variază în funcţie de
aplicaţiile în care este utilizată. În general, există 3 tipuri de colectori şi multe forme pentru
unităţile de stocare.

Cele trei tipuri de colectori sunt plani, cu focalizare şi pasivi.

Colectorii plani sunt cei mai răspândiţi. Sunt de fapt matrici de panouri solare pe o
suprafaţă dreaptă. Pot avea aproape orice dimensiune iar energia produsă depinde direct de
variabile precum dimensiune, orientare şi grad de curăţenie. Aceste variabile afectează
cantitatea de radiaţii incidente pe colector. De multe ori, aceste panouri colectoare dispun de
dispozitive automate de orientare spre soare. Energia suplimentară câştigată din repoziţionare
este cu mult mai mare decât energia necesară acţionării motoarelor pentru corectarea
orientării panourilor.

Figura 63 - Energia solară


Colectoarele cu focalizare sunt în esenţă colectoare plane cu dispozitive optice aranjate
pentru a maximiza cantitatea de radiaţie incidentă pe colector. În prezent sunt utilizate la scară
redusă în câteva locaţii. Cuptoarele solare sunt un exemplu pentru acest tip de colector. Deşi
pot produce mai mari cantităţi de energie într-un singur loc, ele pierd o parte din energie pe
care panourile plane nu o pierd. Radiaţia reflectată de sol este de obicei captată de
colectoarele plane dar ignorată de cele cu focalizare (în regiunile înzăpezite, această energie
reflectată poate fi prezentă în cantitate foarte mare). O altă problemă a colectoarelor cu
focalizare este temperatura. Fragilele componente de siliciu ce absorb radiaţia incidentă îşi
pierd eficienţa la temperaturi înalte, putând fi iremediabil deteriorate dacă se supraîncălzesc.
Colectoarele cu focalizare, prin însăşi natura lor, pot crea temperaturi foarte înalte şi necesită
protecţii pentru componentele de siliciu.
Colectoarele pasive sunt complet diferite de celelalte 2 tipuri de colectoare. Colectoarele
pasive absorb radiaţia şi o convertesc în căldură în mod natural, fără a fi special concepute în
acest scop. Toate obiectele au proprietatea, până la un anumit nivel, dar doar anumite obiecte
(ex. pereţi) vor putea produce suficientă căldură pentru ca procesul să fie economic. De multe
ori, capacitatea lor naturală de a converti radiaţia în căldură, este cumva amplificată (prin
vopsire cu culoare neagră de ex.) şi se adaugă un sistem pentru transferul căldurii spre o altă
locaţie.

4. Subsistemul de alimentare Pagina 53 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 64 - Procese în cadrul materialului


Oamenii utilizează energia în diverse scopuri, însă doar câteva sunt mari consumatoare:
transport, încălzire, răcire şi generarea de electricitate. Energia solară poate fi aplicată în toate
aceste domenii, cu diferite nivele de succes.

Celulele fotovoltaice convertesc radiaţia în electricitate, dar operează cu o eficienţă de


doar 15%. Eficienţa teoretică maximă a unei celule fotovoltaice este de 32,3%, dar la această
eficienţă, electricitate solară este foarte economică. Majoritatea celorlalte forme de generare a
electricităţii au o eficienţă mai scăzută. Din păcate, realitatea se află în urma teoriei, aşa că
15% nu este considerată o eficienţă economică de majoritatea companiilor de electricitate,
chiar dacă este utilizată la jucării şi calculatoare de buzunar. De curând, în laboratoare de
cercetare s-a creat o celulă fotovoltaică cu o eficienţă de 28,2%. Este în prezent în curs de
testare. Dacă îşi va menţine eficienţa în medii exterioare necontrolate de om şi dacă este
durabilă, companiile de electricitate vor putea opta pentru această formă de energie.

4.2.2 Energia de dislocare

Când fotoni proveniţi din lumină se lovesc de celula solară, doar fotonii cu un anumit
nivel de energie pot elibera electroni din legăturile atomice şi genera astfel un curent electric.
Acest nivel de energie, cunoscut sub numele de energie de dislocare, se defineşte ca fiind
cantitatea de energie necesară eliberării electronului din legătura covalentă şi introducerea sa
într-un circuit electric.
Energia de care dispun fotonii se numeşte „energia fotonului”. Această energie trebuie să
fie cel puţin la fel de mare ca şi energia de dislocare, pentru ca un foton să poată elibera un
electron. Însă fotoni cu o energie mai mare vor emana restul de energie sub formă de căldură
în momentul eliberării electronilor. Din acest motiv este important ca o celulă fotovoltaică să
fie „reglată” (prin modificări minore în structura moleculară a semiconductorului) pentru a
maximiza energia fotonilor. În final, cheia spre o celulă fotovoltaică eficientă este convertirea
unei cantităţi cât mai mari de energie solară în energie electrică.

Semiconductori fotovoltaici eficienţi au valori ale energiei de dislocare cuprinse în


intervalul 1.0 – 1.6 electron-Volţi (eV). (Un electron-Volt este echivalent cu energia
acumulată de un electron în momentul în care trece printr-un potenţial de 1V în vid). Aceste
valori sunt utilizabile pentru că eliberează electroni fără a genera căldură suplimentară. De ex.
energia de dislocare a siliconului cristalizat este 1.1 eV.

4. Subsistemul de alimentare Pagina 54 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 65 - Energia absorbată de diferite materiale


Energia fotonilor, măsurată tot în eV, variază conform diferitelor lungimi de undă din
spectrul luminos. Întregul spectru, de la infraroşu la ultraviolet, acoperă un domeniu de la
aprox. 0.5 eV până la 2.9 eV. De ex., lumina roşie are o energie de aprox. 1.7 eV, lumina
albastră aprox. 2,7 eV. Aprox. 55% din energia luminii nu poate fi utilizată de majoritatea
celulelor fotovoltaice pentru că această energie este fie mai mică decât energia de dislocare,
fie generează prea multă căldură.

Diferite materiale fotovoltaice au diferite energii de dislocare caracteristice. Fotonii cu o


energie mai mare decât cea de dislocare pot fi absorbiţi pentru a crea electroni liberi. Fotoni
cu energie mai mică decât cea de dislocare fie trec prin material, fie generează căldură.

4.2.3 Conversia luminii în electricitate


4.2.3.1 De la celulă la matrice de celule

Celula fotovoltaică este unitatea de bază într-un sistem fotovoltaic. O celulă


individuală produce în general între 1 şi 2 W, cu mult prea puţină putere pentru majoritatea
aplicaţiilor. Dar putem mări puterea, conectând mai multe celule împreună, formând entităţi
mai mari numite module. Modulele, la rândul lor, pot fi conectate pentru a forma unităţi mai
mari numite matrici, ce pot fi interconectate pentru a genera mai multă putere, ş.a.m.d. În
acest fel, putem construi un sistem fotovoltaic pentru a genera orice cantitate de energie
dorită, indiferent cât de mic sau mare.

Figura 66 - Celulă, modul, matrice


Module sau matrici individuale nu constituie un sistem fotovoltaic. Mai trebuie să
dispunem şi de structuri pe care să le montăm şi îndrepta spre soare precum şi componente ce
preiau curentul continuu (DC) produs de module şi matrici pentru a-l utiliza în aplicaţii
specifice.

4. Subsistemul de alimentare Pagina 55 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

4.2.3.2 De la celulă la matrice de celule : o imagine mai detaliată

Figura 67 - Celula solară


Celula solară este blocul de bază al unui sistem fotovoltaic. Celule individuale pot varia ca şi
dimensiuni de la cca. 1 cm la 10 cm în diametru. O celulă produce însă doar 1-2 W, putere
insuficientă pentru majoritatea aplicaţiilor.

Un modul constă în general din mai multe celule solare, deşi materiale foarte subţiri precum
silicon amorf şi aliaj de cadmiu cu telur pot fi concepute direct în formă modulară, evitând
stadiul de celule. Aceste două module siliconice produc aprox. 50W fiecare, generând
suficientă putere pentru iluminarea stradală utilizând o baterie de 12V. Acest tip de module
pot fi conectate şi în formă matricială.

Matricile sunt marile producătoare de putere, fiind compuse din multiple module. Ele pot
produce până la câţiva megawaţi de putere.

4. Subsistemul de alimentare Pagina 56 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

4.2.3.3 Lumina şi soarele

Figura 68 - Pământul
Energia solară este vitală pentru viaţa pe Pământ. Ea determină temperatura de la
suprafaţa pământului, asigurând energia necesară pentru a pune în mişcare ecosistemul global.
Deşi alte stele reprezintă surse imense de energie sub forma razelor X şi semnale radio,
soarele nostru emană majoritatea energiei sale sub forma luminii. Totuşi, lumina reprezintă
doar o fracţiune din totalul spectrului radiant; razele ultraviolete şi infraroşii sunt şi ele o parte
semnificativă a spectrului solar.

Soarele emite aproape întreaga sa energie radiantă în spectrul lungimilor de undă ce


variază de la 2x10-7 la 4x10-6. Majoritatea acestei energii se află în zona vizibilă. Fiecare
lungime de undă corespunde unei frecvenţe şi unei energii; cu cât lungimea de undă este mai
mică, cu atât frecvenţa e mai înaltă şi energia mai mare (exprimată în eV).

Figura 69 - Spectrul radiaţiei solare


Fiecare porţiune a spectrului solar este asociată unui alt nivel de energie. În porţiunea
vizibilă a spectrului, de exemplu, lumina roşie se află la capătul cu energie redusă iar lumina
violetă la cel cu energie ridicată. În zonele invizibile ale spectrului, fotonii zonei ultraviolete,
ce cauzează bronzarea pielii, au mai multă energie decât cei din zona vizibilă. Analog, fotonii
din zona infraroşie, pe care îi simţim sub formă de căldură, au mai puţină energie decât fotonii
din zona vizibilă.

4. Subsistemul de alimentare Pagina 57 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

4.2.3.4 Lumina şi soarele : pe Pământ

Deplasarea luminii de la o poziţie la alta poate fi cel mai simplu descrisă cercetând
comportamentul unei unde, diferitele tipuri de radiaţii având lungimi de undă diferite (o
lungime de undă este distanţa de la vârful unei unde până la vârful următoarei unde). Aceste
lungimi de undă indică iradierea cu diferite cantităţi de energie, cu cât lungimea de undă fiind
mai mare, cu atât energia este mai mică. Lumina roşie are o lungime de undă mai mare şi
energia mai mică decât lumina violetă.

Figura 70 - Secţiune prin celula fotovoltaică


În fiecare secundă, soarele eliberează în sistemul solar o cantitate imensă de energie
radiantă. Pământul primeşte o fracţiune infimă din această energie, cu toate acestea, o
cantitate medie de 1367 W / m2 din suprafaţa exterioară a atmosferei Pământului. Atmosfera
absoarbe şi reflectă o parte din această radiaţie, inclusiv majoritatea razelor X şi ultraviolete.
Cu toate acestea, cantitatea de energie ce atinge efectiv suprafaţa Pământului în fiecare minut
este mai mare decât întreaga cantitate de energie consumată de populaţia Pământului într-un
an!
Atmosfera Pământului şi norii absorb, reflectă şi împrăştie o parte din energia solară ce
pătrunde prin atmosferă. Cu toate acestea, cantităţi enorme de energie solară directă sau
difuză ating suprafaţa Pământului, putând fi utilizate în scopul producerii electricităţii
fotovoltaice.

4.2.4 Principiul de funcţionare: Tip P, Tip N şi câmpul electric

Pentru a induce un câmp electric într-o celulă fotovoltaică, sunt necesare 2 tipuri de
semiconductori separaţi, lipiţi împreună. Semiconductorii de tip „p” şi „n” corespund
denumirilor „pozitiv” şi „negativ” datorită abundenţei de goluri şi respectiv electroni
(cantitatea de electroni suplimentari formează un semiconductor de tip „n”, deoarece
electronii sunt încărcaţi negativ).

4. Subsistemul de alimentare Pagina 58 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 71 - Procesul de fabricaţie al siliciului


Cu toate că ambele materiale sunt neutre din punct de vedere electric, siliciul tip „n”
conţine electroni în exces iar cel de tip „p” conţine goluri în exces. Lipirea ambelor tipuri
creează o joncţiune tip p/n pe suprafaţa de contact a semiconductorilor, creând astfel un câmp
electric.

Figura 72 - Procesul de fabricaţie al siliciului


Când semiconductorii de tip „p” şi „n” sunt lipiţi, excesul de electroni din materialul
„n” se scurg spre semiconductorul tip „p” iar golurile spre „n”. (Conceptul de gol ce se
deplasează poate fi imaginat sub forma unei bule de aer ce se deplasează printr-un lichid. De
fapt se deplasează lichidul, fiind mai uşor de descris modul în care bula se deplasează în
direcţia opusă). Prin acest flux de electroni şi goluri, cei doi semiconductori funcţionează ca o
baterie, creând un câmp electric în zona joncţiunii. Acest câmp cauzează saltul electronilor
din interiorul semiconductorului spre suprafaţa acestuia, devenind disponibili pentru un
circuit electric. În acelaşi timp, golurile se deplasează în direcţia opusă, spre suprafaţa
pozitivă, unde aşteaptă trecerea electronilor.

4. Subsistemul de alimentare Pagina 59 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

4.2.5 Materialele celulei solare


4.2.5.1 Siliciul

Siliciul este încă cel mai popular material utilizat la celulele solare în aplicaţiile
comerciale datorită faptului că este atât de răspândit (este pe locul doi în lume ca şi abundenţă
în crusta terestră, depăşit doar de oxigen!). Pentru a putea fi utilizat în celule solare, trebuie
rafinat la o puritate de 99,9999%.

Într-un siliciu mono-cristalin, structura moleculară a materialului este uniformă datorită


faptului că întreaga structură s-a dezvoltat din aceeaşi structură cristalină de bază. Această
uniformitate este ideală pentru transferul ideal al electronilor prin material. Pentru a crea o
celulă fotovoltaică eficientă, siliciul este „dopat”, devenind de tipul „n” sau „p”. Siliciul semi-
cristalin, pe de altă parte, este format din mai multe cristale mici, existând mai multe suprafeţe
„limită”. Aceste limite împiedică fluxul de electroni şi îi încurajează să se recombine cu
golurile, reducând astfel puterea emisă de celulă. Cu toate acestea, siliciul semi-cristalin este
mult mai ieftin de produs decât cel mono-cristalin, astfel că cercetătorii lucrează în prezent la
alte posibilităţi de a minimiza efectele zonelor limită.

4.2.5.2 Siliciul: diferite structuri

Figura 73 - Aranjarea cristalelor de siliciu


Materialul de siliciu mono-cristalin are o structură uniformă; nu există perturbaţii în aranjarea
atomică. Materialul semi-cristalin este compus din mai multe cristale. La limitele suprafeţelor
dintre structuri, ordinea atomilor este întreruptă. Aici electronii se pot recombina mai uşor cu
golurile, nemaiajungând în circuitul electric.

Chiar şi mici cristale de siliciu pot forma celule solare, efectuându-se cercetări în domeniul
siliciului policristalin, în speranţa obţinerii unor celule mai economice. Materialul policristalin
conţine multiple cristale individuale cam de grosimea unui păr uman, sau aproximativ 1/1000
din grosimea materialului semi-cristalin.

4. Subsistemul de alimentare Pagina 60 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

4.2.6 Utilizare

Figura 74 - Exemple de aplicare a tehnologiei solare


Dintre principalele utilizări ale energiei, cea mai puţin indicată este transportul. Pentru că sunt
mari, vehicule relativ încete precum vapoarele s-ar putea alimenta cu ajutorul unor panouri
solare de mari dimensiuni, pe când vehicule mici, rapide, n-ar putea. Singura modalitate de a
alimenta o maşină strict cu energie solară ar fi prin utilizarea unei baterii încărcată de o staţie
solară staţionară. Maşinile electrice alimentate parţial cu energie solară sunt deja disponibile,
dar este puţin probabil că energia solară va reprezenta viitoarea sursă de energie pentru
transportul persoanelor.

Figura 75 - Exemple de aplicare a tehnologiei solare


Energia solară are mari avantaje faţă de combustibilii fosili: primul avantaj este faptul că e
reînnoibilă şi nu va dispărea atât de curând. Al doilea este efectul său asupra mediului
înconjurător.
În timp ce arderea combustibililor fosili generează o poluare masivă a atmosferei şi contribuie
la probleme ecologice precum încălzirea globală şi ploile acide, energia solară este complet
nepoluantă. Pentru a alimenta o fabrică de electricitate cu combustibilul dorit, sunt uneori
4. Subsistemul de alimentare Pagina 61 din 151
Sistem robotizat mobil teleoperat Alexandru JONI

necesare defrişări pe mari suprafeţe, singura bucată de pământ ce trebuie distrusă pentru a
produce energia solară este suprafaţa pe care sunt montate panourile.

Dintre toate resursele de energie disponibile, cea solară este probabil cea mai promiţătoare.
Din punct de vedere numeric, este capabilă să producă cantitatea de energie necesară întregii
planete. Din punct de vedere ecologic, este non-distructivă. Practic, poate fi adaptată pentru
alimentarea unor diverşi consumatori, cu excepţia transporturilor, şi poate chiar şi în
transporturi, prin modificări ale modului curent de deplasare. În mod clar, energia solară este
resursa viitorului.

4.3 Convertizorul 12V DC – 220V AC

Pentru a putea folosi în cadrul acestei aplicaţii ca element principal de alimentare o


baterie de 12 V, era necesară o soluţie pentru adaptarea tensiunii consumatorilor din cadrul
sistemului. Atâta vreme cât tensiunea nominală a consumatorilor este mai mică decăt
tensiunea bateriei, rezolvarea este relativ simplă. Cu ajutorul unor divizoare de tensiune, sau
cu ajutorul unor regulatoare de tensiune tensiunea nominală este redusă. Acest lucru
presupune însă şi pierderi, care se vor manifesta prin degajare de căldură.
Problema mai mare este obţinerea unor tensiuni superioare aceleia a bateriei. Acest
lucru se poate realiza cu ajutorul unor convertoare DC-DC (relativ scumpe), cu ajutorul
comutării unei baterii suplimentare în serie, sau cu ajutorul unui invertor.
Datorită faptului că o placă de bază de generaţia actuală necesită diferite tensiuni de
alimentare, împreună cu exigenţe destulde mari asupra stabilităţii acestor tensiuni, s-a ales
folosirea unei surse de alimentare standard de PC. Pentru a putea folosi o astfel de sursă de
alimentare este însă necesară generarea unui curent alternativ, cu o frecvenţă de 50 de Hz şi o
tensiune de 220V, similară cu cea prezentă în cadru sistemului casnic electric.
Acest lucru este realizat cu ajutorul unui invertor. Acesta este un dispozitiv ce chopează
(cu ajutorul unor tranzistori de putere) tensiunea de la intrare, realizând astfel un semnal
sinusoidal, cvasi-sinusoidal, sau rectangular. Acest semnal este amplificat cu ajutorul unui
transformator ridicător şi este furnizat consumatorului.

Figura 76 - Ieşiri a diferitor tipuri de invertoare (semnal sinusoidal, cvasi-sinusoidal şi rectangular)

4. Subsistemul de alimentare Pagina 62 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Convertizorul ales preia însă şi conectarea panoului fotovoltaic la sistemul de


alimentare. Astfel, dacă energia oferită de către panoul solar nu este necesară, aceasta este
folosită la reîncărcarea bateriei principale.

Figura 77 - Convertizor sinusoidal 12V DC - 220 V AC

4. Subsistemul de alimentare Pagina 63 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

5 Subsistemul de comunicaţii
5.1 Reţeaua wireless WLAN (Wi-Fi)

Wireless LAN (WLAN) este un sistem de comunicaţii de date implementat ca extensie


sau alternativă pentru un LAN cablat, într-o clădire sau campus, combinând conectivitatea la
viteză mare cu mobilitatea utilizatorilor, într-o configuraţie mult simplificată.

Figura 78 - Reţea wireless cu conexiune simplă punct la punct

5.1.1 Prezentare generală WLAN

Avantaje evidente, cum ar fi: mobilitate, flexibilitate, simplitate în instalare, costuri


reduse de întreţinere şi scalabilitate au impus WLAN ca o soluţie tot mai mult utilizată,
estimările arătând o piaţă de peste un miliard dolari numai în Statele Unite.
Majoritatea sistemelor WLAN utilizează tehnologia DSSS (Direct Sequence Spread
Spectrum), tehnologie dezvoltată în laboratoarele militare pentru operarea în sisteme critice,
fiabile şi sigure. DSSS s-a impus definitiv în faţa alternativelor reprezentate de FHSS
(Frequency Hoping Spread Spectrum) sau IR (infraroşu) prin rate mai mari de acces şi
utilizare eficientă a spectrului.
Principalii producători, printre care Lucent Tehnologies, 3Com, Cisco, Intersil şi
Nokia, s-au reunit în WECA (Wireless Ethernet Compatibility Alliance) şi au definitivat în
1997, standardul IEEE 802.11 pentru WLAN, standardizare ce a reprezentat un important pas
în dezvoltările ulterioare ale tehnologiei. În septembrie 1999, a fost adoptat standardul IEEE
High Rate, ce furnizează rate mult mai mari de transfer, menţinând protocolul 802.11. Printre
facilităţile oferite de acest standard se numără: roaming între celule, power management,
WEP (Wired Equivalent Privacy, cu cheie de criptare pe 64 sau 128 biţi) şi interoperabilitate.
Performanţele atinse de WLAN în ultima vreme au impus tehnologia wireless ca
alternativă serioasă şi au modificat conceptul clasic de LAN. Spre exemplu, PC cardul
Orinoco Turbo 11Mb de la Lucent (urmaşul lui WaveLAN) a fost primul pe piaţă cu o rată de
transfer de 11Mbps, la distanţe până la 550 m. Acelaşi card, intergrat în sistemele outdoor, cu

5. Subsistemul de comunicaţii Pagina 64 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

antene de până la 24 dB câştig, poate inteconecta două LAN-uri clasice pe distanţe până la opt
km. Prin implementarea unui protocol CSMA/CA şi prin mecanisme RTS/CTS (request-to-
send/clear-to-send) se obţin rate de transfer mai mari decât în cazul reţelelor clasice.

Figura 79 - Reţea wireless cu conexiuni multi-punct cu securitate

Calculatoarele ce posedă o antenă şi o cartelă WLAN pot accesa Internetul pe o rază de


sute de metri de la emiţător. În interiorul clădirilor, aria de acoperire este de circa 300 de
metri, iar în exterior de circa doi km (dacă nu există bariere fizice, cum ar fi clădirile,
denivelările de teren, copacii sau ploaia).

5.1.2 Ce este tehnologia wireless?

Produsele wireless, de la maşini cu telecomandă la telefoane celulare, folosesc o formă


de energie cunoscută ca o radiaţie electromagnetică care transportă semnale. Semnalele pot fi
modele de vibraţii pe care urechea umană le recunoaşte ca fiind sunete. Ele mai pot fi şi
schimbări bruşte de frecvenţă sau intensitate utilizate pentru a coda semnale de date. Oricare
din aceste forme ar fi, radiaţia electromagnetică le transportă prin spaţiul liber. Vom descrie în
primul rând cele mai comune patru forme de tehnologii wireless: prin satelit, prin microunde,
prin infraroşu, şi comunicaţiile radio.

5. Subsistemul de comunicaţii Pagina 65 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

5.1.2.1 Comunicaţiile prin satelit

În mod normal, comunicaţiile prin satelit nu sunt disponibile entităţilor mici pentru
conexiuni de reţea. Preţul de cumpărare al unui transponder este secret. Cu toate acestea, o
excepţie viabilă este utilizarea sateliţilor pentru conectarea utilizatorilor la reţeaua Internet.
Mai multe companii oferă acces Internet la viteză mare pentru clienţi particulari şi pentru
agenţi economici prin instalarea unor antene parabolice mici.
În timp ce acest tip de conectivitate oferă o viteză de download de peste 400Kbps, el
este un mediu strict unidirecţional. Pentru a beneficia de aceste servicii, utilizatorii trebuie să
menţină o conexiune fizică ( de viteză mică ) la reţeaua Internet. În acest scenariu, cererile
sunt transmise la site-urile web prin conexiunea fizică şi sunt recepţionate prin conexiunea
prin satelit.
Pe de altă parte sunt explorate noi tehnologii satelit. Un nou satelit este acela numit
Low-Earth-orbiting(LEO). Cu sute de astfel de sateliţi disponibili în următorii câţiva ani,
costul capacităţii de transmitere/recepţionare prin tehnologie satelit ar putea scădea. Proiecte
cum ar fi Iridium şi Teledesic sunt deja în plină dezvoltare. Iridium este folosit ca o
alternativă la serviciul de telefonie wireless. Teledesic, cu porecla “Internet pe cer”, este setat
să ofere servicii Internet wireless pentru firme, şcoli şi utilizatori. Spectrul electromagnetic
complet include mai multe tipuri de lungimi de undă cu care am devenit familiari, cel puţin cu
numele lor. Primul din acestea este lumina vizibilă. Alte două tipuri de lungimi de undă,
situate chiar la de un capăt şi de altul al spectrului vizibil, sunt lumina infraroşie şi
ultravioletă. Acestea sunt lungimile de undă care ne oferă tehnologia de vizibilitate noaptea. O
altă porţiune a spectrului electromagnetic cu care vom deveni familiari sunt frecvenţele
numite microunde. Acestea există sub frecvenţele infraroşu, dar peste frecvenţele radio
normale. Multe servicii de comunicaţii de date oferite de marile companii de telecomunicaţii
sunt suportate de tehnologiile de microunde. Deşi este o alternativă viabilă chiar şi în
comunicaţiile private, are două dezavantaje. În primul rând comunicaţiile prin microunde
necesită o licenţă. În al doilea rând preţul de implementare a unei tehnologii cu microunde (
infrastructură de tip turn/farfurie ) este mai mare decât cel al celorlalte opţiuni.
Pe de altă parte, comunicaţiile prin microunde sunt foarte rezistente la interferenţe.

5.1.2.2 Comunicaţiile prin infraroşu

Tehnologiile de calcul care utilizează spectrul infraroşu devin din ce în ce mai comune.
De exemplu, tastaturile wireless şi receptorii sunt distribuite cu calculatoare care servesc ca
bază pentru sisteme de distracţie pentru acasă. Un transmiţător infraroşu operează la o
anumită frecvenţă ( fiecare producător de tastatură wireless utilizează o frecvenţă diferită )
traduce codul tastei apăsate într-un semnal infraroşu pe care îl transmite către receptor. De
asemenea, unele calculatoare sunt dotate în ziua de azi cu port infraroşu care permite ca
informaţia de la un PC de „buzunar” să fie transmise la PC-ul desktop.
Există şi bridge-uri de reţea / router-e care utilizează frecvenţele infraroşu pentru a
transmite date. Ca şi tehnologia cu microunde, cea cu infraroşu oferă o conectivitate de viteză
mare. Dar soluţiile de comunica prin infraroşu sunt cam scumpe de implementat.
În majoritatea cazurilor de infrastructură, echipamentele radio şi infraroşu oferă cele
mai eficiente forme de comunicaţii wireless.

5. Subsistemul de comunicaţii Pagina 66 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 80 - Comunicaţii prin infraroşu

5.1.2.3 Domeniile de utilizare a frecvenţelor radio

Chiar dacă fraza “reţea wireless prin radio frecvenţă” poate părea misterioasă, această
tehnologie este foarte comună. Ea utilizează unde radio, aceaşi sursă de energie utilizată în
transmisia radio şi TV. Radiourile cu 2 canale şi walkie-talkie-urile utilizează de asemenea
această tehnologie. Programul spaţial utilizează undele radio pentru a controla calculatoarele
de la bordul capsulelor spaţiale şi probelor, şi recepţionează semnale de la alte dispozitive.

Vă mai amintiţi transmisiile video de pe suprafaţa lunii? Fotografiile color ale suprafeţei
lui Marte? Toate acestea au fost transformate în unde radio şi transmise către Pământ utilizând
tehnologia radio. Dacă ne gândim la radiouri şi televizoare, putem să identificăm unele din
componentele care fac ca reţeaua wireless cu radio frecvenţă să funcţioneze: un transmiţător
radio, un receptor radio, un cablu de la antenă la transmiţător sau receptor. Se adaugă şi două
componente pentru a proteja echipamentele – cum ar fi protecţie împotriva fulgerelor şi filtre
de zgomot – şi astfel am alcătuit o listă cu necesarul de dispozitive.

5.1.2.4 Undele radio

Când undele radio sunt descrise ca o tehnologie utilizată pentru transmiterea


programelor radio şi TV, unii oameni presupun că undele radio seamănă un pic cu undele
sonore. Un sunet se produce atunci când ceva face ca aerul să vibreze. Această vibraţie este
transferată câtre urechea internă când soseşte unda de sunet. Atunci vibraţia este transformată
într-un semnal şi transmisă creierului nostru., unde percepem sunetul. Undele radio nu
seamănă chiar deloc cu undele sonore. Ele nu creează vibraţii în ureche. Undele radio nu se
bazează pe vibraţiile din aer, de fapt, ele nu au nevoie de aer pentru transmisie. În loc de a fi o
vibraţie, ele sunt o formă de energie.
Ele sunt parte a ceea ce se numeşte spectrul electromagnetic. Acest spectru de energie
include întreaga gamă de radiaţii create de interacţiunea electronilor şi câmpurilor magnetice.
Aceste tipuri de radiaţii include unde radio, microunde, lumina infraroşie, lumina vizibilă,
lumina ultravioletă şi razele X. Undele radio sunt create când electronii trec printr-un

5. Subsistemul de comunicaţii Pagina 67 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

conductor, ca un fir electric. Curentul crează un camp magnetic. Fluctuaţiile curentului produc
modificări în câmpul magnetic, creând unde de energie electromagnetică sau radiaţii. Alte
forme de radiaţii electromagnetice sunt produse prin alte procese atomice.
Aceste modificări ale câmpului magnetic se numesc unde pentru că energia oscilează –
creşte în intensitate până la un vârf, scade până la minim, şi apoi creşte iar până la vârf.
Toate aceste forme de energie călătoresc cu aceiaşi viteză – viteza luminii. Singura
diferenţă dintre ele o reprezintă lungimile lor de undă. Undele radio sunt cele mai lungi.
Razele gama sunt cele mai scurte. Deoarece razele gama sunt mai scurte, şi călătoresc cu
aceiaşi viteză ca undele radio, mai multe raze pot trece printr-un anumit punct într-o secundă.
Numărul de unde care trece printr-un punct într-o secundă se numeşte frecvenţa energiei.
Razele gama au frecvenţe mult, mult mai înalte decât undele radio.
Frecvenţa este măsurată într-o unitate numită Hertz, după Heinrich Hertz, unul dintre
primii experimentatori ai undelor radio ( numite iniţial unde Herziene ). Hertz-ul este definit
în mod ca un ciclu pe secundă sau o undă pe secundă. Spectrul undelor electromagnetice sunt
descrise în hertzi, abreviat Hz.
Ca şi rata de transfer de date, frecvenţele pot fi foarte largi, astfel încât unităţi standard
mari sunt utilizate pentru a le nota: kilo (K), mega (M), şi giga (G). Undele radio au frecvenţe
de la 150kHz la 300GHz. În contrast, undele de lumină sunt mult mai scurte şi au frecvenţe
mult mai înalte. Frecvenţele undelor de lumină sunt în domeniul de 100 trilioane de Hz, sau
100THz (terahertz).

Figura 81 - Spectrul de emisie

5.1.2.5 Benzile radio

În Statele Unite pentru ca oamenii să nu interfereze între ei în ceea ce priveşte


semnalele radio, Comisia de Comunicaţii Federale (FCC) este însărcinată cu asignarea de
secţiuni mici de frecvenţe radio anumitori utilizatori. Acestea sunt numite frecvenţe licenţiate.
Pentru a transmite semnale radio pe aceste frecvenţe trebuie depusă o cerere la FCC pentru a
obţine o licenţă.
Cu toate acestea, pentru a permite utilizarea unei anumite părţi a spectrului pentru
aplicaţii mici care nu necesită licenţă, FCC a alocat trei benzi radio separate de frecvenţe

5. Subsistemul de comunicaţii Pagina 68 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

radio care poartă numele de benzi publice. Nu este necesară nici o licenţă pentru a folosi
echipamentul de transmisie la aceste frecvenţe. Acestea sunt numite benzi ISM, prescurtarea
de la benzi: Industrial, Ştiinţific şi Medical.
Lungimea de bandă disponibilă creşte la limitele înalte de frecvenţă. Aceste frecvenţe
înalte vor suporta rate de transfer de date mari. Multe wireless bridge-uri operează la
frecvenţele de 2,4GHz şi 5,7GHz. Cu cât creşte capacitatea de trecere, reţelele de calculatoare
devin o posibilitate din ce în ce mai reală. Cu cât apar mai multe firme care produc produse de
reţea wireless cu radio frecvenţă, cu atât preţurile vor continua să scadă, făcând reţelele
wireless o alternativă viabilă la liniile de telefonie fixă în zonele locale.
Ce face ca benzile ISM nelicenţiate să devină supra-utilizate în mod egal? Există două
diferenţe primare între cum sunt implementate reţelele wireless cu radio frecvenţă astfel încât
să minimizeze interferenţele şi dorinţa de a folosi lungimea de bandă disponibilă. Prima
diferenţă se leagă de metoda utilizată pentru transmisia semnalelor de date prin unde radio. A
doua diferenţă se leagă de tipurile de antene utilizate pentru a radia şi recepţiona semnalele
radio.

Figura 82 - Câştig în domeniul 2.4 GHz

5.1.2.6 Tehnologia spectrului împrăştiat

Multe tehnologii de comunicaţii cu care suntem familiari – radioul, televiziunea,


radiourile cu două căi – utilizează cea ce se numeşte comunicaţii pe bandă îngustă. Fiecare
staţie sau canal operează peste o bucăţică mică din spectrul radio. Deoarece fiecărei staţii îi
este asignată o bandă particulară, FCC asigură că nici un transmiţător din aria locală nu va
folosi aceiaşi bandă prin licenţiere, deci nu vor fi interferenţe. Domeniul fiecărei staţii este
limitat, astfel încât aceiaşi frecvenţă poate fi re-utilizată la o distanţă mare fără interferenţe.
Deoarece multe dispozitive pot să utilizeze benzile ISM într-o anumită zonă, sunt
necesare tehnologii adiţionale pentru a nu permite ca o varietate de semnale să interfereze una
cu cealaltă. Din fericire, o tehnologie a fost dezvoltată în ultimii 50 de ani care permite
“folosirea în comun” a lăţimii de bandă. Această tehnologie oferă o cale de a răspândi

5. Subsistemul de comunicaţii Pagina 69 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

semnalele radio pe un “spectru” larg de frecvenţe radio, minimizând impactul interferenţelor


de bandă îngustă. În majoritatea cazurilor numai părţi mici din transmisie sunt corupte de
orice interferenţă, şi tehnicile de codare permit ca datele să fie recapturate. Această tehnologie
este cunoscută azi sub numele de spectru împrăştiat. Există două tehnici diferite de
împrăştiere care se utilizează. Amândouă utilizează un model codificat de comunicaţie. O
unitate de recepţie este sincronizată să folosească acelaşi model şi să recepţioneze cu succes
transmisia. Oricare altă unitate radio aude semnalul ca zgomot deoarece nu este programat cu
codarea potrivită. Cele două tehnici sunt numite spectru împrăştiat al salturilor de frecvenţă
(Frequency Hopping Spread Spectrum - FHSS) şi spectru împrăştiat al secvenţelor directe.
Armata Statelor Unite a dezvoltat o tehnologie radio numită spectru împrăştiat între anii 1950
şi 1960. E evident că prima preocupare a fost ca transmisiile radio să nu fie interceptate.

5.1.2.7 Salturile de frecvenţă

A doua preocupare a fost să asigure ca comunicaţiile rachetelor ghidate să nu fie blocate


de transmisiile radio inamice. Gândită, dezvoltată şi implementată de armata Statelor Unite,
problema a fost adresată de Hedy Lamarr, o actriţă faimoasă din Australia între anii 1930 şi
1940. Ea împreună cu un compozitor de muzică, George Antheil, au patentat ideea în 1940.
Ea nu primit nici o recompensă în bani pentru patent. Licenţa patentului a expirat înainte de
apariţia implemetării guvernamentale şi comerciale a conceptului. Ideea este următoarea. Un
semnal de comunicaţie (voce sau date) este împărţit în părţi separate. În loc de a transmite un
semnal în mod continuu pe o bandă de frecvenţe îngustă, părţile separate sunt transmise
separat pe un spectru larg de frecvenţe radio.
Un model definit dar aparent aleator de benzi nesecvenţiale este utilizat, cu părţile
succesive care sunt transmise pe banda de frecvenţă următoare din model. Pe de altă parte, un
receptor este configurat pentru a recepţiona semnalele din acelaşi model. Receptorul radio
apoi reasamblează bucăţile în semnalul original. Deoarece pot fi dezvoltate mai multe modele
distincte, este posibil să se transmită mai multe transmisii radio în acelaşi timp, dar niciodată
pe aceiaşi frecvenţă în acelaşi timp.
Procesul de a sări rapid de pe o frecvenţă pe alta se numeşte salturi de frecvenţă
(frequency hopping). Şi de aici tehnica se numeşte spectru împrăştiat al salturilor de
frecvenţă. Saltulrile de frecvenţă au două avantaje. Zgomotul “electric” – semnale
electromagnetice aleatoare care nu sunt părţi ale nici unui semnal de comunicaţii – va afecta
doar o parte mică a semnalului. De asemenea, efectele oricăror alte forme de comunicaţii
radio care operează în benzile înguste ale spectrului vor fi minimizate. Oricare asemenea
interferenţă care apare va apărea se vor reflecta în calitatea puţin redusă a transmisiei de voce,
sau o mică pierdere de date.
De îndată ce reţelele de date au confirmat recepţia cu succes a datelor, orice piesă lipsă
va atrage după ea o cerere de transmitere a datei pierdute. Împrăştierea secvenţelor directe
este foarte diferită de salturile de frecvenţă. În loc de a împărţi un semnal de date în bucăţi,
secvenţionarea directă codează fiecare bit de date într-un şir de biţi mai lung, numit chip.
De obicei, pentru un chip se folosesc 11 până la 20 de biţi, depinde de aplicaţie.
Deoarece armata cere un grad mai ridicat de securitate, se foloseşte chip-uri mult mai lungi –
chiar mai lungi, de 1.000 până la 10.000 de biţi! Un chip pe 11 biţi este ilustrat mai jos:
0=10010010110
1=01101101001
Observaţi că şirul binar care codează un 0 are forma opusă a şirului binar care codează
un 1 – unde un “1” este folosit într-un chip, un “0” este folosit în celălalt chip.
Chip-ul este folosit apoi pentru modularea (schimbarea) semnalului generat de
transmiţătorul radio, răspândind semnalul pe o bandă largă de frecvenţe. Receptorul utilizează

5. Subsistemul de comunicaţii Pagina 70 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

acelaşi cod şi caută semnătura unică dea lungul spectrului de frecvenţe. Apoi decodează
semnalul înapoi la data originală.
Avantajul este acela că tehnologia împrăştierii spectrului permite ca mai multe semnale
radio să opereze într-un mediu deschis, pe o bandă nelicenţiată cu un minim de interferenţe.
De asemenea oferă securitate transmisiei.

Figura 83 - Antenă omnidirecţională

5.1.2.8 Semnalele radio ca mediu de transmisie a datelor

Reţelele de calculatoare utilizează variaţiile de curent electric pentru a transmite date de


la un calculator la altul. În timp ce fiecare tip de cablu (coaxial, coaxial subţire, şi cablu cu
două fire răsucite) are proprietăţi electrice proprii, există ceva în comun: modul în care
semnalele electrice sunt transmise de la o placă de reţea la altă placă de reţea utilizând acest
mediu. Utilizând o linie telefonică, analogică sau digitală, adaugă complexitate la acest
proces, dar nu multă. Dacă utilizăm cablu cu fibră optică, care foloseşte unde de lumină ca
mediu, şi semnale radio, care folosesc unde radio ca mediu, procesul este un pic mai complex.

5.1.2.9 Transceiverul radio

Pentru a creea o conexiune de reţea de calculatoare prin unde radio, este nevoie de două
componente. Primul ar fi un dispozitiv de reţea ca un bridge sau un router. Bridge-ul / router-
ul de reţea se ocupă cu traficul de date. Rutează cel mai potrivit semnal de date legat de reţeua
de calculatoare dintr-o clădire la reţeaua de la celălat capăt a conexiunii radio. În al doilea
rând este nevoie de un transmiţător şi receptor radio, numit transceiver radio. Transceiver-ul
radio se ocupă cu comunicaţiile prin semnale radio dintre locaţii. Partea interesantă a acestei
căsătorii de tehnologii este aceea că radiourile au avut de- a face întotdeauna cu semnalele
electrice. Transmiţătorul radio modulează, sau modifică, un semnal electric astfel încât
frecvenţa lui este crescută până la o frecvenţă potrivită comunicaţiilor radio.
Apoi semnalul este trimis către o antenă radio. La celălalt capăt al transmisiei, partea de
recepţie a transceiver-ului radio ia semnalul radio şi îl demodulează înapoi la frecvenţa lui

5. Subsistemul de comunicaţii Pagina 71 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

normală. Apoi semnalul electric rezultat este trimis la partea de bridge/ router pentru
procesare de către reţea. În timp ce procesul actual de modulare/demodulare este tehnic,
conceptul de transmisie radio este foarte simplu. Când este transmis un răspuns înapoi la site-
ul originar, transceiver-ul radio comută de pe modul de recepţie pe modul de transmitere.
Transceiver-ul radio de la fiecare capăt are aceste caracterictici. Transmisie-recepţie,
transmisie-recepţie. El schimbă modul de oridul miilor de ori pe secundă. Aceste caracterictici
duc la o întârziere în comunicaţie numită latenţă.

5.1.3 Echipamentele Wireless

Figura 84 - Echipamente Wireless

5.1.3.1 Wireless bridges

Componenta cheie al unui link al reţelei wireless este un dispozitiv numit un wireless
bridge. O combinaţie între un bridge de reţea şi un radio transmiţător, bridge-ul este o
componentă al unei reţele locale. Ea examinează tot traficul de date. Transmite orice dată
legată de reţea de cealaltă parte a link-ului wireless către transmiţătorul radio. Transmiţătorul
alterează apoi semnalul şi îl transmite către antenă, unde este transmisă la antena aflată de
cealaltă parte a link-ului. Unii pot spune că se comportă ca un agent de trafic pentru datele din
reţea. În timp ce funcţia tuturor wireless bridge este aceiaşi – obţinerea datelor de la o reţea
prin unde radio de la o altă reţea – nu toate wireless brigde-urile sunt identice. Caracteristicile
setate sunt uşor diferite. Pentru unii clienţi preţul este cel care contează, în timp ce pentru alţii
contează securitatea. Pentru majoritatea contează perfomanţa transferării datelor. Producătorii
au muncit foarte mult pentru a face bridge-uri uşor de configurat şi întreţinut.

5. Subsistemul de comunicaţii Pagina 72 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Deoarece fiecare implementare este diferită ( în funcţie de necesităţile reţelei clădiri, de


mediul înconjurător ) este dificil de spus care produs este potrivit pentru o anumită situaţie.
Cu toate acestea primul parametru luat în considerare ar trebui să fie capacitatea de trecere.
Care produs va oferi o capacitate de trecere suficientă pentru a satisface scopurile pentru reţea
ale unui client? El trebuie să se gândească la capacitatea de trecere potrivită pentru
implementarea lui. Trebuie luate în considerare şi viitoarele dezvoltări ale reţelei. În situaţia
ideală bridge-ul ar trebui să satisfacă nevoile pe următorii patru sau cinci ani. De exemplu,
dacă un bridge de 10Mbps este prea scump, dar eşti convins că utilizarea reţelei va creşte
astfel încât va fi necesară o lăţime de bandă mai mare, atunci se poate implementa acum o
soluţie de 2Mbps şi se poate adăuga încă un link de 2Mbps în doi sau trei ani. Unele produse
fac aceste soluţii mai uşoare.
Când este necesar un bridge de 10Mbps? Dacă se folosesc foarte des în comun baze de
date de pe CD-ROM, sau alte aplicaţii, prin reţea sau dacă există un număr foarte mare de
utilizatori care folosesc ocazional aceste resurse în comun, un bridge de 10Mbps este foarte
important. Dacă link-ul este stabilit doar pentru a folosi în comun resurse bazate pe web, cu
accese ocazionale la baze de date centralizate, un bridge de 10Mbps nu va funcţiona probabil
la capacitatea maximă.
Trebuie să fie luaţi în considerare şi alţi factori.

Figura 85 - Stâlp BTS (Base Tranceiver Station)

5.1.3.2 Antene

În ziua de azi antenele transmit un semnal de la transmiţătorul radio în modul de


transmisie şi recepţionează semnalul la celălalt capăt al conexiunii. Există două tipuri de
antene pentru reţele wireless: direcţionale şi omni-direcţionale. O conexiune cu un singur link,
punct-la-punct, utilizează antene bidirecţionale poziţionate una spre alta. Conexiunile wireless
cu o locaţie centrală şi două sau mai multe locaţii temporare care sunt legate sunt numite

5. Subsistemul de comunicaţii Pagina 73 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

conexiuni multi-punct. Conexiunile multi-punct utilizează în general o antenă omni-


direcţională aflată la locaţia centrală. Deoarece aceasta transmite în toate direcţiile, toate
antenele aflate la locaţiile temporale pot recepţiona semnalul. Fiecare locaţie temporală are o
antenă direcţională care este poziţionată spre antena de la locaţia centrală. Deoarece energia
unei antene omni-direcţionale trebuie să se propage în toate direcţiile, aceasta se pierde
repede. De aceea, antenele omni-direcţionale pot transmite la fel de departe ca şi antenele
direcţionale. Când distanţa între locaţia centrală şi locaţiile temporale este mai mare de trei
sau patru kilometri, atunci trebuie utilizate mai multe antene direcţionale în loc să se utilizeze
o singură antenă omni-direcţională.
Cu toate acestea, chiar şi antenele direcţionale au proprietăţi care variază de la o antenă
la alta, care nu permit antenelor să transmită mai departe decât alte antene. În timpul
survolării locaţiilor, tehnicienii determină care antene vor funcţiona mai bine în anumite
situaţii particulare.

Figura 86 - Antenă direcţională

5.1.3.3 Mast-uri şi Towers

Cel mai costisitor aspect al instalării antenelor este mast-ul sau tower-ul necesar pentru
a obţine o vizibilitate directă. În cazurile rare, de obicei la distanţe foarte mici, vizibilitatea
directă poate fi stabilită cu antene montate direct pe acoperişurile celor două clădiri. Dar, în
mod obişnuit, unele forme de mast-uri sunt necesare pentru a ridica antenele la o înălţime
suficientă pentru a obţine o vizibilitate directă. În cazuri mult mai dificile sunt necesare sau
sunt mai indicate turnurile radio. Aceste probleme vor fi rezolvate în timpul survolării
locaţiilor.

5. Subsistemul de comunicaţii Pagina 74 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 87 - Tower

5.1.3.4 Accesoriile

Există şi alte componente incluse în conexiunea radio wireless. Un dispozitiv de


protecţie împotriva fulgerelor este conectat între antenă şi wireless bridge pentru a preveni
daune ale unităţii care pot fi cauzate de un fulger. De asemenea se poate folosi un filtru de
emisie pentru a reduce din zgomotele externe. În final, acolo unde sunt necesare mast-uri şi
turnuri, sunt necesare cabluri de extensie pentru a conecta antenele la bridge-uri. Cablurile de
extensie sunt de asemenea necesare când wireless bridge este localizat în interiorul unei
clădiri departe de punctul în care cablul primar intră în clădire.

5.1.4 Avantajele WLAN


5.1.4.1 Costurile reduse

Tehnologia wireless oferă câteva avantaje. Pe departe cel mai important este costul
redus. Va fi necesară actualizarea configuraţiei echipamentelor, sau problemele electrice vor
duce la pierderea configuraţiei. Pentru router-e şi bridge-uri, costul întreţinerii lor va fi similar
cu cel pentru orice conectivitate. Cu toate acestea, dacă se foloseşte un comutator bazat pe
fibră, ne putem aştepta să aibă nevoie de mai puţină întreţinere. Pe de altă parte, vânturi
puternice sau alţi factori pot cauza nealinieri sau defecte la antenele necesare pentru
conectivitatea wireless.

5.1.4.2 Implementarea simplă

Achiziţionarea şi instalarea unei reţele wireless se poate face într-o săptămână.

5.1.4.3 Rata de transfer de date ridicată

Când conectivitatea prin fibră optică se dovedeşte a fi prea scumpă pentru instalarea
iniţială, conectivitatea wireless oferă o conectivitate de bază foarte bună.

5. Subsistemul de comunicaţii Pagina 75 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

5.1.4.4 Mobilitatea

Un avantaj al tehnologiei wireless va fi vizibil doar atunci când o organizaţie va dori


să-şi mute sediul. Când se foloseşte conectivitate wireless se poate dovedi foarte scumpă
mutarea unei conexiuni de reţea externă. În cazul utilizării fibrei optice poate fi necesară
instalarea unui segment de fibră nouă complet. În conexiunile wireless, antena poate fi dată
jos şi echipamentul mutat la noul sediu. Este necesar numai costul reinstalării şi setării
antenei.

Figura 88 - Antenă satelit

5.1.4.5 Redundanţa

În multe cazuri, o reţea wireless poate fi stabilită ca o tehnologie mixtă. Cu cât este
necesară mai multe infrastructură de cablu în viitor, cu atât va deveni mai necesară sau
efectivă din punct de vedere al costului instalarea fibrei optice ca “backup” al reţelei
tradiţionale. Când conexiunea wireless este actualizată cu cabluri de fibră optică, conexiunea
wireless tot va juca un rol important. Dacă lăsăm legătura wireless la locul ei, aceasta va
asigura conectivitatea de bază dacă legătura de fibră optică se defectează. Traficul de urgenţă
poate fi în continuare rutat. Utilizarea unei legături wireless cu costurile de astăzi va oferi o
legătură de „backup” în cazul unor probleme tehnice.

5.1.5 Dezavantajele

Când se iau în considerare opţiuni pentru reţele extinse, este oportun să se ia în


considerare câteva dezavantaje prezentate de tehnologia wireless.

5.1.5.1 Interferenţele radio

Când mai multe antene radio sunt amplasate una în apropierea celeilalte, sau când mai
multe surse puternice de spectrum larg se află într-o regiune mică, undele radio îşi pierd din
eficacitate. Semnalele pot interfera una cu cealaltă, cauzând retransmiterea semnalelor sau
pierderea capacităţii de trecere. Dar asemenea surse sunt neobişnuite în comunităţile rurale.

5. Subsistemul de comunicaţii Pagina 76 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

5.1.5.2 Interferenţele de cale

Tehnologia radio wireless este adesea caracterizată ca fiind imprevizibilă la condiţiile


meteorologice. Acest lucru înseamnă că particulele de ploaie, ceaţă, smog sau praf nu sunt
destul de mari pentru a bloca transmisia semnalelor radio. În spectrul de frecvenţe 902-928
Mhz acest lucru este în mare parte adevărat.
Cu toate acestea, nu este întotdeuna adevărat în domeniile de frecvenţe înalte (2,4Ghz
şi 5.7Ghz) utilizate pentru conexiuni wireless de viteze mari. În acestea, lungimile de undă
sunt destul de scurte astfel încât astfel de fenomene legate de condiţiile meteorologice pot
interfera cu anumite transmisii. Retransmisia datelor va fi necesară, ducând la scăderea per
ansamblu a performanţelor.

Figura 89 - Antenă direcţională

5.1.5.3 Defectele cauzate de condiţiile meteorologice şi de accidente

Condiţiile meteorologice severe pot cauza daune acestor componente pentru că


conectivitatea wireless foloseşte antene externe. Se va folosi protecţie împotriva fulgerelor
pentru a preveni daune echipamentelor interne ale reţelei, dar şi în acest caz vânturile
puternice pot cauza daune antenelor. Aceste tipuri de daune se pot întâmpla şi circuitelor cu
fibră optică ( fibrele agăţate la polii electrici sunt rupţi sau au suferit daune în condiţii
meteorologice severe, în timp ce cablurile pot să fie tăiate de alţi producători ).

5.1.5.4 Capacitatea de trecere

În timp ce conectivitatea wireless oferă o rată cost/transfer mai bună în timp decât
circuitele de date, conectivitatea cu fibră optică oferă o soluţie mai bună. Are potenţial mai
mare pentru capacitatea de trecere. În multe cazuri, este soluţia cea mai bună.

5. Subsistemul de comunicaţii Pagina 77 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Pe de altă parte, dacă unica resursă care va fi folosită în comun de mai multe comunităţi
este accesul Internet, capacitatea de trecere a link-ului WAN de peste 2Mbps nu este
importantă. Link-ul folosit în comun pentru Internet va fi nodul de gâtuire al reţelei. În mod
normal va fi restrâns la una sau două canale de acces ( 1,5 până la 3Mbps ). În aceste cazuri,
conectivitate cu fibră va fi depăşită cu excepţia cazului în care aceasta va fi fundaţia unor
proiecte viitoare.

5.2 Comunicaţiile client-server cu ajutorul socket-urilor

În stadiul iniţial al proiectării socket-urilor (în sistemul de operare UNIX) s-a plecat de
la ideea implementării lor ca operaţii de I/O (Input/Output) obişnuite. Se ştie că, in Sistemele
tip UNIX, toate operaţiile I/O cu diverse obiecte (fişiere de pe harddisk, imprimante, unităţi
de bandă, etc.) au la bază acelaşi principiu: deschide-citeşte-scrie-închide. Ca urmare, pentru a
comunica cu o reţea TCP/IP, programul deschide mai întâi o conexiune cu reţeaua, apoi
citeşte şi scrie date prin conexiune. La sfârşit, programul închide conexiunea.
Dezvoltarea funcţiilor API pentru socket-uri, aşa cum sunt ele în forma actuală, a fost
făcută de un grup de cercetători de la Berkeley. Pe măsură ce proiectarea avansa, se
"descopereau" noi probleme şi în cele din urmă s-a constatat că operaţiile I/O de reţea erau
mult mai complexe decât alte tipuri de I/O. De exemplu: pentru scrierea unui program client a
fost uşor de adaptat funcţiile API existente pentru fişiere. Problemele au apărut când s-a trecut
la scrierea unor funcţii care să definească un program server. Serverul trebuie să aştepte, în
mod pasiv, să fie contactat de programe client. Ori în UNIX funcţiile I/O normale nu
încorporează prea multe facilităţi legate de operaţii I/O pasive. De aceea s-au creat noi funcţii
sistem pentru a gestiona operaţiile pasive.
O altă problemă apărută a fost aceea că prin funcţiile sistem existente se puteau crea
socket-uri orientate spre conexiune dar pentru socket-uri fără conexiune nu existau funcţii
sistem echivalente.
Interfaţa Berkeley este doar una dintre implementările unui API pe baza modelului
socket. Windows Socket (denumită şi Winsock) este o altă API bazată pe paradigma socket,
inspirată, totuşi, din interfaţa Berkeley. Chiar dacă sistemele de operare Windows (Windows
9x, Windows NT) sunt proprietate a firmei Microsoft, la dezvoltarea Winsock au contribuit
mulţi alţi cercetători şi programatori de la alte firme.

Specificaţiile Winsock organizează biblioteca API în trei grupuri:


• funcţii Berkeley-sockets incluse în Winsock API,
• funcţii de baze de date - permit programelor să interogheze reţeaua Internet pentru
informaţii despre nume de domenii, servicii de comunicaţii şi protocoale,
• extensii ale rutinelor Berkeley-sockets specifice Windows.

Aceste funcţii sunt cuprinse în biblioteca cu legare dinamică WINSOCK.DLL.

5.2.1 Aspectele teoretice

Pentru a folosi o interfaţă socket programele trebuie să urmeze un proces simplu,


compus din patru etape:
1. Crearea socket-ului,
2. Configurarea socket-ului pentru a putea fi folosit (conectarea la un host distant sau legarea
la un port de protocol local),
3. Transmiterea şi/sau recepţionarea datelor prin socket,
5. Subsistemul de comunicaţii Pagina 78 din 151
Sistem robotizat mobil teleoperat Alexandru JONI

4. Închiderea socket-ului.

Creearea socket-ului. Pentru aceasta se apelează funcţia:


socket()
socket_handle = socket(protocol_family,
socket_type, protocol)
Secvenţă cod 7 - Apelare socket
în care:

• socket_handle - handle de socket. Specificaţiile Winsock stabileşte ca valori valide


numere întregi pozitive, mai mici decât 0XFFFF (cel mai mare întreg fără semn).
• protocol_family - identifică o familie sau o colecţie de protocoale înrudite. Valorile pe
care le poate lua acest parametru sunt definite în fişierul WINSOCK.H . În total sunt
definite (pentru versiunea 1.1 a winsock) 18 valori, printre care:

Familii de protocoale:

AF_UNSPEC 0
AF_UNIX 1
AF_INET 2
AF_APPLETALK 16
AF_NETBIOS 17
Secvenţă cod 8 - Familii de protocoale

• socket_type - indică tipul de socket folosit şi poate lua valorile SOCK_DGRAM


pentru datagrame sau SOCK_STREAM pentru fluxuri de octeţi. De asemenea, în
winsock.h sunt definite şi alte valori, dar ele pot fi folosite doar cu anumite familii de
protocoale,
• protocol - specifică protocolul folosit. Valorile posibile (definite în winsock.h) încep
cu prefixul IPPROTO_ (IPPROTO_TCP, IPPROTO_UDP).

Când programul apelează funcţia socket(), winsock alocă memorie pentru structura de
date internă, care stochează informaţii despre socket. Simpla apelare a funcţiei nu
completează câmpurile structurii de date. Acest lucru îl fac alte funcţii care vor fi prezentate
ulterior.
Configurarea socket-ului. Modul de configurare depinde de tipul legăturii pe care o
stabileşte programul în reţea (orientată pe conexiune sau fără conexiune) şi de scopul
programului (proces client sau server). Fiecare socket necesită cinci elemente:
• adresa IP a host-ului local,
• portul de protocol pentru procesul local,
• adresa IP a hostului de la distanţă,
• portul de protocol pentru procesul de la distanţă,
• un protocol.

Funcţiile winsock API utilizate, de programe, pentru configurarea unui socket sunt
prezentate în tabelul de mai jos. Ele completează primele patru câmpuri din structura de date,
ultimul, protocolul, fiind completat de apelul funcţiei socket().

5. Subsistemul de comunicaţii Pagina 79 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Funcţiile socket API utilizate pentru configurarea unui socket.

Utilizare socket Informaţie locală Informaţie la distanţă


Client orientat pe connect connect
conexiune
Server orientat pe bind listen, accept
conexiune
Client fără conexiune bind sendto
Server fără conexiune bind recvfrom

Deci, în cazul programelor client orientate pe conexiune, se foloseşte instrucţiunea

connect() cu următorii parametri:


connect (socket_handle, remote_socket_address,address_length).
Secvenţă cod 9 - Funcţia connect

în care:

• socket_handle - valoarea returnată de funcţia socket(),


• remore_socket_address - un pointer la o structură specială de adresă socket:

struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
Secvenţă cod 10 - Structura sockaddr_in

Structura de adresă conţine o familie de adrese, un port de protocol şi adresa host-ului


pe care rulează programul server. Înainte de apelarea funcţiei connect(), programul trebuie să
memoreze în structură datele necesare. Prezentăm mai jos secvenţa de instrucţiuni utilizată de
programul nostru (client) pentru a realiza conectarea:

memset((char *) &addr_Dest, 0,
sizeof(addr_Dest));

addr_Dest.sin_family
= AF_INET;

addr_Dest.sin_addr.s_addr
= inet_addr(szDestIP);

addr_Dest.sin_port
= htons(destport);

if (connect(sock_Send, (sockaddr*)
&addr_Dest, sizeof(addr_Dest)) < 0)
AfxMessageBox("Eroare: functia connect() .");
Secvenţă cod 11 - Deschidere conexiune

unde addr_Dest este o variabilă de tipul sockaddr_in.

5. Subsistemul de comunicaţii Pagina 80 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Se observă că în cazul unui client orientat pe conexiune nu se specifică un port de


protocol local, unde clientul va recepţiona răspunsul trimis de server. Acest lucru este "lăsat în
seama" sistemului de operare, mai precis a modulului winsock. Cu alte cuvinte winsock
selectează portul de protocol pentru programul client şi-l anunţă când sosesc date la acel port;
nu este necesar ca programul să ştie ce port foloseşte winsock.
În celelalte trei cazuri (servere şi client fără conexiune) programele trebuie să specifice
un port de protocol.

5.2.1.1 Transmiterea şi/sau recepţionarea datelor

Interfaţa Berkeley socket include zece funcţii (cinci pentru transmiterea datelor şi cinci
pentru recepţionarea datelor). Winsock dispune doar de patru funcţii (două de transmitere şi
două de recepţie), prezentate pe scurt în tabelul 3.

Funcţii winsock API utilizate în lucrul cu socket-uri


Funcţia winsock API Descriere
Send Transmite date printr-un socket conectat,
folosind flag-uri speciale pentru a controla
comportarea socket-ului.
Sendto Transmite date la o adresă de host
specificată în structura de adresă socket,
folosind un buffer de mesaj simplu.
Recv Recepţionează date de la un socket
conectat, folosind flag-uri speciale pentru a
controla comportarea socket-ului.
Recvfrom Recepţionează date de la un socket şi
înregistrează (opţional) adresa de reţea a
host-ului emiţător, folosind un buffer de
mesaj simplu.

Programele cu socket-uri fără conexiune pot utiliza doar funcţiile sendto() şi recvfrom().
Aceasta deoarece ele pot specifica adrese de reţea. Programele ce utilizează socket-uri cu
conexiune pot utiliza toate cele patru funcţii dar sunt recomandate funcţiile send() şi recv(). În
cazul utilizării funcţiilor sendto() şi recvfrom(), winsock ignoră parametrii de adresă incluşi în
apelul lor.
Există cazuri când se impune scrierea unor programe care să utilizeze ambele tipuri de
transfer de date (cu şi fără conexiune). În acest caz se pot scrie funcţii generice pentru
executarea acestor operaţii, funcţii ce vor utiliza sendto() şi recvfrom(). În acest mod se pot
utiliza funcţiile scrise pentru a transmite şi/sau recepţiona date indiferent de tipul socket-ului
pe care programul îl pasează funcţiei.

Un apel tipic al funcţiei send() are următoarea sintaxă:

result = send(socket_handle, message_buffer,


buffer_length, special_flags)
Secvenţă cod 12 - Apel funcţie send

Când programele apelează funcţia send(), winsock preia informaţia legată de destinaţie
(adresa IP şi port de protocol) din structura de date socket internă identificată de
socket_handle. Apoi, funcţia transmite datele din buffer-ul de mesaj (message_buffer).
5. Subsistemul de comunicaţii Pagina 81 din 151
Sistem robotizat mobil teleoperat Alexandru JONI

Parametrul buffer_length reprezintă lungimea buffer-ului de mesaj care poate fi determinată


printr-un apel al funcţiei sizeof(). Parametrul special_flags poate lua următoarele valori:
• MSG_DONTROUTE - indică faptul că nu se vor folosi tabele de routare,
• MSG_OOB - Out-Of-Band. Datele Out-Of-Band sunt date urgente pe care programul
trebuie să le prelucreze imediat.

Funcţia recv() are următoarea sintaxă:

result = recv(socket_handle, message_buffer,


buffer_length, special_flags)
Secvenţă cod 13 - Apel funcţie receive

şi preia datele de la un port de protocol local, memorându-le în buffer-ul de mesaj


(message_buffer). Când se apelează recv() winsock foloseşte structura de date internă
(socket_handle) pentru a comunica funcţiei la ce port de protocol se află datele. Parametrul
special_flags poate lua valorile:
• MSG_OOB - datele trebuie prelucrate imediat
• MSG_PEEK - permite programului să analizeze datele de intrare înainte de a stabili
cum să le prelucreze.

Se observă că cele două funcţii nu oferă informaţii despre host-ul distant. Deci,
programul trebuie, mai întâi, să conecteze socket-ul la host-ul distant, apoi să-l utilizeze.
Celelalte două funcţii winsock specifică, în apelul lor, informaţii despre host-ul distant:

result = sendto(socket_handle, message_buffer,


buffer_length, special_flags,
socket_address_structure,
address_structure_length)
Secvenţă cod 14 - Apel funcţie sendto

Primii patru parametri sunt identici cu cei ai funcţiei send(). Parametrul


socket_address_structure este de tipul sockaddr:

struct sockaddr {
u_short sa_family;
char sa_data[14];
};
Secvenţă cod 15 - Structura sockaddr

Când programul utilizează funcţia sendto() cu un socket conectat, winsock ignoră


ultimii doi parametri iar nivelul transport va formata datele din buffer-ul de mesaje ca un
segment TCP - nu ca datagrama UDP.

Următoarea linie prezintă un apel tipic al funcţiei recvfrom():

result = recvfrom(socket_handle, message_buffer,


buffer_length, special_flags,
socket_address_structure,
address_structure_length)
Secvenţă cod 16 - Apel funcţie recvfrom
Parametrii funcţiei au aceeaşi semnificaţie cu ai funcţiei sendto().

5. Subsistemul de comunicaţii Pagina 82 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Un program server care utilizează funcţia recvfrom() va trebui întotdeauna să extragă


adresa emiţătorului pentru a şti unde să trimită răspunsul. În majoritatea cazurilor programele
client nu au nevoie de adresa serverului. Dar sunt unele excepţii: clientul trebuie să confirme
primirea datelor, clientul trebuie să verifice dacă datele extrase provin de la hostul dorit.

5.2.1.2 Închiderea socket-ului

Această ultimă operaţie a unui program se face prin apelul funcţiei:

result = closesocket(sock_Send);
Secvenţă cod 17 - Închidere socket

Facem precizarea că variabila result (valoare returnată de funcţiile de mai sus) este de tipul
int.

5. Subsistemul de comunicaţii Pagina 83 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

6 Platforma experimentală
6.1 Proiectarea, modelarea 3D

Înainte de începerea execuţiei proiectului s-a realizat o modelare tridimensională a


robotului prezentat în această lucrare. S-a început cu şasiul, sistemul de acţionare, iar ulterior
s-a continuat cu sistemul de alimentare. În figurile ce urmează sunt prezentate câteva etape
din procesul de simulare, proiectare şi execuţie.

Figura 90 - Modelare 3D a sistemului de acţionare.

6. Platforma experimentală Pagina 84 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 91 - Prototip şasiu simulat

Figura 92 - Wireframe prototip.

6. Platforma experimentală Pagina 85 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Pe baza desenului prezentat în Figura 92 s-a realizat şi practic prototipul de către secţia
de prelucrări metalice.

Figura 93 - Modelare 3D a prototipului

6.2 Realizare practică. Detalii constructive

Datorită lipsei de experienţă în domeniul mecanicii al autorului, ajutorul oferit de către


sisteme software de modelare 3D a fost necesar pentru a implementa practic cu succes acest
proiect.
Totuşi pe parcurs au apărut mici probleme de natură mecanică ce au trebuit soluţionate.
Datorită faptului că sistemul de acţionare nu este realizat perfect lanţurile, ce unesc cele două
roţi motoare, prezintă o întindere inegală pe durata funcţionării. Acest lucru se datorează
faptului că cele două roţi dinţate nu sunt perfect centrice. Pentru a înlătura acest neajuns, s-a
adăugat o a treia roată dinţată. Aceasta aplică asupra lanţului o forţă de tensionare, astfel
lanţul fiind întotdeauna la fel de întins.

6. Platforma experimentală Pagina 86 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 94 - Realizare practică a şasiului

Figura 95 - Sistemul teleoperat


Proiectul complet al platformei robotizate se găseşte în anexa.
6. Platforma experimentală Pagina 87 din 151
Sistem robotizat mobil teleoperat Alexandru JONI

7 Subsistemul video
7.1 Camerele video cu semnal-video-complex

Camerele folosite în cadrul acestui proiect sunt nişte camere CCD cu ieşire analogică.
Modelul ales este Navigator CCD-318. Camerele au un senzor CCD alb-negru produs de
SOny, ce prezintă o rezoluţie suficientă pentru aplicaţia curentă. S-au ales nişte camere alb-
negru deoarece pierderea de informaţie datorită lipsei culorilor este nesemnificativă, în
schimb se diminuează semnificativ cantitatea de date ce trebuie teletransmisă. Astfel pe
aceeiaşi interfaţă WLAN se pot obţine îmbunătăţiri legate de numărul de cadre pe secundă,
respectiv se poate reduce gradul de comprimare, astfel îmbunătăţiindu-se semnificativ
calitatea imaginilor.

Figura 96 -Cameră video Navigator

Camerele sunt alimentate direct din bateria plumb-acid. Datorită faptului că sunt camere
de 12V dispare necesitatea unei adaptări a tensiunii de intrare (de ex. cu un convertor DC-
DC).

7.2 Dispozitivul de mişcare a camerelor cu două grade de libertate

În aplicaţiile de teleoperare şi teleprezenţă este necesară o cunoaştere cât mai bună a


condiţiilor de la faţa locului. În acest scop robotul mobil a fost echipat cu un dispozitiv de
rotire şi înclinare a camerelor video.
Acesta este un dispozitiv cu două grade de libertate, ce permite o poziţionare exactă şi
rapidă a camerelor pentru a supraveghea cât mai uşor aplicaţia. Cele două grade de libertate
sunt realizate cu ajutorul a două motoare pas cu pas comandate de către un sistem cu
microcontroler. Acesta este conectat la un calculator gazdă prin intermediul unei interfeţe
seriale cu o viteză de 9600 bps.

7. Subsistemul video Pagina 88 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Dispozitivul primeşte pe interfaţa serială o comandă, ce poate fi de tipul (Roteşte


stânga, roteşte dreapta, roteşte sus, roteşte jos). După efectuarea rotirii sistemul aşteaptă o
comandă nouă.

Figura 97 - Dispozitiv de rotire (Pan-Tilt) a camerelor

Dispozitivul este în aşa fel construit ca să permită montarea a două camere video într-o
configuraţie paralelă. Acest lucru va permite ulterior implementarea unor algoritmi de stereo-
viziune. Aceştia împreună cu alţi algoritmi de viziune artificială şi cu algoritmi de inteligenţă
artificială vor permite modificarea robotului mobil, şi transformarea acestuia într-unul
autonom.
S-a ales folosirea acestui dispozitiv de rotire/înclinare a camerelor, dispozitiv realizat în
cadrul Departamentului de Ştiinţa şi Ingineria Calculatoarelor reprezentat de laboratorul
DSPLabs. Alternativa o constituia folosirea unui produs comercial, lucru ce ar fi prezentat
două dezavantaje. Primul dezavantaj ar fi fost cel economic, dispozitivele ce se găsesc în
acest moment pe piaţă sunt mult mai scumpe. Al doilea dezavantaj ar fi fost imposibilitatea de
a monta două camere video. Dispozitivele Pan/Tilt sau Pan/Tilt/Zoom sunt de obicei
dimensionate pentru rotirea/înclinarea unei singure camere.

7.3 Placa de captură a semnalului video

Pentru capturarea semnalurilor video de la cele două camere analogice s-a folosit o
placă de captură de tip Geovision GV250. Aceasta este o placă specializată pentru aplicaţii de
supraveghere. Nu va fi descrisă mai pe larg în cele ce urmează datorită faptului că depăşeşte

7. Subsistemul video Pagina 89 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

cadrul acestei lucrări, şi datorită faptului că dispune de un manual în limba română foarte bine
structurat.
Placa se livrează împreună cu o aplicaţie specializată. Aceasta permite pe lângă
supravegherea propriu-zisă şi o supraveghere de la distanţă. Aplicaţia oferă utilizatorului
posibilitatea ca prin intermediul unui browser web să acceseze şi să observe în timp real
semnalul de la camerele conectate.
De această posibilitate s-a făcut uz şi în cadrul proiectului curent. Datorită faptului că
imaginile sunt transmise sub forma unui flux de date de tip MPEG4, datorită faptului că
acesta prezintă o compresie destul de ridicată a fost posibil să se realizeze transmisia prin
intermediul interfeţei radio de tip WLAN.

7. Subsistemul video Pagina 90 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

8 Subsistemul de comandă

8.1 Componenţa

Subsistemul de comandă este compus din mai multe aplicaţii soft, ce vor fi descrise în
cele ce urmează.
La nivelul sistemului de acţionare rulează o aplicaţie, ce primeşte comenzi de la un
calculator gazdă şi livrează informaţii despre starea sistemului pe o interfaţă serială.
Sistemul de rotire/înclinare a camerelor are la bază a aplicaţie soft ce execută o
operaţiune de polling asupra unei interfeţe seriale. În momentul când primeşte o comandă, o
analizează şi o execută.
Comenzile de mişcare şi de poziţionare a camerelor, le dă un PC (localizat pe platforma
mobilă a robotului) pe care rulează o aplicaţie server. Aceasta are rolul de a autentifica
utilizatori din reţeaua internet. După o autentificare reuşită, aceştia au posibilitatea de a
manipula robotul mobil. Aplicaţia server primeşte comenzi printr-un socket şi le trimite mai
departe către subsistemul de acţionare sau către sistemul de mişcare a camerelor.
Utilizatorul foloseşte o aplicaţie de teleoperare, cu o interfaţă descrisă în cele ce
urmează.

8.2 Interfaţa prezentată utilizatorului

În cele ce urmează este prezentată interfaţa cu utilizatorul a aplicaţiei de teleoperare, şi


sunt descrise elementele cele mai importante ale acesteia.

Figura 98 - Interfaţa prezentată utilizatorului

8. Subsistemul de comandă Pagina 91 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Precum se vede din imaginea de mai sus, utilizatorului este prezentată o interfaţă
intuitivă. S-a încercat realizarea acestui lucru, pentru a permite folosirea sistemului de către
câţi mai mulţi utilizatori, fără nevoia unei pregătiri intense.
În partea de sus a imaginii sunt prezentate în timp real imaginile de la cele două camere
video montate pe robot. În imagine este prezentat un exemplu în care cele două camere sunt
orientate în aceeiaşi direcţie. Acest lucru poate fi modificat pentru a obţine un câmp vizual
mai mare, sau pentru a obţine diferite alte informaţii (se poate imagina un scenariu de
navigare prin spaţii strâmte în care este folositoare o cameră la nivelul robotului mobil
orientată spre înainte).
Pentru a reţine momente importante ambele camere sunt prevăzute cu mecanisme de
capturare de instantanee, sau de înregistrare video. Acestea se realizează pe calculatorul
utilizatorului de teleoperare şi nu influenţează aplicaţia în sine.
Mai este prezentă şi posibilitatea alegerii unei camere pentru afişare pe întreg ecranul.
Acest lucru este util, când se doreşte inspectarea mai atentă a unei anumite zone. Datorită
faptului că în acest mod nu mai sunt vizibile celelalte elemente de control, nu va fi posibilă
comanda sistemului de teleoperare.
În partea din stânga jos a imaginii este prezentată o interfaţă de conectare cu aplicaţia
server ce rulează pe robot. Această parte este responsabilă de transmiterea de mesaje prin
socketuri. Mesajele transmise pot fi comenzi către dispozitivul de rotire/înclinare a camerelor
sau către sistemul de acţionare. În plus cu ajutorul acestui sistem, mai mulţi utilizatori
conectaţi la server pot comunica între ei (similar altor aplicaţii chat uzuale).

8.3 Comanda robotului cu ajutorul joystickului

Elementul central de comandă al robotului mobil este joystick-ul prezentat în capitolul


următor. Folosirea acestuia este destul de simplă. În mod normal când utilizatorul acţionează
joystickul, mişcarea acestuia se transformă în comenzi transmise dispozitivului de
rotire/înclinare a camerelor. Dacă în plus utilizatorul acţionează şi butonul de pe joystick
mişcarea acestuia este transformată în comenzi şi acestea sunt trimise sistemului de acţionare
a robotului mobil.

8.3.1 Tipurile de Joy-stickuri

8.3.1.1 Varianta digitală

Cele mai uzuale joystickuri sunt cele digitale de tip Atari. Acestea sunt denumite Atari,
deoarece acst tip de joystick a fost prima dată folosit la jocul Atari 2600 şi apoi adaptat şi
folosit la calculatoare personale.

8. Subsistemul de comandă Pagina 92 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 99 - Joystick digital


Joystickul în sine consta din cinci întrerupătoare, aranjate astfel încât patru dintre ele
determinau o direcţie (stânga, dreapta, sus, jos) iar ultimul era folosit pe post de buton de
tragere. Toate întrerupătoarele sunt normal deschise, iar în momentul în care joystickul este
deplasat de pe centru unul sau două întrerupătoare sunt închise în funcţie de direcţia spre care
a fost mişcat. Toate întrerupătoarele trag un pin de semnal la masă în momentul în care sunt
închise.

8.3.1.2 Joystick de tip „PADDLE”

Acesta este un controler foarte simplist, care constă dintr-un întrerupător şi un


potenţiometru acţionat de utilizator prin învârtire.
Informaţia analogică trebuie convertită în una digitală. În ziua de azi acest lucru s-ar putea
realiza foarte simplu cu ajutorul unui convertor analog-numeric. Acest lucru însă nu era
posibil la apariţia acestui tip de controler, deoarece astfel de convertoare era foarte scumpe şi
greu de obţinut. Astfel s-a ales o variantă mai simplă şi mai puţin costisitoare. Informaţia
analogică era transformată în lăţime de impuls, care poate fi uşor convertită numeric cu
ajutorul unor circuite numărătoare. Această metodă este simplă, dar nu foarte precisă.

8.3.1.3 Joystickuri analogice

Au apărut ca o combinaţie a amânduror modele prezentate mai sus. Ideea de bază este că
se măsoară mişcarea cu ajutorul unor potenţiometre, iar butoanele aferente sunt realizate tot
cu întrerupătoare.
Cu ajutorul joystickurilor analogice s-a putut mări acurateţia de control, care era necesară
la programe de simulare.
Joystickurile analogice nu au mai fost aşa de standardizate ca cele digitale. Fiecare
producător are modelele proprii şi conectorul propriu.

8. Subsistemul de comandă Pagina 93 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

8.3.1.4 Interfaţa PC pentru joystickuri analogice

În ziua de azi cel mai uzual joystick analogic este cel de tip PC. Acest model a fost
prezentat de IBM odată cu primul IBM PC. Joystickul este unul simplu analogic, cu două
butoane. Interfaţa originală avea posibilitatea cuplării a două joystickuri, dar datorită faptului
că exista un singur conector era nevoie de un cablu Y pentru a putea conecta ambele
joystickuri simultan. Ulterior unii producători au echipat placa de interfaţă cu doi conectori,
iar alţii au ales să echipeze interfaţa pentru un singur joystick. Din fericire în ziua de azi toate
plăcile de interfaţă au opţiunea de conectare a două joystickuri, la fel ca şi interfaţa originală.

Placa de interfaţă a fost gândită să fie cât mai simplă şi mia ieftină. Placa constă din
electronica de interfaţare cu bus-ul precum şi patru multivibratori monostabili. Aceste circuite
erau simple circuite Timer care generau un impuls cu lăţime direct proporţională cu rezistenţa
potenţiometrului. Lăţimea acestui puls era măsurată cu ajutorul unei bucle soft. Acest lucru
genera o mulţime de probleme programatorilor. Pe maşini mai rapide rutina joystick nu citea
semnalele în mod corespunzător, generând probleme de timing.

Joystickul constă din două potenţiometre cu rezistenţă variabilă între 0 şi 100 kohm.
Valoarea este minimă când joystickul este poziţionat în partea din stânga sus. Un capăt al
potenţiometrului este conectat la +5V iar centrul potenţiometrului este conectat la ieşirea
analogică a joystickului. Celălalt capăt este lăsat liber.

În cadrul joystickurilor analogice s-au folosit diferite tipuri de potenţiometre. Unele


transformă rotaţia într-o mişcare de tip linear, iar potenţiometrele sunt lineare, altele folosesc
potenţiometre axiale antrenate direct de mişcare joystickului. Cel mai uzual se folosesc
potenţiometre de 470 kohm şi datorită faptului că se foloseşte doar primul sfert de tură se
ajunge la o gama de 0..120 kohmi.

Tip Digital Analogic


Tehnologie 5 întrerupătoare 2 potenţiometre şi 2
întrerupătoare
Conector 9 pini D 15 pini D
Alimentare Opţional 5V +5V necesari
Direcţii 8 Nelimitat
Autocentrare Da Da sau nu (de obicei
ajustabil)
Butoane 1 (opţional 2 sau 3) 2
Joystickuri pe conector 1 1 sau 2 (cu cablu Y)
Nr. de conectori 2 1
Calibrare necesară Nu Da
Durabilitate Scurtă până la lungă Scurtă până la medie
Limitări Doar 8 direcţii Feedback prost către
comportament on/off utilizator
Alte folosiri a portului Mouse, etc... Volan, manşă zbor, etc.

8.3.1.5 Conectorul joystick

Mufă DB 15 de tip tată pe cablu

8. Subsistemul de comandă Pagina 94 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

1 XY1 (+5v)
2 Switch 1
3 X1
4 Ground (for switch 1)
5 Ground (for switch 2)
6 Y1
7 Switch 2
8 N.C.
9 XY2 (+5v)
10 Switch 3
11 X2
12 Ground (for switch 3&4) *
13 Y2
14 Switch 4
15 N.C. *

La unele interfeţe echiparea este doar pentru un singur joystick (până la pinul 7). Mai există şi
unele variante unde şi la pinul 8 găsim alimentare cu 5V.

În zilele noastre cel mai uzual interfaţa joystick o găsim pe plăcile de sunet împreună cu
interfaţa MIDI.

pin purpose
1 potentiometer common (Joy A)
2 button 1 (Joy A)
3 X coordinate potentiometer (Joy A)
4 button common (Joy A)
5 button common (Joy B)
6 Y coordinate potentiometer (Joy A)
7 button 2 (Joy A)
8 unused
9 potentiometer common (Joy B)
10 button 1 (Joy B)
11 X coordinate potentiometer (Joy B)
12 MIDI TXD (transmit) (computer -> midi)
13 Y coordinate potentiometer (Joy B)
14 button 2 (Joy B)
15 MIDI RXD (midi -> computer)

În figura următoare este un exemplu standard de joystick împreună cu schema de


interconectare aferentă.

8. Subsistemul de comandă Pagina 95 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 100 - Joystick

Figura 101 - Schemă interconectare joystick cu un PC

8. Subsistemul de comandă Pagina 96 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

9 Funcţionarea (operarea) sistemului


Sistemul este structurat pe mai multe nivele. Din punct de vedere al nivelului software,
avem o arhitectură client/server.
Pe platforma robot rulează o aplicaţie server, care supraveghează subsistemul de
poziţionare, dă comenzi de mişcare, preia informaţii de la senzorii de poziţie.

Figura 102 - Aplicaţia server

Referitor la subsistemul video aplicaţia server este responsabilă de preluarea de imagini


de la placa de captură, comprimarea acestora şi trimiterea lor căte aplicaţia client. O altă
sarcină legată de subsistemul video este orientarea camerelor. Orientarea este realizată de
dispozitivul de rotire/înclinare, care primeşte comenzile de la aplicaţia server.
O altă funcţie care o are aplicaţia server este autentificarea clienţilor, primirea de comenzi
de la unul dintre aceştia şi furnizarea de date referitoare la starea sistemului şi a diferiţilor
senzori.
Pe calculatorul clientului de teleoperare rulează o aplicaţie software, descrisă mai în
amănunt în capitolul 8.2 Interfaţa prezentată utilizatorului la pagina 91. Aceasta are rolul de a
prelua comenzi de la utilizator, de a le teletransmite la aplicaţia server. Mai îndeplineşte rolul
de teleprezenţă, adică furnizează utilizatorului informaţii despre aplicaţia teleoperată.
Utilizatorului sunt prezentate diferite informaţii în timp real, cum ar fi imaginile de la cele
două camere, informaţii legate de sistemul de acţionare, etc.

9. Funcţionarea (operarea) sistemului Pagina 97 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

10 Concluzii şi perspective
Lucrarea de faţă abordează o temă de interes în momentul de faţă: teleoperarea,
respectiv teleprezenţa. În general în momentul de faţă trendul este spre distribuirea sistemelor,
spre globalizarea aplicaţiilor. Acest lucru este posibil datorită dezvoltării tehnicii de calcul, a
reţelelor de calculatoare, etc.
Implementarea practică a fost realizată punăndu-se accent pe blocuri standard, uşor
accesibile, ca de exemplu elementul de comandă de pe platforma robotizată (un PC standard),
dar şi elemente specifice acestei aplicaţii, cum ar fi partea de electronică de putere, logica de
comandă a acţionărilor. Acestea au fost dezvoltate specific, din motive economice.

Ca posibile dezvoltări ulterioare amintim:


• crearea unui sistem robotizat de dimensiuni mai reduse pentru aplicaţii specifice;
• implementarea unui robot autonom, capabil de a lua decizii;
• implementarea unui sistem de stereovision, cu ajutorul celor două camere prezente. Cu
ajutorul acestui algoritm implementarea punctului anterior este destul de simplă;
• dotarea platformei cu diverşi senzori suplimentari, cum ar fi GPS, radar, sonar, etc.

10. Concluzii şi perspective Pagina 98 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

11 Bibliografie
<1.> “Imaginea in sistemele multimedia“, Ing. Mihai MICEA
<2.> “PC analogue joystick interface“, ePanorama.net,
http://www.epanorama.net/documents/joystick/pc_joystick.html
<3.> “PC joystick interface circuits“, ePanorama.net,
http://www.epanorama.net/documents/joystick/ps_circuits.html
<4.> “Bidirectional H-Bridge DC-Motor Motion Controller”, W. S. WOODWARD,
J. PETERSON; Electronic design 26 July 1999
<5.> “Brief H-Bridge Theory Of Operation”, J. Brown; DPRG.org;
http://dprg.org/tutorials/1998-04a.html
<6.> “MOSFET H-Bridge Schematic & Theory Of Operation”; E. Blanchard;
http://www.cs.uwa.edu.au/~mafm/robot/blanch-h-bridge.html
<7.> "Resolvers vs. Rotary Encoders", Manolis, Steve; Motion Control, March 1993
Vol. 4, No. 3
<8.> “Pulse Width Modulation”, Michael Adler and Tim Surtell
<9.> “Programare socket în Windows”, Radu Stanciulescu
<10.> “Turning Sunlight Into Electricity”, U.S. Department of Energy Photovoltaics
Program
<11.> Constantine A. Balanis. Antenna theory: analysis and design. Wiley, 1997.
<12.> Wireless Community Wireless Community Networks, Robert L. Williams,
Texas State Library and Archives Commission Library Development Division,
1999

11.Bibliografie Pagina 99 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Anexa 1 – Proiectul platformei experimentale

Figura 103 - Subansamblu complet

Anexa 1 Pagina 100 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 104 - Subansamblu complet

Figura 105 - Părţi componente subansamblu

Anexa 1 Pagina 101 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 106 - Ax

Figura 107 - Bucşă

Anexa 1 Pagina 102 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 108 - Inel

Figura 109 - Arbore

Figura 110 - Manşon de cuplare

Anexa 1 Pagina 103 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 111 - Bucşă antrenare

Figura 112 - Suport Encoder

Anexa 1 Pagina 104 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 113 - Placă suport

Anexa 1 Pagina 105 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Anexa 2 – Schema punţii „H“ pentru comanda motoarelor


DC

Figura 114 - Schema punţii „H“

Anexa 2 Pagina 106 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Anexa 3 – Cablajul realizat aferent punţii „H“

Figura 115 - Cablajul punţii „H“ – faţa superioară

Figura 116 - Cablajul punţii „H“ - faţa inferioară

Anexa 3 Pagina 107 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Anexa 4 – Schema sistemului de comandă a punţii „H“

Figura 117 - Schema sistemului de comandă a punţii - detaliu - microcontrolerul

Figura 118 - Intrări separate galvanic

Anexa 4 Pagina 108 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 119 - Ieşiri separate galvanic

Figura 120 - Formare impulsuri numărare

Anexa 4 Pagina 109 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Figura 121 - Una din cele trei ramuri cu numărătoare pe 24 de biţi

Anexa 4 Pagina 110 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Anexa 5 – Cablajul sistemului de comandă a punţii „H“.


Faţa superioară

Figura 122 - Cablajul sistemului de comandă : faţa superioară

Anexa 5 Pagina 111 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Anexa 6 – Cablajul sistemului de comandă a punţii „H“.


Faţa inferioară

Figura 123 - Cablajul sistemului de comandă : faţa inferioară

Anexa 6 Pagina 112 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Anexa 7 – Codul sursă al sistemului de comandă a punţii


„H“
#include "main.h"
#include <stdio.h>

#define FALSE 0
#define TRUE 1
#define OFF 1
#define ON 0
#define FORWARD 0
#define BACKWARD 1

//#define DEBUG
//#define DEBUGLEVEL2

#define MAX_INT 65500


#define TIMER_1_PRESCALE_VALUE 0
#define SPEED_PAS 5

#define TL1_RELOAD 255


#define TH1_RELOAD 128

#define PWM_CASE_NONE 0
#define PWM_CASE_X_FIRST 1
#define PWM_CASE_Y_FIRST 2
#define PWM_CASE_EQUAL 3

#define GET_BUFF_LEN 0x01


#define START 0x02
#define STOP 0x03
#define OK 0x04
#define DOWNLOAD 0x05
#define BUFFER_OVERRUN 0x06
#define GET_COUNTER 0x07
#define GET_X_POS 0x08
#define GET_Y_POS 0x09
#define RESET 0x0A
#define SET_PWM 0x0B
#define SET_X_SPEED 0x0C
#define SET_Y_SPEED 0x0D
#define START_X 0x0E
#define START_Y 0x0F
#define STOP_X 0x10
#define STOP_Y 0x11
#define SET_DIR_X_FORW 0x12
#define SET_DIR_X_BACKW 0x13
#define SET_DIR_Y_FORW 0x14
#define SET_DIR_Y_BACKW 0x15

#define test_INC_SPEED_X 0x31 //'1'


#define test_DEC_SPEED_X 0x32 //'2'
#define test_INC_SPEED_Y 0x33 //'3'
#define test_DEC_SPEED_Y 0x34 //'4'
#define test_INC_SPEED_GET_Y 0x35 //'5'
#define test_DEC_SPEED_GET_Y 0x36 //'6'
#define test_PRINT_SPEEDS_X 0x37 //'7'
#define test_PRINT_SPEEDS_Y 0x38 //'8'

Anexa 7 Pagina 113 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

unsigned int x_speed_set, y_speed_set;


unsigned int x_speed_get, y_speed_get;
long int x_pos,y_pos;
long int old_x_pos,old_y_pos;
short period=1;
bit PWM_X_CHANNEL_ENABLED,PWM_Y_CHANNEL_ENABLED;
unsigned char timer_1_prescale=0;

unsigned char TL0_reload_1,TH0_reload_1,TL0_reload_2,TH0_reload_2;


unsigned char TL0_reload_3,TH0_reload_3;
unsigned long int PWM_X_ON=1500, PWM_X_OFF=1500;
unsigned long int PWM_Y_ON=1500, PWM_Y_OFF=1500;
short PWM_CASE;

volatile unsigned char xdata *buf1=0x0500;


volatile unsigned char xdata *buf2=0x0100;
volatile unsigned char xdata *buf3=0x0600;
volatile unsigned char xdata *buf4=0x8000;
volatile unsigned char xdata *buf5=0x8400;

unsigned char temp1,temp2,temp3,temp4,temp5;

void msec(unsigned int x)


{
unsigned char j;
while(x-- > 0)
{
for (j=0;j<125;j++){};
}
}

void Timer0Int(void) interrupt 1 using 1{

switch (period) {
case 1 :
TL0=TL0_reload_1;
TH0=TH0_reload_1;
if (PWM_X_CHANNEL_ENABLED)
X_CHANNEL_OUTPUT=OFF;
if (PWM_Y_CHANNEL_ENABLED)
Y_CHANNEL_OUTPUT=OFF;
if (PWM_CASE==PWM_CASE_EQUAL) period++; //sarim peste 2
//la urmatoarea executie
break;

case 2 :
TL0=TL0_reload_2;
TH0=TH0_reload_2;

switch (PWM_CASE) {
case PWM_CASE_X_FIRST:
if (PWM_X_CHANNEL_ENABLED)
X_CHANNEL_OUTPUT=ON;
if (PWM_Y_CHANNEL_ENABLED)
Y_CHANNEL_OUTPUT=OFF;
break;
case PWM_CASE_Y_FIRST:
if (PWM_X_CHANNEL_ENABLED)
X_CHANNEL_OUTPUT=OFF;

Anexa 7 Pagina 114 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

if (PWM_Y_CHANNEL_ENABLED)
Y_CHANNEL_OUTPUT=ON;
break;
}
break;
case 3 :
TL0=TL0_reload_3;
TH0=TH0_reload_3;
if (PWM_X_CHANNEL_ENABLED)
X_CHANNEL_OUTPUT=ON;
if (PWM_Y_CHANNEL_ENABLED)
Y_CHANNEL_OUTPUT=ON;
period=0;
break;
}
period++;
}

void Timer1Int(void) interrupt 4 using 1{


int tempA1,tempA2;
int tempB1,tempB2;

if (timer_1_prescale < TIMER_1_PRESCALE_VALUE) {


timer_1_prescale++;
return;
}
timer_1_prescale=0;

// get x speed
P10=0; //activate LdA
P10=1; //deactivate LdA

tempA1=*buf4;
tempA2=*buf5;
x_pos=tempA2*256+tempA1;

if (x_pos > old_x_pos)


x_speed_get=x_pos-old_x_pos;
else
x_speed_get=old_x_pos-x_pos;

old_x_pos=x_pos;

// get y speed
P11=0; //activate LdB
P11=1; //deactivate LdB
tempB1=*buf1;
tempB2=*buf2;
y_pos=tempB2*256+tempB1;

if (y_pos > old_y_pos)


y_speed_get=y_pos-old_y_pos;
else
y_speed_get=old_y_pos-y_pos;

old_y_pos=y_pos;

// working speed X setting


// test x_speed_get against set speed
#ifdef DEBUGLEVEL2
putchar('x');

Anexa 7 Pagina 115 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

#endif

if (x_speed_get > x_speed_set)


// we must decrease the speed
if (PWM_X_OFF > SPEED_PAS) {
#ifdef DEBUG
putchar('d');
#endif
PWM_X_ON+=SPEED_PAS;
PWM_X_OFF-=SPEED_PAS;
switch ((x_speed_set-x_speed_get)/10) {
default:
if (PWM_X_OFF > SPEED_PAS) {
PWM_X_ON+=SPEED_PAS;
PWM_X_OFF-=SPEED_PAS;
}
case 2:
if (PWM_X_OFF > SPEED_PAS) {
PWM_X_ON+=SPEED_PAS;
PWM_X_OFF-=SPEED_PAS;
}
case 1:
if (PWM_X_OFF > SPEED_PAS) {
PWM_X_ON+=SPEED_PAS;
PWM_X_OFF-=SPEED_PAS;
}
case 0: break;
}
}
if (x_speed_get < x_speed_set)
// we must increase the speed
if (PWM_X_ON > SPEED_PAS) {
#ifdef DEBUG
putchar('i');
#endif
PWM_X_ON-=SPEED_PAS;
PWM_X_OFF+=SPEED_PAS;
switch ((x_speed_get-x_speed_set)/10) {
default:
if (PWM_X_ON > SPEED_PAS) {
PWM_X_ON-=SPEED_PAS;
PWM_X_OFF+=SPEED_PAS;
}
case 2:
if (PWM_X_ON > SPEED_PAS) {
PWM_X_ON-=SPEED_PAS;
PWM_X_OFF+=SPEED_PAS;
}
case 1:
if (PWM_X_ON > SPEED_PAS) {
PWM_X_ON-=SPEED_PAS;
PWM_X_OFF+=SPEED_PAS;
}
case 0: break;
}

// working speed Y setting


// test y_speed_get against set speed
#ifdef DEBUGLEVEL2
putchar('y');

Anexa 7 Pagina 116 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

#endif
if (y_speed_get > y_speed_set)
// we must decrease the speed
if (PWM_Y_OFF > SPEED_PAS) {
#ifdef DEBUG
putchar('d');
#endif
PWM_Y_ON+=SPEED_PAS;
PWM_Y_OFF-=SPEED_PAS;
switch ((y_speed_set-y_speed_get)/10) {
default:
if (PWM_Y_OFF > SPEED_PAS) {
PWM_Y_ON+=SPEED_PAS;
PWM_Y_OFF-=SPEED_PAS;
}
case 2:
if (PWM_Y_OFF > SPEED_PAS) {
PWM_Y_ON+=SPEED_PAS;
PWM_Y_OFF-=SPEED_PAS;
}
case 1:
if (PWM_Y_OFF > SPEED_PAS) {
PWM_Y_ON+=SPEED_PAS;
PWM_Y_OFF-=SPEED_PAS;
}
case 0: break;
}
}
if (y_speed_get < y_speed_set)
// we must increase the speed
if (PWM_Y_ON > SPEED_PAS) {
#ifdef DEBUG
putchar('i');
#endif
PWM_Y_ON-=SPEED_PAS;
PWM_Y_OFF+=SPEED_PAS;
switch ((y_speed_get-y_speed_set)/10) {
default:
if (PWM_Y_ON > SPEED_PAS) {
PWM_Y_ON-=SPEED_PAS;
PWM_Y_OFF+=SPEED_PAS;
}
case 2:
if (PWM_Y_ON > SPEED_PAS) {
PWM_Y_ON-=SPEED_PAS;
PWM_Y_OFF+=SPEED_PAS;
}
case 1:
if (PWM_Y_ON > SPEED_PAS) {
PWM_Y_ON-=SPEED_PAS;
PWM_Y_OFF+=SPEED_PAS;
}
case 0: break;
}

// acum avem PWM_X_ON si _Y_ON respectiv OFF


// trebuie sa vedem care dintre ON e mai scurt
// daca X_ON mai scurt suntem in cazul 1
// daca Y_ON atunci cazul 2
// else daca-s egale in cazul 3

Anexa 7 Pagina 117 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

if (PWM_X_ON < PWM_Y_ON) {


PWM_CASE = PWM_CASE_X_FIRST;
TL0_reload_1 = (unsigned char) ((MAX_INT-PWM_X_ON) & 0xFF);
TH0_reload_1 = (unsigned char) ((MAX_INT-PWM_X_ON) >> 8);

TL0_reload_2 = (unsigned char) ((MAX_INT-(PWM_Y_ON-PWM_X_ON)) &


0xFF);
TH0_reload_2 = (unsigned char) ((MAX_INT-(PWM_Y_ON-PWM_X_ON))
>> 8);

TL0_reload_3 = (unsigned char) ((MAX_INT-PWM_Y_OFF) & 0xFF);


TH0_reload_3 = (unsigned char) ((MAX_INT-PWM_Y_OFF) >> 8);
}
else if (PWM_Y_ON < PWM_X_ON) {
PWM_CASE = PWM_CASE_Y_FIRST;
TL0_reload_1 = (unsigned char) ((MAX_INT-PWM_Y_ON) & 0xFF);
TH0_reload_1 = (unsigned char) ((MAX_INT-PWM_Y_ON) >> 8);

TL0_reload_2 = (unsigned char) ((MAX_INT-(PWM_X_ON-PWM_Y_ON)) &


0xFF);
TH0_reload_2 = (unsigned char) ((MAX_INT-(PWM_X_ON-PWM_Y_ON))
>> 8);

TL0_reload_3 = (unsigned char) ((MAX_INT-PWM_X_OFF) & 0xFF);


TH0_reload_3 = (unsigned char) ((MAX_INT-PWM_X_OFF) >> 8);
}
else { //PWM_X_ON = PWM_Y_ON
PWM_CASE = PWM_CASE_EQUAL;
TL0_reload_1 = (unsigned char) ((MAX_INT-PWM_X_ON) & 0xFF);
TH0_reload_1 = (unsigned char) ((MAX_INT-PWM_X_ON) >> 8);

TL0_reload_3 = (unsigned char) ((MAX_INT-PWM_X_OFF) & 0xFF);


TH0_reload_3 = (unsigned char) ((MAX_INT-PWM_X_OFF) >> 8);
}

#ifdef DEBUG
#ifdef DEBUGLEVEL2
putchar('-');
putchar(PWM_CASE);
putchar('-');
#ifdef DEBUGLEVEL3
putchar(TL0_reload_1);
putchar(TH0_reload_1);
putchar(TL0_reload_2);
putchar(TH0_reload_2);
putchar(TL0_reload_3);
putchar(TH0_reload_3);
#endif
#endif
#endif

TL1=TL1_RELOAD;
TH1=TH1_RELOAD;
}

unsigned char getc(){


while (!RI);
RI=0;
return SBUF;
}

Anexa 7 Pagina 118 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

void set_X_dir(bit DIR){


bit temp;

temp=PWM_X_CHANNEL_ENABLED;
PWM_X_CHANNEL_ENABLED=FALSE;
X_CHANNEL_OUTPUT=1;
x_speed_set=0;

msec(150); //wait 150 msecs

//set direction and restore speed and status


X_CHANNEL_DIRECTION=DIR;
PWM_X_CHANNEL_ENABLED=temp;
}

void set_Y_dir(bit DIR){


bit temp;

temp=PWM_Y_CHANNEL_ENABLED;
PWM_Y_CHANNEL_ENABLED=FALSE;
Y_CHANNEL_OUTPUT=1;
y_speed_set=0;

msec(150); //wait 150 msecs

//set direction and restore speed and status


Y_CHANNEL_DIRECTION=DIR;
PWM_Y_CHANNEL_ENABLED=temp;
}

void init(void){

/*serial init*/
SCON=0x50; /*Enable receive*/
PCON=0x0;
TCON&=0xFB;

TI=1; /*Cause interrupt to start*/


RI=0;

TL0=0;
TH0=0x0D;
T2MOD=0x00; /*Timer1 mode 2 */
// TH1=0xFD; /*9600 baud 11.059MHz */
T2CON=0x34; /*Start baud Clock*/
ET2=0;
TR2=1;
TL2=0xDC; //*AdrSerial19200;
TH2=0xFF;

RC2L=0xF5; //*AdrSerial19200;
RC2H=0xFF;

REN=1;
EX1=0;
TR0=1;
EA=1;
EX0=1;
IT0=1;
TMOD=0x11; // Timer 0 16 bit, Timer 1 16 bit
TR0=1;

Anexa 7 Pagina 119 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

TR1=1;
ET0=1; //Timer 0 interrupt
ET1=1;
TH0=0x59; // pt. T=100.2 microsecunde /0x59
CMOD=0x05;
CCON=0x40;
IPH=0x42;
IP=0x02;

PPCH=1;
}

void main(void){
unsigned char command;
unsigned char spd_x,spd_y;

init();
printf("Init ok");

P12=0;
P13=0;

while(1){
if (RI){
command=getc();
//putchar(command);
switch (command){
case SET_PWM:
printf("Waiting for PWM settings\n");
TL0_reload_1=getc();
TH0_reload_1=getc();
TL0_reload_2=getc();
TH0_reload_2=getc();
PWM_X_ON=(int)TH0_reload_1*256+(int)TL0_reload_1;
PWM_X_OFF=(int)TH0_reload_2*256+(int)TL0_reload_2;
printf("Settings are: %d %d %d
%d\n",(int)TL0_reload_1,(int)TH0_reload_1,(int)TL0_reload_2,(int)TH0_reload
_2);
break;
case DOWNLOAD:
break;
case GET_X_POS:
P10=0; //activate LdA
P10=1; //deactivate LdA
temp1=*buf4;
temp2=*buf5;
printf("t1=%d t2=%d\n",(int)temp1,(int)temp2);
break;
case GET_Y_POS:
P11=0; //activate LdB
P11=1; //deactivate LdB
temp1=*buf1;
temp2=*buf2;
printf("t1=%d t2=%d\n",(int)temp1,(int)temp2);
break;
case SET_X_SPEED:
printf("Waiting for X speed\n");
spd_x=getc();
#ifdef DEBUG
printf("got speed %c",spd_x);
#endif
if (spd_x < 128)
{

Anexa 7 Pagina 120 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

x_speed_set=128-spd_x;
if (X_CHANNEL_DIRECTION==BACKWARD) {
#ifdef DEBUG
printf("negative X speed = -%d ,
reversing\n",x_speed_set);
#endif
set_X_dir(FORWARD);
}
}
else
{
if (X_CHANNEL_DIRECTION==FORWARD) {
#ifdef DEBUG
printf("positive X speed,
reversing\n");
#endif
set_X_dir(BACKWARD);
}
else
x_speed_set=spd_x-128;
}
break;
case SET_Y_SPEED:
printf("Waiting for Y speed\n");
spd_y=getc();
printf("got speed %d",spd_y);
if (spd_y < 128)
{
if (Y_CHANNEL_DIRECTION==BACKWARD) {
#ifdef DEBUG
printf("negative Y speed, reversing\n");
#endif

y_speed_set=128-spd_y;

set_Y_dir(FORWARD);
}
}
else
{
if (Y_CHANNEL_DIRECTION==FORWARD) {
#ifdef DEBUG
printf("negative Y speed, reversing\n");
#endif
set_Y_dir(BACKWARD);
}
else
y_speed_set=spd_y;
}
break;
case START_X:
#ifdef DEBUG
printf("Channel X activated\n");
#endif
PWM_X_CHANNEL_ENABLED=TRUE;
x_speed_set=0;
break;
case START_Y:
#ifdef DEBUG
printf("Channel Y activated\n");
#endif
PWM_Y_CHANNEL_ENABLED=TRUE;
y_speed_set=0;

Anexa 7 Pagina 121 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

break;
case STOP_X:
#ifdef DEBUG
printf("Channel X disabled\n");
#endif
PWM_X_CHANNEL_ENABLED=FALSE;
X_CHANNEL_OUTPUT=1;
x_speed_set=0;
break;
case STOP_Y:
#ifdef DEBUG
printf("Channel Y disabled\n");
#endif
PWM_Y_CHANNEL_ENABLED=FALSE;
Y_CHANNEL_OUTPUT=1;
y_speed_set=0;
break;
case test_INC_SPEED_X:
x_speed_set+=5;
break;
case test_DEC_SPEED_X:
x_speed_set-=5;
break;
case test_INC_SPEED_Y:
y_speed_set+=5;
break;
case test_DEC_SPEED_Y:
y_speed_set-=5;
break;
case test_INC_SPEED_GET_Y:
y_speed_get+=5;
break;
case test_DEC_SPEED_GET_Y:
y_speed_get-=5;
break;
case test_PRINT_SPEEDS_X:
printf("x_speed_set=%d x_speed_get=%d PWM_X_ON=%ld
PWM_X_OFF=%ld\n",x_speed_set,x_speed_get,PWM_X_ON,PWM_X_OFF);
break;
case test_PRINT_SPEEDS_Y:
printf("y_speed_set=%d y_speed_get=%d PWM_Y_ON=%ld
PWM_Y_OFF=%ld\n",y_speed_set,y_speed_get,PWM_Y_ON,PWM_Y_OFF);
break;
}
} else;
};
}

Anexa 7 Pagina 122 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Anexa 8 – Codul sursă al aplicaţiei server, care rulează pe


sistemul de comandă al robotului
// ServerDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Server.h"
#include "ServerDlg.h"
#include "UserMessage.h"

static CString g_strCom1;


static CString g_strCom2;
static CServerDlg *g_dlg;

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// CServerDlg dialog

CServerDlg::CServerDlg(CWnd* pParent /*=NULL*/)


: CDialog(CServerDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CServerDlg)
m_lPort = 6000;
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CServerDlg::DoDataExchange(CDataExchange* pDX)


{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CServerDlg)
DDX_Control(pDX, IDC_LIST_CONTROL, m_listControl);
DDX_Control(pDX, IDC_BUTTON_START_STOP, m_buttonConnect);
DDX_Control(pDX, IDC_LIST_SOCKET, m_listSocket);
DDX_Control(pDX, IDC_LIST_COM2, m_listCom2);
DDX_Control(pDX, IDC_LIST_COM1, m_listCom1);
DDX_Text(pDX, IDC_EDIT_PORT, m_lPort);
DDV_MinMaxLong(pDX, m_lPort, 0, 10000);
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CServerDlg, CDialog)
//{{AFX_MSG_MAP(CServerDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_START_STOP, OnButtonStartStop)
ON_BN_CLICKED(IDC_BUTTON1, OnButtonSocketClear)
ON_BN_CLICKED(IDC_BUTTON2, OnButtonControlClear)
ON_BN_CLICKED(IDC_BUTTON3, OnButtonCom1Clear)
ON_BN_CLICKED(IDC_BUTTON4, OnButtonCom2Clear)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

Anexa 8 Pagina 123 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

///////////////////////////////////////////////////////////////////////////
//
// CServerDlg message handlers

BOOL CServerDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.


ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);


if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX,
strAboutMenu);
}
}

// Set the icon for this dialog. The framework does this
automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here

m_portCom1 = initcomm("COM1",9600);
m_portCom2 = initcomm("COM2",57600);
this->OnButtonStartStop();
return TRUE; // return TRUE unless you set the focus to a control
}

void CServerDlg::OnSysCommand(UINT nID, LPARAM lParam)


{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

// If you add a minimize button to your dialog, you will need the code
below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.

void CServerDlg::OnPaint()
{
if (IsIconic())
{

Anexa 8 Pagina 124 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle


int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon


dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}

// The system calls this to obtain the cursor to display while the user
drags
// the minimized window.
HCURSOR CServerDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}

// Called when a user tries to connect to the server. Return TRUE to accept
// the connection or FALSE otherwise. The derived class must override this
// method.
BOOL CServerDlg::OnIsConnectionAccepted()
{
// Accept only 20 users as an example, you can change this number or
always
// return TRUE;
ASSERT(GetNbUsers() < 20);

return (GetNbUsers() < 20);


}

// Called when a user is connected to the server. The derived class must
// override this method.
void CServerDlg::OnConnect(long /*lUserId*/)
{
// OnMessage: ChatUserJoin adds the user in the map, so nothing to do here
}

// Called whenever a message is received from a user.


void CServerDlg::OnMessage(long lUserId, CNDKMessage& message)
{
CString strNickname;
m_mapIdsNicknames.Lookup(lUserId, strNickname);

switch (message.GetId())
{
case ChatUserJoin:
{
CString strNickname;
message.GetAt(0, strNickname);

AddUser(lUserId, strNickname);

Anexa 8 Pagina 125 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

CString strUserJoin;
strUserJoin.Format(IDS_USER_JOIN, strNickname);

AddSystemText(strUserJoin);

SendMessageToAllUsersExceptFor(lUserId, message);
}
break;

case ChatText:
{

CString strText;
message.GetAt(0, strText);

AddSocketText(strNickname + _T(": ") + strText);

message.SetAt(0, strNickname);
message.SetAt(1, strText);

// Send the text to all other users


SendMessageToAllUsersExceptFor(lUserId, message);
}
break;

case SpeedCommand:
{
CString strText;
message.GetAt(1, strText);
g_strCom2 = strText;

WriteCom2((LPVOID)m_portCom2);

AddSocketText(strNickname + _T(": SpeedCommand: ") +


strText);

message.SetAt(0, strNickname);
message.SetAt(1, strText);

// Send the text to all other users


SendMessageToAllUsersExceptFor(lUserId, message);

}
break;
case PTCommand:
{
CString strText;
message.GetAt(1, strText);
g_strCom1 = strText;

WriteCom1((LPVOID)m_portCom1);

AddSocketText(strNickname + _T(": PTCommand: ") +


strText);

message.SetAt(0, strNickname);
message.SetAt(1, strText);

// Send the text to all other users


SendMessageToAllUsersExceptFor(lUserId, message);
}

Anexa 8 Pagina 126 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

break;
case ChatBigMessage:
{
}
break;
}
}

// Called whenever a user is disconnected (the the user might have closed
// the connection or an error occurs when sending a message, for example).
// OnDisconnect callback isn't called when DisconnectUser or
// DisconnectAllUsers is used. DisconnectUser don't
// need to be called when OnDisconnect callback is called.
void CServerDlg::OnDisconnect(long lUserId, NDKServerDisconnection
disconnectionType)
{
CString strNickname;
m_mapIdsNicknames.Lookup(lUserId, strNickname);

CNDKMessage message(ChatUserQuit);
message.Add(strNickname);

// Inform all users that a user is disconnected


SendMessageToAllUsers(message);

UINT unResId = 0;

switch (disconnectionType)
{
case NDKServer_NormalDisconnection:
unResId = IDS_SERVER_CLOSE_USER;
break;

case NDKServer_ClientCloseConnection:
unResId = IDS_USER_QUIT;
break;

case NDKServer_ErrorSendingMessage:
unResId = IDS_ERROR_SENDING_MESSAGE;
break;

case NDKServer_ErrorReceivingMessage:
unResId = IDS_ERROR_SENDING_MESSAGE;
break;

default:
break;
}

CString strUserQuit;
strUserQuit.Format(unResId, strNickname);

//AddSystemText(strUserQuit);

DeleteUser(lUserId);
}

// Called when the ping from the user is received. The number of
// milliseconds is returned since PingUser was called.
void CServerDlg::OnPing(long lUserId, long lNbMilliseconds)
{
CString strNickname;
m_mapIdsNicknames.Lookup(lUserId, strNickname);

Anexa 8 Pagina 127 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

CString strPingReceived;
strPingReceived.Format(IDS_PING_RECEIVED, strNickname,
lNbMilliseconds);

//AddSystemText(strPingReceived);
}

void CServerDlg::DeleteUser(long lUserId)


{
CString strNickname;

m_mapIdsNicknames.Lookup(lUserId, strNickname);

m_mapIdsNicknames.RemoveKey(lUserId);
}

void CServerDlg::OnButtonStartStop()
{
if (UpdateData(TRUE))
{
if (IsStarted())
{
Stop();

UpdateUI();

AddSystemText((LPCSTR)IDS_STOPPED);
}
else
{
if (StartListening(m_lPort))
{
UpdateUI();

AddSystemText((LPCSTR)IDS_STARTED);

g_dlg = this;
//AfxBeginThread(ReadCom1, (LPVOID)m_portCom1);
}
else
{
AfxMessageBox(IDS_CANNOT_START, MB_ICONSTOP);
}
}
}
}

void CServerDlg::UpdateUI()
{
BOOL bEnable = IsStarted();

if (bEnable)
m_buttonConnect.SetWindowText(_T("&Stop"));
else
m_buttonConnect.SetWindowText(_T("&Start"));
}

void CServerDlg::AddSystemText(const CString& strText)


{
AddText(_T("* ") + strText + _T(" *"));
}

Anexa 8 Pagina 128 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

void CServerDlg::AddText(const CString& strText)


{
m_listControl.AddString(strText);
}

void CServerDlg::AddUser(long lUserId, const CString& strNickname)


{
m_mapIdsNicknames.SetAt(lUserId, strNickname);

//int nPos = m_listBoxUsers.AddString(strNickname);

//m_listBoxUsers.SetCurSel(nPos);
}

void CServerDlg::AddSocketText(const CString& strText)


{
m_listSocket.AddString(strText);
}

HANDLE CServerDlg::initcomm(char *sport, int spd) {


HANDLE hCom;
BOOL fSuccess;
LPCOMMTIMEOUTS
lpCommTimeouts=(LPCOMMTIMEOUTS)malloc(sizeof(COMMTIMEOUTS));
COMMTIMEOUTS noblock;
DCB dcb;
hCom=CreateFile(sport,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
fSuccess = GetCommTimeouts(hCom, &noblock);
noblock.ReadTotalTimeoutConstant = 1000;
noblock.ReadTotalTimeoutMultiplier = MAXDWORD;
noblock.ReadIntervalTimeout = MAXDWORD;

fSuccess = SetCommTimeouts(hCom, &noblock);


fSuccess = GetCommState(hCom, &dcb);
dcb.BaudRate = spd;
dcb.ByteSize = 8;
dcb.fParity = FALSE;
dcb.StopBits = ONESTOPBIT;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fOutxCtsFlow = FALSE;
fSuccess = SetCommState(hCom, &dcb);
lpCommTimeouts->ReadTotalTimeoutConstant = 0;
lpCommTimeouts->ReadTotalTimeoutMultiplier = 0;
if (SetCommTimeouts(hCom,lpCommTimeouts)==0) {
AfxMessageBox("error setting port timeouts");
}
return hCom;
}

void CServerDlg::writecomm(HANDLE hCom,char item) {


unsigned long ni;
BOOL fSuccess;
// LPDWORD lpModemStat=(LPDWORD)malloc(sizeof(PDWORD));
// EscapeCommFunction(comport,CLRRTS);
fSuccess = WriteFile( hCom, &item, 1, &ni, NULL);

Anexa 8 Pagina 129 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

// EscapeCommFunction(comport,SETRTS);
}

char CServerDlg::readcomm(HANDLE hCom) {


char item;
unsigned long ni;
BOOL fSuccess;

fSuccess = ReadFile( hCom, &item, 1, &ni, NULL);


if (ni == 0) return -1;
return item;
}

UINT CServerDlg::ReadCom1(LPVOID p)
{
while(1)
{
char sir[1000] = {0};
int i=0;
char c = readcomm( (HANDLE)p );
while (c!='1')
{
sir[i++] = c;
c = readcomm( (HANDLE)p ) ;
}
CString str;
str.Format("-->> %s", _T(sir) );
g_dlg->m_listCom1.AddString(_T(str));

CNDKMessage message(ChatText);
message.SetAt(0, _T("Server") );
message.SetAt(1, _T(str) );
try
{
g_dlg->SendMessageToAllUsers(message);
}
catch(...)
{
AfxMessageBox("Eroare");
}

break;
}
return 0;
}

UINT CServerDlg::ReadCom2(LPVOID p)
{
while(1)
{
char sir[1000] = {0};
int i=0;
char c = readcomm( (HANDLE)p );
while (c!='1')
{
sir[i++] = c;
c = readcomm( (HANDLE)p ) ;
}
CString str;
str.Format("-->> %s", _T(sir) );
g_dlg->m_listCom2.AddString(_T(str));

Anexa 8 Pagina 130 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

CNDKMessage message(ChatText);
message.SetAt(0, _T(sir) );
message.SetAt(1, _T(sir) );
try
{
g_dlg->SendMessageToAllUsers(message);
}
catch(CException e)
{
AfxMessageBox("Eroare");
}
}
return 0;
}

UINT CServerDlg::WriteCom1(LPVOID p1)


{
for(int i = 0; i < g_strCom1.GetLength(); i++)
{
Sleep(3);
writecomm((HANDLE)p1, g_strCom1.GetAt(i));
}
CString str;
str.Format("<<-- %s", g_strCom1);
m_listCom1.AddString(_T(str));
return 0;
}

UINT CServerDlg::WriteCom2(LPVOID p2)


{
for(int i = 0; i < g_strCom2.GetLength(); i++)
{
Sleep(3);
writecomm((HANDLE)p2, g_strCom2.GetAt(i));
}
CString str;
str.Format("<<-- %s", g_strCom2);
m_listCom2.AddString(_T(str));
return 0;
}

void CServerDlg::OnButtonSocketClear()
{
m_listSocket.ResetContent();
}

void CServerDlg::OnButtonControlClear()
{
m_listControl.ResetContent();
}

void CServerDlg::OnButtonCom1Clear()
{
m_listCom1.ResetContent();
}

void CServerDlg::OnButtonCom2Clear()
{
m_listCom2.ResetContent();
}

Anexa 8 Pagina 131 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

UserMessage.h

#pragma once

// Message Id shared with the client and the server


enum UserMessage
{
ChatUserJoin,
ChatUserQuit,
ChatText,
SpeedCommand,
PTCommand,
ChatBigMessage
};

Anexa 8 Pagina 132 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

Anexa 9 – Codul sursă al aplicaţiei de teleoperare

// tryDlg.cpp : implementation file


//

#include "stdafx.h"
#include "try.h"
#include "tryDlg.h"
#include "livex.h"
#include "NDKMessage.h"
#include "ChatMessage.h"
#include "SpeedCommands.h"
#include "PTCommands.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// CTryDlg dialog

CTryDlg::CTryDlg(CWnd* pParent /*=NULL*/)


: CDialog(CTryDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTryDlg)
m_strChat = _T("");
m_strEdit3 = _T("");
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CTryDlg::DoDataExchange(CDataExchange* pDX)


{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTryDlg)
DDX_Control(pDX, IDC_Mot_R, m_Mot_R);
DDX_Control(pDX, IDC_Mot_L, m_Mot_L);
DDX_Control(pDX, IDC_SLIDER2, m_slider2);
DDX_Control(pDX, IDC_SLIDER1, m_slider1);
DDX_Control(pDX, IDC_CHECK_BUTTON_2, m_chkButton2);
DDX_Control(pDX, IDC_CHECK_BUTTON_1, m_chkButton1);
DDX_Control(pDX, IDC_BUTTON_STOP_2, m_stop_2);
DDX_Control(pDX, IDC_BUTTON_STOP_1, m_stop_1);
DDX_Control(pDX, IDC_BUTTON_REC_2, m_rec_2);
DDX_Control(pDX, IDC_BUTTON_REC_1, m_rec_1);
DDX_Control(pDX, IDC_BUTTON3, m_buttonConnect);
DDX_Control(pDX, IDC_Axis_y, m_axis_y);
DDX_Control(pDX, IDC_Axis_x, m_axis_x);
DDX_Control(pDX, IDC_EDIT2, m_editChatWindow);
DDX_Control(pDX, IDC_LIVECTRL1, m_livex);
DDX_Control(pDX, IDC_LIVECTRL2, m_livex2);
DDX_Text(pDX, IDC_EDIT1, m_strChat);
DDX_Text(pDX, IDC_EDIT3, m_strEdit3);
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CTryDlg, CDialog)

Anexa 9 Pagina 133 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

//{{AFX_MSG_MAP(CTryDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButtonStartVideo)
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_BUTTON3, OnButtonConnect)
ON_BN_CLICKED(IDC_BUTTON2, OnButtonSend)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON4, OnButtonConfig)
ON_BN_CLICKED(IDC_BUTTON_STOP_1, OnButtonStop1)
ON_BN_CLICKED(IDC_BUTTON_FULL_1, OnButtonFull1)
ON_BN_CLICKED(IDC_BUTTON_REC_1, OnButtonRec1)
ON_BN_CLICKED(IDC_BUTTON_SNAP_1, OnButtonSnap1)
ON_BN_CLICKED(IDC_BUTTON_FULL_2, OnButtonFull2)
ON_BN_CLICKED(IDC_BUTTON_STOP_2, OnButtonStop2)
ON_BN_CLICKED(IDC_BUTTON_REC_2, OnButtonRec2)
ON_BN_CLICKED(IDC_BUTTON_SNAP_2, OnButtonSnap2)
ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////////////
//
// CTryDlg message handlers

BOOL CTryDlg::OnInitDialog()
{
CDialog::OnInitDialog();

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);


ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);


if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX,
strAboutMenu);
}
}

SetIcon(m_hIcon, TRUE); // Set big icon


SetIcon(m_hIcon, FALSE); // Set small icon

m_splash.DoModal(); // Afisam o fereastra de splash

m_joy.SetBaseDlg((CWnd *)this); // Initializam Joystick


if (FAILED(m_joy.InitDirectInput())) {
AfxMessageBox("No Joystick found. You won't be able to control
the robot.\nIf you have a joystick make sure it is registered under Gaming
Options in the Control Panel.",MB_OK+MB_ICONSTOP);
m_bJoystick=FALSE;
}
else { // Joystick neinitializat, nu mai facem polling
SetTimer( 0, 1000 / 15, NULL );
m_bJoystick=TRUE;
}

Anexa 9 Pagina 134 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

m_livex_started=FALSE;
m_livex2_started=FALSE;

// presetari, ce pot fi modificate ulterior


configDlg.SetVideoSettings("yanor","5550","4550","guest","");
configDlg.SetSettings("juve","yanor","6000");

m_iLastRSent=0;
m_iLastLSent=0;

m_slider1.SetRange(-100,100,FALSE);
m_slider2.SetRange(-100,100,FALSE);
m_slider1.SetPos(100);
m_slider2.SetPos(100);
UpdateData(TRUE);
poll_count=0;
//com1=initcomm("COM1");

return TRUE; // return TRUE unless you set the focus to a control
}

void CTryDlg::OnSysCommand(UINT nID, LPARAM lParam)


{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

// If you add a minimize button to your dialog, you will need the code
below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.

void CTryDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle


int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon


dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}

Anexa 9 Pagina 135 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

HCURSOR CTryDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}

void CTryDlg::OnButtonStartVideo()
{
CString m_strIp,m_strUsername,m_strPasswd;
long m_lDataPort, m_lCommandPort;

//citire valori setate din clasa config


configDlg.GetVideoSettings(m_strIp,m_lDataPort,m_lCommandPort,m_strUs
ername,m_strPasswd);

m_livex.CreateX();
m_livex.SetIpAddress(m_strIp);
m_livex.SetCommandPort(m_lCommandPort);
m_livex.SetDataPort(m_lDataPort);
m_livex.SetAutoLogin(TRUE);
m_livex.SetUserName(m_strUsername);
if (m_strUsername=="guest")
{
m_livex.SetDisablePWD(TRUE);
}
else
{
m_livex.SetDisablePWD(FALSE);
m_livex.SetPassword(m_strPasswd);
}
m_livex.SetDefaultCam(1);
m_livex.PlayX();
m_livex_started=TRUE;

m_livex2.CreateX();
m_livex2.SetIpAddress(m_strIp);
m_livex2.SetCommandPort(m_lCommandPort);
m_livex2.SetDataPort(m_lDataPort);
m_livex2.SetAutoLogin(TRUE);
m_livex2.SetUserName(m_strUsername);
if (m_strUsername=="guest")
{
m_livex2.SetDisablePWD(TRUE);
}
else
{
m_livex2.SetDisablePWD(TRUE);
m_livex2.SetPassword(m_strPasswd);
}
m_livex2.SetDefaultCam(2);
m_livex2.PlayX();
m_livex2_started=TRUE;
}

void CTryDlg::OnOK()
{
CDialog::OnOK();
}

void CTryDlg::OnDestroy()
{
m_livex.StopX();

Anexa 9 Pagina 136 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

m_livex.DestroyX();
m_livex2.StopX();
m_livex2.DestroyX();

CDialog::OnDestroy();
}

// NDK: overrides OnMessage, OnDisconnect and OnPing


void CTryDlg::OnMessage(CNDKMessage& message)
{
switch (message.GetId())
{
case ChatUserJoin:
{
CString strNickname;

message.GetAt(0, strNickname);

CString strUserJoin;
strUserJoin.Format(IDS_USER_JOIN, strNickname);

AddSystemText(strUserJoin);
}
break;

case ChatText:
{
CString strNickname;
CString strText;

message.GetAt(0, strNickname);
message.GetAt(1, strText);

AddText(strNickname + _T(": ") + strText);


}
break;

case ChatUserQuit:
{
CString strNickname;

message.GetAt(0, strNickname);

CString strUserQuit;
strUserQuit.Format(IDS_USER_QUIT, strNickname);

AddSystemText(strUserQuit);
}
break;
}
}

// Called whenever an unexpected disconnection occurs. The only case when


// this method isn't call is when CloseConnection is used. CloseConnection
// don't need to be called when when OnDisconnect is called. The derived
// class must override this method.
void CTryDlg::OnDisconnect(NDKClientDisconnection disconnectionType)
{
UINT unResId = 0;

switch (disconnectionType)
{

Anexa 9 Pagina 137 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

case NDKClient_NormalDisconnection:
unResId = IDS_DISCONNECTED;
break;

case NDKClient_ServerCloseConnection:
unResId = IDS_SERVER_CLOSE_CONNECTION;
break;

case NDKClient_ServerStop:
unResId = IDS_SERVER_STOPPED;
break;

case NDKClient_ErrorSendingMessage:
unResId = IDS_ERROR_SENDING_MESSAGE;
break;

case NDKClient_ErrorReceivingMessage:
unResId = IDS_ERROR_RECEIVING_MESSAGE;
break;

default:
break;
}

AddSystemText((LPCSTR)unResId);

if (disconnectionType==NDKClient_ErrorSendingMessage) if
(AfxMessageBox("Disconnected. Reconnect?",MB_RETRYCANCEL) == IDRETRY)
OnButtonConnect();
}

// Called when the ping from the server is received. The number of
// milliseconds is returned since PingServer was called.
void CTryDlg::OnPing(long lNbMilliseconds)
{
}

void CTryDlg::OnButtonConnect()
{
// TODO: Add your control notification handler code here
BOOL connected;
CString m_strNickname,m_strIp;
long m_lPort;

if (UpdateData(TRUE))
{
if (connected=IsConnected())
{
CloseConnection();
}
else
{
configDlg.GetSettings(m_strNickname,m_strIp, m_lPort);
if (OpenConnection(m_strIp, m_lPort))
{
AddSystemText((LPCSTR)IDS_CONNECTED);

CNDKMessage message(ChatUserJoin);
message.Add(m_strNickname);

SendMessageToServer(message);
}

Anexa 9 Pagina 138 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

else
{
AfxMessageBox(IDS_CANNOT_CONNECT,
MB_ICONSTOP);
}
}
connected=IsConnected();
if (connected)
m_buttonConnect.SetWindowText(_T("&Disconnect"));
else
m_buttonConnect.SetWindowText(_T("&Connect"));

}
}

void CTryDlg::AddText(const CString& strText)


{
m_editChatWindow.SetSel(m_editChatWindow.GetWindowTextLength(),
m_editChatWindow.GetWindowTextLength());
m_editChatWindow.ReplaceSel(strText + "\r\n");
}

void CTryDlg::AddSystemText(const CString& strText)


{
AddText(_T("* ") + strText + _T(" *"));
}

void CTryDlg::OnButtonSend()
{
if (IsConnected()) {
if (UpdateData(TRUE))
{
CNDKMessage message(ChatText);
message.Add(m_strChat);

SendMessageToServer(message);

AddText(m_strChat);

m_strChat.Empty();
UpdateData(FALSE);
}
}
else AfxMessageBox("Not connected",MB_OK+MB_ICONSTOP);

void CTryDlg::OnTimer(UINT nIDEvent)


{
// TODO: Add your message handler code here and/or call default

CDialog::OnTimer(nIDEvent);
CString m_strCommand;
char m_strPTCommand;
int axis_x,axis_y,mot_r,mot_l,i;
unsigned char spd_x,spd_y;
BOOL stopped=TRUE;

char buffer[20];

axis_y=-m_joy.GetAxis(1)/10;
axis_x=-m_joy.GetAxis(2)/10;

Anexa 9 Pagina 139 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

itoa(axis_x,buffer,10);
m_axis_x.SetWindowText(buffer);

itoa(axis_y,buffer,10);
m_axis_y.SetWindowText(buffer);

m_chkButton1.SetCheck(m_joy.GetPressed(0));
m_chkButton2.SetCheck(m_joy.GetPressed(1));

if (!m_joy.GetPressed(0)) // joystick button pressed, means we must


// activate PT
{
for (i=0;i<abs(axis_x)/10;i++)
{
if (axis_x > 10)
m_strCommand+=PT_UP;
else if (axis_x < -10)
m_strCommand+=PT_DOWN;
if (axis_x > 50)
m_strCommand+=PT_SPD_UP;
else if (axis_x < -50)
m_strCommand+=PT_SPD_DOWN;
}
for (i=0;i<abs(axis_y)/10;i++)
{
if (axis_y > 0) //&& (axis_y < 50))
m_strCommand+=PT_LEFT;
else if (axis_y < -10) //&& (axis_y > -50))
m_strCommand+=PT_RIGHT;
}
if (poll_count++ > 5) {
SendSerial1(m_strCommand);
poll_count=0;
}
}
else //joystick button not pressed, must be movement
{

// calculating speed_presets
if ((abs(axis_x) > 20) || (abs(axis_y) > 20))
{
if (axis_x > 0)
{
if (axis_y > 0)
{
mot_r=axis_x-axis_y;
mot_l=__max(axis_x,axis_y);
}
else
{
mot_r=__max(axis_x,abs(axis_y));
mot_l=axis_x+axis_y;
}
}
else //if (axis_x <= 0)
{
if (axis_y > 0)
{
mot_r=-__max(abs(axis_x),abs(axis_y));
mot_l=axis_y+axis_x;
}
else

Anexa 9 Pagina 140 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

{
mot_r=abs(axis_y)+axis_x;
mot_l=-__max(abs(axis_x),abs(axis_y));
}
}
stopped=FALSE;
}
else
{
mot_r=0;
mot_l=0;
stopped=TRUE;
}

spd_x=(mot_l/3)+128;
spd_y=(mot_r/3)+128;

if (stopped) {
m_strCommand=STOP_X;
m_strCommand+=STOP_Y;
}
else {

// checking agains last value sent for left side


if (m_iLastLSent != mot_l)
{
m_strCommand=START_X; //pornim ambele motoare
m_strCommand+=SET_X_SPEED;
m_strCommand+=(unsigned char)spd_x;
}

// checking agains last value sent for right side


if (m_iLastRSent != mot_r)
{
m_strCommand+=START_Y;//pornim ambele motoare
m_strCommand+=SET_Y_SPEED;
m_strCommand+=(unsigned char)spd_y;
}
}

// if we do have a command word, we send it


if (!m_strCommand.IsEmpty())
{
SendSerial2(m_strCommand);
m_iLastLSent=mot_l;
m_iLastRSent=mot_r;
}

m_slider1.SetPos(-mot_l);
m_slider2.SetPos(-mot_r);

itoa(mot_l,buffer,10);
m_Mot_L.SetWindowText(buffer);
itoa(mot_r,buffer,10);
m_Mot_R.SetWindowText(buffer);
}
}

void CTryDlg::OnButtonConfig()
{
configDlg.DoModal();

Anexa 9 Pagina 141 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

void CTryDlg::OnButtonStop1()
{
CString stat;
if (m_livex_started)
{
m_stop_1.GetWindowText(stat);
if (stat=="Stop")
{
m_livex.PauseX();
m_stop_1.SetWindowText("Start");
}
else
{
m_livex.PlayX();
m_stop_1.SetWindowText("Stop");
}
}
}

void CTryDlg::OnButtonFull1()
{
if (m_livex_started) m_livex.FullScreenX();
}

void CTryDlg::OnButtonRec1()
{
CString stat;
if (m_livex_started)
{
m_rec_1.GetWindowText(stat);
if (stat=="Rec")
{
m_livex.SaveFileX("cam1.out");
m_rec_1.SetWindowText("Stop");
}
else
{
m_livex.StopFileSaveX();
m_rec_1.SetWindowText("Rec");
}
}
}

void CTryDlg::OnButtonSnap1()
{
if (m_livex_started)
{
m_livex.SnapShotX();
}
}

void CTryDlg::OnButtonFull2()
{
if (m_livex2_started) m_livex2.FullScreenX();
}

void CTryDlg::OnButtonStop2()
{
CString stat;
if (m_livex2_started)
{

Anexa 9 Pagina 142 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

m_stop_2.GetWindowText(stat);
if (stat=="Stop")
{
m_livex2.PauseX();
m_stop_2.SetWindowText("Start");
}
else
{
m_livex2.PlayX();
m_stop_2.SetWindowText("Stop");
}
}
}

void CTryDlg::OnButtonRec2()
{
CString stat;
if (m_livex2_started)
{
m_rec_2.GetWindowText(stat);
if (stat=="Rec")
{
m_livex2.SaveFileX("cam2.out");
m_rec_2.SetWindowText("Stop");
}
else
{
m_livex2.StopFileSaveX();
m_rec_2.SetWindowText("Rec");
}
}
}

void CTryDlg::OnButtonSnap2()
{
if (m_livex_started)
{
m_livex.SnapShotX();
}
}

void CTryDlg::OnButton5()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString command=START_X;
command+=SET_X_SPEED;
command+=m_strEdit3.GetAt(0)-'0';
SendSerial2(command);
}

void CTryDlg::SendSerial1(CString chr) // send with socket to serial 1


{
CString m_strNickname,m_strIp;
long m_lPort;

configDlg.GetSettings(m_strNickname,m_strIp, m_lPort);
CNDKMessage ptcommand;
ptcommand.SetId(PTCommand);
ptcommand.SetAt(0,m_strNickname);
ptcommand.SetAt(1,chr);
SendMessageToServer(ptcommand);
}

Anexa 9 Pagina 143 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

void CTryDlg::SendSerial2(CString chr) // send with socket to serial 2


{
CString m_strNickname,m_strIp;
long m_lPort;

configDlg.GetSettings(m_strNickname,m_strIp, m_lPort);
CNDKMessage sercommand;
sercommand.SetId(SpeedCommand);
sercommand.SetAt(0,m_strNickname);
sercommand.SetAt(1,chr);
SendMessageToServer(sercommand);
}

void CTryDlg::OnButton6()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
SendSerial1(m_strEdit3);
}

HANDLE CTryDlg::initcomm(char *sport)


{
HANDLE hCom;
BOOL fSuccess;
LPCOMMTIMEOUTS
lpCommTimeouts=(LPCOMMTIMEOUTS)malloc(sizeof(COMMTIMEOUTS));
COMMTIMEOUTS noblock;
DCB dcb;
hCom=CreateFile(sport,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
fSuccess = GetCommTimeouts(hCom, &noblock);
noblock.ReadTotalTimeoutConstant = 1000;
noblock.ReadTotalTimeoutMultiplier = MAXDWORD;
noblock.ReadIntervalTimeout = MAXDWORD;

fSuccess = SetCommTimeouts(hCom, &noblock);


fSuccess = GetCommState(hCom, &dcb);
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.fParity = FALSE;
dcb.StopBits = ONESTOPBIT;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fOutxCtsFlow = FALSE;
fSuccess = SetCommState(hCom, &dcb);
lpCommTimeouts->ReadTotalTimeoutConstant = 0;
lpCommTimeouts->ReadTotalTimeoutMultiplier = 0;
if (SetCommTimeouts(hCom,lpCommTimeouts)==0) {
AfxMessageBox("error setting port timeouts");
}
return hCom;
}

void CTryDlg::writecomm(HANDLE hCom, char item)


{
unsigned long ni;
BOOL fSuccess;

Anexa 9 Pagina 144 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

LPDWORD lpModemStat=(LPDWORD)malloc(sizeof(PDWORD));
fSuccess = WriteFile( hCom, &item, 1, &ni, NULL);
}

SpeedCommands.h

#define GET_BUFF_LEN 0x01


#define START 0x02
#define STOP 0x03
#define OK 0x04
#define DOWNLOAD 0x05
#define BUFFER_OVERRUN 0x06
#define GET_COUNTER 0x07
#define GET_X_POS 0x08
#define GET_Y_POS 0x09
#define RESET 0x0A
#define SET_PWM 0x0B
#define SET_X_SPEED 0x0C
#define SET_Y_SPEED 0x0D
#define START_X 0x0E
#define START_Y 0x0F
#define STOP_X 0x10
#define STOP_Y 0x11
#define SET_DIR_X_FORW 0x12
#define SET_DIR_X_BACKW 0x13
#define SET_DIR_Y_FORW 0x14
#define SET_DIR_Y_BACKW 0x15

PTCommands.h

#define PT_LEFT 0x31


#define PT_RIGHT 0x32
#define PT_SPD_LEFT 0x33
#define PT_SPD_RIGHT 0x34
#define PT_UP 0x35
#define PT_DOWN 0x36
#define PT_SPD_UP 0x37
#define PT_SPD_DOWN 0x38

Joystick.cpp

// Joystick.cpp: implementation of the Joystick class.


//

#include "tryDlg.h"
#include "stdafx.h"
#include "try.h"
#include "Joystick.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }


#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }

LPDIRECTINPUT8 g_pDI;
LPDIRECTINPUTDEVICE8 g_pJoystick;

Anexa 9 Pagina 145 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

BOOL CALLBACK EnumObjectsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,


VOID* pContext );
BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE*
pdidInstance, VOID* pContext );

Joystick::Joystick()
{
g_pDI=NULL;
g_pJoystick=NULL;
axis_x=0;
axis_y=0;
}

Joystick::~Joystick()
{

HRESULT Joystick::InitDirectInput()
{
HRESULT hr;

// Register with the DirectInput subsystem and get a pointer


// to a IDirectInput interface we can use.
// Create a DInput object
if( FAILED( hr = DirectInput8Create( GetModuleHandle(NULL),
DIRECTINPUT_VERSION, IID_IDirectInput8, (VOID**)&g_pDI, NULL ) ) )
return hr;

// Look for a simple joystick we can use for this sample program.
if( FAILED( hr = g_pDI->EnumDevices( DI8DEVCLASS_GAMECTRL,
EnumJoysticksCallback,
NULL, DIEDFL_ATTACHEDONLY ) ) )
return hr;

// Make sure we got a joystick


if( NULL == g_pJoystick )
{
MessageBox( NULL, TEXT("Joystick not found.
Command not possible."), TEXT("Joystick initialization routine"),
MB_ICONERROR | MB_OK );
return -1;
}

//Set the data format to "simple joystick" - a predefined data format


//
//A data format specifies which controls on a device we are interested
// and how they should be reported. This tells DInput that we will be
// passing a DIJOYSTATE2 structure to
IDirectInputDevice::GetDeviceState().
if( FAILED( hr = g_pJoystick->SetDataFormat( &c_dfDIJoystick2 ) ) )
return hr;

// Set the cooperative level to let DInput know how this device should
// interact with the system and with other DInput applications.
if( FAILED( hr = g_pJoystick->SetCooperativeLevel( base_Dlg-
>GetSafeHwnd(), DISCL_EXCLUSIVE |

Anexa 9 Pagina 146 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

DISCL_FOREGROUND ) ) )
return hr;

// Enumerate the joystick objects. The callback function enabled user


// interface elements for objects that are found, and sets the min/max
// values property for discovered axes.
if( FAILED( hr = g_pJoystick->EnumObjects( EnumObjectsCallback,
(VOID*)base_Dlg-
>GetSafeHwnd(), DIDFT_ALL ) ) )
return hr;

return S_OK;
}

void Joystick::SetBaseDlg(CWnd *dlg)


{
base_Dlg=dlg;
}

BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE* pdidInstance,


VOID* pContext )
{
HRESULT hr;

// Obtain an interface to the enumerated joystick.


hr = g_pDI->CreateDevice( pdidInstance->guidInstance, &g_pJoystick,
NULL );

// If it failed, then we can't use this joystick. (Maybe the user


unplugged
// it while we were in the middle of enumerating it.)
if( FAILED(hr) )
return DIENUM_CONTINUE;

// Stop enumeration. Note: we're just taking the first joystick we get.
You
// could store all the enumerated joysticks and let the user pick.
return DIENUM_STOP;
}

BOOL CALLBACK EnumObjectsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,


VOID* pContext )
{
HWND hDlg = (HWND)pContext;

static int nSliderCount = 0; // Number of returned slider controls


static int nPOVCount = 0; // Number of returned POV controls

// For axes that are returned, set the DIPROP_RANGE property for the
// enumerated axis in order to scale min/max values.
if( pdidoi->dwType & DIDFT_AXIS )
{
DIPROPRANGE diprg;
diprg.diph.dwSize = sizeof(DIPROPRANGE);
diprg.diph.dwHeaderSize = sizeof(DIPROPHEADER);
diprg.diph.dwHow = DIPH_BYID;
diprg.diph.dwObj = pdidoi->dwType; // Specify the enumerated
axis
diprg.lMin = -1000;
diprg.lMax = +1000;

Anexa 9 Pagina 147 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

// Set the range for the axis


if( FAILED( g_pJoystick->SetProperty( DIPROP_RANGE, &diprg.diph ) )
)
return DIENUM_STOP;

// Set the UI to reflect what objects the joystick supports


if (pdidoi->guidType == GUID_XAxis)
{
EnableWindow( GetDlgItem( hDlg, IDC_X_AXIS ), TRUE );
EnableWindow( GetDlgItem( hDlg, IDC_X_AXIS_TEXT ), TRUE );
}
if (pdidoi->guidType == GUID_YAxis)
{
EnableWindow( GetDlgItem( hDlg, IDC_Y_AXIS ), TRUE );
EnableWindow( GetDlgItem( hDlg, IDC_Y_AXIS_TEXT ), TRUE );
}

return DIENUM_CONTINUE;
}

int Joystick::GetAxis(int ax_Nr)


{
HRESULT hr;
DIJOYSTATE2 js;

hr = g_pJoystick->Poll();
if( FAILED(hr) )
{
// DInput is telling us that the input stream has been
// interrupted. We aren't tracking any state between polls, so
// we don't have any special reset that needs to be done. We
// just re-acquire and try again.
hr = g_pJoystick->Acquire();
while( hr == DIERR_INPUTLOST )
hr = g_pJoystick->Acquire();

// hr may be DIERR_OTHERAPPHASPRIO or other errors. This


// may occur when the app is minimized or in the process of
// switching, so just try again later
return S_OK;
}

// Get the input's device state


if( FAILED( hr = g_pJoystick->GetDeviceState( sizeof(DIJOYSTATE2), &js
) ) )
return -1; // The device should have been acquired during the
Poll()

// Display joystick state to dialog

axis_x=(axis_x+js.lX) / 2;
axis_y=(axis_y+js.lY) / 2;
// Axes
if (ax_Nr==1)
return axis_x;
else return axis_y;

Anexa 9 Pagina 148 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

int Joystick::GetPressed(int m_iButton)


{
HRESULT hr;
DIJOYSTATE2 js;

hr = g_pJoystick->Poll();
if( FAILED(hr) )
{
// DInput is telling us that the input stream has been
// interrupted. We aren't tracking any state between polls, so
// we don't have any special reset that needs to be done. We
// just re-acquire and try again.
hr = g_pJoystick->Acquire();
while( hr == DIERR_INPUTLOST )
hr = g_pJoystick->Acquire();

// hr may be DIERR_OTHERAPPHASPRIO or other errors. This


// may occur when the app is minimized or in the process of
// switching, so just try again later
return S_OK;
}

// Get the input's device state


if( FAILED( hr = g_pJoystick->GetDeviceState( sizeof(DIJOYSTATE2), &js
) ) )
return -1; // The device should have been acquired during the
Poll()
return js.rgbButtons[m_iButton] & 0x80;
}

config.cpp

void config::GetSettings(CString &str_Nickname, CString &str_Ip, long


&l_Port)
{
str_Nickname=m_nickname;
str_Ip=m_ip;
l_Port=atol(m_port);
}

void config::GetVideoSettings(CString &str_Ip, long &l_dataPort, long


&l_commandPort, CString &str_user, CString &str_pass)
{
str_Ip=m_str_video_ip;
l_dataPort=atol(m_str_video_datap);
l_commandPort=atol(m_str_video_commandp);
str_user=m_str_video_user;
str_pass=m_str_video_pass;
}

void config::SetVideoSettings(CString str_Ip, CString str_dataPort, CString


str_commandPort, CString str_user, CString str_pass)
{
m_str_video_ip=str_Ip;
m_str_video_datap=str_dataPort;
m_str_video_commandp=str_commandPort;
m_str_video_user=str_user;
m_str_video_pass=str_pass;
}

Anexa 9 Pagina 149 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

LiveX.h

// CLiveX wrapper class

class CLiveX : public CWnd


{
protected:
DECLARE_DYNCREATE(CLiveX)
public:
CLSID const& GetClsid()
{
static CLSID const clsid
= { 0x6aefe48c, 0xfb6c, 0x4c27, { 0xa1, 0x61, 0xa0, 0xbf,
0x34, 0x38, 0x53, 0x7e } };
return clsid;
}
virtual BOOL Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL)
{ return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect,
pParentWnd, nID); }

BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,


const RECT& rect, CWnd* pParentWnd, UINT nID,
CFile* pPersist = NULL, BOOL bStorage = FALSE,
BSTR bstrLicKey = NULL)
{ return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect,
pParentWnd, nID,
pPersist, bStorage, bstrLicKey); }

// Attributes
public:
CString GetIpAddress();
void SetIpAddress(LPCTSTR);
long GetCommandPort();
void SetCommandPort(long);
long GetDataPort();
void SetDataPort(long);
BOOL GetFixSize();
void SetFixSize(BOOL);
long GetFixWidth();
void SetFixWidth(long);
long GetFixHeight();
void SetFixHeight(long);
BOOL GetDisablePWD();
void SetDisablePWD(BOOL);
CString GetPassword();
void SetPassword(LPCTSTR);
CString GetUserName();
void SetUserName(LPCTSTR);
short GetDefaultCam();
void SetDefaultCam(short);
BOOL GetAutoLogin();
void SetAutoLogin(BOOL);

// Operations
public:
void PlayX();
void StopX();
void SaveX();

Anexa 9 Pagina 150 din 151


Sistem robotizat mobil teleoperat Alexandru JONI

void ChangeCamX(short CamNum);


void ChangeQualityX(short Qual);
void SnapShotX();
void ShowCamMenuX();
BOOL ChangeSizeX(long width, long height);
BOOL CreateX();
BOOL DestroyX();
void DrawRectX(BOOL draw);
BOOL PauseX();
BOOL ResumeX();
BOOL ShowQulMenuX();
void SetToolTipX(LPCTSTR ToolTip);
BOOL FullScreenX();
void ReConnectX();
void IOControlX();
void PTZControlX();
BOOL SaveFileX(LPCTSTR path);
BOOL StopFileSaveX();
void OptionX();
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately
before the previous line.

#endif //
!defined(AFX_LIVEX_H__188ED032_77BD_4757_82D9_1CED512AE4BE__INCLUDED_)

Anexa 9 Pagina 151 din 151

S-ar putea să vă placă și