teleoperare bun

137
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 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.

Transcript of teleoperare bun

Page 1: teleoperare bun

Universitatea “POLITEHNICA” TimişoaraFacultatea de Automatică şi CalculatoareLaboratoarele DSPLabsLUCRARE DE DIPLOMĂ

SISTEM ROBOTIZAT MOBILTELEOPERAT, DESTINATSTUDIULUI VEDERII ARTIFICIALE ŞISTEREO-VIZIUNIIAlexandru JONICOORDONATOR ŞTIINŢIFIC:Şl. ing. Mihai V. MICEA20031 IntroducereLucrarea de faţă îşi propune abordarea domeniului teleoperării. Teleoperarea este unconcept 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ţiindustriali 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ţiispecifice;• 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 uneleprocese de comandă, că este nu doar oportună ci chiar indispensabilă în anumite condiţii deexploatare.1.1 Teleoperarea în domeniul roboticii

Page 2: teleoperare bun

Lucrarea prezintă o aplicaţie de comandă şi percepţie la distanţă, numită genericteleprezenţă şi teleoperare. În esenţă, este vorba despre transmiterea la distanţă, prin mediulinformatic, 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, transmitereacomenzilor către echipamentul aflat la distanţă este numită teleoperare, indiferent dacă celcare 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-arafla î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, încazul unei operaţii de reglare (umană sau automată).Scopul acestor aplicaţii este comanda sau percepţia la distanţă, şi poate fi impus de unadin situaţiile:- echipamentul (robot mobil) operează într-un mediu ostil, periculos pentru operatoruluman, cum ar fi reactoarele nucleare, zonele de război, etc.;- echipamentul colectează informaţii (sub diverse forme fizice) din zone inaccesibileoperatorului (spaţiul extraterestru, spaţii înguste), dar pe care operatorul trebuie să leperceapă ca şi cum ar fi prezent (cum ar fi cazul telechirurgiei);- echipamentul trebuie configurat de la distanţă (inclusiv roboţi mobili sau echipamenteindustriale);- echipamentul este disponibil într-un număr mic de exemplare (poate fi chiar unicat) şitrebuie folosit de mai mulţi utilizatori, aflaţi în zone geografice diferite (ca în cazulexperimentelor ş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), capabilsă execute comenzile recepţionate, datorită elementelelor de execuţie proprii;

Page 3: teleoperare bun

- un sistem de traductoare, instalat pe echipament, care furnizează informaţii despreevoluţia mediului şi despre gradul de executare a comenzilor;Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII1. Introducere Pagina 9 din 151- un sistem programabil, aflat la distanţă faţă de echipamentul operat, capabil să preiacomenzile operatorului sau să realizeze operaţia de automatizare (de obicei este vorbade un calculator de uz general, dar poate fi şi unul dedicat);- un mediu de transmisiune, prin care comunică cei doi corespondenţi. Mediul poate fiunul 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 seexploatează resursele hardware. De regulă, principiul pe care se bazează programeledin cele două calculatoare aflate în legătură este principiul client/server.1.2 Domeniile de aplicare ale teleoperării; exempleCele 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 deaplicare a teleoperării roboţilor, atât mobili cât şi staţionari.1.2.1 Teleoperarea în medii ostile omului1.2.1.1 Detectarea minelor anti-personalUna din problemele umanitare grave cu care se confruntă civilizaţia modernă oconstituie minele anti-persoană. Doar anul trecut au fost distruse 100.000 de mine, dar alte 2.5milioane au fost amplasate (cu precădere în Asia de sud-est). Distrugerea acestor mine este ooperaţiune periculoasă şi costisitoare.Figura 1 - Detectarea / distrugerea de mine în fosta IugoslavieDin acest motiv există în prezent mai multe proiecte ce încearcă rezolvarea acesteiprobleme. Soluţiile alese constau de obicei dintr-un robot mobil (ca unitate de execuţie) un

Page 4: teleoperare bun

algoritm de scanare a suprafeţei ce trebuie eliberată de mine, un element pentru detonarea saudezamorsarea minelor reperate. Reperarea se face în funcţie de tipul minelor folosite cudiferiţi senzori: detector de metale, senzor infraroşu, electro-optic, multi spectral, cuSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII1. Introducere Pagina 10 din 151dispozitive radar cu diferite lungimi de undă, senzori cu unde acustice, detectarea particulelorcu sarcini, rezonanţă, senzori chimic, biologici, câini, etc.Figura 2 - Robot mobil detector de mine1.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 posibilelorurmă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 imunla radiaţii ridicate, să poată depăşi obstacole de diferite forme (obstacole ce rezultă în urmaunei explozii), să fie capabili să furnizeze date corecte şi în aceste situaţii personalului deteleoperare.Figura 3 - Robot mobil folosit la inspecţii în urma dezastrelor nucleare1.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 apreveni pierderea de vieţi umane şi pentru a putea relua activităţile normale cât mai repede sefolosesc şi în aceste cazuri tot mai des roboţi mobili.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII1. Introducere Pagina 11 din 151Figura 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ă aexplozibilului. Î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

Page 5: teleoperare bun

stabilitatea acestuia (pentru evitarea răsturnării sub greutatea proprie sau a sarcinii purtate) şide aderenţa la terenul pe care se deplasează (pentru evitarea patinării chiar în condiţiile unuisol cu caracteristici nefavorabile). Gabaritul redus (atât longitudinal cât şi transversal), ca şigreutatea proprie redusă, reprezintă condiţii extrem de severe impuse roboţilor mobili; aceştiatrebuie să pătrundă în clădiri şi locuri mai puţin accesibile, să se deplaseze pe culoare sau înpasaje proiectate iniţial numai pentru accesul operatorului uman.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII1. Introducere Pagina 12 din 151Figura 6 - Inspectarea unui autovehicul de către un robot mobilŢările puternic industrializate au în dotarea forţelor armate roboţi mobili înzestraţi cuechipamente de lucru, care permit efectuarea operaţiilor de detecţie, manipulare şi neutralizarea muniţiilor neexplodate şi a dispozitivelor explozive capcană. Montate la capătul ultimuluibraţ al manipulatorului – robot, aceste echipamente de lucru pot fi: detector de metale sauexplozivi la adâncime, dispozitiv de prehensiune tip cleşte, instalaţie de control prinradiografiere, 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 locuriaglomerate (aeroporturi, gări, pieţe etc.) pentru a detecta şi neutraliza unele dispozitiveexplozive capcană (colete, genţi diplomat etc.).Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII1. Introducere Pagina 13 din 151Figura 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ăriitehnologiei de teleoperare a unor roboţi mobili în cadrul cercetării spaţiale.Figura 9 - Robot mobil teleoperat din anii ‘60Concepte legate de mărime, sisteme de acţionare, telecomunicaţii s-au modificat drasticîn ultimele 4 decenii de dezvoltare.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII1. Introducere Pagina 14 din 151Figura 10 - Comparaţie între roboţi mobili (în fundal Apollo 15 LRV anii 70, în plan apropiat Sojourner –1997)

Page 6: teleoperare bun

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) încadrul 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 mobilSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII1. Introducere Pagina 15 din 151Figura 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ă pentrumultitudinea de obstacole de diferite dimensiuni întălnite. Datorită faptului că viteza dedeplasare a robotului mobil Sojourner este relativ mică (câţiva centimetri pe secundă) unalgoritm de evitare a tuturor obstacolelor s-a dovedit a fi foarte neproductiv.Figura 13 - Depăşirea unui obstacolSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII1. Introducere Pagina 16 din 151Figura 14 - Sojourner pregătit pentru transportFigura 15 - Sojourner pregătit de funcţionareFigura 16 - Robot mobil experimentalSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII1. Introducere Pagina 17 din 151Figura 17 - Pathfinder şi SojournerFigura 18 - Versiunea a doua a lui SojournerUna din problemele cela mai mari întâlnite în cazul robotului mobil Sojourner a fostdiferenţa foarte mare de temperatură ambiantă ce poate apare. Noaptea temperatura scadepâ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 protejaelectronica 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 (InstrumentDeplyment Device). Acesta este un braţ robotizat, ce permite utilizarea echipamentelor decercetare din dotare, cum ar fi: un ansamblu pentru preluare de imagini (format dintr-un

Page 7: teleoperare bun

microscop şi o cameră de înaltă rezoluţie), un spectrometru Mössbauer, un spectrometru curaze X şi un dispozitiv pentru preluarea de mostre de rocă.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII1. Introducere Pagina 18 din 151Figura 19 - Robotul mobil Sojourner preluând o mostră de rocăFigura 20 - Design experimental de robot mobilSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII1. Introducere Pagina 19 din 151Figura 21 - Detaliu al subsitemului video la un robot mobil1.2.2 Teleoperarea în zone inaccesibile omuluiNu doar în zonele periculoase se folosesc roboţi mobili, ci şi în zone inaccesibile saugreu accesibile omului. Acestea pot fi: inspectarea ţevilor, conductelor, operaţii subacvatice lamare 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 deepave, etc.1.2.2.1 Inspecţia conductelorFigura 22 - Robot mobil folosit la inspecţia ţevilorSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII1. Introducere Pagina 20 din 151Sistemele de inspecţie a conductelor sunt formate uzual din mai multe părţi: robotulmobil ce oferă platforma locomotorie, o cameră video uzual montată pe un dispozitiv cepermite 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 probecu lichide penetrante, scanări ultrasonice, cu raze x. Acestea se efectuează periodic pentru averifica 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 testelorpropuse.Figura 23 - Exemplu de robot mobil folosit la inspecţia conductelorPentru 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 încazul operării pe verticală.Figura 24 - Robot mobil pentru inspecţia conductelor verticale

Page 8: teleoperare bun

