TSM - Robot de recoltare autonomă a culturilor (II)

Köllő Magor Örs - Software Product & Platform Engineer @ Accenture

Proiectul și lucrarea care fac subiectul acestui articol se axează pe dezvoltarea unei platforme robotizate capabile să desfășoare activități agricole, cum ar fi recoltarea, prin valorificarea descoperirilor tehnologice din ultimii ani. Platforma este una mobilă, dotată cu un braț robotic și cu o cameră de adâncime conectată la un procesor integrat. Astfel, pentru detectarea și localizarea recoltei sunt comparate rezultatele mai multor algoritmi specifici vederii informatizate, pentru robot fiind propus un sistem de percepție vizuală, care include o variantă îmbunătățită de rețea neuronală pentru detectarea obiectelor. Integrarea completă a sistemului amintit are ca rezultat prototipul unui robot de recoltare autonomă. Pentru comanda acestuia este utilizat sistemul de operare robot (ROS), iar pentru asigurarea autonomiei se folosesc algoritmi integrați caracteristici inteligenței artificiale.

În prima parte a acestui articol am prezentat sistemul în ansamblu, navigarea, manevrarea, iar în această parte voi intra în detalii privind platforma robotizată dezvoltată.

Sistemul de percepție

Pentru identificarea culturilor au fost testate două tipuri de rețele de detectare a obiectelor, și anume YOLOv3, respectiv SSD-MobileNet v2. YOLO este o rețea de detectare a obiectelor folosită pe scară largă, cu o singură rețea neuronală în spirală. Detecția se face prin previzionarea unor dreptunghiuri de delimitare pe imagine și prin clasificarea obiectelor din aceste dreptunghiuri. Există, de asemenea, o versiune mai simplă a YOLO, denumită Tiny-YOLO, care reprezintă un compromis între calitatea detecției și cerințele de calcul. Aceasta rulează mult mai rapid pe procesoarele integrate, însă are un randament redus. În cazul acestor rețele neuronale, accentul a fost pus pe optimizarea rețelei pentru dispozitivul încorporat, valorificând capacitatea unității de prelucrare grafică (GPU) de la Jetson Nano. În final, a fost utilizată rețeaua inițială furnizată de Redmon et al., fără alte îmbunătățiri și modificări.

Pe lângă YOLOv3, a fost testat și SSD MobileNet v2. Producătorii Nvidia au optimizat unele dintre rețelele neuronale profunde pentru unitățile de prelucrare grafică (GPU) Jetson, obținând rezultate mai bune cu aceste rețele pe dispozitivele integrate, prin intermediul cadrului de inferență TensorRT. Rețeaua SSD-MobileNet v2 are un raport ridicat de cadre pe secundă (FPS), însă, în comparație cu YOLO, nu detectează cu precizie obiectele; de aceea, pentru identificarea fructelor, a fost antrenată o versiune îmbunătățită a rețelei. Chiar dacă serele sunt considerate spații închise, schimbarea intensității luminoase este similară cu cea din spațiile deschise, reprezentând una dintre cele mai mari provocări ale aplicațiilor care folosesc vederea artificială. În abordarea problemei variației luminii ambientale, s-a acordat o mare atenție datelor obținute la antrenarea și validarea algoritmilor, incluzând mai multe imagini ale culturilor țintă, realizate în condiții de intensitate luminoasă variabilă. În consecință, rețeaua nou antrenată a fost ceva mai bine pregătită pentru a face față variației de lumină.

Având în vedere că operațiunile horticole robotizate se desfășoară într-un spațiu tridimensional, se utilizează o cameră RGB-D care poate colecta informații în sistem 3D despre poziția culturii țintă. Potrivit lui Vit et. al. (Vit și Shani 2018), Intel Realsense D435i este una dintre cele mai performante și, totodată, ieftine camere RGB-D luate în calcul pentru operațiunile agricole. În lucrarea noastră anterioară (Kollo, Molnar și Tamas 2021) am utilizat - pentru detectarea adâncimii - camera Pico Zense DCAM710 TOF, care, însă, a fost puternic influențată de variația luminii; de aceea, în acest proiect, am folosit camera stereo de adâncime Intel Realsense D435i. Cunoscând distanța dintre captatorul video din stânga și cel din dreapta, am putut calcula adâncimea pe baza comparației dintre cele două imagini obținute. Odată detectat pe imaginile color 2D fiecare produs agricol țintă, se cunosc dreptunghiul de delimitare și punctul central al acestuia; ulterior, cu ajutorul camerei stereo de adâncime, se poate determina poziția produsului respectiv în spațiul 3D. În afară de punctul central, se determină și lățimea aproximativă a produsului agricol țintă, calculată pe baza distanței dintre extremitățile acestuia, ceea ce facilitează prinderea al cărei impact este astfel atenuat. Detectarea obiectelor cu YOLOv3 și măsurarea adâncimii, plecând de la un point cloud, cu ajutorul camerei Intel Realsense D435i, sunt prezentate în fig. [fig: detections].

