rt2tr matlab,(學習筆記)matlab機器人工具箱攻略——矩陣變換,運動學

  • Post author:
  • Post category:其他

一.旋轉矩陣:

(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)姿態的敘述方法:

1.Y-Z-Y歐拉角

R = rotz(a)*roty(b)*rotz(c)

eul2r(a,b,c)

旋轉矩陣反解出y-z-y歐拉角度的函數為

tr2eul(R)

2.x-y-z歐拉角

R = rotx(r)*roty(p)*rotz(y)

rpy2r(r,p,y)

旋轉矩陣反解出x-y-z歐拉角度的函數為

tr2rpy(R)

3.等效軸角坐標表示法

把坐標系b看做原坐標a按向量V方向按右手方向旋轉theta度

旋轉矩陣反解出等效軸角坐標表示的函數為

[theta,V] = tr2angvec(R)

由等效軸角坐標表示轉換為旋轉矩陣的函數

R = angvec2r(theta, V)(記得把v做單位化的處理v = v / norm(v))

4.歐拉參數法表示(4元數)

在等效軸角坐標表示法的基礎上更進一步

E1=Kx*sin(θ/2);E2=Ky*sin(θ/2);E3=Kz*sin(θ/2);E4=cos(θ/2);

求解4元數的函數為

Quaternion(R)

二.齊次變換矩陣

4*4矩陣用於描述坐標系的位置和姿態

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元數表示

4.求出姿態的相關表示

trprint(T, OPTIONS)

可以表示出齊次矩陣的參數

Options為:

(1)’rpy’ ; ‘euler’  ;’angvec’ ;

改變轉換的方式為rpy,歐拉角,等效軸角坐標

(2)’radian’ ;

改變顯示的方式,和‘deg’功能相對。

5.旋轉矩陣與齊次矩陣

r2t(t),rt2tr(t)可以把旋轉矩陣t增廣為齊次矩陣

tr2rt(t),t2r(t)可以把齊次矩陣t降維旋轉矩陣

6.

可以在畫圖中顯示出齊次矩陣

7.

tranimate((P1, P2, OPTIONS)

可以顯示從P1變到p2的動畫

P1,P2可以是旋轉矩陣,齊次矩陣和4元數這幾個形式任意一個

Options::

‘fps’, fps  fps的值可以改變動畫的速度(默認 10)

‘nsteps’, n   n是插入的中間點個數(默認 50)

‘axis’,A      坐標系限制A=[xmin, xmax, ymin, ymax, zmin, zmax]

‘movie’,M     Save frames as files in the folder M

三.一維軌跡生成:tpoly和lspb

1.五次多項式軌跡規划

典型用法

[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為步數

2.拋物線軌跡規划

典型用法

[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為限定的最大速度

四.機械臂的構建

1.Link

Link()是構建連桿的基本函數

建立連桿的基本規則是

L = Link(DH, OPTIONS)

DH = [THETA D A ALPHA SIGMA OFFSET]

THETA  D  A  ALPHA 為基本的DH參數

theta    關節角度

d        連桿偏移量

a        連桿長度

alpha    連桿扭角

Sigma可以設定連桿的類型0為旋轉1為伸長

offset   關節變量偏移量

qlim     關節變量范圍[min max]

Options:

‘standard’    for standard D&H parameters (default).

‘modified’    for modified D&H parameters.

‘revolute’    旋轉關節(default)

‘prismatic’   伸長關節

建立一個旋轉連桿

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  。。。。

可以顯示,修改連桿的參數

操作函數:

%A               連桿變換矩陣

%  RP            關節類型: ‘R’或’P’

%  friction      摩擦力

%  nofriction    摩擦力忽略

%  dyn           顯示動力學參數

%  islimit       測試關節是否超出軟限制

%  isrevolute    測試是否為旋轉關節

%  isprismatic   測試是否為移動關節

%  display       連桿參數以表格形式顯示

%  char          轉為字符串

L.A(X)可以顯示連桿變換矩陣,但是需要補齊DH參數變量,X在旋轉連桿中就是theta  值

在伸長連桿中就是d的值。

L.RP 返回關節類型  返回R表示旋轉關節,P為伸長關節

其他的用法類似。。。

2.SerialLink

使用SerialLink可以把連桿聯系起來形成機械臂

(1)基本用法

R = SerialLink(R1, options) 復制機器人R1

R = SerialLink([L1 L2 …], OPTIONS) 機器人連接,將L2的基座連接到L1的末端.

R = SerialLink(DH, OPTIONS),矩陣DH的構成:每個關節一行,每一行為[theta  d  a  alpha](默認為旋轉關節),第五列(sigma)為可選列,sigma=0(默認)為旋轉關節,sigma=1為移動關節

47a139b18f2672b438dc518fe7e5b8dd.png

OPTIONS可以是:

‘name’、’comment’、’manufacturer’

‘base’、’tool’、’gravity’、’plotopt’

‘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()可以進入一個自由調節的界面

>> p560.teach()

7354047ad709fd5e095447b35756b32f.png

在界面中可以任意調節個關節變量

調節好需要的機械臂姿態后按×

然后p560.getpos()可以進一步得到剛調出來的各變量的值

(3)R.plot(Q, options)可以顯示出機械臂

當Q為1*N維向量,向量元素為各關節變量,顯示的是靜態的機械臂

Q為M*N矩陣,列向量元素為各關節變量,顯示一個機械臂的動圖

Options::

‘workspace’, W    為空間限制W = [xmn, xmx ymn ymx zmn zmx]

‘floorlevel’,L      底板在Z軸的顯示位置

Eg

>>mdl_puma560

>> p560.plot(q,  ‘floorlevel’,0);

cd0b36ab1d01b2478f1f81e2f2e3d500.png

五.運動學常用函數

正運動學求解

Q = R.fkine(T)

逆運動學求解

T = R.ikine(Q, OPTIONS)

Options:: ‘deg’

Eg:

clear;

clc;

clear L

%             th    d       a    alpha

L(1) = Link([ 0     0       0   -pi/2     0]);%定義連桿

L(2) = Link([ 0     1       0    pi/2     0]);

L(3) = Link([ 0     0       0    0        1]);

L(4) = Link([ 0     0       0   -pi/2     0]);

L(5) = Link([ 0     0       0    pi/2     0]);

L(6) = Link([ 0     1       0    0        0]);

bot = SerialLink(L, ‘name’, ‘Stanford arm’);%連接連桿

T=transl(1,2,3)*trotz(60,’deg’)*troty(30,’deg’)*trotz(90,’deg’)

inverse_kinematics=bot.ikine(T,’pinv’);%逆向運動學

theta1=inverse_kinematics(1);

theta2=inverse_kinematics(2);

d3=inverse_kinematics(3);

theta4=inverse_kinematics(4);

theta5=inverse_kinematics(5);

theta6=inverse_kinematics(6);

forward_kinematics=bot.fkine([theta1 theta2 d3 theta4 theta5 theta6])%前向運動學,驗證結果的准確性.