1.2.2.2 Inspecţia în zone greu accesibilePentru a putea pătrunde în zone greu accesibile este nevoie de roboţi mobili dedimensiuni foarte reduse. Aceste dimensiuni reduse au însă un impact asupra calităţiiteleprezenţei. În special calitatea imaginilor video teletransmise este scăzută datorită distanţeila sol foarte mici. Pentru a depăşi acest inconvenient au fost concepuţi roboţi mobili ce îşimodifică forma în timpul operării.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII1. Introducere Pagina 21 din 151Figura 25 - Robot mobil pentru zone greu accesibileFigura 26 - Modificarea formei în timpul operăriiPrintre 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 (înspecial inspecţia fundaţiilor), etc.1.2.2.3 Roboţii subacvaticiAceştia operează uzual la adâncimi destul de mari, de până la 7-8000 de metriadâncime. Printre aplicaţiile uzuale numărăm: cartografiere, detectarea de epave, readucereala suprafaţă a diferitor obiecte (cum ar fi bucăţi de epavă, chiar elicoptere sau alte aparate dezbor), inspecţia epavelor (Magellan 725 a fost folosit acum câţiva ani în cadrul unei anchetelegate de scufundarea unui vas cargo, astfel s-a demonstrat că vasul a fost scufundat deliberatpentru încasarea primei de asigurare), salvarea scufundătorilor sau a altor naufragiaţi, etc.Figura 27 - Robot subacvatic teleoperatSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII1. Introducere Pagina 22 din 151Figura 28 - Robot subacvatic de recunoaştere1.2.2.4 Roboţii militari mobiliÎn cadrul militar folosirea roboţilor mobili aduce numeroase avantaje. Se pot efectuaoperaţiuni de recunoaştere, de spionaj fără riscul pierderilor de trupe (sau de divulgare ainformaţ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ţionalSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII

Page 9: teleoperare bun

1. Introducere Pagina 23 din 151Figura 30 - Robot mobil militar folosit la aprovizionarea cu medicamenteFigura 31 - Robot mobil folosit la decontaminări / înlăturarea obstacolelor

1.3 Obiectivele proiectuluiLucrarea de faţă îşi propune abordarea domeniilor de teleoperare şi teleprezenţă,domenii relativ noi, dar cu o creştere uimitoare în ultimii ani.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII1. Introducere Pagina 24 din 151În cele ce urmează se doreşte prezentarea, pe lângă stadiul actual de dezvoltare atehnicilor de teleoperare/teleprezenţă, şi prezentarea unei aplicaţii de teleoperare tipice. S-audezvoltat, şi sunt prezentate în cele ce urmează, componente de acţionare, de comandă, deteletransmitere 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 proiectuluiMarea majoritate a instituţiilor de învăţământ superior tehnic din lume manifestă înultimii ani un puternic interes faţă de tehnologia de teleoperare şi de teleprezenţă, dezvoltânddouă sau chiar trei discipline de studiu în domeniu, alocând pentru acestea importante sumede bani, oameni cu o înaltă calificare şi laboratoare echipate specific. De asemenea sistemeleteleoperate constituie un domeniu de interes pecial pentru cercetarea universitară, pentruactivităţile de doctorat şi masterat.Departamentul de Ştiinţa şi Ingineria Calculatoarelor reprezentat prin laboratorulDSPLabs, se încadrează la rândul său în tendinţa generală manifestată în acest domeniu atât înmediul 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 odezvoltare puternică în ultimii ani, atât din punct de vedere al dotării cât şi al numărului demembri activi, componente esenţiale ce au contribuit la statutul său actual. În momentul defaţă 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

Page 10: teleoperare bun

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 decare dispune laboratorul.Experienţa câştigată în activităţile de cercetare / dezvoltare şi la concursurile dindomeniul prelucrării numerice a semnalelor şi comenzii numerice a sistemelor a contribuit înmare măsură la iniţierea în anul 1999 a unei fructuoase colaborări cu compania Motorola dinSUA, colaborări ce continuă şi în prezent.Astfel încheierea unui proiect de o asemenea anvergură în cadrul acestui laboratorreprezintă încă un exemplu legat ce demonstrează potenţialul acestui laborator.1.5 Structura lucrăriiPrimul capitol este o introducere, care îsi propune să contureze obiectivele acesteilucrări de diplomă şi cadrul general în care s-a născut. Sunt prezentate pe scurt posibilităţileactuale î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 folosireaunor encodere pentru măsurarea poziţiei şi a vitezei de deplasare.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII1. Introducere Pagina 25 din 151În cel de-al patrulea capitol este prezentat subsistemul de alimentare, bateria de 12V125 Ah, panoul solar (împreună cu o descriere a tehnologiei solare), precum şi convertizorulnecesar pentru alimentarea PC-ului de pe robot.Următorul capitol prezintă aspecte legate de comunicaţii, tehnologia WLAN folosită la

Page 11: teleoperare bun

comanda robotului precum şi la realizarea teleprezenţei, folosirea socket-urilor pentrucomunicaţia interproces şi transmisia video a imaginilor de la cele două camere prinstreaming MPEG4.Capitolul al şaselea prezintă realizarea practică a robotului împreună cu realizareavirtuală a acestuia.Următorul capitol prezintă aspecte legate de furnizarea imaginilor. Se prezintă camerelefolosite, împreună cu placa de captură folosită la digitizarea semnalului analogic. Se maiprezintă şi dispozitivul ales pentru realizarea înclinării şi rotirii camerelor.Cel de-al optulea capitol descrie sistemul de comandă. Este prezentată interfaţaaplicaţiei de teleoperare, precum şi posibilitatea de comandă a robotului prin intermediul unuijoystick.Î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ăţide î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.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII2. Descrierea generalã a sistemului Pagina 26 din 151

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 celece urmează şi în detaliu în capitolele aferente-2.1 Componenţa sistemuluiAplicaţia de teleoperare este compusă din mai multe subsisteme prezentate schematic înfigura ce urmează.Figura 32 - Arhitectura sistemuluiCum 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,

Page 12: teleoperare bun

• subsistemul de comunicaţie,• aplicaţiile softwarePrimul sistem, sistemul de acţionare împreună cu platforma robotului mobil, au un rolprincipal în poziţionarea robotului. Sistemul este compus din două punţi de tip „H” cerealizează comanda a două motoare DC, un sistem cu microcontroler care le comandă.AplicaţiaSERVER,rulează perobotul mobilAplicaţia deteleoperare,rulează lautilizatorImagini videoDate sistemInternetComenziImagini videoDate sistemComenziSistemul deorientare acamerelorRS232Sistemul deacţionare arobotuluiRS232SubsistemulvideoSemnal video complexSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII2. Descrierea generalã a sistemului Pagina 27 din 151Sistemul video este compus dintr-o placă de achiziţie video, două camere alb/negru cusenzor CCD şi un server soft, care realizează encodarea semnalelor video în format MPEG2 şiteletransmiterea acestora la clientul ce realizează teleoperarea.Pentru a îmbunătăţi calităţile de teleprezenţă, camerele video au fost montate pe undispozitiv de rotire / înclinare, comandat tot de către utilizatorul de teleoperare. Astfel de ladistanţă se pot roti şi orienta cele două camere.

Page 13: teleoperare bun

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 deteleoperare de o perioadă lungă de şcolarizare, acomodare.2.2 Modul general de operareSistemul implementat în cadrul acestei lucrări de diplomă este un sistem complet deteleoperare. 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 peparcursul acestei lucrări. În cele ce urmează se prezintă modul general de operare a sistemuluide 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 şicomunicaţ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 şiparolă de acces, după care se va conecta la robotul mobil. Primul utilizator conectat va putealansa şi comenzi. Utilizatorii conectaţi ulterior nu vor putea interveni în acţiunile robotuluimobil, ci vor fi simplii privitori. Menţionăm că utilizatorii ulteriori au acces la transmisiuneavideo. 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 suntconvertite în comenzi şi teletransmise robotului pentru a fi interpretate şi transformate înacţiuni.2.3 Specificaţiile tehnicePlatforma mobilăDimensiuni: 1010x830x1600 mm

Page 14: teleoperare bun

Greutate: aprox. 80 kgBaterie: 124 AhPanou solar: 50 WhConvertizor 220V: 200 WSubsistemul de acţionareMotoare: 2 x 150 W DCPunte tip “H”: 2 x 10 A (DA 100%), cu limitare electronicăSiguranţe: F 15ACamere videoLentilă: 3.6 mm F 2.0 focus fixSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII2. Descrierea generalã a sistemului Pagina 28 din 151Viteză shutter: 1/60 - 1/100,000Iluminare minimă necesară: 0,5 LuxRezoluţie: 420 linii orizontale TVConsum: 1,3 WDispozitiv rotire / înclinareAlimentare: 5V, 12VConsum: 5,2 WRotire: > 360 deg.Înclinare: 180 deg.WLANViteză: 22 MbpsAcoperire: 300 m câmp deschisAntenă: 2 dBiCalculator gazdă pe robotProcesor: AMD K6-2 500 MHzMemorie: 128 MB SDRAMSistem de operare: Windows 2000Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 29 din 151

3 Sistemul de acţionare al robotului3.1 Acţionarea unui motor de curent continuuPentru a antrena un motor de curent continuu este suficient să-l conectăm la o sursă detensiune. Astfel motorul începe o mişcare de rotire. Pentru a schimba sensul de rotaţie estesuficient să inversăm polaritatea.Pentru a comanda un motor de către un microcontroler este necesar un element decomutaţ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 cutranzistoare.

Page 15: teleoperare bun

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 suficientde mare pentru a putea acţiona releul) se va aclanşa releul, fapt ce va determina trecerea unuicurent 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 inversSimilar cu cele discutatea anterior, dacă se aplică o tensiune logică la intrarea B motorulva fi acţionat corespunzător.3.1.1 Puntea tip “H” pentru acţionarea unui motor de curent continuuPentru a putea însă modifica direcţia de rotire a motorului şi în timpul funcţionării estenevoie de o punte de tip „H“ ca în figura următoare.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 30 din 151Figura 35 - Schemă bloc a unei punţi tip „H“Pentru a roti motorul într-un sens este necesară închiderea a două relee. În următoareafigură s-au închis releele A şi D iar B şi C au rămas deschise.Figura 36 - Deschiderea unei părţi a punţiiSimilar pentru a roti motorul în sens invers se comandă releele B şi C.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 31 din 151Figura 37 - Deschidere inversă a punţiiNiciodată 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 înlocul releelor se folosesc tranzistori.Astfel schema devine:Figura 38 - Punte „H“ cu tranzistoriPentru a proteja tranzistorii de tensiunea suplimentară generată de către motor înmomentul frânării circuitului mai trebuie adăugate nişte diode de protecţie.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 32 din 151Figura 39 - Diode de protecţieTranzistorii, fiind circuite semiconductoare, au o rezistenţă internă. Crescând curentul ce

Page 16: teleoperare bun

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ă prinadăugarea mai multor componente. S-a adăugat o limitare de curent, realizată cu un shunt înserie cu motorul. Căderea de tensiunea de pe acest shunt este comparată de un amplificatoroperaţional cu o tensiune prestabilită.Ca element de protecţie suplimentar s-au adăugat siguranţe de 15A pe alimentărilemotoarelor, astfel dacă protecţia electronică de curent nu funcţionează se protejează sursa dealimentare a montajului.O schemă completă a punţii realizate se găseşte în Anexa 1 la pagina 100.3.1.2 Tranzistorii MOS-FETSpre deosebire de tranzistori bipolari, tranzistorii cu efect de câmp (MOS-FET) au orezistenţă internă scăzută, astfel permit trecerea unui curent mai mare, fără a se încălzi preatare.Un tranzistor metal-oxid-semiconductor cu efect de câmp (MOSFET) este format dintr-osuprapunere a mai multor straturi de metal, oxid şi un strat semiconductor. Cele mai recentecircuite folosesc însă o grilă din polisiliconi în locul celei metalice.Figura 40 - Tranzistor MOS-FETSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 33 din 151Există două tipuri de bază de tranzistori MOSFET. Tranzistori MOSFET cu canal P (PMOSFETsau PMOS) şi tranzistori cu canal N (N-MOSFET sau NMOS). În aplicaţii se maifoloseşte şi aşa numitul CMOS (MOSFET complementar) care este de fapt o combinaţie acelor 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-MOSEste un tranzistor cu canal indus de tip P. Prin acest canal circulă goluri ca purtătoare decurent. Sursa şi drena, precum se poate observa din figura următoare, sunt fabricate dinmaterial dopat P, iar grila este dintr-un strat de polisilicon ce se află deasupra stratului deoxid.Figura 41 - Tranzistor P-MOS

Page 17: teleoperare bun

În figura din dreapta se observă stratul format din goöuri în imediata apropiere a stratuluide oxid al grilei în momentul aplicării unei tensiuni negative grilei. Dacă sursei i se aplică otensiune pozitivă va apărea o scurgere de goluri dinspre sursă spre drenă.3.1.2.2 Tranzistorii N-MOSSimilar cu tranzistorii P-MOS cei N-MOS sunt formaţi din material dopat de tip N (lasursă şi drenă) şi dintr-un strat de polisilicon deasupra stratului de oxid al grilei.Figura 42 - Tranzistori N-MOSSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 34 din 151În figura din dreapta se observă canalul de electroni ce se formează în momentul aplicăriiunei tensiuni pozitive asupra grilei. Dacă se aplică o tensiune drenei, va apare o scurgere deelectroni dinspre sursă înspre drenă.3.1.3 Tranzistorul IRFZ44NEste un tranzistor MOSFET de tip N. În tabelul următor sunt prezentate câteva dincaracteristicile acestuia.Simbol Caracteristică Valoare UnitateVDSS Tensiune sursă drenă maximă 60 VCurent de drenă continuu (T=25°C) 50 IDCurent de drenă continuu (T=150°C) 35.4AIDM Curent de drenă pulsat 200 AVGS Tensiune grilă-sursă ±20 VPD Putere maximă disipată (T=25°C) 126 WR.JC Rezistenţă termică joncţiune carcasă 1.19 °C/WR.CS Rezistenţă termică carcasă radiator 0.5 °C/WR.JA Rezistenţă termică joncţiune ambient 62.5 °C/WRDS(on) Rezistenţă drenă sursă la o tensiune grilă sursă =10V şi un curent ID=25A0.024 .În cele ce urmează vom face câteva clarificări legate de modelul folosit pentru a alegetranzistorul şi pentru a determina cantitatea de energie disipată, precum şi calităţileradiatorului.Tranzistorul este ambalat într-o capsulă de tip TO-220AB, care permite un transfer deaprox. 75A, astfel nu s-a ales un tranzistor cu ID > 70A (IRF1405 are un ID=169A, dar caredin cauza capsulei nu se poate atinge).

Page 18: teleoperare bun

Din documentaţia tranzistorului preluăm şi temperatura maximă a joncţiuniiTJ=175°C, precum şi o relaţie între curent şi temperatura capsulei, dată deR.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 fiidentică cu cea a capsulei. Dacă avem un curent de 10A diferenţa de temperatură va fi de11.9°C.Puterea disipată de către tranzistor este dată de formula lui Ohm:P = I2RR î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 * Wrezultă 126W, valoare ce corespunde şi cu modelul teoretic din documentaţie.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 35 din 151Pentru a calcula valoarea curentului ce poate trece prin tranzistor fără răciresuplimentară folosim R.JA. La o temperatură a joncţiunii de 175°C şi o temperatură aambientului de 25°C (temperatura camerei) puterea disipată va fi:P = 150 / R.JA

P = 2.4 WdarP = I2R,rezultă curentul I = sqrt(P/R)I = 10ADatorită faptului că temperatura ambiantă poate creşte datorită anumitor factori,refacem calculele pentru T = 40°C, şi astfel obţinem un curent I = 9.5APutem astfel, fără răcire să încărcăm tranzistorul pănă la 9.5A. Calculăm şitemperatura capsulei:TC=175°C – (2.4 W * 1.19 °C / W)TC=172.14°CDin 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 motiveste faptul că, deşi curentul de aproape 10A ar fi suficient pentru motorul ales, în cazul uneiprobleme neprevăzute s-ar putea ajunge la un curent mai mare, lucru care ar duce cu siguranţăla deteriorarea tranzistorilor.3.1.4 Tranzistorul IRF4905Este un tranzistor MOSFET de tip P. În tabelul următor sunt prezentate câteva din

Page 19: teleoperare bun

caracteristicile acestuia.Simbol Caracteristică Valoare UnitateCurent de drenă continuu (T=25°C) 64 IDCurent de drenă continuu (T=150°C) 45AIDM Curent de drenă pulsat 260 AVGS Tensiune grilă-sursă ±20 VPD Putere maximă dispipată (T=25°C) 150 WR.JC Rezistenţă termică joncţiune carcasă 1.0 °C/WR.CS Rezistenţă termică carcasă radiator 0.5 °C/WR.JA Rezistenţă termică joncţiune ambient 62 °C/WRDS(on) Rezistenţă drenă sursă la o tensiune grilă sursă =10V şi un curent ID=25A0.02 .3.2 Sistemul de măsurare a deplasării cu ajutorul unui encoderPentru a putea măsura distanţa parcursă, respectiv derivata acesteia viteza este necesarun dispozitiv ce transformă mişcarea motorului şi a roţilor într-un semnal digital.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 36 din 151Un 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) undetector 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 encoder3.2.1 Tipuri de encodereDacă se foloseşte un encoder ca element de reacţie, de feedback, există o multitudine desoluţii la care se poate apela. În cele ce urmează sunt prezentate pe scurt variantele utilizate înmomentul 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 incrementalSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 37 din 151Figura 45 - Disc codor a unui encoder incremental

