1、用Z-Y-X(α-β-γ)尤拉角約定表示法,寫出matlab程式。當用戶輸入尤拉角α-β-γ時,計算旋轉矩陣
,例:1)α = 10°,β = 20°,γ = 30°
尤拉角每次都是繞運動座標系的各軸旋轉而不是繞固定座標旋轉。其旋轉矩陣和示意圖如下:
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
輸入各角度後獲得旋轉矩陣:
2、編寫一個MATLAB程式。當輸入旋轉矩陣R時,計算出尤拉角α-β-gamma(反解問題)。計算兩個可能的解。證明1中情況的反解,並檢查你的結果是否正確。
由於旋轉軸的旋轉方式不同,一共有3x2x2=12種方式,以下將主要求解Z-Y-X尤拉角和Z-Y-Z尤拉角兩種方式的解。旋轉矩陣採用1中的結果,其中Z-Y-X尤拉角:
Z-Y-Z尤拉角:
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
)
經過驗證,反解後的角度和1一樣,同時採用另一種解驗證結果也與1一樣。
3、僅簡單的繞Y軸旋轉β角。已知β = 20°和
= [ 1 0 1]‘,計算
。
beta
=
20
;
%旋轉角度
%旋轉矩陣
RY
=
[
cosd
(
beta
)
0
sind
(
beta
)
0
1
0
-
sind
(
beta
)
0
cosd
(
beta
)];
PB
=
[
1
0
1
]
’
;
PA
=
RY
*
PB
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
))
由上可知,求解旋轉矩陣既可以用rotx()等函式,也可以使用rpy2r函式。使用方法可參考前面的文章。注意rpy2r()的使用方法和其原理。在matlab中輸入edit rpy2r將可檢視其函式程式碼。
T = rpy2r(roll,pitch,yaw,options)
該函式預設為繞Z-Y-X軸旋轉,同時也可透過options選擇其他旋轉方法。在預設情況下,該函式結果相當於:
= rotz(yaw)*roty(pitch)*rotx(roll) (注意角度的順序)。知道rpy2r的原理後,tr2rpy(r)就是其逆過程。