Intelektikos pagrindai
description
Transcript of Intelektikos pagrindai
Robotų kinematika
2
Turinys
Robotinės rankos kinematika Tiesioginė kinematika Atvirkštinė kinematika
Robotinio vežimėlio judėjimo teorija Pavaros Odometrinis modelis
3
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
4
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
5
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į
6
Manipuliatoriaus judėjimo problemos Manipuliatorių užduotys:
sugriebti objektą, perkelti objektą.
Tai turi būti padaryta efektyviai ir saugiai: Ranka turi judėti taip, kad nepažeistų nustatytų apribojimų
sąnariams Neatsitrenktų į save arba į kitas aplinkos kliūtis
7
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
8
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
9
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.
10
Tipinė manipuliatoriaus struktūra
Sąnariai
Jungtys
Griebtuvas
Bazė
11
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ą
12
Standžių kūnų grandinė, sujungta lanksčiais sąnariais
sąnariaigriebtuvas, vykdantis roboto užduotis
Rankos kinematinis modelis
13
Tiesioginės kinematikos pavyzdys Roboto rankos struktūros pavyzdys
2
1
l 1l 2
(x, y)
14
Tiesioginės kinematikos pavyzdys Ryšys tarp roboto rankos galo pozicijos (x, y)
ir sąnarių kampų 1, 2, aprašomos tokiomis lygtimis:
x l1 cos1 l2 cos(1 2 )
y l1 sin1 l2 sin(1 2 )2
1
l 1
l 2
(x, y)
15
Atvirkštinė kinematika
Norint valdyti robotą reikia rasti kampus 1, 2
r yra atstumas tarp pirmojo sąnario ir rankos galo (x, y):
r2
1
l 1
l 2
(x, y)
r x2 y2
16
Atvikštinė kinematika Tuomet lygtis
galima išspręsti taip:
r2
1
l 1
l 2
(x, y)
x l1 cos1 l2 cos(1 2 )
y l1 sin1 l2 sin(1 2 )
2 cos 1 l12 l2
2 r2
2l1l2
1 atan2(y, x) cos 1 r2 l1
2 l22
2l1r
17
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
18
Du galimi sprendimai
19
Du galimi kinematinės lygties sprendiniai1
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!
20
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;
21
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;
22
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; } 23
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; }
24
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; }
25
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
26
Laisvės laipsnių skaičius (LLS)
3D erdvėje = 6 LL
3 padėties koordinatės
3 kryptys
Robotikoje,
LLS = nepriklausomai valdomų sąnarių skaičius
Jei LLS valdymo tikslumasskaičiavimų sudėtingumaskaštai
27
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
28
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ą
29
Ž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ų
30
Žmogaus LLS 23
Žmogaus plaštaka
31
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ą
33
Ratinių robotų judesio programavimas
34
Ratinių robotų judėjimas
Stabilumui užtikrinti pakanka 3 ratų Differencialinė pavara (TurtleBot) Automobilio (Ackerman’o) pavara Sinchroninė pavara Omni pavaros: Mecanum ratai
y
roll
z motion
x
yxy
x
35
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
36
Campion* klasifikacija Naudojama skaičių pora (m, s), kur
m – mobilumas
s - vairuojamumas
Tipas (3,0) – omni robotaiTuri 3 valdomus ratusGali važiuoti bet kuria kryptimi
Tipas (2,0) - balansuojantys robotaiTuri 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
37Š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 Girlhttp://www.murata.com
38Š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
39
Triratės sistemos
Lenvai valdomi ir programuojami Diferencialinė pavara Ackerman‘o pavara Sinchroninė pavara Omni sistemos
40
Ratinių robotų tipai
41
Diferencialinė pavara
Pranašumai: Pigus sprendimas Paprasta konstrukcija Paprasta realizuoti Simple designTrūkumai:• Sudėtinga važiuoti į priekį
Differencialinės pavaros tipai (1)
Du užpakaliniai varomi ratai Vienas priekinis (pasyvus) ratas Pvz., TurtleBot
43
Differencialinės pavaros tipai (2)
Du užpakaliniai nepriklausomai varomi ratai Vienas priekinis (pasyvus) ratas
44
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ę
45
Diferencialinė pavara
D – rato nuvažiuotas kelias
Pictures from “Navigating Mobile Robots:Systems and Techniques” Borenstein, J.
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
47
Diferencialinės pavaros kinematinės lygtys
R
ICC
(x,y)y
l/2
x
vl
vr2
)(
)(
2
)2/(
)2/(
lr
lr
lr
rl
l
r
vvv
l
vv
vv
vvlR
vlR
vlR
]cos,sin[ICC RyRx
48
Diferencialinės pavaros kinematinės lygtys
ICC
R
P(t)
P(t+t)
t
y
x
tt
tt
y
x
y
x
y
x
ICC
ICC
ICC
ICC
100
0)cos()sin(
0)sin()cos(
'
'
'
49
VR
VL
2d
ICC
RRoboto sukimosi spindulys
R+d) = VL
R-d) = VR
= ( VR - VL ) / 2d
R = 2d ( VR + VL ) / ( VR - VL )
x
y
Roboto greitis: V = R = ( VR + VL ) / 2
Diferencialinės pavaros kinematika
50
Problema: blogai pripūstos padangos
Pasikeitęs ratų diametras įneša paklaidą skaičiuojant nuvažiuotą atstumąRe sunku įvertinti
“Navigating Mobile Robots:Systems and Techniques” Borenstein, J.
Priekinis varomas ratas(-ai) Du pasyvūs ratai Panašiai valdomas, kaip priekiniais ratais varomi automobiliai Pvz., Neptune (Carnegie Mel. Univ.)
Ackerman’o pavara
52
Ackerman’o pavara
Pranašumai:• Lengva realizuoti
Trūkumai:• Kai kuriuos judesius sunku suplanuoti ir įgyvendinti• Ribotas ratų sukimosi kampas• Negalima apsisukti vietoje
“Navigating Mobile Robots:Systems and Techniques” Borenstein, J.
54
x = atstumas nuo vidinio rato iki sukimosi centro
d = atstumas tarp ratų
l = atstumas tarp priekinių ir galinių ratų
l
dxl
x
o
i
cot
cot
xd
l
i
i
io
o
o
Ackerman’o pavara
VBL
VBR
VFR
VFL
x
y
Sukimosi centras
R
L
g
r
g
dd
VFR=
sin(R)
r = gtan(R)
+ d
Ackerman’o pavara
55
VBL
VBR
VFR
VFL
x
y
ICC
R
L
g
r
g
dd
VFR=
sin(R)
r = gtan(R)
+ d
gVFL
=sin(L)
L = tan-1(g / (r + d))
(r - d) = VBR
(r + d) = VBL
Ackerman’o pavara
56
Sinchroninė pavara
• Visus ratus sinchroniškai valdo vienas variklis
➔Apsprendžia roboto važiavimo greitį
• Važiavimo kryptį valdo antras variklis
• Trūkumai:
• Sudėtinga konstrukcija ir realizacija
57
•Visi ratai sukasi kartu
•Tuo pačiu greičiu
•Ir išlieka lygiagretūs
Sinchroninė pavara
58
x
y
Vwheels
Vrobot = Vwheels
robot = wheels
x(t) = Vwheels(t) cos((t)) dt
y(t) = Vwheels(t) sin((t)) dt
(t) = (t) dt
padėtis
greitis
ICC at
Sinchroninė pavara
59
Sinchropavaros atvirkštinė kinematika
Pagrindinė problema:
Kaip pasiekti galutinę padėtį, jei žinoma pradinė padėtis?
VR(t)
VL (t)
pradinė padėtis galutinė padėtis
x
y
60
VR(t)
VL (t) x
y
Sinchropavaros atvirkštinė kinematika
Pagrindinė problema:
Kaip pasiekti galutinę padėtį, jei žinoma pradinė padėtis?
pradinė padėtis galutinė padėtis
61
VR(t)
VL (t) x
y
Sinchropavaros atvirkštinė kinematika
Pagrindinė problema:
Kaip pasiekti galutinę padėtį, jei žinoma pradinė padėtis?
pradinė padėtis galutinė padėtis
62
VR(t)
VL (t) x
y Reikia išspręsti lygčių sistemą:
for VL (t) and VR(t) .
x = V(t) cos((t)) dt
y = V(t) sin((t)) dt
= (t) dt
= ( VR - VL ) / 2d
V = R = ( VR + VL ) / 2
Daug sprendinių...
Sinchropavaros atvirkštinė kinematika
Pagrindinė problema:
Kaip pasiekti galutinę padėtį, jei žinoma pradinė padėtis?
pradinė padėtis galutinė padėtis
63
VR(t)
VL (t) x
y Sunku rasti geriausią sprendimą...
• Greičiausias laikas• mažiausiai energijos• stabiliausias greitis
VL (t)
tVL (t)
Sinchropavaros atvirkštinė kinematika
Pagrindinė problema:
Kaip pasiekti galutinę padėtį, jei žinoma pradinė padėtis?
pradinė padėtis galutinė padėtis
64
Omni ratai (Mecanum ratai)
4/)(
4/)(
4/)(
4/)(
3210
3210
3210
3210
vvvvv
vvvvv
vvvvv
vvvvv
error
y
x
forward
y
x
v1
v2
v0
v3
left
v1
v2
v0
v3
v2
turn
v1
v0
v3
Kuka Omni-Drive
65
Omni ratai
Pranašumai:• Leidžiami sudėtingi judesiai
Trūkumai• Sudėtinga realizuoti
“Navigating Mobile Robots:Systems and Techniques” Borenstein, J.
Morevac
66
Triratis vežimėlis
Pranašumai:• ratai neslysta
Trūkumai:• ne visomis kryptimis įmanoma važiuoti
“Navigating Mobile Robots:Systems and Techniques” Borenstein, J.
Judėjimo paklaidos šaltiniai
kelio nelygumai
idealus atvejis ratų dydžio skirtumai
nevienoda ratų trintis
68
Judesio modeliai Odometriniai
Robotas pats registruoja savo nueitą kelią
Greičiu grįsti Roboto padėtis apskaičiuojama pagal žinomą roboto greitį ir
praėjusį laiką
69
Odometrinis modelis
22 )'()'( yyxxtrans
)','(atan21 xxyyrot
12 ' rotrot
• Robotas juda iš į
• Turima informacija .
,, yx ',',' yx
transrotrotu ,, 21
trans1rot
2rot
,, yx
',',' yx
70
atan2
71
Odometrinio modelio paklaida Įvedama paklaida (triukšmas)
||||11 211
ˆtransrotrotrot
||||22 221
ˆtransrotrotrot
|||| 2143
ˆrotrottranstranstrans
72
Vaikščiojantys robotai
73
Kodėl kojos?
Sveria mažiau nei ratai Geriau tinka, kai nėra gero pagrindo (kelio) Geresnis manevravimas Nereikia nuolatinio sąlyčio su pagrindu, todėl robotas gali judėti
„trūkioje“ aplinkoje
Kojos LLS
Koja turi turėti mažiausiai 2 LL Kelti ir svyruoti
Žmogaus koja turi 30 LL Šlaunies = 3 LLS Kelio sąnarys= 2 LLS Kulkšnis = 1 LLS Pėda - 24 LL
Robotų kojos dažniausiai turi 3 LL Esant didesniam skaičiui valdymas labai sudėtingas
Papildomam skaitymui
SSC-32 Manual
http://www.lynxmotion.com/images/data/ssc-32.pdf
Knyga: “The definitive guide to building Java robots”
http://books.google.lt/books?isbn=1590595564 2 skyrius, „Serial Communication“ 3 skyrius, „Motion“
76