Page 20: teleoperare bun

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 nubeneficiază 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 lamotoare cu 2, 4, 6 sau 8 poli, şi din acest motiv alimentarea fazelor trebuie făcută intermitentpentru a se obţine o rotaţie. Semnalele de comutaţie sunt folosite pentru a schimbaalimentarea 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 trifazicSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 38 din 151Figura 47 - Disc codor a unui encoder incremental cu semnale de comutaţie3.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 oamplitudine (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 sau12 biţi. Există şi în variante cu rezoluţie mai bună, dar de obicei sunt folosite doar în aplicaţiifoarte specializate.Figura 48 - Disc codor a unui encoder absolut (cod Grey)Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 39 din 151Figura 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 sau13 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 la24 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

Page 21: teleoperare bun

referinţă, o interfaţă serială pentru transferul poziţiei absolute (de obicei RS485 sau RS422) şiieşiri de comutaţie. Din LSB-ul poziţiei absolute se generează un semnal incremental cu 2048sau 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ţiiPentru 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 semnalde reset de tipul TL7705, trei canale de numărătoare pe 24 de biţi descrise amănunţit în celece urmează, un convertor analog-numeric de tipul ADS7822, trei ieşiri directe separategalvanic, 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 separategalvanic, un conector şi circuistica necesară conectării unui afişaj cu cristale lichide şi uncircuit de tipul MAX232 pentru conversia semnalului serial din nivele de tensiune TTL înnivele EIA.Sistemul a fost conceput pentru a putea fi utilizat la comanda unui centru de prelucrarecu comandă numerică, cu trei grade de libertate. Din acest motiv sistemul prezintă trei canalede numărare cu o precizie pe 24 de biţi. Pe fiecare canal sunt preluate, prin intermediul unuioptocuplor de viteză mare, semnalele de la un encoder de tip incremental, acestea suntprelucrate pentru a se diferenţia direcţia de rotaţie şi apoi sunt conectate la numărătoare detipul 74HC193. Acestea sunt numărătoare pe 4 biţi cascadate câte 6 pe fiecare canal, pentru ase asigura precizia de 24 de biţi.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 40 din 151Pe fiecare dintre canale informaţia din numărătoare trebuie încărcată în câte trei registre

Page 22: teleoperare bun

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 însubcapitolul 3.3.4 la pagina 44, este folosit la citirea tensiunii bateriei şi astfel la determinareagradului de încărcare a acesteia.Pe acest sistem rulează un program, codul sursă se găseşte în Anexa 7 – Codul sursă alsistemului de comandă a punţii „H“ la pagina 113, care se comportă conform ordinogrameiurmătoare.La pornire se vor configura porturile de intrare / ieşire, timerele, interfaţa serială cucalculatorul gazdă, interfaţa serială cu convertorul analog numeric.Timer 0 odată pornit va tot genera semnale de tip PWM cu condiţia ca sistemul deacţionare să fie validat, pentru fiecare dintre gradele de libertate. Timer 1 va compara vitezamomentană cu cea prescrisă şi dacă constată o diferenţă între cele două va opera asuprafactorului de umplere pentru a compensa această diferenţă.După ce configurările au fost efectuate sistemul aşteaptă comenzi de la calculatorulgazdă.#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 0x11Secvenţă cod 1 - Comenzi acceptate de la calculatorul gazdăSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 41 din 151Figura 50 - Ordinograma sistemului de comandă3.3.1 Microcontrolerul P89C51RC+Caracteristici P89C51RC+:

Page 23: teleoperare bun

• 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;Iniþializare sistemConfigurare pini,timere, port serialComandãvalidã?nuSTARTdaComandãacþionare?daRelativ la comanda unei anumiteaxe, se opereazã modificarea devitezã aferentã acesteia. Dacãeste cazul, se poate opriacþionarea sau inversa sensul derotaþie.nuSe furnizeazãinformaþiile necesare,care pot fi: distanþaparcursã, parametrii defuncþionare, încãrcareabateriei, etc.Lansare rutine timerdescrise în 3.4.2Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 42 din 151• 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 KBde memorie Flash programabilă şi cu memorie RAM internă de 512 kB expandabilă externpână la 64 kB.Dispozitivul este construit utilizând tehnologia phillips de memorie nevolatilă de maredensitate şi este compatibil cu setul de instrucţiuni al standardului industrial MCS-51.

Page 24: teleoperare bun

Un boot loader (program de încărcare) programat în ROM permite programarea însistem a memoriei Flash. Utilizatorul poate şterge / reprograma memoria Flash cu ajutorulrutinelor programate în ROM.Figura 51 - Configuraţia pinilor – P89C51RC+3.3.2 Circuitul numărător 74HC193Circuitul 74HC193 este un dispozitiv de numărare realizat în tehnică high-speedCMOS. Este circuit de numărare sincron, binar pe 4 biţi cu posibilitate de numărarecrescă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 Nsfmax Frecvenţă maximă deoperare45 MHzCI Capacitate de intrare 3.5 pFSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 43 din 151Figura 52 - Configuraţia pinilor – 74HC193Figura 53 - Diagrama logică – 74HC1933.3.3 Circuitul supervizor de tensiune TL7705Familia TL77xxA de circuite integrate de supervizat tensiuni sunt concepute pentrufolosirea în aplicaţii cu microcontrolere şi/sau microprocesoare. Circuitul asigură un semnalde 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 tensiunemomentană circuitul TL7705 va genera un nou semnal de reset pentru a asigura bunafuncţionare a aplicaţiei.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 44 din 151Figura 54 - Configuraţia pinilor – TL7705Durata semnalului de reset se setează cu ajutorul unei capacităţi externe în funcţie deaplicaţ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

Page 25: teleoperare bun

3.3.4 Convertorul analog numeric ADS7822Circuitul integrat ADS7822 este un convertor analog numeric cu o rată de eşantionareridicată, de 75 kHz. Dacă nu este folosit la aşa o frecvenţă de eşantionare ridicată, şi în cadrulaplicaţ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ţă de7.5kHz puterea disipată este de doar 60µW, astfel că circuitul este ideal pentru aplicaţiialimentate cu baterii.Figura 56 - Configuraţia pinilor – ADS7822Comunicaţia cu microcontrolerul se face printr-o interfaţă serială sincronă cu 3semnale. Semnalul DCLOCK este folosit pentru sincronizare, DOUT este semnalul pe careSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 45 din 151circuitul furnizează rezultatul conversiei, iar CS/SHDN este linia prin care microcontrolerulcere 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 ceurmează. 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ă. Unsemnal rectangular de tip PWM generat de către microcontroler acţionează asupra punţii şiimplicit 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 acesteisoluţii.Pentru a controla un motor de curent continuu este nevoie de o sursă de alimentarereglabilă. Totuşi, dacă se ia un motor de 12 V şi se alimentează, se observă că motorulaccelerează, până ajunge la viteza nominală: motoarele de curent continuu nu răspundinstantaneu. Dacă se opreşte alimentarea motorul va începe să decelereze. Dacă repetăm

Page 26: teleoperare bun

aceste două operaţii destul de des, motorul se va învârti cu o anume viteză, viteză ce poate fivariată între 0 şi viteza maximă.Exact aceste operaţiuni le face şi un sistem de acţionare cu PWM. PWM estealternativa la comanda analogică, prin tensiune. PWM, prescurtarea de la Pulse WidthModulation, 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 şiastfel creştem viteza de rotaţie a motorului de curent continuu.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 46 din 151Figura 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 trebuiefăcut cu o anumită frecvenţă. Dacă frecvenţa este prea mică, motorul va funcţiona într-unregim cu întreruperi, lucru ce va duce la încălzirea lui. El va genera căldură pe perioadaactivă, 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 20de 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ă deelementele 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 saturezecomplet, şi lucrând într-un regim de conducţie nesaturat, se vor încălzi prea tare. Din acelaşimotiv, va creşte şi consumul, dacă nu sunt saturate rezistenţa drenă sursă este mult mai mare.Figura 59 - Exemplu de semnale PWMSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 47 din 151

Page 27: teleoperare bun

Pentru a realiza practic semnalul PWM pe sistemul cu microcontroler P89C51RC+, safolosit TIMER0. Acest timer este configurat să genereze o întrerupere de câte ori conţinutulnumărătorului ajunge la valoarea maximă şi se generează o depăşire. În cadrul rutinei apelatela apariţia întreruperii conţinutul numărătorului trebuie reîncărcat. Reîncărcarea se face dintrovariabilă a cărei valoare este calculată în cadrul rutinei de reglare a vitezei, rutină descrisă încapitolul următor.Pentru a implementa fără dificultăţi prea mari două semnale de tip PWM, a fost nevoiede nişte limitări. S-a stabilit ca cele două semnale să aibă aceeiaşi perioadă, doar factorul deumplere să fie diferit în funcţie de necesitate.Din acest punct de vedere în cadrul unei perioade s-au considerat 4 evenimente ce potapare. 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 semnalPWM 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 3Secvenţă cod 2 - Definiţii cazuri PWMCazul PWM_CASE_X_FIRST apare dacă semnalul PWM aferent canalului X va ficel 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 Yprezintă un factor de umplere mai mare, cum reiese şi din figură. Ultimul cazPWM_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 intervalelede 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)

Page 28: teleoperare bun

Y_CHANNEL_OUTPUT=OFF;if (PWM_CASE==PWM_CASE_EQUAL) period++; //sarim//peste 2 la urmatoarea executiebreak;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:Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 48 din 151if (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 PWMSe observă faptul că pentru fiecare dintre subintervalele perioadei există nişte variabiledin 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 suntcalculate în cadrul rutinei de reglaj automat al vitezei.3.4.2 Bucla de reglaj automat al vitezeiPentru 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ă conformcapitolului 3.2 într-un semnal rectangular de frecvenţă variabilă, frecvenţă direct

Page 29: teleoperare bun

proporţională cu viteza, este destul de simplu de aflat viteza de deplasare pe fiecare din axelerobotului.Calcularea vitezeimomentane a axeiComparareavitezei cu ceaprescrisămai micăSe comandă ocreştere a factoruluide umplere alsemnalului PWMdirect proporţionalăcu diferenţa întreviteza prescrisă şicea momentanămai mareSe comandă oscădere a factoruluide umplere alsemnalului PWMdirect proporţionalăcu diferenţa întreviteza prescrisă şicea momentanăegalăse reia proceduraSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 49 din 151Figura 60 - Ordinograma reglajului automat al vitezeiSemnalul 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 înraport cu timpul este viteza.Pentru a simplifica calculele derivata s-a realizat cu ajutorul metodei diferenţelorfinite. În acest scop s-a folosit al doilea timer prezent în microcontrolerul sistemului deacţionare a punţii. La momentul întreruperii generate de timer 1 se apelează rutina de reglajautomat a vitezei. Prima acţiune care este realizată este determinarea vitezei actuale pentruambele axe ale robotului, precum reiese şi din secvenţa următoare de cod.// get x speedP10=0; //activate LdAP10=1; //deactivate LdA//se încarcã din numãrãtoare în reg. pe 8 biþitempA1=*buf4;tempA2=*buf5;

Page 30: teleoperare bun

x_pos=tempA2*256+tempA1;//se încarcã valoarea din numãrãtoareif (x_pos > old_x_pos)x_speed_get=x_pos-old_x_pos;elsex_speed_get=old_x_pos-x_pos;old_x_pos=x_pos; //se calculeazã vitezaSecvenţă cod 4 - Calcularea vitezei XDupă 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 decomandă a punţii ce acţionează motorul. Intervenţia constă în modificarea factorului deumplere. Acest lucru nu se realizează static, ci dinamic, în sensul că la o diferenţă mare întreviteza prescrisă şi cea momentană corecţia aplicată este mai mare, astfel modificareafactorului de umplere al semnalului PWM este direct proporţională cu diferenţa între celedouă viteze. Acest lucru reiese şi din secvenţa de cod ce urmează.if (x_speed_get > x_speed_set)// trebuie scãzutã vitezaif (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;Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII3. Sistemul de acþionare Pagina 50 din 151PWM_X_OFF-=SPEED_PAS;}case 0: break;}}Secvenţă cod 5 - Reglaj dinamic al vitezeiLucrurile stau la fel şi în cazul invers, în care viteza momentană este mai mică decât

Page 31: teleoperare bun

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_ONPWM_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 PWMRutina de reglaj automat al vitezei este implementată ca rutină de întrerupere şi esteapelată de fiecare dată când timer 1 generează depăşire. În practică s-au obţinut rezultatefoarte bune cu perioade de reglaj de aproximativ 80-100 ms. Menţionăm că, cu cât se scadeaceastă perioadă reglajul este mai rapid, dar la un moment dat se va observa un fenomen deoscilare. Oscilarea poate fi redusă cu ajutorul unor filtre aplicate asupra mărimii vitezeimomentane. S-au încercat în practică diferite filtre median care însă nu au adus îmbunătăţiriale performanţei, care să justifice overhead-ul computaţional.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII4. Subsistemul de alimentare Pagina 51 din 151

Page 32: teleoperare bun

4 Subsistemul de alimentare4.1 Bateria plumb-acidAcumulatorul, sau celula secundarã, ce poate fi reîncărcată inversând reacţia chimică, afost inventată în 1859 de către fizicianul francez Gaston Plante. Celula lui Plante era o baterieplumb-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 avantajal 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 fiindalcătuit din plumb şi cel pozitiv din dioxid de plumb. În timpul utilizării, electrodul negativ deplumb se separă în electroni şi ioni pozitivi de plumb. Electronii trec prin circuitul electricextern iar ionii pozitivi de plumb se combină cu ionii de sulfat din electrolit pentru a formasulfatul de plumb. Când electronii reintră în celulă la electrodul pozitiv, are loc o altă reacţiechimică: 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 transformatcomplet în apă iar electrozii - în sulfat de plumb. Când bateria se reîncarcă, reacţiile chimicedescrise anterior se desfăşoară invers, până când chimicalele au ajuns la starea lor originalã. Obaterie 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 esteacelaşi cu cel al celulei plumb-acid exceptând faptul că electrodul negativ este alcătuit dinfier, cel pozitiv din oxid de nichel, iar electrolitul dintr-o soluţie de hidroxid de potasiu.

Page 33: teleoperare bun

Celula nichel-fier are dezavantajul că elimină hidrogenul gazos la reîncărcare. Bateria Edisonare 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 careelectrolitul 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 vehiculeelectrice. 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 cumediul î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 amediului, trebuie investigate alternative la utilizarea combustibililor fosili. Una din acestealternative este energia solară.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII4. Subsistemul de alimentare Pagina 52 din 151Figura 61 - Aplicare a tehnologiei solareEnergia solară este destul de simplu de utilizat, direct de la soare şi colectată în modnormal pe Pământ. Soarele creează energia printr-un proces termonuclear ce converteşte650.000.000 tone de hidrogen în heliu în fiecare secundă. Procesul generează căldură şiradiaţii electromagnetice. Căldura rămâne în soare, fiind vitală în menţinerea reacţiilortermonucleare. 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 atingesuprafaţ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 caredepindeau de energia soarelui.Figura 62 - Panou solar

Page 34: teleoperare bun