Prindere și manevrare

Pentru prinderea și manevrarea obiectelor se utilizează un braț robotic articulat, cu 4 DOF, mai exact OpenManipulator-X, acesta fiind prevăzut doar cu articulații rotative. Brațul robotizat este integrat în ROS și comandat cu ajutorul unei platforme de programare a mișcărilor denumită MoveIt! Cu toate acestea, oficial, OpenManipulator-X este incompatibil cu ROS Melodic distro; prin urmare, au fost efectuate unele modificări minore în fișierele de lansare și în nodurile ROS pentru a le face compatibile, întrucât întregul sistem utilizează Melodic distro. Însă, cum modelul cinematic invers al manipulatorului nu a funcționat în platforma ROS Melodic MoveIt!, am implementat - în Python - o metodă de calcul cinematic, direct și invers, pe baza rezultatelor obținute de Ting et al. (Ting et al., f.a.). Coordonatele culturii țintă sunt definite în sistemul 3D al camerei de adâncime, iar acestea trebuie translatate în cel al manipulatorului. În acest scop, cu ajutorul unui suport imprimat 3D, camera este montată pe manipulator după o configurație de tip eye-in-hand, având astfel o perspectivă similară cu cea a efectorului terminal. Conversia între cele două sisteme de coordonate necesită o calibrare de tip hand-eye pentru care se utilizează modulul de calibrare al MoveIt.

Arhitectura și comanda sistemului

Faptul că sistemul este unul integrat permite robotului să se deplaseze spre punctele stabilite deja de către un operator uman, să se oprească în locurile selectate, să activeze nodul de prelucrare a imaginilor, să localizeze și să prindă obiectele detectate, ca apoi să se îndrepte spre următorul punct. Robotul nu este pe deplin autonom, deoarece punctele în care se oprește trebuie stabilite în prealabil; în schimb, se deplasează și prinde obiectele în mod autonom. Arhitectura robotului este prezentată în fig. [fig: robot_architecture], incluzând atât modulele hardware, cât și cele software. Paralelogramele albastre reprezintă modulele hardware, dreptunghiurile galbene sunt modulele software, iar dreptunghiurile gri reprezintă principalele elemente de coordonare. Configurația ROS de tip stăpân-scalv este utilizată între un PC aflat la distanță și o placă de bază Jetson Nano. Deoarece procesorul integrat are o capacitate limitată de prelucrare, unele procese sunt partajate și executate pe PC-ul de la distanță, comunicarea între calculatoare realizându-se prin internetul fără fir. Nodul coordonator local sincronizează toate informațiile provenite de la module, ia decizii la acest nivel și transmite comenzi nodurilor software. Nodul de tip master oferă o interfață pentru comanda manuală a robotului, inclusiv un modul de intervenție de la distanță utilizat în cartografiere și în cazurile de urgență. În timpul recoltării, nodul de tip master este implicat în programarea mișcării manipulatorului. Nodul platformei mobile comandă roțile și răspunde de planificarea traiectoriei pe baza datelor colectate de la senzorul LIDAR și de la codificatoare, fiind, de asemenea, conectat la modulul de intervenție de la distanță. Nodul de percepție prelucrează imaginile provenite de la camera RGB-D, detectează obiectele și, pe baza informațiilor privind adâncimea, localizează culturile. În continuare, folosind datele provenite de la nodul de percepție, nodul de manipulare comandă brațul robotic și dispozitivul de prindere, parcurgând traseul indicat de nodul de tip stăpân.

Secvența de recoltare

