Dezvoltarea Unei Platforme Pentru Controlul de la Distanta al Unui Robot Universal Robots Ur10
Introducere
Creșterea costurilor forței de muncă din ultimii ani, în special în țările occidentale, a schimbat modul în care companiile de producție funcționează. Acestea au migrat astfel către utilizarea roboților industriali și a manipulatoarelor pentru îndeplinirea cât mai multor sarcini. Automatizarea flexibilă a proceselor productive la baza căreia stau astfel de roboți s-a dovedit a aduce o serie de beneficii atât de ordin economic, prin creșterea productivității, a calității produselor și o perioadă mai scurtă de recuperare a investițiilor, dar și de ordin social, prin prevenirea accidentelor de muncă și umanizarea vieții personalului.
În timp ce marile întreprinderi își pot permite linii de producție și roboți industriali extrem de capabili, dar care vin cu un preț pe măsură, precum și propriul personal cu competență și expertiză în domeniul roboticii și al producției automatizate, acesta nu este cazul Întreprinderilor Mici și Mijlocii(IMM).
Figură 1 – Roboți industriali în industria constructoare de mașini
Integratorii de sistem și beneficiarii finali întâmpină dificultăți din cauza discrepanțelor între nevoia de tehnologie avansată, precum roboții, a Întreprinderilor Mici și Mijlocii, și competențele limitate ale personalului permis de către aceste companii. Limitările impuse de buget la achiziționarea unor astfel de tehnologii înseamnă de cele mai multe ori renunțarea la soluțiile standard oferite de producători, care nu pot satisface nevoile beneficiarilor, și dezvoltarea de soluții proprii, personalizate. În același timp trebuie avută în vedere nevoia de suport și transfer de cunoștințe necesară de către companie pentru a utiliza un astfel de sistem industrial.
O posibilă rezolvare a unor astfel de probleme este ca sistemul robotic industrial să poată fi operat de la distanță. Soluția poate permite folosirea sistemului în medii periculoase sau inaccesibile, dar reduce în același timp și timpul și costurile de suport de care compania poate avea nevoie, accesul la sistem fiind posibil de oriunde există o conexiune la internet.
Formularea problemei
Această lucrare își propune crearea unei platforme pentru controlul unui robot Universal Robots UR10 de la distanță. Brațul robotic folosit are 6 grade de libertate și platforma creată permite controlul acestuia de la distanță, prin internet, în deplina siguranță. Framework-ul dezvoltat în C++ oferă posibilitatea de interfațare cu diferite aplicații sau limbaje de programare, pentru exemplificare folosindu-se mediul de dezvoltare LabView. Pentru supervizarea întregului proces se utilizează una sau mai multe camere video. Responsabil cu streaming-ul video și o parte a sistemului de siguranță dezvoltat este o placă de dezvoltare Raspberry Pi.
Obiective
Pentru a îndeplini scopurile formulate mai sus, trebuie îndeplinite o serie de sarcini după cum urmează:
Studierea nevoiilor și a provocărilor operării de la distanță a sistemelor robotice industriale;
Studierea mijloacelor de feedback, senzoristică, viziune;
Studierea mijloacelor de comunicație;
Dezvoltarea unor specificații și a unei structuri pentru sistemul de control de la distanță;
Dezvoltarea mediului de lucru de laborator al sistemului;
Documentarea platformei experimentale, inclusiv a părțiilor hardware și software;
Documentarea funcționalităților puse la dispoziție de sistem;
Studiu asupra tehnologiilor actuale în domeniu
Teleoperarea
Acest capitol își propune să facă o scurtă trecere în revistă a istoriei și evoluției teleoperării, ca parte importantă a fundației teoretice a operării de la distanță.
Istoria teleoperării începe în jurul anilor 1940, când omenirea a devenit din ce în ce mai conștientă de pericolele radiației nucleare. Pentru a reduce aceste riscuri, Raymond C. Goertz a creat sisteme de manipulare a materialelor nucleare. Operatorii puteau, protejați de pereți de 1m lățime, să manipuleze materiale radioactive cu mișcări naturale ale mâinii.
Figură 2 – Raymond C. Goertz teleoperând unul dintre sistemele dezvoltate
El a dezvoltat un sistem mecanic complex compus din o serie de roți dințate, legături și cabluri ce permitea operatorului să simtă forțele de reacție și vibrațiile prin intermediul structurii de legătură. Sistemele create erau de tipul master-slave, controlerul operatorului și cel manipulator fiind identice din punct de vedere cinematic, astfel încât exista o corespondență unu-la-unu între cele două controlere atât la nivel de mișcare spațială cât și a încheieturilor.
Primul sistem master-slave dezvoltat de Goertz avea anumite limitări în ceea ce privește distanța dintre operator și locația de manipulare. Chiar dacă sistemul funcționa pentru distanțe scurte, unde operatorul avea posibilitatea de a observa întreaga scenă prin orificiile de siguranță din pereții de protecție, era evidentă valoarea ce ar putea fi adusă de manipularea electrică a unui astfel de sistem. Astfel, în efortul depus pentru trecerea de la legaturile mecanice, ca mediu de transmisie, la semnalele electrice, Goertz a pus bazele teleoperării moderne și a servo-urilor poziționale de tip bilateral force-reflection.
Figură 3 – Componentele unui controler master-slave
În 1981, Bejczy și Handlykken au generalizat controlul bilateral în teleoperare și au dezvoltat ce ei au numit UFRHC, Universal force-reflecting hand controller. Acesta consta dintr-un controler mecanic, sistem cu 6 grade de libertate ce permitea controlul fără necesitatea unei echivalențe geometrice între master și slave. În timp ce un sistem tradițional unu-la-unu master-slave ar fi reflectat direct în spațiul de articutații(joint-space), UFRHC era bazat pe poziția/orientarea controlerului(pose) prin transformări geometrice, permițând astfel ca master-ul și slave-ul să fie diferiți cinematic. Primul astfel de controler, cu un volum de lucru de 30cm3, a fost dezvoltat de Antal K. Bejczy la Jet Propulsion Lab, NASA, SUA.
Figură 4 –Universal Force-Reflecting Hand Controller în laboratorul NASA Jet Propulsion
Odată cu trecerea timpului, distanțele între master și slave au crescut. Exemple timpurii ale acestui fapt sunt sistemele MANTIS 1 și 2, ce erau folosite pentru sarcini de mentenanță în zonele fierbinți ale tunelurilor acceleratorului de particule de la CERN. Brațele slave ale sistemului erau plasate pe macarale hidraulice la bordul unor vehicule cu 4 roți motoare, și erau conectate la sistemul master printr-un sistem de cabluri „ombilicale” ce permiteau o arie extinsă de operare.
Figură 5 – Vehicul cu sistemul slave al MANTIS 2
Teleoperarea și-a extins, odată cu dezvoltarea tehnologiilor, aria de folosire. Astfel, în anul 1993, la bordul navetei spațiale Columbia a fost montat primul sistem telerobotic ce a ajuns în spațiu. La câțiva ani mai târziu, în anul 2001, o echipă de chirurgi a realizat prima operație transatlantică, din New York în Franța, folosind un sistem telerobotic.
În ziua de azi, teleoperarea este folosită în variate domenii precum cel militar, cel medical, în explorarea maritimă și spațială precum și-n multe altele. Așa cum Whitney D. menționa într-un articol, teleoperarea a dat naștere și domeniului de control al forței(force control). În contrast cu teleoperarea, aceste sisteme robotice se bazează pe computere în loc de operatorii umani pentru executarea strategiilor de control, eliminând astfel omul ca parte integrantă a controlului în buclă.
Aplicații ale roboților industriali
Sistemele de control de la distanță sunt destinate suportului în programarea, schimbarea modului de funcționare și monitorizarea sistemelor industriale robotice. În continuare vor fi prezentate câteva dintre domeniile în care astfel de sisteme sunt utilizate.
Datele din Figură 5 – Producția și livrarea de manipulatoare și roboți după domeniul de utilizare în Japonia 2014 sunt bazate pe statisticile Japan Robot Association cu privire la producția și livrarea de manipulatoare și roboți industriali de către membrii asociației în anul 2014. Un număr total de 127 305 unități au fost produse în anul 2014, o creștere de 30,5% față de anul 2013.
Figură 6 – Producția și livrarea de manipulatoare și roboți după domeniul de utilizare în Japonia 2014
Datorită mediilor dure, expunerii la fum și lumini dăunătoare, oamenii au nevoie de pauze dese în industria sudurii. Roboții industriali folosiți în sudură, deci, pot aduce beneficii considerabile atât sociale, prin eliminarea riscurilor la care sunt supuși sudorii, cât și de natură economică, prin prelungirea perioadelor de lucru și sudură. O calitate a roboților industriali este repetabilitatea, ceea ce, într-o sarcină precum sudura, înseamnă calitate ridicată a produsului finit.
În domeniul manipulării de materiale sunt exploatate capabilitățile de bază ale roboților de a transporta obiecte. Beneficiile pe care acest tip de roboți le aduc în domeniul manipulării variază de la durata mică în timp a ciclurilor, reducerea costurilor aferente forței de muncă, deteriorările infime aduse obiectelor manipulate, până la reducerea sarcinilor plictisitoare sau obositoare pentru personal.
Operațiile de asamblare sunt adesea foarte complexe, dar cu ajutorul tehnologiilor de tipul sistemelor de viziune, a senzorilor tactili, a sistemelor de schimbare a sculelor sau gripper-elor etc., roboții industriali pot fi folosiți cu succes pentru îndeplinirea de sarcini din ce în ce mai complexe.
În cazul proceselor de vopsire, folosirea roboților industriali pentru îndeplinirea sarcinilor ține personalul uman departe de mediul toxic de lucru, unde expunerea la vopsea pentru perioade îndelungate de timp poate dăuna sistemului nervos, dar în același timp oferă o mai mare consistență în procesul de vopsire și reduce cantitatea de deșeuri ale materialelor folosite.
Provocările controlului de la distanță
În controlul și operarea de la distanță a roboților industriali apar o serie de provocări care variază de la feedback-ul senzorial, până la probleme de dexteritate.
Omul profită de toate simțurile sale în navigarea și interacțiunea sa cu mediul înconjurător. Fie că este vorba de vederea stereo sau cea periferică, auz, simț tactil, chinestezie etc., omul este capabili să interacționeze cu obiecte și să îndeplinească sarcini cu precizie. Integrarea și clasificarea informațiilor senzoriale în informații utile și cu sens este ceea ce se numește percepție, și este o parte integrantă a atenției selective sau a reflexelor condiționate. Aceste concepte sunt ceea ce fac un operator uman experimentat, în cazul operării locale, apt pentru manipularea roboților, evitând în același timp obstacolele sau situațiile neprevăzute ce pot apărea. În cazul operării de la distanță, personalul uman nu beneficiază, de cele mai multe ori, de toate informațiile senzoriale care în mod normal sunt dobândite natural, în consecință, controlul robotului putând reprezenta o sarcină obositoare pentru om.
Abordarea acestei probleme, a furnizării operatorului uman a informațiilor necesare pentru controlul robotului, a dus la dezvoltarea sistemelor multimodale. O interfață cu omul multimodală se folosește de văz, auz, sunet etc., care sunt inerente în sistemul uman de percepție, pentru a îndeplini următoarele funcții: capturarea intențiilor operatorului pentru comandarea sistemului și stimularea simțurilor operatorului uman cu informații din mediul de la distanță.
În proiectarea de astfel de sisteme multimodale trebuie ținut cont de răspunsurile neintuitive ce pot surveni în urma folosirii respectivelor modalități de percepție, deci trebuie să existe o coerență între comenzile operatorului și execuția acestora. În Figură 6 – Discrepanțe din motive cinematice(stanga) și din motive de observație(dreapta) putem observa astfel de situații. Aceste discrepanțe apar din cauza transformărilor cinematice, din motive de observație sau mișcări relative între obiect și cameră, ceea ce fac referințele de ghidare să nu corespundă cu referințele vizuale date.
Figură 7 – Discrepanțe din motive cinematice(stanga) și din motive de observație(dreapta)
În cadrul sistemelor multimodale se pot folosi și informații bazate pe fenomene fizice imperceptibile de către om, informații provenite de la senzori cu ultrasunete, senzori magnetici etc., care însă sunt transmite operatorului uman. Spre deosebire de exemplul anterior menționat, utilizarea de astfel de informații este nenaturală omului, iar prezentarea lor către operator poate fi problematică. Cognitive Info-Communication este un domeniu care cercetează comunicarea de informații către sistemele cognitive umane și poate fi folosit pentru a prezenta eficient informații în astfel de situații.
Operarea la distanță și teleoperarea întâmpină aceleași difucultăți în ceea ce privește mediile la distanță nestructurate, întârzierile de comunicație, incertitudinea și siguranța operatorului uman. Pentru a rezolva aceste probleme, o serie de măsuri de asistare, precum limitările artificiale sau ghidarea mișcării, pot fi luate. Observăm o împărțire a acestor măsuri în două categorii. Prima categorie este a celor bazate pe software, unde includem limitările de ordin geometric impuse prin software operatorului, limitări bazate pe punte, linii, planuri, sfere și cilindrii. A doua categorie este a celor hardware, care se bazează pe șine de ghidaj, slidere etc.
Astfel de constrângeri pot conferi operatorului uman încredere în timpul operării la distanță, dar în același timp pot asigura siguranța în folosire, prin evitarea coliziunilor cu obiecte în mediul de la distanță. Constrângerile ce se bazează pe software au marele avantaj că sunt ușor de schimbat și de modificat în timpul operării.
Componentele de bază ale unui robot
Componentele de bază ale unui robot industrial se pot observa în Figură 7 – Componente de bază braț robotic și au următoarele semnificații:
Baza este reprezentată de cadrul pe care este fixată prima axă a structurii mecanice și reprezintă punctul de referință în rapot cu care deplasările axelor sunt calculate.
Structura purtătoare, în cazul unui robot cu 6 grade de libertate, este reprezentată de primele 3 axe care asigură poziționarea grosieră a articulațiilor efectorului final.
Articulația pumnului, în cazul unui robot cu 6 grade de libertate, este reprezentată de ultimele 3 axe și are rolul de a poziționa cu o precizie cât mai mare efectorul final.
Efectorul reprezintă un element care poate efectua operații specifice(gripper, sculă, spray etc.) domeniului în care robotul industrial este folosit.
Elementul cuplor este reprezentat de elementul ce facilitează cuplarea rapidă a efectoarelor în funcție de domeniul de utilizare al robotului.
Axa reprezintă elementul mecanic independent și este dotat cu elemente de acționare și traductoare de axe. De obicei, axele sunt acționate de sisteme electrice, hidraulice sau pneumatice, în funcție de domeniul de utilizare.
Figură 8 – Componente de bază braț robotic
Tehnologia folosită în cadrul proiectului
Universal Robots UR10
Universal Robots UR10 este un braț robotic produs de compania daneză Universal Robots care a revoluționat industria roboților de acest tip prin raportul performanță-preț extrem de bun și ușurința în programare. Robotul dispune de 6 articulații și este capabil să automatizeze procese și sarcini cu o greutate de până la 10Kg. Raza de acțiune a celui mai performant robot al celor de la Universal Robots este de 1300mm(51.2 in).
Fiecare dintre cele 6 articulații se pot roti între -360° și +360° cu o viteză de până la 180°/s iar acuratețea robotului UR10 este de +/-0.1mm:
Baza (A)
Umăr (B)
Cot (C)
Încheietura 1 (D)
Încheietura 2 (E)
Încheietura 3 (F)
Figură 9 – Articulațiile robotului UR10
Un alt avantaj al acestui braț robotic îl reprezintă caracteristica de „collaborative robot” care presupune că, urmând procedurile indicate de producător privind evaluarea riscului, acesta poate funcționa în siguranță alături de personalul uman.
Modulul de I/O al cutiei de control și posibilitățile oferite de producător de interfațare cu alte sisteme(PLC-uri, RTU-uri, senzori, etc.) atât la nivel fizic, cât și la nivel superior, de protocol de comunicație(Modbus) sau, mergând mai sus pe stiva OSI, la nivel de API(utilizând limbajul propriu de programare URScript), permit dezvoltarea unui sistem de securitate complet, sigur pentru exploatarea alături de personal uman, certificat conform EN ISO 13849:2008 de către TÜV NORD. Funcțiile de siguranța patentate implementate în robot fac ca acesta să limiteze forțele în cazul unui eventual contact cu personalul uman, sau să-și limiteze funcționarea în prezența acestuia, urmând ca atunci când perimetrul este eliberat să revină la modul de funcționare și viteza normală.
Figură 10 – Universal Robots UR10
O altă caracteristică a brațului UR10 o reprezintă tehnologia patentată de programare ce permite personalului să pună în funcțiune și să opereze robotul fără experiență în programare, printr-o interfață intuitivă tridimensională. Funcția de „Teach” a software-ului proprietar PolyScope permite operatorului uman să manipuleze brațul robotic în poziția dorită sau să folosească interfața touchscreen pentru a mișca articulațiile.
Interfețele electrice ale robotului pot fi împărțite în 5 grupuri cu diferite scopuri și proprietăți:
Modul I/O al controller-ului(atât analogice cât și digitale)
Modul I/O pentru manipulator(atât analogice cât și digitale)
Ethernet
Conexiuni principale
Conexiuni robot
Modulul de I/O al controller-ului permite interfațarea robotului cu diferite sisteme(relee pneumatice, PLC-uri, butoane de urgență etc.). Acesta dispune de I/O dedicate pentru siguranță(scris roșu pe fundal galben), I/O de siguranță configurabile(scris negru pe fundal galben), I/O digitale de uz general(scris negru pe fundal gri) și I/O analogice de uz general(scris negru pe fundal verde).
Figură 11 – Modul I/O al controller-ului
I/O digitale operează la o tensiune de 24V, fie din sursa proprie, fie dintr-o sursă externă. În cazul intrărilor digitale, în număr de 16, tensiunea trebuie să fie cuprinsă între valorile -3 – 30V, cu regiunea de OFF(sau LOW) în intervalul -3 – 5V și cea de ON(sau HIGH) între 11-30V cu curenți suportați între 2-15mA. În cazul ieșirilor digitale, în număr de 16, curentul suportat este între 0-1A.
Cele 2 intrări respectiv cele 2 ieșiri analogice pot fi folosite la setarea sau măsurarea de tensiuni cuprinse între 0-10V și curenți de 4-20mA de la, și către alte echipamente.
Interfața Ethernet de 100Mbit/s(IEEE 802.3u) pusă la dispoziție permite extinderea cu module Modbus TCP I/O sau acces și control de la distanță.
PolyScope este interfața grafică ce rulează pe consola touchscreen Teach Pendant.
Figură 12 – Consola touchscreen Teach Pendant
Software-ul permite utilizatorilor fără experiență în programare să programeze robotul, în cele mai multe situații nefiind necesară nici măcar tastarea de comenzi criptice. Pentru a ușura modul de utilizare, platforma permite setarea waypoints-urilor, pe lângă modalitatea de calcul software, fie din butoanele din interfață, fie prin manipularea robotului în timp ce este apăsat butonul „Freeride” de pe spatele Teach Pendant.
Software-ul permite crearea de programe, salvarea și exportarea lor, setarea de I/O-uri, setarea de parametrii de rețea de comunicație, setarea clientului de Modbus, inițializarea articulațiilor, securizarea prin parole, upgrade-ul și calibrarea robotului etc.
Pe lângă acestea, aplicația pune la dispoziție și o reprezentare tridimensională a robotului în timp real, sistemul fiind perfect proiectat pentru îndeplinirea de sarcini precum sudarea, testarea materialelor, asamblare, manipulare de obiecte, vopsire, lustruire, aplicații medicale, inspecția calității, împachetare și paletizare etc.
Figură 13 – Tab-ul Move al aplicației PolyScope și reprezentarea tridimensională a robotului
Aplicația PolyScope oferă de asemenea posibilitatea de a simula programele create pe reprezentarea tridimensională a consolei, în cazul în care, din motive de siguranță, nu se dorește executarea pe robotul real.
Producătorul Universal Robots pune la dispoziție și un limbaj de programare, cu funcții predefinite, asemănător limbajului Python, pe care controller-ul îl poate interpreta. Funcțiile acoperă toate funcționalitățile robotului, însă sunt funcții de bază, care necesită cunoștințe de programare și foarte multe calcule pentru a duce la un rezultat, de aceea producătorul recomandând utilizarea sistemului grafic de programare.
Raspberry Pi
Raspberry Pi este un calculator de dimensiunea unui card de credit, dezvoltat în Marea Britanie de către Raspberry Pi Foundation, o organizație non-profit înființată în anul 2009. Principalii susținători sunt Broadcom, pe al cărui System on a Chip (SoC) se bazează placa, și laboratorul University of Cambridge Computer Laboratory.
Figură 3.9 – Raspberry Pi Model B
SoC, sau System on a Chip este o metodă de a concentra toate electronicele necesare unui computer pentru a funcționa, într-un singur chip. În acest caz, chip-ul Broadcom BCM2835 conține CPU, GPU, USB controller, RAM, North Bridge, South Bridge etc.
Raspberry Pi are un procesor ARM1176JZFS, ce rulează la o frecvență de 700MHz. Face parte din familia de procesoare ARM11, cu arhitectură RISC pe 32-bit. Procesorul grafic Videocore 4 GPU rulează la o frecvența de 250MHz și este capabil să redea video la calitate BluRay, folosind H.264 la 40MBits/s, dispune de OpenGL ES2.0, accelerare grafică OpenVG și codare și decodare 1080p30 H.264. Deasemenea, placa dispune de 512MB memorie SDRAM (în cazul Raspberry Pi Model B) ce se atribuie dinamic, de la 16Mb la 256Mb în pași de câte 8Mb, procesorului grafic, în funcție de necesități.
Figură 3.10 – Diagrama bloc a procesorului ARM1176JZFS
Modelul B conține chipul SMSC LAN951x ce oferă interfața USB 2.0 dar și o conexiune Ethernet 10/100Mb. Raspberry Pi are două porturi USB 2.0 ce pot fi folosite pentru conectarea unei tastaturi, a unui mouse, a unui modem 3G pe USB șamd., un jack de 3,5mm pentru audio, un port HDMI ce suportă și sunetul, și un port RCA pentru semnal video compozit.
Sistemul de operare bootează de pe un card SD. Stocarea se poate realiza atât pe acest card SD cât și pe alte dispozitive USB de stocare. Bootarea sistemului de operare de pe alt dispozitiv nu este posibilă, întrucât bootloaderul verifică la pornire prezența cardului SD.
Din punctul de vedere ar interfeței hardware, Raspberry Pi are 8 pini GPIO(General Purpose Input/Output) dedicați, o interfață UART(Universal asynchronous receiver/transmitter), o magistrală I2C(Inter-Integrated Circuit), interfață SPI(Serial Peripheral Interface), magistrală serială audio I2S(Integrated Interchip Sound), surse de 5V și 3,3V și masă. Teoretic, numărul de pini GPIO poate fi extins prin reconfigurarea celor destinați I2C sau SPI.
Un dezavantaj al platformei Raspberry Pi este lipsa RTC-ului(Real Time Clock). Sistemul de operare trebuie astfel să folosească un network time server sau să ceară informații despre timp utilizatorului pentru aplicațiile ce necesită time sau data stamping. Cu toate acestea, magistrala I2C poate fi folosită pentru atașarea unui RTC extern.
Placa Raspberry Pi lucrează la un o tensiune de 5V iar în funcție de perifericele atașate, consumul de curent variză între 700-1200mA. Din punctul de vedere al alimentării, platforma este destul de pretențioasă față de concurență, plaja de tensiune de alimentare fiind între 4,75V-5,25V. Alimentarea se poate realiza atât prin mufa microUSB, cât și prin intermediul unor pini GPIO, însă cei din urmă se află în spatele circuitului de protecție.
Modul de cameră
Pentru captura de imagini video se va folosi un modul de cameră bazat pe OmniVision 5674, un senzor de imagine CMOS de 5MegaPixeli produs de OmniVision. Acesta este capabil să captureze imagini fixe la o rezoluție de 5MP(2592×1944 pixeli), sau video, la o rezoluție de 720p, la 60fps, sau 1080p(1920×1080 pixeli) la 30fps.
Figură 3.5 – Modul camera Raspberry Pi Camera (OmniVision 5674)
Modulul oferă diferite funcții de control automat al imaginii, incluzând controlul automat al expunerii, controlul automat al balansului de alb, calibrarea automată a nivelului de negru șamd. De asemenea funcții precum frame rate-ul, controlul expunerii, panning, cropping sau windowing sunt programabile de către utilizator.
Camera suportă captura de poze în format RAW, sau encodate JPEG, PNG, GIF și BMP, YUV necomprimat sau RGB necomprimat. Imaginile video pot fi înregistrate ca H.264, un standard de codare video digitală cu o rată de compresie ridicată.
Camera se va interfața cu platforma Raspberry Pi prin portul CSI-2 pentru cameră, ce oferă posibilitatea conectării unei camere pentru achiziția de imagini sau video. Camera se conectează la Image System Pipeline (ISP) în System on a Chip (SoC) al platformei Raspberry Pi, unde datele pro venite de la cameră sunt procesate și convertite în imagini sau video pe SD card sau alt dispozitiv de stocare.
Scenarii de utilizare
Institutul X, care derulează proiecte de cercetare în domeniul aerospațial, deține un tunel aerodinamic care este folosit la studierea și experimentarea diferitelor modele funcționale, la diverse simulări și testări.
Pentru studierea modelelor dezvoltate, în diferite condiții, Institutul X are nevoie de un braț robotic capabil să susțină și să manipuleze diferitele obiecte de studiu în interiorul tunelului.
Controlul robotului trebuie să se realizeze de la distanță, prin intermediul unei rețele de comunicații, de către un operator uman aflat la o stație de lucru.
Mediul trebuie sa fie supravegheat video atât din motive funcționale cât și de siguranță.
Zona de acțiune a robotului trebuie să fie securizată astfel încât intrarea în incinta tunelului să oprească funcționarea brațului robotic.
Din punct de vedere software, Institutul X are nevoie, în proiectele derulate, de interfațarea robotului cu mediul de lucru LabView. Astfel, funcțiile robotului trebuie să fie disponibile a fi folosite în programarea altor aplicații LabView.
Facultatea Y din cadrul Universității Z, a achiziționat pentru laboratorul de Roboți Industriali un braț robotic.
Pentru a facilita accesul tuturor studenților la robot, Facultatea Y are nevoie de o platformă de lucru la distanță și un framework de programare.
Studenții vor dezvolta propriile aplicații în cadrul laboratoarelor, în mediul de dezvoltare LabView și vor putea supraveghea video activitatea robotului de la propriile stații de lucru conectate la rețeaua locală.
Din motive de siguranță, robotul se află într-o incintă închisă iar orice pătrundere în aceasta trebuie să oprească funcționarea robotului.
Listă de cerințe și specificații
Cerințe și specificații interfață
Interfața cu utilizatorul
Cerințe:
Utilizatorul trebuie să poată controla mișcările și articulațiile robotului de la o stație de lucru din mediul de dezvoltare LabView;
Utilizatorul trebuie să poată vedea în timp real pozițiile articulațiilor;
Utilizatorul trebuie să controleze în mod independent fiecare articulație;
Utilizatorul trebuie să se poată conecta la brațul robotic prin introducerea adresei de IP și a portului de comunicație;
Utilizatorul trebuie să poată vedea imagini video în timp real;
Specificații:
Se va crea:
o aplicație LabView pentru controlul robotului;
butoane pentru controlul fiecărei articulații
butoane pentru controlul mișcărilor de translație
butoane pentru controlul mișcărilor de rotație
o fereastră pentru afișarea imaginilor video;
câmpuri pentru afișarea pozițiilor fiecărei articulații;
un câmp pentru introducerea adresei IP a robotului din cadrul rețelei;
un câmp pentru introducerea portului pe care se va realiza comunicația;
un buton pentru conectarea la robot;
un buton pentru deconectarea de la robot;
Interfața Hardware
Cerințe:
Existența unei interfețe și infrastructuri de rețea pentru comunicația dintre robot și stația/stațiile de lucru;
Este necesară o cameră video pentru înregistrarea imaginilor;
Este necesară existența de butoane de urgență;
Este necesară existența de senzori de prezență;
Este necesară o sursă de energie;
Trebuie să existe o interfață între modulul de control și comandă și sistemul senzorial;
Trebuie să existe o interfață între modulul de control și comandă și sistemul de acționare.
Specificații:
Pentru achiziția de imagini, server-ul web și streaming online se va folosi un o platformă Raspberry Pi, cu procesor ARM de 700MHz.
Imaginile vor fi luate cu ajutorul unei camere video Omnivision 5647;
Pentru butoanele de urgență se vor folosi butoane tip ciupercă cu contacte NC duble cu reținere;
Alimentarea dispozitivelor se va realiza de la o priză de curent 220Vac la 50Hz;
Interfața Raspberry Pi – camera Omnivision 5647 se realizează prin portul CSI-2;
Legăturile între module se realizează prin cabluri.
Interfața software
Cerințe:
Software-ul trebuie să asigure comanda elementelor de acționare;
Să poată fi folosit în crearea de aplicații în LabView;
Să capabil să interpreteze datele de la sistemul senzorial;
Să permită primirea și interpretarea comenzilor de la utilizator;
Să permită trimiterea datelor către utilizator;
Un software pentru PC care să permită comandarea robotului, citirea informațiilor de la senzori și afișarea imaginilor video;
Specificații:
Dezvoltarea framework-ului se realizează în limbajul C++, în mediul de programare Microsoft Visual Studio;
Interfața cu utilizatorul se va realiza în mediul de programare LabView;
Pentru programarea Raspberry Pi se va folosi un limbaj de nivel înalt pe platforma linux Raspbian;
Cerințe funcționale
Robotul trebuie să poată fi comandat de la distanță cu ajutorul unei aplicații mobile de PC;
Operarea robotului trebuie să se facă de către un singur om;
Robotul trebuie să fie capabil să detecteze prezența umană în perimetru;
Sistemul trebuie să transmită imagini video în timp real;
Aceste date trebuie trimise operatorului în timp real;
Arhitectura
Totalitatea elementelor implicate în procesul de colectare, transmisie și prelucrare de informație, unde informația joacă rolul principal, reprezintă sistemul informațional. Elemente precum informația ce se vehiculează, documentele care o conțin, personalul uman, mijloacele de comunicare, sistemele de prelucrare a informației etc. sunt toate părți integrante ale sistemului informațional.
Figură 14 – Arhitectură robot industrial
Arhitectura de bază a roboților industriali actuali este prezentată în Figură 14 – Arhitectură robot industrial
Mediul de lucru reprezintă spațiul în care robotul operează și include toate obiectele din acel volum.
Sarcina reprezintă aplicația pe care structura mecanică a robotului trebuie s-o îndeplinească.
Structura mecanică reprezintă totalitatea corpurilor rigide conectate prin articulații ce formează un lanț cinematic.
Sistemul de acționare reprezintă totalitatea distribuitoarelor de energie, a adaptoarelor de mișcare și a elementelor de execuție cu ajutorul cărora energia de la sursă este transmisă la structura mecanică
Sursa de energie reprezintă componenta sistemului ce poate fi de natură electrică, hidraulică sau pneumatică.
Sistemul de comandă este un microcontroler de diferite arhitecturi a cărui sarcină este să transmită comenzi speficice sistemului de acționare al articulațiilor în urma interpretării și transformării instrucțiunilor de nivel înalt și a prelucrării informațiilor provenite de la traductoarele de axă sau diferite traductoare externe.
Sistemul de prelucrare senzorial reprezintă un subsistem cu microprocesor responsabil cu prelucrarea la nivel local a informațiilor provenite de la traductoare și care oferă informații relevante finale către sistemul de comandă sau cel de programare.
Sistemul de programare reprezintă un sistem performant de procesare ce rulează un sistem de operare capabil să interpreteze un limbaj de programare specific robotului și pe care rulează de asemenea și alte aplicații.
Modulul I/O reprezintă sistemul de interfațare al robotului cu procesul industrial sau cu alte unități de productie în vederea sincronizării, asigurării siguranței etc..
Magistrala industrială reprezintă magistrala de mare viteză, parte a sistemului de comunicație, prin intermediul căreia se vehiculează informații relevante pentru nivelele ierarhice superioare.
Hardware
URControl
URControl este controller-ul de nivel jos care rulează pe PC-ul Mini-ITX în cutia de control. Când PC-ul boot-ează URControl pornește ca un demon (ca un serviciu) și interfața de utilizator PolyScope se conectează ca un client, folosind o conexiune TCP/IP locală.
Conexiunea dintre PC și controller-ul low-level se realizează pe una dintre interfețele Ethernet puse la dispoziție de producător.
Figură 15 – Braț robotic
Figură 16 – Placă de bază cutie control sistem UR10
Figură 17 – Placă master sistem UR10
Figură 18 – Arhitectură sistem
Raspberry Pi
Responsabilă de captarea de imagini, rularea unui webserver, streaming-ul video și o parte a sistemului de siguranță este o platformă de dezvoltare Raspberry Pi Model B, cu un procesor ARM1176JZFS ce rulează la o frecvență de 700MHz. Face parte din familia de procesoare ARM11, cu arhitectură RISC pe 32-bit. Procesorul grafic Videocore 4 GPU rulează la o frecvența de 250MHz și este capabil să redea video la calitate BluRay, folosind H.264 la 40MBits/s, dispune de OpenGL ES2.0, accelerare grafică OpenVG și codare și decodare 1080p30 H.264. Deasemenea, placa dispune de 512MB memorie SDRAM (în cazul Raspberry Pi Model B) ce se atribuie dinamic, de la 16Mb la 256Mb în pași de câte 8Mb, procesorului grafic, în funcție de necesități.
Figură 19 – Arhitectură Raspberry Pi
Modelul B conține chipul SMSC LAN951x ce oferă interfața USB 2.0 dar și o conexiune Ethernet 10/100Mb. Raspberry Pi are două porturi USB 2.0 ce pot fi folosite pentru conectarea unei tastaturi, a unui mouse, a unui modem 3G pe USB șamd., un jack de 3,5mm pentru audio, un port HDMI ce suportă și sunetul, și un port RCA pentru semnal video compozit.
Sistemul de operare bootează de pe un card SD. Stocarea se poate realiza atât pe acest card SD cât și pe alte dispozitive USB de stocare. Bootarea sistemului de operare de pe alt dispozitiv nu este posibilă, întrucât bootloaderul verifică la pornire prezența cardului SD.
Un pin GPIO (General Purpose Input/Output) este un pin de uz general, al cărui comportament, de intrare sau de ieșire, este selectabil de către programator. Scopul pinilor GPIO este de a oferi posibilitatea poriectantului de sisteme integrate de a construi circuite digitale folosind astfel de pini și câteva linii de control disponibile pe chip, în schimbul construirii de circuite digitale adiționale dedicate. Acest tip de pini este folost în chipuri de tipul circuitelor integrate, SoC, FPGA, etc., cipuri multifuncționale precum codec-urile audio, sisteme pentru aplicații integrate de tipul Raspberry Pi, Arduino, BeagleBone, etc. De obicei sunt folosiți pentru a citi valori de la diferite tipuri de senzori(infraroșu, temperatură, magnetici, accelerare etc.), pentru a controla motoare în de curent continuu, display-uri LCD sau LED-uri, etc.
Pe plăcuța Raspberry Pi există 26 de pini grupați în același bloc numit P1. Dintre aceștia, 8 sunt pini GPIO, restul fiind folosiți pentru alte protocoale de comunicații (I²C, SPI, UART) și pentru alimentare la 3.3V, 5V și respectiv masa circuitului GND (0V). Nivelul de tensiune disponibil pe pinii GPIO este de 3.3V, aceștia fiind intoleranți la 5V.
Figură 20 – Pinii I/O ai Raspberry Pi
Toți pinii GPIO pot fi reconfigurați pentru a asigura funcții alternative, SPI, PWM, I²C și altele. Doar pinii GPIO 14 și 15 pot fi asignați pentru funcția alternativă de UART, având posibilitatea de a-i reasigna către funcția GPIO pentru a asigura un număr de 17 pini GPIO. Fiecare funcție este detaliată în fișa tehnică a cipului BCM2835. Fiecare pin GPIO este capabil de schimbări ale semnalului în nivelul maxim/minim și de executarea întreruperilor. Histerezisul pe intrare al pinilor GPIO poate fi de tip pornit/oprit, rata de cădere poate fi rapidă sau limitată iar curentul de sursă și cel absorbit poate fi configurat de la 2mA până la 16 mA. Aceste proprietăți se aplică tuturor celor 26 de pini ai blocului P1.
CSI-2 (Camera Serial Interface 2)
Raspberry Pi Camera se va interfața cu platforma Raspberry Pi prin portul CSI-2 pentru cameră, ce oferă posibilitatea conectării unei camere pentru achiziția de imagini sau video. Camera se conectează la Image System Pipeline (ISP) în System on a Chip (SoC) al platformei Raspberry Pi, unde datele pro venite de la cameră sunt procesate și convertite în imagini sau video pe SD card sau alt dispozitiv de stocare.
Specificațiile CSI-2 definesc interfețele de transmitere de date și control dintre transmițator și receptor. Interfața CSI-2 de transmitere de date este o interfață serială unidirecțională diferențială cu semnal de date și de ceas. Nivelul fizic al acesteia este standardul MIPI Alliance pentru D-PHY. Interfața de control, în schimb, este o interfață bidirecțională compatibilă cu standardul I2C.
Softwear
Din punct de vedere al arhitecturii software, sistemul poate fi împărțit în 3 componente: componenta locală, sistemul de operare și scripturile responsabile cu interfațarea cu senzorii, modulele, camera, etc., componenta server, bazată pe o arhitectură LAMP, și componenta client.
Sistemul PC Universal Robot UR10 rulează o distribuție modificată de linux Ubuntu. Interfața PolyScope este realizată în limbajul de programare Java, însă producătorul și dezvoltat o altă aplicație de nivel mai jos pentru controlarea robotului și interfațarea acestuia cu software-ul PolyScope sau alte sisteme(prin URScript).
URScript
URScript este un limbaj de programare folosit pentru programarea scriptică a robotului. La fel ca orice alt limbaj de programare, URScript dispune de variabile, tipuri, declarații de flux de control, funcții etc. În plus, URScript dispune de o serie de variabile și funcții integrate ce monitorizează și controlează sistemul I/O și mișcările robotului.
URControl este controller-ul de nivel jos care rulează pe PC-ul Mini-ITX în cutia de control. Când PC-ul boot-ează URControl pornește ca un demon (ca un serviciu) și interfața de utilizator PolyScope se conectează ca un client, folosind o conexiune TCP/IP locală.
Programarea unui robot la nivel Script se face prin scrierea unei aplicații client (rulează pe un alt PC) și conectarea la URControl folosind un socket TCP/IP.
Portul de comunicație pus la dispoziție de către producător pentru comunicarea bidirecțională și interfațarea cu limbajul URScript este 30002.
Deoarece URScript are ca scop primar controlul robotului, politica de programare a sarcinilor este bazată pe cererire în timp real ale sarcinilor. Robotul trebuie să fie controlat cu o frecvență de 125 Hz, sau cu alte cuvinte, trebuie să i se spună ce să facă la fiecare 0.008 secunde (fiecare perioadă de 0.008 secunde este numită un cadru). Pentru a realiza acest lucru, fiecărui fir de execuție îi este alocată o felie „fizică” de timp de 0.008 secunde, și toate firele de execuție aflate în execuție sunt apoi programate într-o manieră round-robin. De fiecare dată când un fir este programat, acesta poate folosi felia de timp (executând instrucțiuni care controlează robotul), sau poate executa instrucțiuni care nu controlează robotul și astfel nu va folosi nici un moment "fizic" de timp. Dacă un fir foloseste întreaga sa felie de timp, este plasat într-o stare non-runnable, și nu îi este permis să ruleze până când cadrul următor nu începe. Dacă un fir nu utilizează felia de timp într-un cadru, este de așteptat ca acesta să se comute într-o stare non-runnable înainte de sfârșitul cadrului. Motivul pentru această comutare de stare poate fi o instrucțiune join sau pur și simplu pentru că firul de execuție se termină.
Framework-ul dezvoltat în C++
Framework-ul dezvoltat în C++ pune la dispoziție prin intermediul unei librării toate funcțiile disponibile în API-ul creat de Universal Robots al limbajului URScript.
Diagrama UML este o prezentare grafică a unui set de elemente, cel mai adesea exprimate ca un graf de noduri. Diagramele de clase sunt folosite în modelarea orientată obiect pentru a descrie structura statică a sistemului, modului în care este el structurat. Acestea oferă o notație grafică a claselor, entități ce au caracteristici comune și a relațiilor dintre două sau mai multe clase.
Figură 21 – UML Diagramă clase librărie C++
La nivel local, sistemul plăcii de dezvoltare Raspberry Pi se bazează pe o distribuție de Debian 7 Wheezy special modificată pentru hardware-ul plăcii(ARM11), numită Raspbian. Sistemul de operare Raspian este un sistem de tip “hard-float”, adică acesta operează în virgulă mobilă prin emulare hardware. Astfel, nu se oferă suport pentru folosirea blocului de procesare vectorială în virgulă mobilă.
Pentru interfațarea cu senzorii, modulele de comunicație, localizare și elementul de acționare, se vor dezvolta o serie de scripturi în Bash sau Python.
Componenta server a sistemului se bazează pe o arhitectură LAMP peste care se va afla un alt nivel de aplicație, ce va conține aplicațiile și serviciile web. LAMP este un acronim pentru un server web format din componente open-source și provine de la inițialele aplicațiilor folosite: Linux, Apache HTTP Server, MySQL și PHP.
Figură 22 – Arhitectura software a sistemului
Apache este un server HTTP, cel mai cunoscut și mai utilizat în industria IT. Serverul Apache găzduiește mai mult de 50% din conținutul web din întreaga lume.
Peste arhitectura LAMP, serverul mai conține un nivel suplimentar, cel al aplicațiilor și serviciilor web.
Componenta Client a sistemului este reprezentată de orice browser web de pe orice tip de dispozitiv, precum și de aplicațiile special dezvoltate pentru acest sistem. Datorită folosirii serviciilor web, problema interoperabilității este rezolvată.
Serviciile web
Serviciile web reprezintă rezultatul unei evoluții firești a platformelor middleware și a celor de integrare a aplicațiilor de intreprindere(Enterprise Application Integration), determinate de folosirea tot mai intensă a rețelei Internet și de globalizarea societății actuale, mai ales în domeniul economic.
Obiectivele majore ce stau la baza proiectării arhitecturilor orientate către servicii (Service-Oriented Architecture) și a tehnologiilor dedicate serviciilor web sunt, pe de o parte, asigurarea interoperabilității între diferitele „stive” de tehnologii middleware eterogene și, pe de altă parte, promovarea slabei cuplări dintre „consumatorul serviciului” (client, solicitant) și „furnizorul de serviciu”.
Serviciile web pot fi definite ca interfețe de programare a aplicațiilor Internet(Application Programming Interfaces) ce pot fi accesate într-o rețea și folosite pe un sistem aflat la distanță, care găzduiește serviciile invocate.
Implementare
Introduceti in casuta text “IP” adresa de IP rezervata in prealabil robotului
Introduceti in casuta text “Port” portul pe care se va realiza comunicatia cu robotul. Conform specificatiilor producatorului, portul pe care se realizeaza comunicatia este 30002
Nota
Port-ul rezervat de catre producator pentru interfatarea folosind URScript Programming Language este 30002
Figura 23 – UR10 LabView Interface – Move tab
Apasati butonul “Connect” pentru a va conecta la robot
LED-ul corespunzator “Connection Status” va deveni verde
Nota
Daca conexiunea nu a reusit verificati ca adresa de IP si Port-ul introduse sa corespunda cu indicatiile de mai sus. Daca problema nu este remediata, verificati setarile de retea atat pe Polyscope cat si pe sistemul de operare Windows 7 pe care ruleaza aplicatia UR10 LabView Interface. Pentru alte informatii contactati producatorul software-ului.
Pentru oprirea conexiunii apasati butonul “Stop”
LED-ul corespunzator “Connection Status” va deveni rosu
Figură 24 – Funcția connect_robot
extern "C" _declspec(dllexport) int32_t connect_robot(int16_t connect_but, CStr host, uint16_t port)
{
if(connect_but==1)
{
if(host!=NULL)
{
char hostt[20];
memset(hostt, 0, 20);
strcpy(hostt, (const char*)host);
LOG("CONN: "<<hostt<<":"<<port<<endl);
conectare(hostt, port);
}
}
return 1;
}
extern "C" _declspec(dllexport) void conectare(char *host, int port)
{
if(!running)
{
if(host!=NULL && port!=0)
{
LOG("Conectare…\n");
client.connect(host, port);
if(client.isConnected())
{
LOG("Conectat OK\n");
running = true;
#ifdef ENABLE_THREAD
thread1 = CreateThread(NULL, 0, threadFunc, (LPVOID)&client, 0, 0);
#endif
}
else
{
LOG("Eroare conectare: "<<client.getLastError()<<endl);
}
}
}
else
{
cout<<"Deconectare..\n";
if(rot_jog)
{
linearStop();
linearStop();
rot_jog = false;
}
if(rot_rot)
{
jointStop();
jointStop();
rot_rot = false;
}
running = false;
client.disconnect();
#ifdef ENABLE_THREAD
if(thread1!=INVALID_HANDLE_VALUE)
{
WaitForSingleObject(thread1, INFINITE);
CloseHandle(thread1);
thread1 = INVALID_HANDLE_VALUE;
}
#endif
}
}
Figură 25 – Funcția getConnectionStatus
extern "C" _declspec(dllexport) int32_t getConnectionStatus(void )
{
#ifndef ENABLE_THREAD
if(client.isConnected() && running)
{
client.read();
if(client.getRoboInfo() != info_robo_local)
{
if(client.getRoboInfo().mes_robot != info_robo_local.mes_robot)
{
LOG("Mesaj robot\n"<<info_robo_local.mes_robot);
}
info_robo_local = client.getRoboInfo();
if(info_robo_local.emergencyStopped == 1 || info_robo_local.securityStopped == 1)
{
alerta_fer_activa = 1;
}
}
}
if(running && !client.isConnected())
{
running = false;
MessageBox(NULL, "Ati fost deconectat de la robot!", "Error", MB_OK|MB_ICONEXCLAMATION);
}
#endif
return running;
}
Tinand apasat unul dintre butoanele sageata “translate arrow” din partea de sus, tool-tip-ul robotului va fi miscat in directia indicata de buton.
Figură 26 – Translate arrows
Tinand apasat unul dintre butoanele sageata “rotate arrow” din partea de jos, tool-ul robotului se va roti in directia indicata de buton. Punctul de rotatie este Tool Center Point (TCP).
Figură 27 – Rotate arrows
Pentru a stopa miscarea eliberati butonul tinut apasat.
Figură 28 – Funcția moveRobot
extern "C" _declspec(dllexport) void moveRobot(int32_t but)
{
if(!robot_blocat)
{
if(but>=1 && but<=24)
{
#ifndef ENABLE_THREAD
if(clock()-tt>TIMEOUT_BUT)
{
tt = clock();
#endif
if(but<13)
{
jointRotate((but-1)/2, (but%2==1)?-1:1);
rot_rot = true;
}
else
{
toolJog(but);
rot_jog = true;
}
#ifndef ENABLE_THREAD
}
#endif
}
else
{
if(rot_jog)
{
#ifndef ENABLE_THREAD
linearStop();
#endif
linearStop();
rot_jog = false;
}
if(rot_rot)
{
#ifndef ENABLE_THREAD
jointStop();
#endif
jointStop();
rot_rot = false;
}
}
}
}
extern "C" _declspec(dllexport) void toolJog(int but)
{
Vector3d rotSpeed = Vector3d(0.0f, 0.0f, 0.0f);
Vector3d transSpeed = Vector3d(0.0f, 0.0f, 0.0f);
switch(but)
{
//translatie
case 13:
{
transSpeed.z = 1.0f;
}break;
case 14:
{
transSpeed.z = -1.0f;
}break;
case 15:
{
transSpeed.x = -1.0f;
}break;
case 16:
{
transSpeed.y = 1.0f;
}break;
case 17:
{
transSpeed.x = 1.0f;
}break;
case 18:
{
transSpeed.y = -1.0f;
}break;
//rotatie
case 19:
{
rotSpeed.x = 1.0f;
}break;
case 20:
{
rotSpeed.x = -1.0f;
}break;
case 21:
{
rotSpeed.y = -1.0f;
}break;
case 22:
{
rotSpeed.z = 1.0f;
}break;
case 23:
{
rotSpeed.y = 1.0f;
}break;
case 24:
{
rotSpeed.z = -1.0f;
}break;
}
transSpeed.x =(Pose6d::getInstance().trans.mat._11*transSpeed.x + Pose6d::getInstance().trans.mat._12*transSpeed.y + Pose6d::getInstance().trans.mat._13*transSpeed.z) * 0.05f;
transSpeed.y =(Pose6d::getInstance().trans.mat._21*transSpeed.x + Pose6d::getInstance().trans.mat._22*transSpeed.y + Pose6d::getInstance().trans.mat._23*transSpeed.z) * 0.05f;
transSpeed.z =(Pose6d::getInstance().trans.mat._31*transSpeed.x + Pose6d::getInstance().trans.mat._32*transSpeed.y + Pose6d::getInstance().trans.mat._33*transSpeed.z) * 0.05f;
double val = (0.05f / info_robo_local.eqRadius);
rotSpeed.x = (Pose6d::getInstance().trans.mat._11*rotSpeed.x + Pose6d::getInstance().trans.mat._12*rotSpeed.y + Pose6d::getInstance().trans.mat._13*rotSpeed.z) * val;
rotSpeed.y = (Pose6d::getInstance().trans.mat._21*rotSpeed.x + Pose6d::getInstance().trans.mat._22*rotSpeed.y + Pose6d::getInstance().trans.mat._23*rotSpeed.z) * val;
rotSpeed.z = (Pose6d::getInstance().trans.mat._31*rotSpeed.x + Pose6d::getInstance().trans.mat._32*rotSpeed.y + Pose6d::getInstance().trans.mat._33*rotSpeed.z) * val;
client.jogTool(transSpeed, rotSpeed, info_robo_local.tool_A_def);
}
extern "C" _declspec(dllexport) void test_func(void)
{
//LOG("test func\n");
}
extern "C" _declspec(dllexport) void linearStop()
{
client.sendStopLinear(1.5f/(info_robo_local.speedFraction*info_robo_local.speedFraction));
}
Butoanele sageata corespunzatoare acestei sectiuni controleaza fiecare dintre articulatii individual
Figură 29 – Move Joints
Fiecare articulatie se poate roti intre -360grade si +360grade, care sunt limitele de baza, ilustrate de barele orizontale
Daca o articulatie si-a atins limita, nu poate inainta mai mult si un mesaj de eroare va aparea pe ecran
Figură 30 – Funcția getMoveJoints
extern "C" _declspec(dllexport) void getMoveJoints(float *X2, float *Y2, float *Z2, float *RX2, float *RY2, float *RZ2)
{
if(!robot_blocat)
{
*X2 = (::info_robo_local.move_joints.base) *180.0f/M_PI;
*Y2 = (::info_robo_local.move_joints.shoulder)*180.0f/M_PI;
*Z2 = (::info_robo_local.move_joints.elbow)*180.0f/M_PI;
*RX2 = (::info_robo_local.move_joints.wrist_1)*180.0f/M_PI;
*RY2 = (::info_robo_local.move_joints.wrist_2)*180.0f/M_PI;
*RZ2 = (::info_robo_local.move_joints.wrist_3)*180.0f/M_PI;
}
}
Casutele text arata valorile coordonatelor TCP
Figură 31 – Tool Position
Aceste valori pot fi editate manual
Figură 32 – Funcția getToolPosition
extern "C" _declspec(dllexport) void getToolPosition(float *X, float *Y, float *Z, float *RX, float *RY, float *RZ)
{
if(!robot_blocat)
{
*X = (::info_robo_local.tool_position.x)*1000;
*Y = (::info_robo_local.tool_position.y)*1000;
*Z = (::info_robo_local.tool_position.z)*1000-400;
*RX = ::info_robo_local.tool_position.RX;
*RY = ::info_robo_local.tool_position.RY;
*RZ = ::info_robo_local.tool_position.RZ;
}
}
Orice mesaj de eroare trimis de către URControl va fi afișat în interfața LabView într-un dialog care nu v-a dispărea până ce situația care a dus la apariția erorii nu a fost remediată.
Figură 33 – Funcția eroareRobo
extern "C" _declspec(dllexport) int32_t eroareRobo(int32_t ok)
{
if(ok == 1)
{
alerta_fer_activa = 0;
///client.sendSetRobotmodeRun();
}
return alerta_fer_activa;
}
Concluzii și contribuții personale
În ultimii ani s-a observat o creștere în utilizare a roboților industriali în Întreprinderile Mici și Mijlocii, trend ce reprezintă o provocare pentru integratorii de sisteme, care acum sunt puși în fața necesității de dezvoltare de soluții personalizate și în fața unei noi abordări privind modalitatea de oferire de suport și transfer de cunoștințe către beneficiari. Una dintre soluțiile la astfel de probleme o reprezintă controlul de la distanță a sistemelor industriale robotizate. Cu toate acestea, provocările ridicate de interfațarea cu astfel de sisteme, comunicarea eficientă a stării robotului către operator etc. reprezintă în continuare, noi provocări.
Lucrarea de față prezintă dezvoltarea unei platforme de control de la distanță al unui robot Universal Robots UR10.
În centrul sistemului software stă un framework dezvoltat în limbajul de programare C++, care permite interfațarea cu robotul și apelarea tuturor funcțiilor puse la dispoziție de producător, din orice aplicație capabilă să lucreze cu biblioteci dll.
Pentru exemplificare s-a dezvoltat o interfață în mediul de programare LabView, unde au fost puse la dispoziție o serie de funcții ale limbajului proprietar URScript.
Odată ce sistemul robotic industrial este conectat la rețea, acesta poate fi controlat din aplicația LabView din orice locație care are acces la rețeaua respectivă.
Pentru feedback-ul vizual s-a dezvoltat un sistem de supraveghere video cu ajutorul platformei Raspberry Pi și a unei camere video.
Pentru a respecta cerințele de siguranță în cazul unor astfel de sisteme, s-au implementat mecanisme de oprire de urgentă, atenționare a utilizatorului în cazul unor anumite comportamente ale robotului, oprire în cazul pierderii conexiunii de rețea etc.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Dezvoltarea Unei Platforme Pentru Controlul de la Distanta al Unui Robot Universal Robots Ur10 (ID: 162345)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