Datorită naturii energiei solare, sunt necesare 2 componente pentru a obţine un generatorsolar funcţional. Aceste 2 componente sunt colectorul şi o unitate de stocare. Colectorulcolectează 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 aenergiei solare, în anumite momente fiind posibilă receptarea doar a unei mici cantităţi deradiaţ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ă înSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII4. Subsistemul de alimentare Pagina 53 din 151timpul perioadelor de activitate maximă şi o poate elibera în perioade cu activitate scăzută apanoului solar. În practică se mai adaugă şi o baterie de rezervă, pentru situaţiile în carecantitatea de energie necesară este mai mare decât cantitatea de energie produsă şi cea dinunitatea de stocare. Metodele de colectare şi stocare a energiei solare variază în funcţie deaplicaţiile în care este utilizată. În general, există 3 tipuri de colectori şi multe forme pentruunităţ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 osuprafaţă dreaptă. Pot avea aproape orice dimensiune iar energia produsă depinde direct devariabile 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 dedispozitive automate de orientare spre soare. Energia suplimentară câştigată din repoziţionareeste cu mult mai mare decât energia necesară acţionării motoarelor pentru corectareaorientării panourilor.Figura 63 - Energia solarăColectoarele cu focalizare sunt în esenţă colectoare plane cu dispozitive optice aranjatepentru a maximiza cantitatea de radiaţie incidentă pe colector. În prezent sunt utilizate la scară

Page 35: teleoperare bun

redusă în câteva locaţii. Cuptoarele solare sunt un exemplu pentru acest tip de colector. Deşipot produce mai mari cantităţi de energie într-un singur loc, ele pierd o parte din energie pecare panourile plane nu o pierd. Radiaţia reflectată de sol este de obicei captată decolectoarele plane dar ignorată de cele cu focalizare (în regiunile înzăpezite, această energiereflectată poate fi prezentă în cantitate foarte mare). O altă problemă a colectoarelor cufocalizare este temperatura. Fragilele componente de siliciu ce absorb radiaţia incidentă îşipierd 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. Colectoarelepasive absorb radiaţia şi o convertesc în căldură în mod natural, fără a fi special concepute înacest 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 multeori, capacitatea lor naturală de a converti radiaţia în căldură, este cumva amplificată (prinvopsire cu culoare neagră de ex.) şi se adaugă un sistem pentru transferul căldurii spre o altălocaţie.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII4. Subsistemul de alimentare Pagina 54 din 151Figura 64 - Procese în cadrul materialuluiOamenii 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 toateaceste domenii, cu diferite nivele de succes.Celulele fotovoltaice convertesc radiaţia în electricitate, dar operează cu o eficienţă dedoar 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 aelectricităţii au o eficienţă mai scăzută. Din păcate, realitatea se află în urma teoriei, aşa că

Page 36: teleoperare bun

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 decercetare s-a creat o celulă fotovoltaică cu o eficienţă de 28,2%. Este în prezent în curs detestare. Dacă îşi va menţine eficienţa în medii exterioare necontrolate de om şi dacă estedurabilă, companiile de electricitate vor putea opta pentru această formă de energie.4.2.2 Energia de dislocareCând fotoni proveniţi din lumină se lovesc de celula solară, doar fotonii cu un anumitnivel 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 fiindcantitatea 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 unelectron. Î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 amaximiza energia fotonilor. În final, cheia spre o celulă fotovoltaică eficientă este convertireaunei cantităţi cât mai mari de energie solară în energie electrică.Semiconductori fotovoltaici eficienţi au valori ale energiei de dislocare cuprinse înintervalul 1.0 – 1.6 electron-Volţi (eV). (Un electron-Volt este echivalent cu energiaacumulată de un electron în momentul în care trece printr-un potenţial de 1V în vid). Acestevalori 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.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII4. Subsistemul de alimentare Pagina 55 din 151Figura 65 - Energia absorbată de diferite materiale

Page 37: teleoperare bun

Energia fotonilor, măsurată tot în eV, variază conform diferitelor lungimi de undă dinspectrul luminos. Întregul spectru, de la infraroşu la ultraviolet, acoperă un domeniu de laaprox. 0.5 eV până la 2.9 eV. De ex., lumina roşie are o energie de aprox. 1.7 eV, luminaalbastră aprox. 2,7 eV. Aprox. 55% din energia luminii nu poate fi utilizată de majoritateacelulelor 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 oenergie mai mare decât cea de dislocare pot fi absorbiţi pentru a crea electroni liberi. Fotonicu energie mai mică decât cea de dislocare fie trec prin material, fie generează căldură.4.2.3 Conversia luminii în electricitate4.2.3.1 De la celulă la matrice de celuleCelula 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 majoritateaaplicaţiilor. Dar putem mări puterea, conectând mai multe celule împreună, formând entităţimai mari numite module. Modulele, la rândul lor, pot fi conectate pentru a forma unităţi maimari numite matrici, ce pot fi interconectate pentru a genera mai multă putere, ş.a.m.d. Înacest fel, putem construi un sistem fotovoltaic pentru a genera orice cantitate de energiedorită, indiferent cât de mic sau mare.Figura 66 - Celulă, modul, matriceModule 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 cepreiau curentul continuu (DC) produs de module şi matrici pentru a-l utiliza în aplicaţiispecifice.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII4. Subsistemul de alimentare Pagina 56 din 1514.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

Page 38: teleoperare bun

dimensiuni de la cca. 1 cm la 10 cm în diametru. O celulă produce însă doar 1-2 W, putereinsuficientă pentru majoritatea aplicaţiilor.Un modul constă în general din mai multe celule solare, deşi materiale foarte subţiri precumsilicon amorf şi aliaj de cadmiu cu telur pot fi concepute direct în formă modulară, evitândstadiul de celule. Aceste două module siliconice produc aprox. 50W fiecare, generândsuficientă putere pentru iluminarea stradală utilizând o baterie de 12V. Acest tip de modulepot fi conectate şi în formă matricială.Matricile sunt marile producătoare de putere, fiind compuse din multiple module. Ele potproduce până la câţiva megawaţi de putere.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII4. Subsistemul de alimentare Pagina 57 din 1514.2.3.3 Lumina şi soareleFigura 68 - PământulEnergia solară este vitală pentru viaţa pe Pământ. Ea determină temperatura de lasuprafaţ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 partesemnificativă a spectrului solar.Soarele emite aproape întreaga sa energie radiantă în spectrul lungimilor de undă cevariază de la 2x10-7 la 4x10-6. Majoritatea acestei energii se află în zona vizibilă. Fiecarelungime de undă corespunde unei frecvenţe şi unei energii; cu cât lungimea de undă este maimică, cu atât frecvenţa e mai înaltă şi energia mai mare (exprimată în eV).Figura 69 - Spectrul radiaţiei solareFiecare porţiune a spectrului solar este asociată unui alt nivel de energie. În porţiuneavizibilă a spectrului, de exemplu, lumina roşie se află la capătul cu energie redusă iar luminavioletă 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

Page 39: teleoperare bun

din zona infraroşie, pe care îi simţim sub formă de căldură, au mai puţină energie decât fotoniidin zona vizibilă.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII4. Subsistemul de alimentare Pagina 58 din 1514.2.3.4 Lumina şi soarele : pe PământDeplasarea luminii de la o poziţie la alta poate fi cel mai simplu descrisă cercetândcomportamentul unei unde, diferitele tipuri de radiaţii având lungimi de undă diferite (olungime de undă este distanţa de la vârful unei unde până la vârful următoarei unde). Acestelungimi de undă indică iradierea cu diferite cantităţi de energie, cu cât lungimea de undă fiindmai mare, cu atât energia este mai mică. Lumina roşie are o lungime de undă mai mare şienergia 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 energieradiantă. Pământul primeşte o fracţiune infimă din această energie, cu toate acestea, ocantitate medie de 1367 W / m2 din suprafaţa exterioară a atmosferei Pământului. Atmosferaabsoarbe ş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 minuteste mai mare decât întreaga cantitate de energie consumată de populaţia Pământului într-unan!Atmosfera Pământului şi norii absorb, reflectă şi împrăştie o parte din energia solară cepătrunde prin atmosferă. Cu toate acestea, cantităţi enorme de energie solară directă saudifuză ating suprafaţa Pământului, putând fi utilizate în scopul producerii electricităţiifotovoltaice.4.2.4 Principiul de funcţionare: Tip P, Tip N şi câmpul electricPentru a induce un câmp electric într-o celulă fotovoltaică, sunt necesare 2 tipuri desemiconductori separaţi, lipiţi împreună. Semiconductorii de tip „p” şi „n” corespunddenumirilor „pozitiv” şi „negativ” datorită abundenţei de goluri şi respectiv electroni

Page 40: teleoperare bun

(cantitatea de electroni suplimentari formează un semiconductor de tip „n”, deoareceelectronii sunt încărcaţi negativ).Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII4. Subsistemul de alimentare Pagina 59 din 151Figura 71 - Procesul de fabricaţie al siliciuluiCu 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 tipuricreează o joncţiune tip p/n pe suprafaţa de contact a semiconductorilor, creând astfel un câmpelectric.Figura 72 - Procesul de fabricaţie al siliciuluiCâ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 sedeplasează poate fi imaginat sub forma unei bule de aer ce se deplasează printr-un lichid. Defapt se deplasează lichidul, fiind mai uşor de descris modul în care bula se deplasează îndirecţia opusă). Prin acest flux de electroni şi goluri, cei doi semiconductori funcţionează ca obaterie, creând un câmp electric în zona joncţiunii. Acest câmp cauzează saltul electronilordin interiorul semiconductorului spre suprafaţa acestuia, devenind disponibili pentru uncircuit electric. În acelaşi timp, golurile se deplasează în direcţia opusă, spre suprafaţapozitivă, unde aşteaptă trecerea electronilor.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII4. Subsistemul de alimentare Pagina 60 din 1514.2.5 Materialele celulei solare4.2.5.1 SiliciulSiliciul este încă cel mai popular material utilizat la celulele solare în aplicaţiilecomerciale 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, trebuierafinat 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ă

Page 41: teleoperare bun

uniformitate este ideală pentru transferul ideal al electronilor prin material. Pentru a crea ocelulă fotovoltaică eficientă, siliciul este „dopat”, devenind de tipul „n” sau „p”. Siliciul semicristalin,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 cugolurile, reducând astfel puterea emisă de celulă. Cu toate acestea, siliciul semi-cristalin estemult mai ieftin de produs decât cel mono-cristalin, astfel că cercetătorii lucrează în prezent laalte posibilităţi de a minimiza efectele zonelor limită.4.2.5.2 Siliciul: diferite structuriFigura 73 - Aranjarea cristalelor de siliciuMaterialul de siliciu mono-cristalin are o structură uniformă; nu există perturbaţii în aranjareaatomică. Materialul semi-cristalin este compus din mai multe cristale. La limitele suprafeţelordintre structuri, ordinea atomilor este întreruptă. Aici electronii se pot recombina mai uşor cugolurile, nemaiajungând în circuitul electric.Chiar şi mici cristale de siliciu pot forma celule solare, efectuându-se cercetări în domeniulsiliciului policristalin, în speranţa obţinerii unor celule mai economice. Materialul policristalinconţine multiple cristale individuale cam de grosimea unui păr uman, sau aproximativ 1/1000din grosimea materialului semi-cristalin.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII4. Subsistemul de alimentare Pagina 61 din 1514.2.6 UtilizareFigura 74 - Exemple de aplicare a tehnologiei solareDintre principalele utilizări ale energiei, cea mai puţin indicată este transportul. Pentru că suntmari, vehicule relativ încete precum vapoarele s-ar putea alimenta cu ajutorul unor panourisolare de mari dimensiuni, pe când vehicule mici, rapide, n-ar putea. Singura modalitate de aalimenta o maşină strict cu energie solară ar fi prin utilizarea unei baterii încărcată de o staţiesolară 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 pentrutransportul persoanelor.

Page 42: teleoperare bun

Figura 75 - Exemple de aplicare a tehnologiei solareEnergia solară are mari avantaje faţă de combustibilii fosili: primul avantaj este faptul că ereî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 contribuiela probleme ecologice precum încălzirea globală şi ploile acide, energia solară este completnepoluantă. Pentru a alimenta o fabrică de electricitate cu combustibilul dorit, sunt uneoriSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII4. Subsistemul de alimentare Pagina 62 din 151necesare defrişări pe mari suprafeţe, singura bucată de pământ ce trebuie distrusă pentru aproduce 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ă întregiiplanete. Din punct de vedere ecologic, este non-distructivă. Practic, poate fi adaptată pentrualimentarea unor diverşi consumatori, cu excepţia transporturilor, şi poate chiar şi întransporturi, prin modificări ale modului curent de deplasare. În mod clar, energia solară esteresursa viitorului.4.3 Convertizorul 12V DC – 220V ACPentru a putea folosi în cadrul acestei aplicaţii ca element principal de alimentare obaterie de 12 V, era necesară o soluţie pentru adaptarea tensiunii consumatorilor din cadrulsistemului. Atâta vreme cât tensiunea nominală a consumatorilor este mai mică decăttensiunea bateriei, rezolvarea este relativ simplă. Cu ajutorul unor divizoare de tensiune, saucu ajutorul unor regulatoare de tensiune tensiunea nominală este redusă. Acest lucrupresupune însă şi pierderi, care se vor manifesta prin degajare de căldură.Problema mai mare este obţinerea unor tensiuni superioare aceleia a bateriei. Acestlucru se poate realiza cu ajutorul unor convertoare DC-DC (relativ scumpe), cu ajutorulcomutării unei baterii suplimentare în serie, sau cu ajutorul unui invertor.

Page 43: teleoperare bun

Datorită faptului că o placă de bază de generaţia actuală necesită diferite tensiuni dealimentare, împreună cu exigenţe destulde mari asupra stabilităţii acestor tensiuni, s-a alesfolosirea unei surse de alimentare standard de PC. Pentru a putea folosi o astfel de sursă dealimentare este însă necesară generarea unui curent alternativ, cu o frecvenţă de 50 de Hz şi otensiune 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 semnalsinusoidal, cvasi-sinusoidal, sau rectangular. Acest semnal este amplificat cu ajutorul unuitransformator ridicător şi este furnizat consumatorului.Figura 76 - Ieşiri a diferitor tipuri de invertoare (semnal sinusoidal, cvasi-sinusoidal şi rectangular)Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII4. Subsistemul de alimentare Pagina 63 din 151Convertizorul ales preia însă şi conectarea panoului fotovoltaic la sistemul dealimentare. Astfel, dacă energia oferită de către panoul solar nu este necesară, aceasta estefolosită la reîncărcarea bateriei principale.Figura 77 - Convertizor sinusoidal 12V DC - 220 V ACSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 64 din 151