Sistemul de comandă pentru operațiunea de recoltare autonomă este prezentat în fig. [fig: flowchart]. Acesta este compus din trei module principale care verifică periodic îndeplinirea anumitor condiții. Operațiunile încep cu inițializarea nodului de tip master și conectarea la nodul de tip sclav. Este adus apoi robotul și se pornește modulul de navigare. Un operator uman stabilește punctele de destinație unde pot fi găsite produsele agricole țintă, iar robotul începe să le viziteze. Atunci când ajunge la obiectivul dorit, se activează nodul de percepție, nodul de navigare fiind temporar oprit. Procesorul integrat începe să prelucreze imaginile captate de camera de adâncime, obiectele identificate fiind astfel localizate. Pentru toate produsele agricole detectate se verifică dacă acestea se află în raza de acțiune a robotului, iar acelea care îndeplinesc condiția, sunt numărate și salvate într-o listă, împreună cu coordonatele aferente privind adâncimea. Următorul pas este ierarhizarea obiectelor în funcție de distanța măsurată față de senzorul de imagine, prioritare fiind cele din imediata apropiere. Odată ierarhizate obiectele, se pornește nodul de comandă a manipulatorului, translatându-se coordonatele obiectelor în sistemul de coordonate al efectorului terminal. Astfel, unghiurile articulațiilor manipulatorului se calculează folosind metoda de calcul cinematic invers, în timp ce traiectoria de mișcare a obiectelor este programată cu ajutorul nodului de tip stăpân. În continuare, traiectoria planificată este transmisă spre nodul server al manipulatorului și executată de către manipulator. Întrucât, de multe ori, manipulatorul nu urmează traiectoria stabilită, se verifică acest fapt, iar după aceea dispozitivul de prindere preia produsul agricol țintă. Pentru ca recolta să fie culeasă cu mai multă atenție, pe baza datelor privind adâncimea culturii țintă, se calculează lățimea aproximativă a rândului de plante, dispozitivul de prindere închizându-se la depășirea limitei impuse. Robotul plasează recolta într-o loc prestabilit și actualizează lista produselor agricole țintă. Operațiunea descrisă anterior este repetată de către nodul de comandă a manipulatorului până când lista este epuizată. În continuare, robotul se deplasează spre următoarea destinație, până când vizitează fiecare loc inclus în traseu. La sfârșitul operațiunii, robotul îl informează pe operatorul uman că recoltarea a fost încheiată și se întoarce la punctul de plecare.

Rezultatele obținute

Pe lângă sistemul integrat de comandă care pune la dispoziție o metodă de recoltare autonomă, principala contribuție a acestui proiect este sistemul de percepție vizuală creat pentru recoltarea robotizată a culturilor. Rezultatele obținute în cazul a două rețele de detectare a obiectelor în timp real au fost comparate și optimizate pentru procesorul integrat al Jetson Nano. Rețelele sunt conectate la o cameră de adâncime, astfel încât obiectul detectat poate fi și localizat.

În primul rând, a fost testată rețeaua SSD-MobileNet v2. Utilizând TensorRT, se pot obține rezultate excelente de prelucrare în timp real: 16 cadre pe secundă (FPS). Cu toate acestea, performanțele în materie de detecție nu au fost satisfăcătoare; de aceea, am încercat să le îmbunătățim printr-un reglaj fin în cazul detectării fructelor. Astfel, pentru șapte tipuri dintre acestea (căpșune, portocale, mere, struguri, portocale, banane și pere), am făcut peste 5500 de fotografii, iar apoi am antrenat o nouă versiune a rețelei SSD-MobileNetv2, utilizând conceptul de transfer de cunoștințe și mediul de instruire furnizat de Nvidia. În total, au fost efectuate cinci antrenamente folosind două dispozitive diferite: Jetson Nano (două antrenamente), respectiv Jetson AGX Xavier (trei antrenamente), tabelul comparativ fiind prezentat în fig. [fig: ssd_results]. După cum reiese din grafic, pierderile medii ale rețelelor antrenate folosind Jetson Nano sunt mai mari încă de la început, în comparație cu cele ale rețelelor antrenate utilizând AGX Xavier. Nano nu este adecvat pentru antrenarea rețelelor neuronale profunde, deoarece unitatea de prelucrare grafică (GPU) nu are suficientă memorie și putere. Ca urmare, la un moment dat, se supraîncălzește și trebuie să se oprească. În schimb, Jetson AGX Xavier a avut un randament bun pe parcursul formării, însă s-a putut observa că, după atingerea unui anumit punct, rezultatele se plafonează, neputând fi îmbunătățite cu adevărat nici măcar după 30 de cicluri complete. Pentru antrenamente au fost utilizate următoarele configurații:

