1、用Z-Y-X(α-β-γ)尤拉角約定表示法,寫出matlab程式。當用戶輸入尤拉角α-β-γ時,計算旋轉矩陣

_{B}^{A}R

,例:1)α = 10°,β = 20°,γ = 30°

尤拉角每次都是繞運動座標系的各軸旋轉而不是繞固定座標旋轉。其旋轉矩陣和示意圖如下:

機器人學導論—matlab習題(一)

matlab程式:

%輸入尤拉角度

alpha

=

input

‘Roatate around the z-axis in alpha = ’

);

beta

=

input

‘Roatate around the y-axis in alpha = ’

);

gamma

=

input

‘Roatate around the x-axis in alpha = ’

);

%分別計算出繞X、Y、Z軸的旋轉運算元

RZ

=

cosd

alpha

-

sind

alpha

0

sind

alpha

cosd

alpha

0

0

0

1

];

RY

=

cosd

beta

0

sind

beta

0

1

0

-

sind

beta

0

cosd

beta

)];

RX

=

1

0

0

0

cosd

gamma

-

sind

gamma

0

sind

gamma

cosd

gamma

)];

T

=

RZ

*

RY

*

RX

%計算旋轉矩陣TAB

輸入各角度後獲得旋轉矩陣:

機器人學導論—matlab習題(一)

2、編寫一個MATLAB程式。當輸入旋轉矩陣R時,計算出尤拉角α-β-gamma(反解問題)。計算兩個可能的解。證明1中情況的反解,並檢查你的結果是否正確。

由於旋轉軸的旋轉方式不同,一共有3x2x2=12種方式,以下將主要求解Z-Y-X尤拉角和Z-Y-Z尤拉角兩種方式的解。旋轉矩陣採用1中的結果,其中Z-Y-X尤拉角:

機器人學導論—matlab習題(一)

機器人學導論—matlab習題(一)

Z-Y-Z尤拉角:

機器人學導論—matlab習題(一)

機器人學導論—matlab習題(一)

matlab程式碼:

R

=

T

%Z-Y-X尤拉角

beta

=

atan2

-

R

3

1

),

sqrt

R

1

1

^

2

+

R

2

1

^

2

));

alpha

=

atan2

R

2

1

/

cos

beta

),

R

1

1

/

cos

beta

));

gamma

=

atan2

R

3

2

/

cos

beta

),

R

3

3

/

cos

beta

));

disp

‘Z-Y-X尤拉角為:’

A

=

rad2deg

([

alpha

beta

gamma

])

%Z-Y-Z尤拉角

beta

=

atan2

sqrt

R

3

1

^

2

+

R

3

2

^

2

),

R

3

3

));

alpha

=

atan2

R

2

3

/

sin

beta

),

R

1

3

/

sin

beta

));

gamma

=

atan2

R

3

2

/

sin

beta

),

-

R

3

1

/

sin

beta

));

disp

‘Z-Y-Z尤拉角為:’

B

=

alpha

beta

gamma

%驗證Z-Y-Z結果正確性

T1

=

rotz

alpha

*

roty

beta

*

rotz

gamma

機器人學導論—matlab習題(一)

經過驗證,反解後的角度和1一樣,同時採用另一種解驗證結果也與1一樣。

3、僅簡單的繞Y軸旋轉β角。已知β = 20°和

_{}^{B}P

= [ 1 0 1]‘,計算

_{}^{A}P

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

beta

=

20

%旋轉角度

%旋轉矩陣

RY

=

cosd

beta

0

sind

beta

0

1

0

-

sind

beta

0

cosd

beta

)];

PB

=

1

0

1

PA

=

RY

*

PB

機器人學導論—matlab習題(一)

4、通matlab Robotics工具箱驗算上面的一些結果。使用rpy2r(),tr2rpy(),rotx(),roty(),rotz()等函式。

%輸入尤拉角度

alpha

=

input

‘Roatate around the z-axis in alpha = ’

);

beta

=

input

‘Roatate around the y-axis in alpha = ’

);

gamma

=

input

‘Roatate around the x-axis in alpha = ’

);

%計算旋轉矩陣

T1

=

rotz

alpha

‘deg’

*

roty

beta

‘deg’

*

rotx

gamma

‘deg’

T2

=

rpy2r

gamma

beta

alpha

‘deg’

angle

=

rad2deg

tr2rpy

T2

))

機器人學導論—matlab習題(一)

由上可知,求解旋轉矩陣既可以用rotx()等函式,也可以使用rpy2r函式。使用方法可參考前面的文章。注意rpy2r()的使用方法和其原理。在matlab中輸入edit rpy2r將可檢視其函式程式碼。

T = rpy2r(roll,pitch,yaw,options)

該函式預設為繞Z-Y-X軸旋轉,同時也可透過options選擇其他旋轉方法。在預設情況下,該函式結果相當於:

_{B}^{A}T

= rotz(yaw)*roty(pitch)*rotx(roll) (注意角度的順序)。知道rpy2r的原理後,tr2rpy(r)就是其逆過程。