5 Subsistemul de comunicaţii5.1 Reţeaua wireless WLAN (Wi-Fi)Wireless LAN (WLAN) este un sistem de comunicaţii de date implementat ca extensiesau alternativă pentru un LAN cablat, într-o clădire sau campus, combinând conectivitatea laviteză mare cu mobilitatea utilizatorilor, într-o configuraţie mult simplificată.Figura 78 - Reţea wireless cu conexiune simplă punct la punct5.1.1 Prezentare generală WLANAvantaje evidente, cum ar fi: mobilitate, flexibilitate, simplitate în instalare, costurireduse 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 SpreadSpectrum), tehnologie dezvoltată în laboratoarele militare pentru operarea în sisteme critice,

Page 44: teleoperare bun

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 şiutilizare eficientă a spectrului.Principalii producători, printre care Lucent Tehnologies, 3Com, Cisco, Intersil şiNokia, s-au reunit în WECA (Wireless Ethernet Compatibility Alliance) şi au definitivat în1997, 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 IEEEHigh Rate, ce furnizează rate mult mai mari de transfer, menţinând protocolul 802.11. Printrefacilităţ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 caalternativă serioasă şi au modificat conceptul clasic de LAN. Spre exemplu, PC cardulOrinoco Turbo 11Mb de la Lucent (urmaşul lui WaveLAN) a fost primul pe piaţă cu o rată detransfer de 11Mbps, la distanţe până la 550 m. Acelaşi card, intergrat în sistemele outdoor, cuSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 65 din 151antene de până la 24 dB câştig, poate inteconecta două LAN-uri clasice pe distanţe până la optkm. Prin implementarea unui protocol CSMA/CA şi prin mecanisme RTS/CTS (request-tosend/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 securitateCalculatoarele ce posedă o antenă şi o cartelă WLAN pot accesa Internetul pe o rază desute de metri de la emiţător. În interiorul clădirilor, aria de acoperire este de circa 300 demetri, 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ă

Page 45: teleoperare bun

de energie cunoscută ca o radiaţie electromagnetică care transportă semnale. Semnalele pot fimodele de vibraţii pe care urechea umană le recunoaşte ca fiind sunete. Ele mai pot fi şischimbări bruşte de frecvenţă sau intensitate utilizate pentru a coda semnale de date. Oricaredin aceste forme ar fi, radiaţia electromagnetică le transportă prin spaţiul liber. Vom descrie înprimul rând cele mai comune patru forme de tehnologii wireless: prin satelit, prin microunde,prin infraroşu, şi comunicaţiile radio.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 66 din 1515.1.2.1 Comunicaţiile prin satelitÎn mod normal, comunicaţiile prin satelit nu sunt disponibile entităţilor mici pentruconexiuni de reţea. Preţul de cumpărare al unui transponder este secret. Cu toate acestea, oexcepţ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 pentruagenţi economici prin instalarea unor antene parabolice mici.În timp ce acest tip de conectivitate oferă o viteză de download de peste 400Kbps, eleste 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, cererilesunt transmise la site-urile web prin conexiunea fizică şi sunt recepţionate prin conexiuneaprin satelit.Pe de altă parte sunt explorate noi tehnologii satelit. Un nou satelit este acela numitLow-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. Proiectecum ar fi Iridium şi Teledesic sunt deja în plină dezvoltare. Iridium este folosit ca oalternativă la serviciul de telefonie wireless. Teledesic, cu porecla “Internet pe cer”, este setatsă ofere servicii Internet wireless pentru firme, şcoli şi utilizatori. Spectrul electromagneticcomplet include mai multe tipuri de lungimi de undă cu care am devenit familiari, cel puţin cu

Page 46: teleoperare bun

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 şiultravioletă. Acestea sunt lungimile de undă care ne oferă tehnologia de vizibilitate noaptea. Oaltă porţiune a spectrului electromagnetic cu care vom deveni familiari sunt frecvenţelenumite microunde. Acestea există sub frecvenţele infraroşu, dar peste frecvenţele radionormale. Multe servicii de comunicaţii de date oferite de marile companii de telecomunicaţiisunt suportate de tehnologiile de microunde. Deşi este o alternativă viabilă chiar şi încomunicaţiile private, are două dezavantaje. În primul rând comunicaţiile prin microundenecesită 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şuTehnologiile 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 cabază pentru sisteme de distracţie pentru acasă. Un transmiţător infraroşu operează la oanumită 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. Deasemenea, unele calculatoare sunt dotate în ziua de azi cu port infraroşu care permite cainformaţ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 atransmite 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ă celemai eficiente forme de comunicaţii wireless.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII

Page 47: teleoperare bun

5. Subsistemul de comunicaþii Pagina 67 din 151Figura 80 - Comunicaţii prin infraroşu5.1.2.3 Domeniile de utilizare a frecvenţelor radioChiar 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ă întransmisia radio şi TV. Radiourile cu 2 canale şi walkie-talkie-urile utilizează de asemeneaaceastă tehnologie. Programul spaţial utilizează undele radio pentru a controla calculatoarelede 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ţeilui Marte? Toate acestea au fost transformate în unde radio şi transmise către Pământ utilizândtehnologia radio. Dacă ne gândim la radiouri şi televizoare, putem să identificăm unele dincomponentele care fac ca reţeaua wireless cu radio frecvenţă să funcţioneze: un transmiţătorradio, 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 filtrede zgomot – şi astfel am alcătuit o listă cu necesarul de dispozitive.5.1.2.4 Undele radioCând undele radio sunt descrise ca o tehnologie utilizată pentru transmitereaprogramelor radio şi TV, unii oameni presupun că undele radio seamănă un pic cu undelesonore. Un sunet se produce atunci când ceva face ca aerul să vibreze. Această vibraţie estetransferată 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 nuseamănă chiar deloc cu undele sonore. Ele nu creează vibraţii în ureche. Undele radio nu sebazează pe vibraţiile din aer, de fapt, ele nu au nevoie de aer pentru transmisie. În loc de a fi ovibraţie, ele sunt o formă de energie.Ele sunt parte a ceea ce se numeşte spectrul electromagnetic. Acest spectru de energieinclude întreaga gamă de radiaţii create de interacţiunea electronilor şi câmpurilor magnetice.

Page 48: teleoperare bun

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-unSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 68 din 151conductor, ca un fir electric. Curentul crează un camp magnetic. Fluctuaţiile curentului producmodificări în câmpul magnetic, creând unde de energie electromagnetică sau radiaţii. Alteforme 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. Singuradiferenţă 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 cuaceiaş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 dintreprimii 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 suntdescrise în hertzi, abreviat Hz.Ca şi rata de transfer de date, frecvenţele pot fi foarte largi, astfel încât unităţi standardmari sunt utilizate pentru a le nota: kilo (K), mega (M), şi giga (G). Undele radio au frecvenţede la 150kHz la 300GHz. În contrast, undele de lumină sunt mult mai scurte şi au frecvenţemult mai înalte. Frecvenţele undelor de lumină sunt în domeniul de 100 trilioane de Hz, sau100THz (terahertz).Figura 81 - Spectrul de emisie5.1.2.5 Benzile radioÎn Statele Unite pentru ca oamenii să nu interfereze între ei în ceea ce priveşte

Page 49: teleoperare bun

semnalele radio, Comisia de Comunicaţii Federale (FCC) este însărcinată cu asignarea desecţ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 aobţine o licenţă.Cu toate acestea, pentru a permite utilizarea unei anumite părţi a spectrului pentruaplicaţii mici care nu necesită licenţă, FCC a alocat trei benzi radio separate de frecvenţeSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 69 din 151radio care poartă numele de benzi publice. Nu este necesară nici o licenţă pentru a folosiechipamentul de transmisie la aceste frecvenţe. Acestea sunt numite benzi ISM, prescurtareade 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ă lafrecvenţele de 2,4GHz şi 5,7GHz. Cu cât creşte capacitatea de trecere, reţelele de calculatoaredevin o posibilitate din ce în ce mai reală. Cu cât apar mai multe firme care produc produse dereţea wireless cu radio frecvenţă, cu atât preţurile vor continua să scadă, făcând reţelelewireless 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âtsă minimizeze interferenţele şi dorinţa de a folosi lungimea de bandă disponibilă. Primadiferenţă se leagă de metoda utilizată pentru transmisia semnalelor de date prin unde radio. Adoua diferenţă se leagă de tipurile de antene utilizate pentru a radia şi recepţiona semnaleleradio.Figura 82 - Câştig în domeniul 2.4 GHz5.1.2.6 Tehnologia spectrului împrăştiatMulte 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

Page 50: teleoperare bun

staţie sau canal operează peste o bucăţică mică din spectrul radio. Deoarece fiecărei staţii îieste asignată o bandă particulară, FCC asigură că nici un transmiţător din aria locală nu vafolosi aceiaşi bandă prin licenţiere, deci nu vor fi interferenţe. Domeniul fiecărei staţii estelimitat, 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ă, suntnecesare tehnologii adiţionale pentru a nu permite ca o varietate de semnale să interfereze unacu 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ândiSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 70 din 151semnalele radio pe un “spectru” larg de frecvenţe radio, minimizând impactul interferenţelorde bandă îngustă. În majoritatea cazurilor numai părţi mici din transmisie sunt corupte deorice interferenţă, şi tehnicile de codare permit ca datele să fie recapturate. Această tehnologieeste 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. Ounitate de recepţie este sincronizată să folosească acelaşi model şi să recepţioneze cu succestransmisia. Oricare altă unitate radio aude semnalul ca zgomot deoarece nu este programat cucodarea 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 blocatede transmisiile radio inamice. Gândită, dezvoltată şi implementată de armata Statelor Unite,

Page 51: teleoperare bun

problema a fost adresată de Hedy Lamarr, o actriţă faimoasă din Australia între anii 1930 şi1940. 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 deapariţia implemetării guvernamentale şi comerciale a conceptului. Ideea este următoarea. Unsemnal de comunicaţie (voce sau date) este împărţit în părţi separate. În loc de a transmite unsemnal în mod continuu pe o bandă de frecvenţe îngustă, părţile separate sunt transmiseseparat pe un spectru larg de frecvenţe radio.Un model definit dar aparent aleator de benzi nesecvenţiale este utilizat, cu părţilesuccesive care sunt transmise pe banda de frecvenţă următoare din model. Pe de altă parte, unreceptor este configurat pentru a recepţiona semnalele din acelaşi model. Receptorul radioapoi reasamblează bucăţile în semnalul original. Deoarece pot fi dezvoltate mai multe modeledistincte, 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 defrecvenþã. Saltulrile de frecvenţă au două avantaje. Zgomotul “electric” – semnaleelectromagnetice aleatoare care nu sunt părţi ale nici unui semnal de comunicaţii – va afectadoar o parte mică a semnalului. De asemenea, efectele oricăror alte forme de comunicaţiiradio care operează în benzile înguste ale spectrului vor fi minimizate. Oricare asemeneainterferenţă 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 directeeste foarte diferită de salturile de frecvenţă. În loc de a împărţi un semnal de date în bucăţi,

Page 52: teleoperare bun

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=100100101101=01101101001Observaţ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 detransmiţătorul radio, răspândind semnalul pe o bandă largă de frecvenţe. Receptorul utilizeazăSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 71 din 151acelaş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 semnaleradio 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 datelorReţelele de calculatoare utilizează variaţiile de curent electric pentru a transmite date dela un calculator la altul. În timp ce fiecare tip de cablu (coaxial, coaxial subţire, şi cablu cudouă fire răsucite) are proprietăţi electrice proprii, există ceva în comun: modul în caresemnalele electrice sunt transmise de la o placă de reţea la altă placă de reţea utilizând acestmediu. Utilizând o linie telefonică, analogică sau digitală, adaugă complexitate la acestproces, dar nu multă. Dacă utilizăm cablu cu fibră optică, care foloseşte unde de lumină camediu, şi semnale radio, care folosesc unde radio ca mediu, procesul este un pic mai complex.5.1.2.9 Transceiverul radioPentru a creea o conexiune de reţea de calculatoare prin unde radio, este nevoie de două

Page 53: teleoperare bun

componente. Primul ar fi un dispozitiv de reţea ca un bridge sau un router. Bridge-ul / routerulde reţea se ocupă cu traficul de date. Rutează cel mai potrivit semnal de date legat de reţeuade calculatoare dintr-o clădire la reţeaua de la celălat capăt a conexiunii radio. În al doilearând este nevoie de un transmiţător şi receptor radio, numit transceiver radio. Transceiver-ulradio se ocupă cu comunicaţiile prin semnale radio dintre locaţii. Partea interesantă a acesteicăsătorii de tehnologii este aceea că radiourile au avut de- a face întotdeauna cu semnaleleelectrice. Transmiţătorul radio moduleazã, sau modifică, un semnal electric astfel încâtfrecvenţ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 derecepţie a transceiver-ului radio ia semnalul radio şi îl demodulează înapoi la frecvenţa luiSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 72 din 151normală. Apoi semnalul electric rezultat este trimis la partea de bridge/ router pentruprocesare 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 siteuloriginar, 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 caractericticiduc la o întârziere în comunicaţie numită latenþã.5.1.3 Echipamentele WirelessFigura 84 - Echipamente Wireless5.1.3.1 Wireless bridgesComponenta cheie al unui link al reţelei wireless este un dispozitiv numit un wirelessbridge. O combinaţie între un bridge de reţea şi un radio transmiţător, bridge-ul este ocomponentă 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

Page 54: teleoperare bun

alterează apoi semnalul şi îl transmite către antenă, unde este transmisă la antena aflată decealaltă parte a link-ului. Unii pot spune că se comportă ca un agent de trafic pentru datele dinreţea. În timp ce funcţia tuturor wireless bridge este aceiaşi – obţinerea datelor de la o reţeaprin unde radio de la o altă reţea – nu toate wireless brigde-urile sunt identice. Caracteristicilesetate sunt uşor diferite. Pentru unii clienţi preţul este cel care contează, în timp ce pentru alţiicontează securitatea. Pentru majoritatea contează perfomanţa transferării datelor. Producătoriiau muncit foarte mult pentru a face bridge-uri uşor de configurat şi întreţinut.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 73 din 151Deoarece fiecare implementare este diferită ( în funcţie de necesităţile reţelei clădiri, demediul î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ţeaale unui client? El trebuie să se gândească la capacitatea de trecere potrivită pentruimplementarea lui. Trebuie luate în considerare şi viitoarele dezvoltări ale reţelei. În situaţiaideală 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şteastfel încât va fi necesară o lăţime de bandă mai mare, atunci se poate implementa acum osoluţie de 2Mbps şi se poate adăuga încă un link de 2Mbps în doi sau trei ani. Unele produsefac aceste soluţii mai uşoare.Când este necesar un bridge de 10Mbps? Dacă se folosesc foarte des în comun baze dedate de pe CD-ROM, sau alte aplicaţii, prin reţea sau dacă există un număr foarte mare deutilizatori care folosesc ocazional aceste resurse în comun, un bridge de 10Mbps este foarteimportant. Dacă link-ul este stabilit doar pentru a folosi în comun resurse bazate pe web, cu

Page 55: teleoperare bun

accese ocazionale la baze de date centralizate, un bridge de 10Mbps nu va funcţiona probabilla 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 detransmisie şi recepţionează semnalul la celălalt capăt al conexiunii. Există două tipuri deantene 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 wirelesscu o locaţie centrală şi două sau mai multe locaţii temporare care sunt legate sunt numiteSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 74 din 151conexiuni multi-punct. Conexiunile multi-punct utilizează în general o antenă omnidirecţionalăaflată la locaţia centrală. Deoarece aceasta transmite în toate direcţiile, toateantenele aflate la locaţiile temporale pot recepţiona semnalul. Fiecare locaţie temporală are oantenă direcţională care este poziţionată spre antena de la locaţia centrală. Deoarece energiaunei antene omni-direcţionale trebuie să se propage în toate direcţiile, aceasta se pierderepede. De aceea, antenele omni-direcţionale pot transmite la fel de departe ca şi anteneledirecţionale. Când distanţa între locaţia centrală şi locaţiile temporale este mai mare de treisau patru kilometri, atunci trebuie utilizate mai multe antene direcţionale în loc să se utilizezeo 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 timpulsurvolării locaţiilor, tehnicienii determină care antene vor funcţiona mai bine în anumitesituaţii particulare.Figura 86 - Antenă direcţională5.1.3.3 Mast-uri şi TowersCel mai costisitor aspect al instalării antenelor este mast-ul sau tower-ul necesar pentru

Page 56: teleoperare bun

a obţine o vizibilitate directă. În cazurile rare, de obicei la distanţe foarte mici, vizibilitateadirectă poate fi stabilită cu antene montate direct pe acoperişurile celor două clădiri. Dar, înmod obişnuit, unele forme de mast-uri sunt necesare pentru a ridica antenele la o înălţimesuficientă pentru a obţine o vizibilitate directă. În cazuri mult mai dificile sunt necesare sausunt mai indicate turnurile radio. Aceste probleme vor fi rezolvate în timpul survolăriilocaţiilor.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 75 din 151Figura 87 - Tower5.1.3.4 AccesoriileExistă şi alte componente incluse în conexiunea radio wireless. Un dispozitiv deprotecţie împotriva fulgerelor este conectat între antenă şi wireless bridge pentru a prevenidaune ale unităţii care pot fi cauzate de un fulger. De asemenea se poate folosi un filtru deemisie pentru a reduce din zgomotele externe. În final, acolo unde sunt necesare mast-uri şiturnuri, sunt necesare cabluri de extensie pentru a conecta antenele la bridge-uri. Cablurile deextensie sunt de asemenea necesare când wireless bridge este localizat în interiorul uneiclădiri departe de punctul în care cablul primar intră în clădire.5.1.4 Avantajele WLAN5.1.4.1 Costurile reduseTehnologia wireless oferă câteva avantaje. Pe departe cel mai important este costulredus. Va fi necesară actualizarea configuraţiei echipamentelor, sau problemele electrice vorduce la pierderea configuraţiei. Pentru router-e şi bridge-uri, costul întreţinerii lor va fi similarcu cel pentru orice conectivitate. Cu toate acestea, dacă se foloseşte un comutator bazat pefibră, ne putem aştepta să aibă nevoie de mai puţină întreţinere. Pe de altă parte, vânturiputernice sau alţi factori pot cauza nealinieri sau defecte la antenele necesare pentruconectivitatea wireless.5.1.4.2 Implementarea simplăAchiziţionarea şi instalarea unei reţele wireless se poate face într-o săptămână.

Page 57: teleoperare bun

5.1.4.3 Rata de transfer de date ridicatăCând conectivitatea prin fibră optică se dovedeşte a fi prea scumpă pentru instalareainiţială, conectivitatea wireless oferă o conectivitate de bază foarte bună.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 76 din 1515.1.4.4 MobilitateaUn avantaj al tehnologiei wireless va fi vizibil doar atunci când o organizaţie va dorisă-ş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ăriiantenei.Figura 88 - Antenă satelit5.1.4.5 RedundanţaÎn multe cazuri, o reţea wireless poate fi stabilită ca o tehnologie mixtă. Cu cât estenecesară mai multe infrastructură de cablu în viitor, cu atât va deveni mai necesară sauefectivă din punct de vedere al costului instalarea fibrei optice ca “backup” al reţeleitradiţionale. Când conexiunea wireless este actualizată cu cabluri de fibră optică, conexiuneawireless tot va juca un rol important. Dacă lăsăm legătura wireless la locul ei, aceasta vaasigura 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 olegătură de „backup” în cazul unor probleme tehnice.5.1.5 DezavantajeleCând se iau în considerare opţiuni pentru reţele extinse, este oportun să se ia înconsiderare câteva dezavantaje prezentate de tehnologia wireless.5.1.5.1 Interferenţele radioCând mai multe antene radio sunt amplasate una în apropierea celeilalte, sau când maimulte surse puternice de spectrum larg se află într-o regiune mică, undele radio îşi pierd dineficacitate. Semnalele pot interfera una cu cealaltă, cauzând retransmiterea semnalelor sau

Page 58: teleoperare bun

pierderea capacităţii de trecere. Dar asemenea surse sunt neobişnuite în comunităţile rurale.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 77 din 1515.1.5.2 Interferenţele de caleTehnologia radio wireless este adesea caracterizată ca fiind imprevizibilă la condiţiilemeteorologice. Acest lucru înseamnă că particulele de ploaie, ceaţă, smog sau praf nu suntdestul de mari pentru a bloca transmisia semnalelor radio. În spectrul de frecvenţe 902-928Mhz 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 potinterfera cu anumite transmisii. Retransmisia datelor va fi necesară, ducând la scăderea peransamblu a performanţelor.Figura 89 - Antenă direcţională5.1.5.3 Defectele cauzate de condiţiile meteorologice şi de accidenteCondiţiile meteorologice severe pot cauza daune acestor componente pentru căconectivitatea wireless foloseşte antene externe. Se va folosi protecţie împotriva fulgerelorpentru a preveni daune echipamentelor interne ale reţelei, dar şi în acest caz vânturileputernice pot cauza daune antenelor. Aceste tipuri de daune se pot întâmpla şi circuitelor cufibră optică ( fibrele agăţate la polii electrici sunt rupţi sau au suferit daune în condiţiimeteorologice 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âtcircuitele de date, conectivitatea cu fibră optică oferă o soluţie mai bună. Are potenţial maimare pentru capacitatea de trecere. În multe cazuri, este soluţia cea mai bună.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 78 din 151

Page 59: teleoperare bun

Pe de altă parte, dacă unica resursă care va fi folosită în comun de mai multe comunităţieste accesul Internet, capacitatea de trecere a link-ului WAN de peste 2Mbps nu esteimportantă. Link-ul folosit în comun pentru Internet va fi nodul de gâtuire al reţelei. În modnormal 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 unorproiecte 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 dela ideea implementării lor ca operaţii de I/O (Input/Output) obişnuite. Se ştie că, in Sistemeletip UNIX, toate operaţiile I/O cu diverse obiecte (fişiere de pe harddisk, imprimante, unităţide bandă, etc.) au la bază acelaşi principiu: deschide-citeşte-scrie-închide. Ca urmare, pentru acomunica cu o reţea TCP/IP, programul deschide mai întâi o conexiune cu reţeaua, apoiciteş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 fostfă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 eraumult mai complexe decât alte tipuri de I/O. De exemplu: pentru scrierea unui program client afost uşor de adaptat funcţiile API existente pentru fişiere. Problemele au apărut când s-a trecutla scrierea unor funcţii care să definească un program server. Serverul trebuie să aştepte, înmod 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ţiisistem pentru a gestiona operaţiile pasive.O altă problemă apărută a fost aceea că prin funcţiile sistem existente se puteau creasocket-uri orientate spre conexiune dar pentru socket-uri fără conexiune nu existau funcţiisistem echivalente.

Page 60: teleoperare bun

Interfaţa Berkeley este doar una dintre implementările unui API pe baza modeluluisocket. 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 (Windows9x, Windows NT) sunt proprietate a firmei Microsoft, la dezvoltarea Winsock au contribuitmulţ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 pentruinformaţ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 teoreticePentru 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 legareala un port de protocol local),3. Transmiterea şi/sau recepţionarea datelor prin socket,Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 79 din 1514. Î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 validenumere î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 pecare le poate lua acest parametru sunt definite în fişierul WINSOCK.H . În total suntdefinite (pentru versiunea 1.1 a winsock) 18 valori, printre care:Familii de protocoale:AF_UNSPEC 0AF_UNIX 1AF_INET 2

Page 61: teleoperare bun

AF_APPLETALK 16AF_NETBIOS 17Secvenţă cod 8 - Familii de protocoale• socket_type - indică tipul de socket folosit şi poate lua valorile SOCK_DGRAMpentru datagrame sau SOCK_STREAM pentru fluxuri de octeţi. De asemenea, înwinsock.h sunt definite şi alte valori, dar ele pot fi folosite doar cu anumite familii deprotocoale,• protocol - specifică protocolul folosit. Valorile posibile (definite în winsock.h) începcu prefixul IPPROTO_ (IPPROTO_TCP, IPPROTO_UDP).Când programul apelează funcţia socket(), winsock alocă memorie pentru structura dedate internă, care stochează informaţii despre socket. Simpla apelare a funcţiei nucompletează câmpurile structurii de date. Acest lucru îl fac alte funcţii care vor fi prezentateulterior.Configurarea socket-ului. Modul de configurare depinde de tipul legăturii pe care ostabileşte programul în reţea (orientată pe conexiune sau fără conexiune) şi de scopulprogramului (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 suntprezentate în tabelul de mai jos. Ele completează primele patru câmpuri din structura de date,ultimul, protocolul, fiind completat de apelul funcţiei socket().Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 80 din 151Funcţiile socket API utilizate pentru configurarea unui socket.Utilizare socket Informaţie locală Informaţie la distanţăClient orientat peconexiuneconnect connectServer orientat peconexiunebind

Page 62: teleoperare bun

listen, acceptClient fără conexiune bind sendtoServer fără conexiune bind recvfromDeci, în cazul programelor client orientate pe conexiune, se foloseşte instrucţiuneaconnect() 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_inStructura de adresă conţine o familie de adrese, un port de protocol şi adresa host-uluipe 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ă deprogramul 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 conexiuneunde addr_Dest este o variabilă de tipul sockaddr_in.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 81 din 151Se observă că în cazul unui client orientat pe conexiune nu se specifică un port deprotocol local, unde clientul va recepţiona răspunsul trimis de server. Acest lucru este "lăsat înseama" sistemului de operare, mai precis a modulului winsock. Cu alte cuvinte winsockselectează portul de protocol pentru programul client şi-l anunţă când sosesc date la acel port;

Page 63: teleoperare bun

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ă specificeun port de protocol.5.2.1.1 Transmiterea şi/sau recepţionarea datelorInterfaţa Berkeley socket include zece funcţii (cinci pentru transmiterea datelor şi cincipentru recepţionarea datelor). Winsock dispune doar de patru funcţii (două de transmitere şidouă de recepţie), prezentate pe scurt în tabelul 3.Funcţii winsock API utilizate în lucrul cu socket-uriFuncţia winsock API DescriereSend Transmite date printr-un socket conectat,folosind flag-uri speciale pentru a controlacomportarea socket-ului.Sendto Transmite date la o adresă de hostspecificată în structura de adresă socket,folosind un buffer de mesaj simplu.RecvRecepţionează date de la un socketconectat, folosind flag-uri speciale pentru acontrola comportarea socket-ului.Recvfrom Recepţionează date de la un socket şiînregistrează (opţional) adresa de reţea ahost-ului emiţător, folosind un buffer demesaj 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 cuconexiune pot utiliza toate cele patru funcţii dar sunt recomandate funcţiile send() şi recv(). Încazul utilizării funcţiilor sendto() şi recvfrom(), winsock ignoră parametrii de adresă incluşi înapelul lor.Există cazuri când se impune scrierea unor programe care să utilizeze ambele tipuri detransfer de date (cu şi fără conexiune). În acest caz se pot scrie funcţii generice pentruexecutarea acestor operaţii, funcţii ce vor utiliza sendto() şi recvfrom(). În acest mod se potutiliza funcţiile scrise pentru a transmite şi/sau recepţiona date indiferent de tipul socket-uluipe care programul îl pasează funcţiei.Un apel tipic al funcţiei send() are următoarea sintaxă:result = send(socket_handle, message_buffer,

Page 64: teleoperare bun

buffer_length, special_flags)Secvenţă cod 12 - Apel funcţie sendCâ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ă desocket_handle. Apoi, funcţia transmite datele din buffer-ul de mesaj (message_buffer).Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 82 din 151Parametrul 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 programultrebuie 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. Parametrulspecial_flags poate lua valorile:• MSG_OOB - datele trebuie prelucrate imediat• MSG_PEEK - permite programului să analizeze datele de intrare înainte de a stabilicum 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 sendtoPrimii patru parametri sunt identici cu cei ai funcţiei send(). Parametrulsocket_address_structure este de tipul sockaddr:struct sockaddr {u_short sa_family;

Page 65: teleoperare bun

char sa_data[14];};Secvenţă cod 15 - Structura sockaddrCâ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 unsegment 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 recvfromParametrii funcţiei au aceeaşi semnificaţie cu ai funcţiei sendto().Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII5. Subsistemul de comunicaþii Pagina 83 din 151Un 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 programeleclient nu au nevoie de adresa serverului. Dar sunt unele excepţii: clientul trebuie să confirmeprimirea datelor, clientul trebuie să verifice dacă datele extrase provin de la hostul dorit.5.2.1.2 Închiderea socket-uluiAceastă ultimă operaţie a unui program se face prin apelul funcţiei:result = closesocket(sock_Send);Secvenţă cod 17 - Închidere socketFacem precizarea că variabila result (valoare returnată de funcţiile de mai sus) este de tipulint.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII6. Platforma experimentalã Pagina 84 din 151

6 Platforma experimentală6.1 Proiectarea, modelarea 3DÎnainte de începerea execuţiei proiectului s-a realizat o modelare tridimensională arobotului prezentat în această lucrare. S-a început cu şasiul, sistemul de acţionare, iar ulteriors-a continuat cu sistemul de alimentare. În figurile ce urmează sunt prezentate câteva etapedin procesul de simulare, proiectare şi execuţie.Figura 90 - Modelare 3D a sistemului de acţionare.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII6. Platforma experimentalã Pagina 85 din 151Figura 91 - Prototip şasiu simulat

Page 66: teleoperare bun

Figura 92 - Wireframe prototip.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII6. Platforma experimentalã Pagina 86 din 151Pe baza desenului prezentat în Figura 92 s-a realizat şi practic prototipul de către secţiade prelucrări metalice.Figura 93 - Modelare 3D a prototipului

6.2 Realizare practică. Detalii constructiveDatorită lipsei de experienţă în domeniul mecanicii al autorului, ajutorul oferit de cătresisteme software de modelare 3D a fost necesar pentru a implementa practic cu succes acestproiect.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-aadăugat o a treia roată dinţată. Aceasta aplică asupra lanţului o forţă de tensionare, astfellanţul fiind întotdeauna la fel de întins.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII6. Platforma experimentalã Pagina 87 din 151Figura 94 - Realizare practică a şasiuluiFigura 95 - Sistemul teleoperatProiectul complet al platformei robotizate se găseşte în anexa.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII7. Subsistemul video Pagina 88 din 151

7 Subsistemul video7.1 Camerele video cu semnal-video-complexCamerele 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 deSOny, ce prezintă o rezoluţie suficientă pentru aplicaţia curentă. S-au ales nişte camere albnegrudeoarece pierderea de informaţie datorită lipsei culorilor este nesemnificativă, înschimb se diminuează semnificativ cantitatea de date ce trebuie teletransmisă. Astfel peaceeiaşi interfaţă WLAN se pot obţine îmbunătăţiri legate de numărul de cadre pe secundă,

Page 67: teleoperare bun

respectiv se poate reduce gradul de comprimare, astfel îmbunătăţiindu-se semnificativcalitatea imaginilor.Figura 96 -Cameră video NavigatorCamerele sunt alimentate direct din bateria plumb-acid. Datorită faptului că sunt camerede 12V dispare necesitatea unei adaptări a tensiunii de intrare (de ex. cu un convertor DCDC).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ă acondiţiilor de la faţa locului. În acest scop robotul mobil a fost echipat cu un dispozitiv derotire şi înclinare a camerelor video.Acesta este un dispozitiv cu două grade de libertate, ce permite o poziţionare exactă şirapidă a camerelor pentru a supraveghea cât mai uşor aplicaţia. Cele două grade de libertatesunt realizate cu ajutorul a două motoare pas cu pas comandate de către un sistem cumicrocontroler. Acesta este conectat la un calculator gazdă prin intermediul unei interfeţeseriale cu o viteză de 9600 bps.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII7. Subsistemul video Pagina 89 din 151Dispozitivul primeşte pe interfaţa serială o comandă, ce poate fi de tipul (Roteştestânga, roteşte dreapta, roteşte sus, roteşte jos). După efectuarea rotirii sistemul aşteaptă ocomandă nouă.Figura 97 - Dispozitiv de rotire (Pan-Tilt) a camerelorDispozitivul este în aşa fel construit ca să permită montarea a două camere video într-oconfiguraţie paralelă. Acest lucru va permite ulterior implementarea unor algoritmi de stereoviziune.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-unulautonom.S-a ales folosirea acestui dispozitiv de rotire/înclinare a camerelor, dispozitiv realizat încadrul Departamentului de Ştiinţa şi Ingineria Calculatoarelor reprezentat de laboratorul

Page 68: teleoperare bun

DSPLabs. Alternativa o constituia folosirea unui produs comercial, lucru ce ar fi prezentatdouă dezavantaje. Primul dezavantaj ar fi fost cel economic, dispozitivele ce se găsesc înacest moment pe piaţă sunt mult mai scumpe. Al doilea dezavantaj ar fi fost imposibilitatea dea monta două camere video. Dispozitivele Pan/Tilt sau Pan/Tilt/Zoom sunt de obiceidimensionate pentru rotirea/înclinarea unei singure camere.7.3 Placa de captură a semnalului videoPentru capturarea semnalurilor video de la cele două camere analogice s-a folosit oplacă de captură de tip Geovision GV250. Aceasta este o placă specializată pentru aplicaţii desupraveghere. Nu va fi descrisă mai pe larg în cele ce urmează datorită faptului că depăşeşteSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII7. Subsistemul video Pagina 90 din 151cadrul acestei lucrări, şi datorită faptului că dispune de un manual în limba română foarte binestructurat.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ă utilizatoruluiposibilitatea ca prin intermediul unui browser web să acceseze şi să observe în timp realsemnalul 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 prinintermediul interfeţei radio de tip WLAN.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII8. Subsistemul de comandã Pagina 91 din 151

8 Subsistemul de comandă8.1 ComponenţaSubsistemul de comandă este compus din mai multe aplicaţii soft, ce vor fi descrise încele ce urmează.La nivelul sistemului de acţionare rulează o aplicaţie, ce primeşte comenzi de la un

Page 69: teleoperare bun

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ă ooperaţiune de polling asupra unei interfeţe seriale. În momentul când primeşte o comandă, oanalizează şi o execută.Comenzile de mişcare şi de poziţionare a camerelor, le dă un PC (localizat pe platformamobilă a robotului) pe care rulează o aplicaţie server. Aceasta are rolul de a autentificautilizatori din reţeaua internet. După o autentificare reuşită, aceştia au posibilitatea de amanipula robotul mobil. Aplicaţia server primeşte comenzi printr-un socket şi le trimite maideparte 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 ceurmează.8.2 Interfaţa prezentată utilizatoruluiÎn cele ce urmează este prezentată interfaţa cu utilizatorul a aplicaţiei de teleoperare, şisunt descrise elementele cele mai importante ale acesteia.Figura 98 - Interfaţa prezentată utilizatoruluiSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII8. Subsistemul de comandã Pagina 92 din 151Precum 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ătrecâţ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ă camerevideo montate pe robot. În imagine este prezentat un exemplu în care cele două camere suntorientate în aceeiaşi direcţie. Acest lucru poate fi modificat pentru a obţine un câmp vizualmai mare, sau pentru a obţine diferite alte informaţii (se poate imagina un scenariu denavigare prin spaţii strâmte în care este folositoare o cameră la nivelul robotului mobilorientată spre înainte).Pentru a reţine momente importante ambele camere sunt prevăzute cu mecanisme de

Page 70: teleoperare bun

capturare de instantanee, sau de înregistrare video. Acestea se realizează pe calculatorulutilizatorului 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ţiaserver ce rulează pe robot. Această parte este responsabilă de transmiterea de mesaje prinsocketuri. Mesajele transmise pot fi comenzi către dispozitivul de rotire/înclinare a camerelorsau către sistemul de acţionare. În plus cu ajutorul acestui sistem, mai mulţi utilizatoriconectaţi la server pot comunica între ei (similar altor aplicaţii chat uzuale).8.3 Comanda robotului cu ajutorul joystickuluiElementul central de comandă al robotului mobil este joystick-ul prezentat în capitolulurmă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 derotire/înclinare a camerelor. Dacă în plus utilizatorul acţionează şi butonul de pe joystickmişcarea acestuia este transformată în comenzi şi acestea sunt trimise sistemului de acţionarea robotului mobil.8.3.1 Tipurile de Joy-stickuri8.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 şifolosit la calculatoare personale.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII8. Subsistemul de comandã Pagina 93 din 151Figura 99 - Joystick digitalJoystickul în sine consta din cinci întrerupătoare, aranjate astfel încât patru dintre eledeterminau o direcţie (stânga, dreapta, sus, jos) iar ultimul era folosit pe post de buton de

Page 71: teleoperare bun

tragere. Toate întrerupătoarele sunt normal deschise, iar în momentul în care joystickul estedeplasat de pe centru unul sau două întrerupătoare sunt închise în funcţie de direcţia spre carea 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 unpotenţiometru acţionat de utilizator prin învârtire.Informaţia analogică trebuie convertită în una digitală. În ziua de azi acest lucru s-ar putearealiza foarte simplu cu ajutorul unui convertor analog-numeric. Acest lucru însă nu eraposibil la apariţia acestui tip de controler, deoarece astfel de convertoare era foarte scumpe şigreu de obţinut. Astfel s-a ales o variantă mai simplă şi mai puţin costisitoare. Informaţiaanalogică era transformată în lăţime de impuls, care poate fi uşor convertită numeric cuajutorul unor circuite numărătoare. Această metodă este simplă, dar nu foarte precisă.8.3.1.3 Joystickuri analogiceAu 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 totcu î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. Fiecareproducător are modelele proprii şi conectorul propriu.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII8. Subsistemul de comandã Pagina 94 din 1518.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 fostprezentat 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ă faptuluică exista un singur conector era nevoie de un cablu Y pentru a putea conecta ambele

Page 72: teleoperare bun

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 toateplă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ă dinelectronica de interfaţare cu bus-ul precum şi patru multivibratori monostabili. Aceste circuiteerau simple circuite Timer care generau un impuls cu lăţime direct proporţională cu rezistenţapotenţiometrului. Lăţimea acestui puls era măsurată cu ajutorul unei bucle soft. Acest lucrugenera o mulţime de probleme programatorilor. Pe maşini mai rapide rutina joystick nu citeasemnalele î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 alpotenţiometrului este conectat la +5V iar centrul potenţiometrului este conectat la ieşireaanalogică a joystickului. Celălalt capăt este lăsat liber.În cadrul joystickurilor analogice s-au folosit diferite tipuri de potenţiometre. Uneletransformă rotaţia într-o mişcare de tip linear, iar potenţiometrele sunt lineare, altele folosescpotenţiometre axiale antrenate direct de mişcare joystickului. Cel mai uzual se folosescpotenţiometre de 470 kohm şi datorită faptului că se foloseşte doar primul sfert de tură seajunge la o gama de 0..120 kohmi.Tip Digital AnalogicTehnologie 5 întrerupătoare 2 potenţiometre şi 2întrerupătoareConector 9 pini D 15 pini DAlimentare Opţional 5V +5V necesariDirecţii 8 NelimitatAutocentrare Da Da sau nu (de obiceiajustabil)Butoane 1 (opţional 2 sau 3) 2Joystickuri pe conector 1 1 sau 2 (cu cablu Y)Nr. de conectori 2 1Calibrare necesară Nu DaDurabilitate Scurtă până la lungă Scurtă până la medie

Page 73: teleoperare bun

Limitări Doar 8 direcţiicomportament on/offFeedback prost cătreutilizatorAlte folosiri a portului Mouse, etc... Volan, manşă zbor, etc.8.3.1.5 Conectorul joystickMufă DB 15 de tip tată pe cabluSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII8. Subsistemul de comandã Pagina 95 din 1511 XY1 (+5v)2 Switch 13 X14 Ground (for switch 1)5 Ground (for switch 2)6 Y17 Switch 28 N.C.9 XY2 (+5v)10 Switch 311 X212 Ground (for switch 3&4) *13 Y214 Switch 415 N.C. *La unele interfeţe echiparea este doar pentru un singur joystick (până la pinul 7). Mai există şiunele 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ă cuinterfaţa MIDI.pin purpose1 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 unused9 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)

Page 74: teleoperare bun

În figura următoare este un exemplu standard de joystick împreună cu schema deinterconectare aferentă.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII8. Subsistemul de comandã Pagina 96 din 151Figura 100 - JoystickFigura 101 - Schemă interconectare joystick cu un PCSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONII9. Funcþionarea (operarea) sistemului Pagina 97 din 151

9 Funcţionarea (operarea) sistemuluiSistemul 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 depoziţionare, dă comenzi de mişcare, preia informaţii de la senzorii de poziţie.Figura 102 - Aplicaţia serverReferitor la subsistemul video aplicaţia server este responsabilă de preluarea de imaginide 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ă dedispozitivul 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 comenzide la unul dintre aceştia şi furnizarea de date referitoare la starea sistemului şi a diferiţilorsenzori.Pe calculatorul clientului de teleoperare rulează o aplicaţie software, descrisă mai înamănunt în capitolul 8.2 Interfaţa prezentată utilizatorului la pagina 91. Aceasta are rolul de aprelua comenzi de la utilizator, de a le teletransmite la aplicaţia server. Mai îndeplineşte rolulde 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 celedouă camere, informaţii legate de sistemul de acţionare, etc.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII10. Concluzii ºi perspective Pagina 98 din 151

10 Concluzii şi perspectiveLucrarea de faţă abordează o temă de interes în momentul de faţă: teleoperarea,

Page 75: teleoperare bun

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, areţelelor de calculatoare, etc.Implementarea practică a fost realizată punăndu-se accent pe blocuri standard, uşoraccesibile, 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 decomandă 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. Cuajutorul acestui algoritm implementarea punctului anterior este destul de simplă;• dotarea platformei cu diverşi senzori suplimentari, cum ar fi GPS, radar, sonar, etc.Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONII11.Bibliografie Pagina 99 din 151

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 1993Vol. 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

Page 76: teleoperare bun

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,1999Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 1 Pagina 100 din 151

Anexa 1 – Proiectul platformei experimentaleFigura 103 - Subansamblu completSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 1 Pagina 101 din 151Figura 104 - Subansamblu completFigura 105 - Părţi componente subansambluSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 1 Pagina 102 din 151Figura 106 - AxFigura 107 - BucşăSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 1 Pagina 103 din 151Figura 108 - InelFigura 109 - ArboreFigura 110 - Manşon de cuplareSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 1 Pagina 104 din 151Figura 111 - Bucşă antrenareFigura 112 - Suport EncoderSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 1 Pagina 105 din 151Figura 113 - Placă suportSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 2 Pagina 106 din 151

Anexa 2 – Schema punţii „H“ pentru comanda motoarelorDCFigura 114 - Schema punţii „H“Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 3 Pagina 107 din 151

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ăSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 4 Pagina 108 din 151

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

Page 77: teleoperare bun

Figura 117 - Schema sistemului de comandă a punţii - detaliu - microcontrolerulFigura 118 - Intrări separate galvanicSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 4 Pagina 109 din 151Figura 119 - Ieşiri separate galvanicFigura 120 - Formare impulsuri numărareSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 4 Pagina 110 din 151Figura 121 - Una din cele trei ramuri cu numărătoare pe 24 de biţiSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 5 Pagina 111 din 151

Anexa 5 – Cablajul sistemului de comandă a punţii „H“.Faţa superioarăFigura 122 - Cablajul sistemului de comandă : faţa superioarăSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 6 Pagina 112 din 151

Anexa 6 – Cablajul sistemului de comandă a punţii „H“.Faţa inferioarăFigura 123 - Cablajul sistemului de comandă : faţa inferioarăSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 7 Pagina 113 din 151

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

Page 78: teleoperare bun

#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'Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 7 Pagina 114 din 151unsigned 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++){};}

Page 79: teleoperare bun

}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 executiebreak;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;Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 7 Pagina 115 din 151if (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 speedP10=0; //activate LdA

Page 80: teleoperare bun

P10=1; //deactivate LdAtempA1=*buf4;tempA2=*buf5;x_pos=tempA2*256+tempA1;if (x_pos > old_x_pos)x_speed_get=x_pos-old_x_pos;elsex_speed_get=old_x_pos-x_pos;old_x_pos=x_pos;// get y speedP11=0; //activate LdBP11=1; //deactivate LdBtempB1=*buf1;tempB2=*buf2;y_pos=tempB2*256+tempB1;if (y_pos > old_y_pos)y_speed_get=y_pos-old_y_pos;elsey_speed_get=old_y_pos-y_pos;old_y_pos=y_pos;// working speed X setting// test x_speed_get against set speed#ifdef DEBUGLEVEL2putchar('x');Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 7 Pagina 116 din 151#endifif (x_speed_get > x_speed_set)// we must decrease the speedif (PWM_X_OFF > SPEED_PAS) {#ifdef DEBUGputchar('d');#endifPWM_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)

Page 81: teleoperare bun

// we must increase the speedif (PWM_X_ON > SPEED_PAS) {#ifdef DEBUGputchar('i');#endifPWM_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 DEBUGLEVEL2putchar('y');Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 7 Pagina 117 din 151#endifif (y_speed_get > y_speed_set)// we must decrease the speedif (PWM_Y_OFF > SPEED_PAS) {#ifdef DEBUGputchar('d');#endifPWM_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;

Page 82: teleoperare bun

PWM_Y_OFF-=SPEED_PAS;}case 0: break;}}if (y_speed_get < y_speed_set)// we must increase the speedif (PWM_Y_ON > SPEED_PAS) {#ifdef DEBUGputchar('i');#endifPWM_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 3Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 7 Pagina 118 din 151if (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)) &

