一.旋轉矩陣: (1)基本 R = rotx(pi/2) R = roty(pi/2) R = rotz(pi/2) 分別對X Y Z軸生成3*3的旋轉矩陣 R = rotx(30, 'deg') R = roty(30, 'deg') R = rotz(30, 'deg') 可以改變輸入的方式
(2)姿態(tài)的敘述方法: 1.Y-Z-Y歐拉角 R = rotz(a)*roty(b)*rotz(c) eul2r(a,b,c) 旋轉矩陣反解出y-z-y歐拉角度的函數(shù)為 tr2eul(R)
2.x-y-z歐拉角 R = rotx(r)*roty(p)*rotz(y) rpy2r(r,p,y) 旋轉矩陣反解出x-y-z歐拉角度的函數(shù)為 tr2rpy(R)
3.等效軸角坐標表示法 把坐標系b看做原坐標a按向量V方向按右手方向旋轉theta度 旋轉矩陣反解出等效軸角坐標表示的函數(shù)為 [theta,V] = tr2angvec(R) 由等效軸角坐標表示轉換為旋轉矩陣的函數(shù) R = angvec2r(theta, V)(記得把v做單位化的處理v = v / norm(v))
4.歐拉參數(shù)法表示(4元數(shù)) 在等效軸角坐標表示法的基礎上更進一步 E1=Kx*sin(θ/2);E2=Ky*sin(θ/2);E3=Kz*sin(θ/2);E4=cos(θ/2); 求解4元數(shù)的函數(shù)為 Quaternion(R)
二.齊次變換矩陣 4*4矩陣用于描述坐標系的位置和姿態(tài)
1.平移算子 transl(x, y, z)
2.旋轉算子 trotx(pi/2);troty(pi/2);trotz(pi/2)
3.各種表示下齊次矩陣的求解 rpy2tr(roll, pitch, yaw, options) 求解x-y-z歐拉角變化對應的齊次矩陣 options:’deg’或不填 angvec2tr(theta, V)求解等效軸角坐標表示的齊次矩陣 eul2tr(phi, theta, psi, options)反解出Y-Z-Y歐拉角 options:’deg’或不填 同樣可以用 tr2eul(t)反解出Y-Z-Y歐拉角 tr2rpy(t)反解出x-y-z歐拉角 [theta,vec] = tr2angvec(R);反解等效軸角坐標表示 Quaternion(R) 反解4元數(shù)表示
4.求出姿態(tài)的相關表示 trprint(T, OPTIONS) 可以表示出齊次矩陣的參數(shù) Options為: (1)'rpy' ; 'euler' ;'angvec' ; 改變轉換的方式為rpy,歐拉角,等效軸角坐標
(2)'radian' ; 改變顯示的方式,和‘deg’功能相對。
5.旋轉矩陣與齊次矩陣 r2t(t),rt2tr(t)可以把旋轉矩陣t增廣為齊次矩陣
6. trplot(R) trplot2(R) 可以在畫圖中顯示出齊次矩陣
7. tranimate((P1, P2, OPTIONS) 可以顯示從P1變到p2的動畫 P1,P2可以是旋轉矩陣,齊次矩陣和4元數(shù)這幾個形式任意一個 Options:: 'fps', fps fps的值可以改變動畫的速度(默認 10) 'nsteps', n n是插入的中間點個數(shù)(默認 50) 'axis',A 坐標系限制A=[xmin, xmax, ymin, ymax, zmin, zmax] 'movie',M Save frames as files in the folder M
1.五次多項式軌跡規(guī)劃 典型用法 [p,pd,pdd] = tpoly(p0, p1, 50); subplot(3,1,1); plot(p); xlabel('Time'); ylabel('p'); subplot(3,1,2); plot(pd); xlabel('Time'); ylabel('pd'); subplot(3,1,3); plot(pdd); xlabel('Time'); ylabel('pdd'); 也可以 [S,SD,SDD] = tpoly(S0, SF, N, SD0, SDF) SD0為初始速度,SDF為最終速度 S0為起點位置,SF為終點位置,N為步數(shù) 2.拋物線軌跡規(guī)劃 典型用法 [p,pd,pdd] = lspb(p0, p1, 50); subplot(3,1,1); plot(p); xlabel('Time'); ylabel('p'); subplot(3,1,2); plot(pd); xlabel('Time'); ylabel('pd'); subplot(3,1,3); plot(pdd); xlabel('Time'); ylabel('pdd'); 也可以 [S,SD,SDD] = LSPB(S0, SF, M, V) V為限定的最大速度 四.機械臂的構建 Link()是構建連桿的基本函數(shù) 建立連桿的基本規(guī)則是 L = Link(DH, OPTIONS) DH = [THETA D A ALPHA SIGMA OFFSET] THETA D A ALPHA 為基本的DH參數(shù) theta 關節(jié)角度 Sigma可以設定連桿的類型 0為旋轉 1為伸長 offset 關節(jié)變量偏移量 qlim 關節(jié)變量范圍[min max]
Options: 'standard' for standard D&H parameters (default). 'modified' for modified D&H parameters. 'revolute' 旋轉關節(jié)(default) 'prismatic' 伸長關節(jié)
建立一個旋轉連桿 L = Link([0 1.2 0.3 pi/2]);或 L = Link([0 1.2 0.3 pi/2 0]) L = Link([0 1.2 0.3 pi/2],’revolute’) L = Link( 'd', 1.2, 'a', 0.3, 'alpha', pi/2); L = Link('revolute', 'd', 1.2, 'a', 0.3, 'alpha', pi/2); L = Revolute('d', 1.2, 'a', 0.3, 'alpha', pi/2); 建立一個移動連桿 L = Link([0 1.2 0.3 pi/2 1]) L = Link([0 1.2 0.3 pi/2],’prismatic’) L = Link( 'theta', 0, 'a', 0.3, 'alpha', pi/2); L = Link('prismatic', ' theta', 0, 'a', 0.3, 'alpha', pi/2); L = prismatic(' theta', 0, 'a', 0.3, 'alpha', pi/2); 通過操作 L.theta;L.d;L.a;L. alpha 。。。。 可以顯示,修改連桿的參數(shù)
操作函數(shù): %A 連桿變換矩陣 % dyn 顯示動力學參數(shù) L.A(X)可以顯示連桿變換矩陣,但是需要補齊DH參數(shù)變量,X在旋轉連桿中就是theta 值 在伸長連桿中就是d的值。 L.RP 返回關節(jié)類型 返回R表示旋轉關節(jié),P為伸長關節(jié) 其他的用法類似。。。
2.SerialLink 使用SerialLink可以把連桿聯(lián)系起來形成機械臂 (1)基本用法 R = SerialLink(R1, options) 復制機器人R1 R = SerialLink([L1 L2 ...], OPTIONS) 機器人連接, 將L2的基座連接到L1的末端. R = SerialLink(DH, OPTIONS),矩陣DH的構成:每個關節(jié)一行,每一行為[theta d a alpha](默認為旋轉關節(jié)),第五列(sigma)為可選列,sigma=0(默認)為旋轉關節(jié),sigma=1為移動關節(jié)
OPTIONS可以是: 'name'、'comment'、'manufacturer' 'name'可以用于給機械臂命名 bot = SerialLink([L1 L2], 'name', 'my robot') 'name'、'comment'、'manufacturer'的用法都差不多。用于標定一些額外信息
'base', 'tool',用于設定基坐標和工具坐標的原點 >>mdl_puma560 >>p560_2 = SerialLink(p560, 'base', transl(-0.5, 0.5, 0) ) (2)R.teach()可以進入一個自由調節(jié)的界面
>> p560.teach()
在界面中可以任意調節(jié)個關節(jié)變量 調節(jié)好需要的機械臂姿態(tài)后按× 然后p560.getpos()可以進一步得到剛調出來的各變量的值 (3)R.plot(Q, options)可以顯示出機械臂 當Q為1*N維向量,向量元素為各關節(jié)變量,顯示的是靜態(tài)的機械臂 Q為M*N矩陣,列向量元素為各關節(jié)變量,顯示一個機械臂的動圖 Options:: 'workspace', W 為空間限制W = [xmn, xmx ymn ymx zmn zmx] 'floorlevel',L 底板在Z軸的顯示位置 Eg >>mdl_puma560 >> p560.plot(q, 'floorlevel',0);
五.運動學常用函數(shù) 正運動學求解 Q = R.fkine(T) 逆運動學求解 T = R.ikine(Q, OPTIONS) Options:: 'deg' Eg: clear; |
|
來自: Xiao_BaiCai > 《算法》