Cinematică Pick & amp; Locul proiectului

Nano Degree Robotics

Scopul acestui proiect a fost de a oferi traiectorii cinematice ale articulațiilor pentru a controla manipulatorul robotului cu braț serial Kuka într-o simulare de foișor.

Analiză cinematică

1. Rulați demo-ul forward_kinematics și evaluați fișierul kr210.urdf.xacro pentru a efectua analiza cinematică a robotului Kuka KR210 și pentru a obține parametrii DH.

Următoarea este o diagramă care evidențiază cele 6 articulații (cu un cadru de referință pentru dispozitivul de prindere / efector de capăt) și legăturile asociate (începând de la 0) între articulații.

Există un fișier Unified Robot Description Format (URDF) kr210.urdf.xacro care conține detaliile brațului robotului. Pentru a inspecta vizual acest lucru, utilizăm RViz (care este un vizualizator 3D).

Prin i n vizual al URDF & amp; Aplicația RViz a fost construit următorul tabel de parametri DH.

Alfa (i-1) = unghiul de răsucire, a (i-1) = distanța, d (i) = lungimea legăturii și teta (i) (corespunde cu Oi pe diagramă) pentru unghiurile articulare.

Pentru legătura 1- & gt; 2 s-a adăugat o traducere a unghiului de 90 de grade, altfel toate celelalte articulații sunt la unghi de 0 grade în URDF.

2. Folosind tabelul de parametri DH pe care l-ați derivat mai devreme, creați matrici de transformare individuale despre fiecare îmbinare. În plus, generați, de asemenea, o transformare omogenă generalizată între base_link și gripper_link utilizând numai poziția efectorului final (gripper).

Matrici de transformare

A fost utilizată o matrice șablon, urmând codul de probă, unde parametrii au fost înlocuiți din tabelul de parametri DH pentru a crea cele 7 transformări individuale.

T0- & gt; 1

T1- & gt; 2

T2- & gt; 3

T3- & gt; 4

T4- & gt; 5

T5- & gt; 6

T6- & gt; G sau EE (fără rotație)

Matrice de transformare omogenă de la link_bază la Gripper

Notă: R_corr este o rotație de 180 de grade în jurul axei Z urmată de o rotație de -90 de grade în jurul axei Y

3. Decuplați problema cinematicii inverse în cinematică de poziție inversă și cinematică de orientare inversă; procedând astfel, derivați ecuațiile pentru a calcula toate unghiurile articulare individuale.

Poziția inversă

Încheietura sferică implică articulațiile 4,5 și 6. Poziția centrului încheieturii este guvernată de primele trei articulații.

Putem deriva centrul încheieturii mâinii folosind matricea completă de transformare. Simbolic urmează transformarea omogenă

unde l, m și n sunt vectori ortonormali care reprezintă orientarea efectorului de-a lungul axelor X, Y, Z ale coordonatelor locale.

unde l este lungimea efortului final și d6 = 0 (lungimea legăturii 6).

Pentru a calcula nx, ny și nz, se creează matrici de rotație cu corectarea erorilor.

În cazul în care euler rulment, pitch și yaw sunt extrase din cuaternion pentru poziția efectorului final și astfel Rrpy = Rotație omogenă RPY între bază și gripper.

theta1 = atan2 (wcy, wcx) și este decupat la + – 185 grade.

unde

angle_a , angle_b și angle_c sunt derivate folosind reguli SSS triunghi.

Theta 2 este decupat la -45 și +85 grade. Theta 3 este tăiat la -210 și + 155-90 grade.

Orientare inversă

Având în vedere că

putem precalcula rotațiile R0_3 (cu theta 1 la 3 substituite) prin extragerea matricei de rotație din matricile de transformare

care duce la când împărțim ambele părți la R0_3 la

Theta 4,5,6 sunt derivate din R3_6 folosind Euler Angles din Rotation Matrix.

Theta 4 & amp; 6 este decupat + -350 grade. Theta 5 până la + -125 grade. Toate valorile de tăiere au fost extrase pentru limita inferioară și superioară asociată cu articulațiile din fișierul kr210.urdf.

Implementarea proiectului

1. Completați fișierul IK_server.py cu codul python comentat corespunzător pentru calcularea cinematicii inverse pe baza analizei cinematice efectuate anterior. Codul dvs. trebuie să ghideze robotul pentru a finaliza cu succes 8/10 cicluri de alegere și plasare. Discutați pe scurt codul pe care l-ați implementat și rezultatele dvs.

Am decis inițial în acest proiect să nu refactorizez codul pentru a utiliza clase și a abstra detaliile. Acest lucru s-a datorat în principal naturii sale matematice și utilizării simpiei. În scriptul FK_debug.py pentru cinematica directă, am adăugat instrucțiuni de înregistrare a depanării pentru a calcula cât timp au durat calculele. Funcția simplify (& lt; fomula & gt;) a fost prea lentă. Eliminarea acestora a îmbunătățit dramatic performanța.

Deși mi-a plăcut să aflu despre simpy, am simțit că numpy ar fi putut fi mai rapid și poate o opțiune mai bună, dacă aș începe de la zero la acest proiect.

În plus, dacă aș reface acest proiect, aș petrece mai mult timp creând o structură de clasă / metode supraîncărcate pentru a implementa regulile matematice cu testele unitare asociate. Deși codul pare concis, pentru cineva care învață despre acest subiect, nu există o modalitate ușoară de a confirma că s-au aplicat matematica și regulile corecte, cu excepția încercărilor și erorilor.

La rularea simulatorului, mâna a răsturnat / flopat adesea (adică nu a parcurs cea mai mică distanță, dar cea mai lungă pentru a ajunge la unghiul dorit). Pentru a depăși acest lucru într-o oarecare măsură, am constatat că nota de curs recomandată abordării R3_6 = R0_3.inv (& quot; LU & quot;) * Rrpy ar trebui schimbată în R3_6 = R0_3.transpose () * Rrpy . A îmbunătățit dramatic rezultatele, dar au existat încă unele cazuri în care s-a răsturnat. M-am gândit la netezirea unghiurilor pentru articulațiile încheieturii mâinii, dar nu am implementat-o.

Ocazional, am observat și câteva coliziuni când mișcările se mișcau, așa că am tăiat unghiurile cu valorile limită din kr210.urdf.

Urmează un videoclip despre o rulare reușită. Am rulat simularea & gt; de 10 ori cu o încercare nereușită înainte de a trimite proiectul.

Video YouTube cu ieșirea proiectului x 4