Page 83: teleoperare bun

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_ONPWM_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 DEBUGLEVEL2putchar('-');putchar(PWM_CASE);putchar('-');#ifdef DEBUGLEVEL3putchar(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#endifTL1=TL1_RELOAD;TH1=TH1_RELOAD;}unsigned char getc(){while (!RI);RI=0;return SBUF;}Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 7 Pagina 119 din 151void 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 statusX_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;

Page 84: teleoperare bun

msec(150); //wait 150 msecs//set direction and restore speed and statusY_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 bitTR0=1;Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 7 Pagina 120 din 151TR1=1;ET0=1; //Timer 0 interruptET1=1;TH0=0x59; // pt. T=100.2 microsecunde /0x59CMOD=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){

Page 85: teleoperare bun

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 LdAP10=1; //deactivate LdAtemp1=*buf4;temp2=*buf5;printf("t1=%d t2=%d\n",(int)temp1,(int)temp2);break;case GET_Y_POS:P11=0; //activate LdBP11=1; //deactivate LdBtemp1=*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 DEBUGprintf("got speed %c",spd_x);#endifif (spd_x < 128){Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 7 Pagina 121 din 151x_speed_set=128-spd_x;if (X_CHANNEL_DIRECTION==BACKWARD) {#ifdef DEBUGprintf("negative X speed = -%d ,reversing\n",x_speed_set);#endifset_X_dir(FORWARD);}}else{if (X_CHANNEL_DIRECTION==FORWARD) {#ifdef DEBUGprintf("positive X speed,reversing\n");#endifset_X_dir(BACKWARD);