Se poate observa că rezultatele instruirii se îmbunătățesc pe măsura creșterii numărului de mostre dintr-un lot și a numărului de lucrători. La primul antrenament, s-a defectat și Jetson Xavier AGX, astfel încât, din cauza problemelor de supraîncălzire, nu au mai fost testați parametrii unui lot mai mare în timpul unui ciclu de instruire. Datorită antrenamentului, distanța maximă măsurată de la un măr detectat până la cameră a crescut de la 530 milimetri la 610 milimetri, la un prag de încredere de 50%.

Rezultatele transferului de cunoștințe pentru SSD-MobileNet v2

A doua rețea neuronală profundă, testată pentru detectarea obiectelor în timp real folosind Jetson Nano, a fost YOLOv3. Întrucât arhitectura YOLO nu a fost optimizată de TensorRT pentru Jetson Nano, au fost luate în considerare alte variante. Principala problemă a YOLOv3 a fost că a rulat prea lent pe dispozitivul Jetson, atingând, aproximativ, o viteză de 0,26 cadre pe secundă (FPS), comparativ cu 0,7 FPS în cazul YOLOv3-Tiny. De aceea, în vederea îmbunătățirii performanțelor, o primă idee a fost aceea de a face rețeaua mai suplă și de a-i reduce, așadar, dimensiunile, bazându-ne pe lucrarea lui Liu et al. (Z. Liu et al. 2017); procedura, însă, nu a funcționat, deoarece modelul era deja unul simplificat, iar problema esențială a fost că unitatea de prelucrare grafică (GPU) a Jetson nu folosește CUDA Backend și paralelizarea. Din fericire, am descoperit o metodă simplă de utilizare a GPU-ului Jetson pentru prelucrarea imaginilor cu ajutorul YOLOv3. Modelul poate lucra atât cu rețeaua DarkNet, cât și cu modulul de rețea neuronală profundă OpenCV. Între timp, de la lansarea din aprilie 2021 a OpenCV 4.5.2, au apărut îmbunătățiri ale backendurilor paralele și ale CUDA. Optimizările aduse CUDA pot spori semnificativ randamentul unui procesor integrat, ieftin, viteza de prelucrare înregistrând un salt de la 0,7 la 3,35 FPS în cazul Tiny-YOLO, față de o creștere de la 0,26 la 1,75 FPS în cazul YOLOv3. Este important de reținut că aceste performanțe pot fi considerabil influențate de condițiile de iluminare. Mai mult, rezultatele au fost obținute în timpul funcționării modulului de localizare, ceea ce, de asemenea, influențează randamentul dispozitivului integrat. În tabelul [tab1] este prezentată o comparație între performanțele rețelelor neuronale testate, împreună cu modulul de localizare.

Rezultatele rețelelor de detectare a obiectelor în timp real, utilizate pentru localizarea obiectului țintă folosind Jetson Nano.

Convolutional Max
Neural Network Distance Display Headless Simple
SSD-MNv2 Orig 0.53 m 8.23 8.43 15.36
SSD-MoNv2 Trained 0.61 m 8.21 8.40 15.33
YOLOv3 1.22 m 0.26 0.29 0.36
YOLOv3-Tiny 0.41 m 0.7 0.77 0.89
YOLOv3 Opt 1.22 m 1.75 1.82 2.11
YOLOv3-Tiny Opt 0.41 m 3.35 3.40 4.11

Tabelul 1

