MATLAB版本:R2019b

Robotics Toolbox版本:10。4

文中公式取自《機器人學導論》,且標出與書本相應的公式序號。

MATLAB程式碼推薦使用實時指令碼,方便對照程式碼檢視結果。

對於機器人,本人也在學習中。若答案有誤,望指出。

工具箱版本問題

rotz(),roty(),rotx(),rpy2r()等函式在版本10。4中預設輸入為角度制,而在較前的版本中(如10。3)需要加上‘deg’表示角度制輸入。

習題1

《機器人學導論》第2章MATLAB習題

習題1

a)

運用公式(2-71)寫出轉換函式

《機器人學導論》第2章MATLAB習題

公式(2-71)

function

R

=

ZYXeul2R

alpha,beta,gamma

%輸入尤拉角α,β,γ,輸出旋轉矩陣R

R

=[

cos

alpha

*

cos

beta

),

cos

alpha

*

sin

beta

*

sin

gamma

-

sin

alpha

*

cos

gamma

),

cos

alpha

*

sin

beta

*

cos

gamma

+

sin

alpha

*

sin

gamma

);

。。。

sin

alpha

*

cos

beta

),

sin

alpha

*

sin

beta

*

sin

gamma

+

cos

alpha

*

cos

gamma

),

sin

alpha

*

sin

beta

*

cos

gamma

-

cos

alpha

*

sin

gamma

);

。。。

-

sin

beta

),

cos

beta

*

sin

gamma

),

cos

beta

*

cos

gamma

)];

end

例子測試

ABR1

=

ZYXeul2R

deg2rad

10

),

deg2rad

20

),

deg2rad

30

))

ABR2

=

ZYXeul2R

deg2rad

30

),

deg2rad

90

),

deg2rad

-

55

))

結果

《機器人學導論》第2章MATLAB習題

a)測試結果

證明部分:根據單位正交旋轉矩陣的性質可證,不細說。

b)

根據公式(2-66)和(2-67)寫出轉換函式

《機器人學導論》第2章MATLAB習題

公式(2-66)

如β=90°,解得

《機器人學導論》第2章MATLAB習題

公式(2-67)

function

[alpha,beta,gamma]

=

R2ZYXeul

R

%輸入旋轉矩陣R,輸出尤拉角α,β,γ

cbeta

=

sqrt

R

1

1

^

2

+

R

2

1

^

2

);

if

cbeta

==

0

beta

=

pi

/

2

alpha

=

0

gamma

=

atan2

R

1

2

),

R

2

2

));

else

beta

=

atan2

-

R

3

1

),

cbeta

);

alpha

=

atan2

R

2

1

/

cos

beta

),

R

1

1

/

cos

beta

));

gamma

=

atan2

R

3

2

/

cos

beta

),

R

3

3

/

cos

beta

));

end

例子測試

[alpha1,beta1,gamma1]=R2ZYXeul(ABR1);

rad2deg([alpha1,beta1,gamma1])

[alpha2,beta2,gamma2]=R2ZYXeul(ABR2);

rad2deg([alpha2,beta2,gamma2])

結果

《機器人學導論》第2章MATLAB習題

b)測試結果

c)

theta=deg2rad(20);

Ry=[cos(theta) 0 sin(theta)

0 1 0

-sin(theta) 0 cos(theta)];

BP=[1 0 1]。‘;

AP=Ry*BP

《機器人學導論》第2章MATLAB習題

c)結果

d)工具箱檢查

函式rpy2r()為輸入

繞 X-Y-Z固定角座標系旋轉的度數γ,β,α

,輸出

旋轉矩陣。

而該旋轉矩陣等同於 繞Z-Y-X尤拉角的旋轉矩陣。即繞Z-Y-X尤拉角10,20,30等於繞X-Y-Z固定角30,20,10。

函式tr2rpy為上述函式的逆運算,

'deg'

為角度制輸出。

注意到angles2並不是[-55,90,30],是因為在β為90°的情況下,只能求出α和γ的和或差。

函式roty()為輸入

繞Y軸旋轉的度數

,輸出

旋轉矩陣

ABR1=rpy2r(30,20,10)

ABR2=rpy2r(-55,90,30)

angles1=tr2rpy(ABR1,’deg‘)

angles2=tr2rpy(ABR2,’deg‘)

AP=roty(20)*[1 0 1]。’

《機器人學導論》第2章MATLAB習題

工具箱檢查結果1

《機器人學導論》第2章MATLAB習題

工具箱檢查結果2

習題2

《機器人學導論》第2章MATLAB習題

習題2

a)

function T = ZYXeulVector2Tr(alpha,beta,gamma,P)

%輸入尤拉角α,β,γ和位置向量P,輸出齊次變換矩陣T

T=[ZYXeul2R(alpha,beta,gamma) P;

0 0 0 1];

end

例子測試

ABT1=ZYXeulVector2Tr(deg2rad(10),deg2rad(20),deg2rad(30),[1 2 3]。‘)

ABT2=ZYXeulVector2Tr(0,deg2rad(20),0,[3 0 1]。’)

結果

《機器人學導論》第2章MATLAB習題

a)測試結果

b)

_{}^{A}P=_{B}^{A}T*_{}^{B}P

AP=ZYXeulVector2Tr(0,deg2rad(20),0,[3 0 1]。‘)*[1 0 1 1]。’

結果

《機器人學導論》第2章MATLAB習題

b)結果

c)

根據公式(2-45)可求得其次逆變換。

《機器人學導論》第2章MATLAB習題

公式(2-45)

function Tv = invT(T)

%輸出用符號公式計算的齊次變換矩陣T的逆矩陣

Tv(1:3,1:3)=T(1:3,1:3)。‘;

Tv(1:3,4)=-T(1:3,1:3)。’*T(1:3,4);

Tv(4,:)=[0,0,0,1];

end

對a)中的i)和i))驗證

ABT1*invT(ABT1)

invT(ABT1)*ABT1

ABT2*invT(ABT2)

invT(ABT2)*ABT2

可得所有結果皆為單位矩陣。

d)

i)

ABT=ABT1;

BCT=ABT2;

ACT=ABT*BCT

CAT=invT(BCT)*invT(ABT)

《機器人學導論》第2章MATLAB習題

i)結果

ii)和iii)

ABTii=ACT*invT(BCT)

ABTii-ABT;

BCTiii=invT(ABT)*ACT

BCTiii-BCT;

透過做矩陣減法可得結果與已知答案几乎一致(相差10^-15)

e)工具箱檢查

函式rt2tr(R,t)將

旋轉矩陣R和平移量t

合成

齊次變換矩陣

這裡只對a)和b)做了工具箱檢查。

ABT1=rt2tr(rpy2r(30,20,10),[1,2,3]。‘)

ABT2=rt2tr(rpy2r(0,20,0),[3,0,1]。’)

AP=ABT2*[1 0 1 1]。‘