Page 86: teleoperare bun

}elsex_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 DEBUGprintf("negative Y speed, reversing\n");#endify_speed_set=128-spd_y;set_Y_dir(FORWARD);}}else{if (Y_CHANNEL_DIRECTION==FORWARD) {#ifdef DEBUGprintf("negative Y speed, reversing\n");#endifset_Y_dir(BACKWARD);}elsey_speed_set=spd_y;}break;case START_X:#ifdef DEBUGprintf("Channel X activated\n");#endifPWM_X_CHANNEL_ENABLED=TRUE;x_speed_set=0;break;case START_Y:#ifdef DEBUGprintf("Channel Y activated\n");#endifPWM_Y_CHANNEL_ENABLED=TRUE;y_speed_set=0;Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 7 Pagina 122 din 151break;case STOP_X:#ifdef DEBUGprintf("Channel X disabled\n");#endifPWM_X_CHANNEL_ENABLED=FALSE;X_CHANNEL_OUTPUT=1;x_speed_set=0;break;

Page 87: teleoperare bun

case STOP_Y:#ifdef DEBUGprintf("Channel Y disabled\n");#endifPWM_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=%ldPWM_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=%ldPWM_Y_OFF=%ld\n",y_speed_set,y_speed_get,PWM_Y_ON,PWM_Y_OFF);break;}} else;};}Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 8 Pagina 123 din 151