Distanța maximă dintre cameră și obiectele identificate se modifică în cazul fiecărui model. Performanțele în materie de detectare a obiectelor aflate la distanță a crescut cu 80 de milimetri în cazul rețelei neuronale antrenate, însă nu s-au constatat modificări semnificative în privința timpului de prelucrare. Cel mai fiabil model este cel original, YOLO, care poate detecta obiectele aflate la peste 1200 de milimetri depărtare. Pe de altă parte, dintre toate modelele existente, Tiny-YOLO înregistrează cele mai slabe rezultate, chiar dacă se lucrează cu praguri mai mici de încredere. După cum se poate observa, prelucrarea informațiilor privind adâncimea și folosirea unui point cloud reduc viteza de lucru cu aproape 50%, în cazul rețelei SSD-MobileNetv2, în timp ce, în cazul modelului YOLO, prezența acestuia nu este atât de semnificativă, randamentul scăzând cu doar 14%. Rezultate ceva mai bune pot fi obținute - pentru fiecare model - utilizând o configurație de tip headless, fără afișarea dreptunghiurilor de delimitare. Manipulatorul a fost testat doar în interior, cu obiectele țintă așezate pe podea sau pe masă. Nodul de percepție detectează fără ezitare obiectele care se află în raza de acțiune a manipulatorului, iar algoritmul de tipul pick-and-place funcționează în majoritatea cazurilor. Cu toate acestea, au existat cazuri fie de blocaj al Jetson Nano, fie de întrerupere a comunicării între nodul de tip master și cel de tip sclav. Ținând cont de faptul că Jetson Nano nu are integrată o placă wireless, trebuie utilizat un adaptor USB, care ar putea, și acesta, să se defecteze în cazul unui schimb intensificat de date. În astfel de situații, întregul sistem trebuie repornit manual. În plus, ar putea apărea erori neașteptate în timpul funcționării brațului robotic, deoarece acesta nu este în mod oficial compatibil cu ROS Melodic, iar noi nu am găsit o soluție pentru toate cazurile limită; de aceea, sunt interzise anumite mișcări ale brațului, care ar putea duce la blocarea acestuia. Baza mobilă a fost testată în seră, chiar dacă deplasarea robotului a fost îngreunată de solul moale și nisipos, fapt care îi afectează considerabil autonomia și, deci, utilizarea acestuia în majoritatea serelor din România.

Discuții și îmbunătățiri suplimentare

Pe parcursul etapei de implementare și testare au fost identificate mai multe provocări în privința recoltării autonome, care ar putea fi utile în cazul în care s-ar proiecta un robot real de recoltare. Cu toate acestea, s-a dovedit că, dacă proiectarea este una atentă și sistemul de comunicare este unul fiabil, procesoarele integrate și ieftine, precum Jetson Nano, ar putea fi capabile să comande roboți de recoltare autonomă, utilizând un sistem de calcul bazat pe cloud. Până în prezent, nici un tip de robot de recoltare nu a fost comercializat în număr mare, una dintre cauze fiind cheltuielile mult mai mari în comparație cu productivitatea reală a roboților. De aceea, ar fi important să se găsească metode mai rentabile pentru recoltarea robotizată. Pe de altă parte, sistemele de percepție vizuală implementate până acum sunt încă foarte dependente de condițiile de iluminare. Astfel, pentru a depăși această provocare, sugerăm fie utilizarea unui sistem de praguri de culoare care ajustează datele privind imaginea la sensibilitatea la lumina detectată, fie utilizarea sau combinarea detecției clasice a obiectelor cu detecția acestora în sistem 3D, bazată pe point cloud. Ambele abordări se află deja în curs de cercetare, însă nici una dintre acestea nu a reușit încă să conducă la obținerea unui rezultat semnificativ.

Concluzii

S-a implementat un prototip de robot de recoltare autonomă, ieftin, care are ca principal nod de comandă un procesor integrat, demonstrându-se că astfel de dispozitive realizate cu costuri reduse pot efectua operațiuni complexe. Sistemul de percepție vizuală care a fost proiectat și rețeaua neuronală antrenată ar putea fi cu adevărat utile în multe situații, însă cu o probabilitate mare de eroare din cauza mediului aflat într-o continuă schimbare. Ținând cont de toate acestea, pentru a putea crea în viitorul apropiat roboți eficienți de recoltare autonomă destinați spațiilor închise, este necesar ca, mai întâi, să fie standardizate serele și mediile operaționale, iar sistemele de manevrare, respectiv dispozitivele de prindere să fie proiectate pentru recoltarea unui singur tip de fruct. Având în vedere că există prea multe variabile în aplicațiile robotice autonome, ar trebui ca, prin standardizare, să fie redusă posibilitatea apariției unor situații neașteptate. În acest mod, problema inițială se simplifică, devenind astfel rezolvabilă, ceea ce s-ar putea traduce și printr-o comercializare profitabilă a noilor roboți.