機械社區
標題: 已知面角,如何求歐拉角,機器人坐標變換怎么求? [打印本頁]
作者: 水水5 時間: 2025-7-26 18:44
標題: 已知面角,如何求歐拉角,機器人坐標變換怎么求?
問題的來源是這樣的:
0 J) s [+ J i9 h" c1 c9 b" \9 M# u
有一個項目,機器人末端的手爪,因為種種情況,設計了一個傾斜的吸盤。需要在3D視覺的引導下,去吸取一個傾斜的物體。
% f4 Y- ]4 s& `$ J機器人編程工程師嫌手工做工具坐標系比較費時費力,問我能否通過三維軟件,求得坐標變換的數值,直接填入機器人系統中的工具坐標系的標定參數中。+ z% @9 n( @! `* b [) J4 U/ z
我感覺應該挺簡單的呀,于是就在三維模型中(我是用solidworks進行的建模)建立了兩個坐標系,一個是安裝法蘭的坐標系,一個是吸盤面的坐標系。
' w2 i) [) W; ~4 e/ p# m7 l然后測量了兩個坐標系的位移,和角度,然后給了機器人編程工程師8 H# b6 r9 g8 y8 g/ G- Z
: i6 L' n/ c2 x+ k% t$ i結果發現不對(測試方法:走軸坐標ABC,并不能繞坐標系原點旋轉,證明坐標系不對)
$ Y: m3 K3 e( D4 Z5 I9 U8 e7 @& X2 ]
. M9 T& e/ s! r5 T6 S, y+ Q兩個坐標系的位移很好測量。兩個坐標系的角度,我是這樣測量的,我的solidworks版本低,沒法直接給出數,于是我建了三個面,例如要測量Z軸之間的角度,我就測量了兩個XY平面的角度。/ s, n6 y9 |9 ?! N: K
/ M! b9 [2 C: f4 D
于是我將這個問題抽象出來了,花了大量的時間研究面角,歐拉角,也沒研究明白。發現這個歐拉角,這個三個軸的旋轉順序還有要求,有ZYZ,有XYZ,可能各個品牌的機器人還不一樣。' L* _* a& M- R5 M9 l9 d
0 {9 F) G$ Q2 u我抽象了模型,問了AI,竟然說我這樣的坐標系不存在?/ L5 p3 r' T6 u$ d5 C% ~
6 L2 F. n2 E( m
下面是我抽象出來的數學模型:兩個坐標系的三個面之間的角度都是30度,坐標系原點重合,求坐標變換歐拉角。
& {$ p, N/ L l7 u0 P$ O1 {* d7 h/ o2 J9 t/ k
有沒有高手給解答一下。2 h' [5 P$ _! W& N
) {. q# ^' }; B" f) |+ C9 d$ [
以下截圖是這個兩個坐標系的空間位置+ Y( g! G; `$ J+ ]" [
[attach]577212[/attach]
2 E! Y1 q8 a ]7 v[attach]577213[/attach]0 X0 c% l9 K+ C5 q7 D
[attach]577214[/attach]# a# b6 \. }# T9 b! t
[attach]577215[/attach]
( Q6 t' ^- E& V* X; \
作者: 學者11 時間: 2025-7-26 19:12
機械手變換坐標系要是這么容易,那何來機械臂動力學和D-H建模法呢。
* L- ]. f3 k S0 J6 t+ h) D' _, Z先了解點基本常識吧,https://zhuanlan.zhihu.com/p/692369673
作者: ckc521 時間: 2025-7-26 20:52
樓上正解;五軸機床轉換你懂不?你可以把機器人看成一個五軸機床,用DH法建模來求解旋轉角度,從機械手末端到基座,或者從基座到機械手末端,都可以推導出來。
% D6 t' u( W/ x: z- s% N* \& V0 G
作者: ckc521 時間: 2025-7-26 20:53
還有別問國內的AI,國內的AI,連歐拉角動態旋轉和靜態旋轉的等效性都不會給你正確的推導出來。
i( {* t; u9 \2 [
作者: 夢里啥都有 時間: 2025-7-26 21:40
不懂,但是AI只能夠搜資料,有時候給不了出處的還不能夠信.1 J( M4 ]5 r7 t( Z% z+ H
何況復雜的建模肯定少不了計算的優化.
# ?) U5 X! o: T; f* }矩陣肯定少不了需要高效的算法.& I1 T7 X" D/ u8 m! S1 w
我只會簡單的x^x+y^2=18 m. t* L$ z, ^# i. @ {
x=cos(theta),y=sin(thea)
% x/ p7 r8 w- S" j$ K# ]' m; J這些東西肯定少不了各種知識.
& z0 g: H- a7 Q+ ~, e與其糾結,不如先把路走遠,再走深.
' W5 |2 h+ I: M4 b
作者: cc851 時間: 2025-7-27 07:22
機械工程師解決不了現場調試的痛,模型上永遠都是理論的,何況這么多零件組裝在一起的累積誤差,對于相機和機械手的計算補償來說都是災難。最近幾年一直做復合機器人的項目,一直頭痛精度問題,都和這些有關系。
作者: 冷月梧桐 時間: 2025-7-27 14:23
直接把機械手模型和治具導入SW/各類機械手軟件,模擬點位,然后出各個軸的角度數據就好了
作者: DaedraMech 時間: 2025-7-28 11:56
本帖最后由 DaedraMech 于 2025-7-28 12:32 編輯 `# ]; L7 n: F& M& N( M* X2 W
: A, }, Q* f: E( q" [1 P不知道我有沒有正確理解樓主的意思,我先談談自己對坐標變換的理解:
' {* G& t; F9 |4 D* h7 m坐標變換矩陣既是變換參數(轉角、位移),又是變換后坐標系的基底在原坐標系上的坐標組合。
/ ^# @# \: Q2 B" W+ A( S6 I+ ?6 s8 v+ \; K+ h y0 {& i6 b
樓主在SW中使用的方法是控制三個正交平面和原平面各成30°,我個人更喜歡直接建立坐標系,由于x軸是YZ面法向量/y軸是XZ面法向量/z軸是XY面法向量,所以我約束3個新坐標軸和原坐標軸各成30°達到效果和樓主應該是一樣的。三個基底([ix iy iz],[jx jy jz],[kx ky kz])有9個未知坐標值,有【3個基底長度為1】、【新基底和原坐標軸各成30°】、【基底之間互成90°】這9個約束一定能在SW中畫出3個代表基底的線段,由此即可建立新坐標系,測量線段端點的坐標值即可獲得變換矩陣。
0 _/ v1 ], y$ \! { n# [9 M" x[attach]577235[/attach]7 B! \' l7 G2 T9 e
[attach]577228[/attach]
1 F0 n* K5 k$ P我們來測試一下,我們假設工具坐標系上有一點[0.5 0.6 0.7]',我們想知道該點在法蘭坐標系上的坐標值,那就可以用變換矩陣左乘這個向量:
4 r9 i3 H6 r4 j& X[attach]577230[/attach]. s) m" A* }" }# U/ I% y+ w
把獲得向量的坐標值輸入SW,測量下它在工具坐標系下的坐標,果然還是[0.5 0.6 0.7]',變換矩陣是正確的:
; Q1 R3 J# f: c1 C4 D/ d, S6 G[attach]577234[/attach]% }! K9 ~- U1 b4 s, [/ N
[attach]577233[/attach]( X8 n4 F; _0 F+ z
如果坐標系還有位移,可以使用齊次變換矩陣進行變換:
4 B' T4 O% `: C/ m9 {; @: p[attach]577228[/attach][attach]577231[/attach]
/ a$ x$ ~: W. ]& l B# B上面的演示中,樓主可以看到,矩陣里的坐標值就是特定角度的正弦/余弦值,所以歐拉角可以從這些角度中拆解出來,也就是總變換矩陣可以拆解成一系列單軸角度變換矩陣連續左乘,由此可以表示出坐標系繞各軸旋轉的角度和先后順序,這也就是樓主說的“面角轉換為歐拉角”,過程較為麻煩,我個人不推薦這種方式。
" z+ J7 ^7 X4 h; ^0 Q- ^' D9 e4 @& @" [& x' A
0 T( S! ]2 D8 z, q9 |9 d
1 t* L0 T, u% Z4 E8 _, i
作者: DaedraMech 時間: 2025-7-28 14:23
本帖最后由 DaedraMech 于 2025-7-28 15:41 編輯 - \6 _. H6 [) `- R
DaedraMech 發表于 2025-7-28 11:56* r) P/ H L V: q/ p
不知道我有沒有正確理解樓主的意思,我先談談自己對坐標變換的理解:/ _( i: b2 ?1 v% t1 J# v
坐標變換矩陣既是變換參數(轉角、位 ...
- \8 a J+ R: h
一般對算法這邊來說最直接的就是拿到變換矩陣了,不知道為什么還要舍近求遠獲得歐拉角,不過樓主需要的話可以按照下圖解方程,獲得各軸轉角和順序。另外,方程是多解的,比如【先繞z軸逆時針旋轉17.927°,再繞y軸順時針旋轉24.465°,再繞x軸順時針旋轉17.927°】就是其中一個解:& e! H$ h# B% g8 C) C
S) M- n( I/ {4 O8 N
[attach]577238[/attach]
1 a3 l& p& n- J* o# y" ]5 W$ j. s. s3 }0 A' q
作者: sen1234 時間: 2025-7-28 18:11
線性代數嗎,都忘得差不多了
作者: 水水5 時間: 2025-7-29 19:18
+ _1 n2 ^) ?; D7 Z# L; m! v8 C感謝層主,膜拜
! O1 m# A2 `0 R& i
! R0 n' x5 |0 H6 S我一定把它付諸實踐
. {0 M$ i% d% ~$ } z* b- c) Y. n. m6 ]$ V. \1 ]* o5 C
我又搜索了一些其他的方法,再次請樓主給于指導。一些方法貼入后面的回復。
* \0 f0 r6 z( {! p7 V- P0 M2 I2 m
作者: 水水5 時間: 2025-7-29 19:20
# K. l$ T2 |) B8 G# x, A3 e8 A0 ]& c1 e& ~6 t
方法一 本文轉載自簡書,作者是梁間。表示感謝4 B+ f" e& A8 W4 W
數學模型已知兩個坐標系在各方向上尺度縮放比例一致,兩個坐標系的轉換關系可以用7個參數來表示,3個旋轉參數,3個平移參數,1個比例參數。已知三點在A、B兩個坐標系中的坐標,那么這7個參數可以唯一確定。
% _0 l( ?4 f4 B% n9 E4 A坐標轉換的數學模型為:( g9 r) f7 N; G. t; y. g+ D9 \
%20...(1))
7 s% `5 G$ O( C. I% P, i; j其中,λ是比例參數,R是旋轉矩陣,Δ是平移向量,A、B分別是兩個坐標系中的坐標。 E8 D2 u9 d% _8 e: B3 Y' c+ E
比例參數λ最容易計算
7 L4 v5 X8 G5 F" a6 Z4 v
' g4 ]& e5 |% T/ f/ q9 w其中
為
兩點在A坐標系中的距離。
9 q% M' W- X$ d/ d/ D/ R6 K/ ] H1 M旋轉矩陣R是一個3x3的正交矩陣,有3個自由度。可利用反對稱矩陣S來構造旋轉矩陣R:
0 G8 L* G% w5 W" l: j, X7 v
% b' X/ \# h1 \那么3 ?+ t& N% n* k% u7 O
)
' V" w' k9 D" ^' w其中I是單位矩陣,這里R只有a、b、c三個變量,解出a、b、c即可確定旋轉矩陣R。
5 R4 _- D: }0 d8 L. D0 F把
兩點帶入(1)式并相減消去ΔX、ΔY、ΔZ
/ y5 p: x( _* l0 v1 f$ z)
) @/ |, Q) O4 c) _+ s; t1 T; a這里
為
點在A坐標系X軸向坐標值,為已知量。我們簡化一下寫法設定:
9 w! g% E: }- h5 W: b
1 @/ \3 Q( _& o. X- |- y1 k這樣(3)式可寫為
; _) y Z, N' S)
( f0 U0 o: L( ?- d; _把(2)式帶入(4)
5 ^+ ^' Q1 r; i2 \3 q! {%5Cbegin%7Bbmatrix%7D%20X_%7BA12%7D%5C%5C%20Y_%7BA12%7D%20%5C%5C%20Z_%7BA12%7D%20%5Cend%7Bbmatrix%7D%20%3D%20%CE%BB(I%2BS)%5Cbegin%7Bbmatrix%7D%20X_%7BB12%7D%5C%5C%20Y_%7BB12%7D%20%5C%5C%20Z_%7BB12%7D%20%5Cend%7Bbmatrix%7D)
6 u) ?$ \7 Z3 _6 Q2 N& I帶入S
% P8 ~* S& j6 t+ W- f: C+ f2 ?
- C: w% e2 r) t& E( w7 K
展開9 _4 K$ Y! P* S4 s2 W# ?, M8 A

% U2 Z' f4 B5 J- Z& _整理可得/ ~7 r7 H# { v2 Z; ?
{3 t: E; w o: P
(5)式只有兩個獨立方程,解不出a、b、c三個未知量。帶入
點得到和(5)式類似的方程組,兩個方程組聯立,取3個獨立方程
+ i5 D3 P/ e" ? [% w) G%20-c(%CE%BBY_%7BB12%7D%2BY_%7BA12%7D)%20%5C%5C%20-a(%CE%BBZ_%7BB12%7D%20%2BZ_%7BA12%7D%20)%2Bc(%CE%BBX_%7BB12%7D%2BX_%7BA12%7D)%5C%5C%20a(%CE%BBY_%7BB13%7D%2BY_%7BA13%7D%20)%2Bb(%CE%BBX_%7BB13%20%7D%2BX_%7BA13%7D)%5Cend%7Bbmatrix%7D)
6 v( g+ A7 m6 s%20%26-c(%CE%BBY_%7BB12%7D%2BY_%7BA12%7D)%20%5C%5C%20-a(%CE%BBZ_%7BB12%7D%20%2BZ_%7BA12%7D%20)%26%200%20%26%20c(%CE%BBX_%7BB12%7D%2BX_%7BA12%7D)%5C%5C%20a(%CE%BBY_%7BB13%7D%2BY_%7BA13%7D%20)%26b(%CE%BBX_%7BB13%20%7D%2BX_%7BA13%7D)%260%5Cend%7Bbmatrix%7D%20%5Cbegin%7Bbmatrix%7D%20a%5C%5Cb%20%5C%5Cc%20%5Cend%7Bbmatrix%7D)
/ w0 f7 X- L7 M" a可結出
+ G% d: P% O# ?7 G4 o( Y ]1 b0 u%20%26-(%CE%BBY_%7BB12%7D%2BY_%7BA12%7D)%20%5C%5C%20-(%CE%BBZ_%7BB12%7D%20%2BZ_%7BA12%7D%20)%26%200%20%26%20(%CE%BBX_%7BB12%7D%2BX_%7BA12%7D)%5C%5C%20(%CE%BBY_%7BB13%7D%2BY_%7BA13%7D%20)%26(%CE%BBX_%7BB13%20%7D%2BX_%7BA13%7D)%260%5Cend%7Bbmatrix%7D%20%5E%7B-1%20%7D%5Cbegin%7Bbmatrix%7D%20X_%7BA12%7D%20-%CE%BBX_%7BB12%7D%20%5C%5C%20Y_%7BA12%7D%20-%20%CE%BBY_%7BB12%7D%20%5C%5C%20Z_%7BA13%7D%20-%20%CE%BB%20Z_%7BB13%7D%20%5Cend%7Bbmatrix%7D)
5 n, R1 x' a/ A$ c' o9 c把a、b、c帶入(2)式可到旋轉矩陣R,把任意一點坐標帶入(1)式可得Δ。) z2 u9 c$ V. X( L% i0 b$ J7 o
+ T- e/ q' R8 _5 q0 X4 U
+ C1 i/ {$ @/ n) P$ r5 h7 S! L
9 `; a7 o6 g% q, O0 @6 L+ s作者:梁間
$ R0 P% Q4 W0 m: o, X鏈接:https://www.jianshu.com/p/58cf5655f9a9
% y& m7 a2 C0 K來源:簡書
j' n* t1 @, W著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
) D0 w' D; h/ W n2 A5 L
8 O8 y! K0 ` [2 q$ X
作者: 水水5 時間: 2025-7-29 19:23
方法二,這里提到了SVD算法
; A* N, u. N0 f1 \; O7 o4 B( b通過實際的坐標點例子,來直觀解釋通過SVD求對應的坐標系關系。

已知四個點在坐標系A中的坐標為:
(0, 0, 0); (1,0,0); (1,1,0); (0,1,0)
可得矩陣A為
- O3 P0 d B: o

4 I% L/ J: h8 Z6 n7 ~! B3 @矩陣A這四個點在坐標系B中的坐標為:
(2,2, 2); (3,2,2); (3,3,2); (2,3,2)
可得矩陣B為
6 C0 _& Z0 G! X( y
5 c; {4 K: h: r1 K+ Q- r! U! Y
矩陣B步驟一:求兩個數據集的質心
根據上述公式,可得質心為


步驟二:將兩個數據集的質心移動至同一個點,即只存在于一個旋轉的轉換關系。
對應坐標系中的點同時減去質心,計算后的矩陣A和B分別為
; r# f U5 j1 ?0 r8 g$ R
, Q/ w6 }/ s% w! p
計算后的矩陣A
; q6 k- f8 u! X+ r+ ?
5 \9 i# I0 S! x( g# ?) s4 P計算后的矩陣B備注:此處的矩陣A和矩陣B一樣,因為舉得例子較為特殊,只存在平移關系。計算過程通用。
步驟三:通過SVD算法計算旋轉和平移關系。
定義一個3X3的矩陣,將矩陣A的每一行數據與矩陣B進行點乘,會產生四組3X3的矩陣,將這四組數據求和,得到最終的3X3的矩陣,就是我們需要用SVD算法來進行奇異值分解的矩陣H。


上述公式中,顏色相同的框內數據進行點乘,構成3X3的矩陣a1,a2,a3,a4。
矩陣H = a1 + a2 + a3 + a4。計算結果如下

通過SVD算法分解該矩陣,這里直接通過MATLAB接口調用,具體原理在前面的章節中已描述。

步驟四:計算旋轉和平移關系
根據上述求出的u1和v1,可求得旋轉矩陣R為
將該旋轉矩陣轉為歐拉角則Rx = 0, Ry = 0, Rz = 0。根據公式
得平移矩陣為
總結:如果在實際項目中,需要獲取多臺設備間的關系,如機器人相對于產品間的關系,或者機床相對于產品的關系,則該方法較為實用。注意:在實際的選擇參考點時,不要在一條線上選點。如上述選的四個點,要求不能共線。要不然會減少有效數據。
# a" D/ l2 u1 o' ~. d
作者: DaedraMech 時間: 2025-7-29 20:37
本帖最后由 DaedraMech 于 2025-7-29 20:42 編輯 J3 S/ E, g# c+ R: b; E' Y( \
$ ?1 k6 I+ Q* O* c
沒想到水水大俠對此問題如此孜孜以求,鉆研精神和信息獲取能力令小弟佩服,我比較功利,方法能解決問題就行。
2 g" |5 E, w3 j+ U/ O1 t) V) I' E# L- h7 x4 G
我把之前回復中的齊次變換矩陣改一下符號,樓主可以對比下和文章中的表達方式是不是一回事:
1 A& F5 H4 q) o# C[attach]577263[/attach]9 x+ Q) o) L1 L9 w5 B
[attach]577264[/attach]
?* K9 E) z, u6 |$ @# }平移、旋轉、縮放這類坐標變換我們統稱為線性變換。平移和縮放非常簡單,沒什么好說的,重點就是如何求得旋轉矩陣R,上述兩種方法就是通過純代數的方法求解R。
( h. C& J* }+ l, m3 L你用什么方法和選擇的工具有關,上述兩種方法多用在圖像處理和機器學習中,算法工程師手里的工具是集成編程環境,是代碼,采用代數方法自然是比較直接的。但要知道矩陣可是聯系代數和幾何的橋梁啊,而我們則掌握了強大的幾何工具SW,利用【旋轉矩陣可以表示坐標系】這一幾何意義我們可以直接得到R,完全不需要上面繁瑣的運算。 Z/ ?7 H: V& S T+ T4 a3 Q
作者: 水水5 時間: 3 天前
本帖最后由 水水5 于 2025-8-3 20:21 編輯 , a: {3 r6 s6 L/ g9 b. G
DaedraMech 發表于 2025-7-29 20:37% R5 v$ Y% f' p) v6 M: ]# \
沒想到水水大俠對此問題如此孜孜以求,鉆研精神和信息獲取能力令小弟佩服,我比較功利,方法能解決問題就行 ...
' C" E9 }2 R3 i
感謝大俠的持續教誨。大俠如果有,從變換矩陣導出歐拉角,的計算公式,恭請再給明示下。, G% }7 `8 g. \3 [2 d3 M1 ?
/ U. ?& Y8 E1 C! x# }' _& a
經過又一個周末的摸索和學習,我已經學到了旋轉矩陣的測量方法,并且通過計算一個點的坐標在兩個坐標系中的坐標值進行了驗證。$ [$ S& L3 k6 K/ g
$ u' i1 G' o1 _9 b這是第一步,下一步是求歐拉角。
# }1 [" j9 `5 f4 \# C! `
: d7 U& C! K9 p5 {我最終的目的是:1 d7 ~# @% m6 m, C
“在機器人示教工具坐標系的時候,不需要再繁瑣的用6點法搞一個小時示教,而是我作為機械工程師,可以直接從三維中計算出,通過計算,直接可以提供XYZABC的數值”
/ G0 L9 ]& i" C, X/ w9 Z( _3 U9 T1 o4 `8 S) A
但是這里面有個難題,我不知道機器人工具坐標系參數他是采用的哪種形式的歐拉角/ H1 f8 y+ ]7 w. u9 I- @
下圖是我的作業
8 _$ r3 s' e0 ]" o[attach]577369[/attach]
9 b) F* a) P1 h+ R# |6 b' E. g: z
歡迎光臨 機械社區 (http://www.ytsybjq.com/) |
Powered by Discuz! X3.5 |