Anexa 8 – Codul sursă al aplicaţiei server, care rulează pesistemul 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

Page 88: teleoperare bun

#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif// CServerDlg dialogCServerDlg::CServerDlg(CWnd* pParent /*=NULL*/): CDialog(CServerDlg::IDD, pParent){//{{AFX_DATA_INIT(CServerDlg)m_lPort = 6000;//}}AFX_DATA_INITm_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_MAPEND_MESSAGE_MAP()Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 8 Pagina 124 din 151/////////////////////////////////////////////////////////////////////////////// CServerDlg message handlersBOOL 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);

Page 89: teleoperare bun

if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX,strAboutMenu);}}// Set the icon for this dialog. The framework does thisautomatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization herem_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 codebelow// 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()){Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 8 Pagina 125 din 151CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint 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 icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();

Page 90: teleoperare bun

}}// The system calls this to obtain the cursor to display while the userdrags// 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 oralways// 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);Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 8 Pagina 126 din 151CString 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 usersSendMessageToAllUsersExceptFor(lUserId, message);

Page 91: teleoperare bun

}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 usersSendMessageToAllUsersExceptFor(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 usersSendMessageToAllUsersExceptFor(lUserId, message);}Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 8 Pagina 127 din 151break;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, NDKServerDisconnectiondisconnectionType){CString strNickname;m_mapIdsNicknames.Lookup(lUserId, strNickname);CNDKMessage message(ChatUserQuit);message.Add(strNickname);// Inform all users that a user is disconnectedSendMessageToAllUsers(message);UINT unResId = 0;switch (disconnectionType){

Page 92: teleoperare bun

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);Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 8 Pagina 128 din 151CString 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);

Page 93: teleoperare bun

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"));elsem_buttonConnect.SetWindowText(_T("&Start"));}void CServerDlg::AddSystemText(const CString& strText){AddText(_T("* ") + strText + _T(" *"));}Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 8 Pagina 129 din 151void 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;LPCOMMTIMEOUTSlpCommTimeouts=(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;

Page 94: teleoperare bun

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);Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 8 Pagina 130 din 151// 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

Page 95: teleoperare bun

{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));Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 8 Pagina 131 din 151CNDKMessage 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)

Page 96: teleoperare bun

{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();}Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 8 Pagina 132 din 151UserMessage.h#pragma once// Message Id shared with the client and the serverenum UserMessage{ChatUserJoin,ChatUserQuit,ChatText,SpeedCommand,PTCommand,ChatBigMessage};Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 133 din 151

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"

Page 97: teleoperare bun

#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif// CTryDlg dialogCTryDlg::CTryDlg(CWnd* pParent /*=NULL*/): CDialog(CTryDlg::IDD, pParent){//{{AFX_DATA_INIT(CTryDlg)m_strChat = _T("");m_strEdit3 = _T("");//}}AFX_DATA_INITm_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)Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 134 din 151//{{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)

Page 98: teleoperare bun

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_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CTryDlg message handlersBOOL 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 iconSetIcon(m_hIcon, FALSE); // Set small iconm_splash.DoModal(); // Afisam o fereastra de splashm_joy.SetBaseDlg((CWnd *)this); // Initializam Joystickif (FAILED(m_joy.InitDirectInput())) {AfxMessageBox("No Joystick found. You won't be able to controlthe robot.\nIf you have a joystick make sure it is registered under GamingOptions in the Control Panel.",MB_OK+MB_ICONSTOP);m_bJoystick=FALSE;}else { // Joystick neinitializat, nu mai facem pollingSetTimer( 0, 1000 / 15, NULL );m_bJoystick=TRUE;}Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 135 din 151m_livex_started=FALSE;m_livex2_started=FALSE;// presetari, ce pot fi modificate ulteriorconfigDlg.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);

Page 99: teleoperare bun

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 codebelow// 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 paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint 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 icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 136 din 151}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 configconfigDlg.GetVideoSettings(m_strIp,m_lDataPort,m_lCommandPort,m_strUs

Page 100: teleoperare bun

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();Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 137 din 151m_livex.DestroyX();m_livex2.StopX();m_livex2.DestroyX();CDialog::OnDestroy();}// NDK: overrides OnMessage, OnDisconnect and OnPingvoid CTryDlg::OnMessage(CNDKMessage& message){

Page 101: teleoperare bun

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){Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 138 din 151case 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:

Page 102: teleoperare bun

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 hereBOOL 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);}Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 139 din 151else{AfxMessageBox(IDS_CANNOT_CONNECT,MB_ICONSTOP);}}connected=IsConnected();if (connected)m_buttonConnect.SetWindowText(_T("&Disconnect"));elsem_buttonConnect.SetWindowText(_T("&Connect"));}}void CTryDlg::AddText(const CString& strText){m_editChatWindow.SetSel(m_editChatWindow.GetWindowTextLength(),

Page 103: teleoperare bun

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 defaultCDialog::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;Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 140 din 151itoa(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;

Page 104: teleoperare bun

}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_presetsif ((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;}elseSiisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 141 din 151{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;

Page 105: teleoperare bun

spd_y=(mot_r/3)+128;if (stopped) {m_strCommand=STOP_X;m_strCommand+=STOP_Y;}else {// checking agains last value sent for left sideif (m_iLastLSent != mot_l){m_strCommand=START_X; //pornim ambele motoarem_strCommand+=SET_X_SPEED;m_strCommand+=(unsigned char)spd_x;}// checking agains last value sent for right sideif (m_iLastRSent != mot_r){m_strCommand+=START_Y;//pornim ambele motoarem_strCommand+=SET_Y_SPEED;m_strCommand+=(unsigned char)spd_y;}}// if we do have a command word, we send itif (!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();Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 142 din 151}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{

Page 106: teleoperare bun

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){Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 143 din 151m_stop_2.GetWindowText(stat);if (stat=="Stop"){m_livex2.PauseX();m_stop_2.SetWindowText("Start");}else{m_livex2.PlayX();m_stop_2.SetWindowText("Stop");

Page 107: teleoperare bun

}}}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 hereUpdateData(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);}Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 144 din 151void 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);

Page 108: teleoperare bun

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 hereUpdateData(TRUE);SendSerial1(m_strEdit3);}HANDLE CTryDlg::initcomm(char *sport){HANDLE hCom;BOOL fSuccess;LPCOMMTIMEOUTSlpCommTimeouts=(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;Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 145 din 151LPDWORD lpModemStat=(LPDWORD)malloc(sizeof(PDWORD));

Page 109: teleoperare bun

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 0x15PTCommands.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 0x38Joystick.cpp// Joystick.cpp: implementation of the Joystick class.//#include "tryDlg.h"#include "stdafx.h"#include "try.h"#include "Joystick.h"#ifdef _DEBUG#undef THIS_FILEstatic 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;Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 146 din 151//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////BOOL CALLBACK EnumObjectsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,

Page 110: teleoperare bun

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 objectif( 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 joystickif( 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 toIDirectInputDevice::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 |Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 147 din 151DISCL_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,

Page 111: teleoperare bun

(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 userunplugged// 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 controlsstatic 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 enumeratedaxisdiprg.lMin = -1000;diprg.lMax = +1000;Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 148 din 151// Set the range for the axisif( FAILED( g_pJoystick->SetProperty( DIPROP_RANGE, &diprg.diph ) ))return DIENUM_STOP;}// Set the UI to reflect what objects the joystick supportsif (pdidoi->guidType == GUID_XAxis){EnableWindow( GetDlgItem( hDlg, IDC_X_AXIS ), TRUE );

Page 112: teleoperare bun

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 laterreturn S_OK;}// Get the input's device stateif( FAILED( hr = g_pJoystick->GetDeviceState( sizeof(DIJOYSTATE2), &js) ) )return -1; // The device should have been acquired during thePoll()// Display joystick state to dialogaxis_x=(axis_x+js.lX) / 2;axis_y=(axis_y+js.lY) / 2;// Axesif (ax_Nr==1)return axis_x;else return axis_y;}Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 149 din 151int 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();

Page 113: teleoperare bun

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 laterreturn S_OK;}// Get the input's device stateif( FAILED( hr = g_pJoystick->GetDeviceState( sizeof(DIJOYSTATE2), &js) ) )return -1; // The device should have been acquired during thePoll()return js.rgbButtons[m_iButton] & 0x80;}config.cppvoid 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, CStringstr_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;}Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 150 din 151LiveX.h// CLiveX wrapper classclass 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;

Page 114: teleoperare bun

}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); }// Attributespublic: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);// Operationspublic:void PlayX();void StopX();void SaveX();Siisttem robottiizatt mobiill ttelleoperatt Allexandru JONIIAnexa 9 Pagina 151 din 151void 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();

Page 115: teleoperare bun

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 immediatelybefore the previous line.#endif //!defined(AFX_LIVEX_H__188ED032_77BD_4757_82D9_1CED512AE4BE__INCLUDED_)