760 likes | 1.22k Views
Intelektikos pagrindai. P176B100 2012 m. Robertas Damaševičius r obertas.damasevicius @ktu.lt. Robotų kinematika. Turinys. Robotinės rankos kinematika Tiesioginė kinematika Atvirkštinė kinematika Robotinio vežimėlio judėjimo teorija Pavaros Odometrinis modelis. Kas yra kinematika?.
E N D
Intelektikos pagrindai P176B100 2012 m. Robertas Damaševičius robertas.damasevicius@ktu.lt
Turinys • Robotinės rankos kinematika • Tiesioginė kinematika • Atvirkštinė kinematika • Robotinio vežimėlio judėjimo teorija • Pavaros • Odometrinis modelis
Kas yra kinematika? • Mokslas apie judėjimą, geometrines judėjimo savybes • Kinematinė roboto būsena yra kiekvieno jo judančio elemento (vežimėlio rato / rankos sąnario) padėtis • Tiesioginė kinematika • Žinomos visų sąnarių padėtys (pasukimo kampai) • Rasti griebtuvo koordinates po judesio • Atvirkštinė kinematika • Žinomos griebtuvo koordinatės • Rasti sąnarių padėtis, kad griebtuvas atsidurtų norimoje vietoje
Robotinė ranka • Mechaninė ranka • Pagal atliekamas funkcijas panaši į žmogaus ranką • Gali būti programuojama • Manipuliatorius juda taip, kad • jo galūnė (griebtuvai, pirštai) • Atsidurtų norimoje 3D padėtyje ir būtų nukreipta tam tikra kryptimi
Lynxmotion robotinė ranka • Turi: • besisukantį pagrindą, • petį, • alkūnę, • riešą, • griebtuvą • SSC-32 Servo valdiklis • Maitinama iš baterijų arba naudojant elektros tinklo srovės adapterį
Manipuliatoriaus judėjimo problemos • Manipuliatorių užduotys: • sugriebti objektą, • perkelti objektą. • Tai turi būti padaryta efektyviaiir saugiai: • Ranka turi judėti taip, kad nepažeistų nustatytų apribojimų sąnariams • Neatsitrenktų į save arba į kitas aplinkos kliūtis
Sudėtingos manipuliavimo ranka užduotys • Griebimo jėgos valdymas • Trapių objektų ėmimas • Kontakto su objekto paviršiumi palaikymas • Dinaminis manipuliavimas: • žongliravimas • mėtymas, • gaudymas
Manipuliavimas – Nuotolinis valdymas • Autonominio manipuliatoriaus valdymas yra sudėtinga problema • Pirmosios robotinės rankos buvo operatoriaus valdomos nuotoliniu būdu dirbant su pavojingomis medžiagomis • Tai buvo žmogaus rankų imitacijos • Operatoriams buvo sunku išmokti valdyti tokias rankas
Kodėl sudėtinga valdyti manipuliatorius? • Nėra tiesioginio ryšio tarp to, ką: • Robotinė ranka turi padaryti realiame pasaulyje, ir • Ką daro rankos sąnarių vykdytuvai (varikliai). • Tokį ryšį nagrinėja kinematika • Reikia žinoti • 1. kas ir kaip yra sujungta, • 2. kiek yra jungčių (sąnarių), • 3. kiekvieno sąnario laisvės laipsnių skaičių, • ir t.t.
Jungtys Sąnariai Tipinė manipuliatoriaus struktūra Griebtuvas Bazė
Kinematikos problemos • Kaip patikimai perkelti griebtuvą į norimą padėtį • Nekliūdyti kliūčių • Judėti tolygiai • Neviršijant greičio ir pagreičio apribojimų • Prisitaikyti prie kintančių sąlygų, • pvz. pasikeitusios apkrovos pakėlus objektą
Rankos kinematinis modelis Standžių kūnų grandinė, sujungta lanksčiais sąnariais griebtuvas, vykdantis roboto užduotis sąnariai
(x, y) l2 2 l1 1 Tiesioginės kinematikos pavyzdys • Roboto rankos struktūros pavyzdys
(x, y) l2 2 l1 1 Tiesioginės kinematikos pavyzdys • Ryšys tarp roboto rankos galo pozicijos (x, y) ir sąnarių kampų 1, 2, aprašomos tokiomis lygtimis:
(x, y) l2 r 2 l1 1 Atvirkštinė kinematika • Norint valdyti robotą reikia rasti kampus 1, 2 • ryra atstumas tarp pirmojo sąnario ir rankos galo (x, y):
(x, y) l2 r 2 l1 1 Atvikštinė kinematika • Tuomet lygtis • galima išspręsti taip:
Atvirkštinės kinematikos lygčių sprendinių charakteristikos • Gali būti 0, 1 arba daug sprendinių • Jei taškas (x, y) nepasiekiamas, sprendinių nėra • Jei taškas (x, y) gali būti pasiekiamas keliais skirtingais būdas, bus keli sprendiniai
Du galimi sprendimai Du galimi kinematinės lygties sprendiniai 1 2
Geriausias sprendinys • Jei yra keli galimi sprendiniai, tuomet geriausiu laikomas tas, kuriam pasiekti reikia nueiti trumpiausią kelią nuo prieš tai buvusios manipuliatoriaus būsenos 2 sprendiniai!
Sprendimas 3 sąnarių atveju (1) // robot geometry const float e = 115.0; // end effector const float f = 457.3; // base const float re = 232.0; const float rf = 112.0; // trigonometric constants const float sqrt3 = sqrt(3.0); const float pi = 3.141592653; // PI const float sin120 = sqrt3/2.0; const float cos120 = -0.5; const float tan60 = sqrt3; const float sin30 = 0.5; const float tan30 = 1/sqrt3;
Sprendimas 3 sąnarių atveju (2) // forward kinematics: (theta1, theta2, theta3) -> (x0, y0, z0) // returned status: 0=OK, -1=non-existing position int delta_calcForward(float theta1, float theta2, float theta3, float &x0, float &y0, float &z0) { float t = (f-e)*tan30/2; float dtr = pi/(float)180.0; theta1 *= dtr; theta2 *= dtr; theta3 *= dtr; float y1 = -(t + rf*cos(theta1)); float z1 = -rf*sin(theta1); float y2 = (t + rf*cos(theta2))*sin30; float x2 = y2*tan60; float z2 = -rf*sin(theta2); float y3 = (t + rf*cos(theta3))*sin30; float x3 = -y3*tan60; float z3 = -rf*sin(theta3); float dnm = (y2-y1)*x3-(y3-y1)*x2;
Sprendimas 3 sąnarių atveju (3) // ... Continued forward kinematics float w1 = y1*y1 + z1*z1; float w2 = x2*x2 + y2*y2 + z2*z2; float w3 = x3*x3 + y3*y3 + z3*z3; float a1 = (z2-z1)*(y3-y1)-(z3-z1)*(y2-y1); float b1 = -((w2-w1)*(y3-y1)-(w3-w1)*(y2-y1))/2.0; float a2 = -(z2-z1)*x3+(z3-z1)*x2; float b2 = ((w2-w1)*x3 - (w3-w1)*x2)/2.0; float a = a1*a1 + a2*a2 + dnm*dnm; float b = 2*(a1*b1 + a2*(b2-y1*dnm) - z1*dnm*dnm); float c = (b2-y1*dnm)*(b2-y1*dnm) + b1*b1 + dnm*dnm*(z1*z1 - re*re); float d = b*b - (float)4.0*a*c; // discriminant if (d < 0) return -1; // non-existing point z0 = -(float)0.5*(b+sqrt(d))/a; x0 = (a1*z0 + b1)/dnm; y0 = (a2*z0 + b2)/dnm; return 0; }
Sprendimas 3 sąnarių atveju (4) // inverse kinematics // helper functions, calculates angle theta1 (for YZ-pane) int delta_calcAngleYZ(float x0, float y0, float z0, float &theta) { float y1 = -0.5 * 0.57735 * f; // f/2 * tg 30 y0 -= 0.5 * 0.57735 * e; // shift center to edge // z = a + b*y float a = (x0*x0 + y0*y0 + z0*z0 +rf*rf - re*re - y1*y1)/(2*z0); float b = (y1-y0)/z0; // discriminant float d = -(a+b*y1)*(a+b*y1)+rf*(b*b*rf+rf); if (d < 0) return -1; // non-existing point float yj = (y1 - a*b - sqrt(d))/(b*b + 1); // choosing outer point float zj = a + b*yj; theta = 180.0*atan(-zj/(y1 - yj))/pi + ((yj>y1)?180.0:0.0); return 0; }
Sprendimas 3 sąnarių atveju (5) // inverse kinematics: (x0, y0, z0) -> (theta1, theta2, theta3) // returned status: 0=OK, -1=non-existing position int delta_calcInverse(float x0, float y0, float z0, float &theta1, float &theta2, float &theta3) { theta1 = theta2 = theta3 = 0; int status = delta_calcAngleYZ(x0, y0, z0, theta1); // rotate coords to +120 deg if (status == 0) status = delta_calcAngleYZ(x0*cos120 + y0*sin120, y0*cos120-x0*sin120, z0, theta2); // rotate coords to -120 deg if (status == 0) status = delta_calcAngleYZ(x0*cos120 - y0*sin120, y0*cos120+x0*sin120, z0, theta3); return status; }
Kaip naudoti atvirkštinę kinematiką • Naudojant atvirkštinės kinematikos metodą rastas sprendimas negarantuoja, kad ranka judės nuspėjamai, t.y. tiesiai tarp pradinio ir galinio taško • Rekomenduojama kiekvieną žymesnį judesį skaidyti į atskirus žingsnelius ir po kiekvieno žingsnio perskaičiuoti kampus
Laisvės laipsnių skaičius (LLS) 3 padėties koordinatės 3D erdvėje = 6 LL 3 kryptys Robotikoje, LLS = nepriklausomai valdomų sąnarių skaičius Jei LLS valdymo tikslumas skaičiavimų sudėtingumas kaštai
Valdomų laisvės laipsnių skaičius (LLS) • Dauguma vykdytuvų turi tik 1 LLS • Svarbu žinoti • Roboto LLS • Roboto valdomų LLS • Jei kiekvienam LL yra valdymo įtaisas, visi LLS yra valdomi • Jei valdomų LLS < visų LLS, robotą valdyti yra sudėtinga
Valdomų laisvės laipsnių skaičius (LLS) • Automobilis turi 3 laisvės laipsnius: • padėtis (x,y) ir • kryptis (posūkio kampas). • Tik 2 laisvės laipsnius galima valdyti: • važiuojant:greičio pedalas ir pavara • vairuojant:naudojant vairą. • Kadangi laisvės laipsnių skaičius didesnis nei valdomų laisvės laipsnių skaičius, kai kuriuos judesius atlikti sunku arba neįmanoma • Pvz., važiuoti į šoną
Žmogaus ranka • Turi 7 LLS: • 3 - petyje, • 1 - alkūnėje, • 3 - rieše • Visi LLS yra valdomi, todėl pasiekti tam tikrą objektą erdvėje žmogaus ranka gali daugeliu būdų
Žmogaus plaštaka • Žmogaus LLS • 23
Humanoidiniai HONDA ir SONY robotai • 98 LLS
Pakartojamumas ir tikslumas • Pakartojamumas:kaip tiksliai manipuliatorius gali sugrįžti į nurodytą tašką? • Tikslumas:kaip tiksliai manipuliatorius gali pereiti į nurodytą tašką
Ratinių robotų judėjimas • Stabilumui užtikrinti pakanka 3 ratų • Differencialinė pavara (TurtleBot) • Automobilio (Ackerman’o) pavara • Sinchroninė pavara • Omni pavaros: Mecanum ratai y x x
Ratinių robotų tipai • Pagal ratų skaičių • 1-ratės sistemos • 2-ratės sistemos • 3-ratės sistemos • 4-ratės sistemos • Daugiaratės sistemos
Campion* klasifikacija • Naudojama skaičių pora (m, s), kur m – mobilumas s - vairuojamumas • Tipas(3,0) – omni robotai • Turi 3 valdomus ratus • Gali važiuoti bet kuria kryptimi • Tipas(2,0) - balansuojantys robotai • Turi 2 valdomus ratus • Tipas(2,1) • 2 valdomi ratai, vienas vairavimo ratas • Type (1,1) • 1 arba daugiau valdomų ratų ant tos pačios ašies • 1 vairavimo ratas, esantis ant kitos ašies • Type (1,2) • Mažiausiai du vairavimo ratai Šaltinis: G. Campion, W. Chung, Springer Handbook of Robotics, Springer Verlag, 2008, Ch. Wheeled robots, pp. 391–410.
Vienratės sistemos • Balansuojantys robotai • Labai nestabilūs ir sunkiai programuojami • Murata Girl http://www.murata.com Šaltinis: http://www.robotplatform.com
Dviratės sistemos • Balansuojantys robotai • Sudėtingas valdymas, programavimas • 2 tipai: • Dviračio • 1 ratas - priekyje, • 1 ratas – gale • Lygiagretaus išdėstymo • Svorio centras turi būti žemiau ašies • Nbot
Triratės sistemos • Lenvai valdomi ir programuojami • Diferencialinė pavara • Ackerman‘o pavara • Sinchroninė pavara • Omni sistemos
Diferencialinė pavara Pranašumai: • Pigus sprendimas • Paprasta konstrukcija • Paprasta realizuoti • Simple design • Trūkumai: • Sudėtinga važiuoti į priekį
Differencialinės pavaros tipai (1) • Du užpakaliniai varomi ratai • Vienas priekinis (pasyvus) ratas • Pvz., TurtleBot
Differencialinės pavaros tipai (2) • Du užpakaliniai nepriklausomai varomi ratai • Vienas priekinis (pasyvus) ratas
Diferencialinės pavaros valdymo principai • Abu ratai sukasi vienodu greičiu ir vienoda kryptimi – robotas važiuoja tiesiai • Ratai sukasi vienodu greičiu, bet skirtingomis kryptimis – robotas sukasi vietoje • Vienas ratas nejuda, kitas sukasi – robotas apsisuks • Vienas ratas sukasi greičiau nei kitas – robotas sukasi į vieną pusę
Diferencialinė pavara Pictures from “Navigating Mobile Robots: Systems and Techniques” Borenstein, J. D – rato nuvažiuotas kelias
Diferencialinės pavaros valdymas • Du atskirai valdomi varomieji ratai • Robotas gali suktis vienoje vietoje • Roboto nuvažiuotas kelias D ir greitis V: Kairiojo rato kelias ir greitis , Dešiniojo rato kelias ir greitis , = kairiojo taško atstumas iki sukimosi taško
v l v r Diferencialinės pavaros kinematinės lygtys ICC R (x,y) y l/2 x
Diferencialinės pavaros kinematinės lygtys ICC R P(t+t) P(t)
y x Diferencialinės pavaros kinematika w(R+d) = VL w(R-d) = VR w = ( VR - VL ) / 2d w R = 2d ( VR + VL ) / ( VR - VL ) Roboto greitis: V = wR = ( VR + VL ) / 2 VL 2d VR ICC R Roboto sukimosi spindulys