找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 水水5

已知面角,如何求欧拉角,机器人坐标变换怎么求?

[复制链接]
 楼主| 发表于 4 天前 | 显示全部楼层
DaedraMech 发表于 2025-7-28 14:23
2 W" b5 G! N9 x* W: o: D3 T+ @一般对算法这边来说最直接的就是拿到变换矩阵了,不知道为什么还要舍近求远获得欧拉角,不过楼主需要的话 ...

' @3 {" I/ w7 }, y9 f8 ]7 I感谢层主,膜拜9 C- _! W7 P3 `; l, A
0 o5 z# x2 ]; q& v* ]
我一定把它付诸实践
' ?' f8 N! c7 q" D! u& {- \
$ S- V2 {, m6 b, @3 \我又搜索了一些其他的方法,再次请楼主给于指导。一些方法贴入后面的回复。. h+ |- o1 x3 L' z4 Y7 [  B
 楼主| 发表于 4 天前 | 显示全部楼层
- o8 T9 F0 L* i: S' Q
- _) p+ z/ q/ \0 g1 I  o( a" S
方法一 本文转载自简书,作者是梁间。表示感谢
7 j) @  I( m6 c& {3 _
数学模型已知两个坐标系在各方向上尺度缩放比例一致,两个坐标系的转换关系可以用7个参数来表示,3个旋转参数,3个平移参数,1个比例参数。已知三点在A、B两个坐标系中的坐标,那么这7个参数可以唯一确定。. M5 Y2 L1 }* ]) Z8 h/ h: L( {* a
坐标转换的数学模型为:+ D# Q! N8 c. b' [

7 ~% h6 r& z3 ^" j其中,λ是比例参数,R是旋转矩阵,Δ是平移向量,A、B分别是两个坐标系中的坐标。
( K0 g" |8 Q# i  E) ^/ q& A比例参数λ最容易计算
: L* i( |) T. ?! N) n3 T& H
  o% h8 G7 [: f0 e其中两点在A坐标系中的距离。
0 E+ A; L; w6 g/ j! W; ^7 k旋转矩阵R是一个3x3的正交矩阵,有3个自由度。可利用反对称矩阵S来构造旋转矩阵R:: R) g: [' _; A- y5 U/ ?+ `

7 t4 b. M/ r- R$ k: W. }$ ~那么; s% S' a' s) O. `, K& d
0 }1 Q* O/ _& ]! v4 K5 ]
其中I是单位矩阵,这里R只有a、b、c三个变量,解出a、b、c即可确定旋转矩阵R。
% G! k% e) M4 [, T0 B7 v两点带入(1)式并相减消去ΔX、ΔY、ΔZ$ h; W. m; v  S
* U# i' _0 Q- O/ N. t+ Q- W( q* v
这里点在A坐标系X轴向坐标值,为已知量。我们简化一下写法设定:  c; q4 U  M: d7 Z2 K

* N7 ?, j( C: Y4 K- H* O这样(3)式可写为
, ~7 U1 V  T5 E1 t5 Q+ @
+ N' q$ q1 I7 ~2 |% Q5 z. s( @把(2)式带入(4)
1 t0 V9 W' B' V* F- V
$ [7 W. t3 D5 r5 ~# }' ~$ u# k; B带入S* ]) B+ a6 X% Q/ Q' w3 S3 {

( s. s1 B. E  B" l5 i. W7 D展开" Q7 V* V  L8 Z. p

9 O$ G& e' ^0 k# L# K- C整理可得
8 I: B" W1 m' [& l4 D
+ k7 V' @/ o6 b(5)式只有两个独立方程,解不出a、b、c三个未知量。带入点得到和(5)式类似的方程组,两个方程组联立,取3个独立方程! i* P9 Q# ?; s
) @* b) M% @! r; M& V7 j

7 J+ U& w3 |# Y9 d可结出
- b# e' ?! e! }' f$ i
2 t4 W7 ~/ o1 u6 _0 E0 Y把a、b、c带入(2)式可到旋转矩阵R,把任意一点坐标带入(1)式可得Δ。1 X# ?/ @' L* g/ Q  w2 t' [
5 F+ F7 }! n! J7 y; a; }  {
& G2 d% Z% T# I; k4 |! p& u

4 |4 j1 [6 C% m4 @& L" K  s. r8 ~作者:梁间, k, P( x7 a2 w" \2 k6 j
链接:https://www.jianshu.com/p/58cf5655f9a9
; n& |1 v4 F8 v9 |来源:简书
7 x) b. _$ P! O7 F2 K著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
8 Q" i; [1 s" c2 g" S0 V  P& o2 E
 楼主| 发表于 4 天前 | 显示全部楼层
方法二,这里提到了SVD算法

6 L! ^  w, \1 \# E6 ~4 K
通过实际的坐标点例子,来直观解释通过SVD求对应的坐标系关系。
已知四个点在坐标系A中的坐标为:
(0, 0, 0); (1,0,0); (1,1,0); (0,1,0)
可得矩阵A为
2 A4 [' [* d# P( [( P
4 U" h8 t* ]- U+ D; z
矩阵A
这四个点在坐标系B中的坐标为:
(2,2, 2); (3,2,2); (3,3,2); (2,3,2)
可得矩阵B为
0 I* r9 l' s3 J" [" ~
  O0 o" e9 T: i" k" t6 }1 C
矩阵B步骤一:求两个数据集的质心
根据上述公式,可得质心为
步骤二:将两个数据集的质心移动至同一个点,即只存在于一个旋转的转换关系。
对应坐标系中的点同时减去质心,计算后的矩阵A和B分别为

; }; p4 C7 H% g* Z& j' S2 U$ ?5 z# M& b1 P7 E, @
计算后的矩阵A
' r; [$ W/ A( }1 C( _/ |* M( s* B# V+ f, L& {, F1 @
计算后的矩阵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。
根据公式
平移矩阵
总结:如果在实际项目中,需要获取多台设备间的关系,如机器人相对于产品间的关系,或者机床相对于产品的关系,则该方法较为实用。注意:在实际的选择参考点时,不要在一条线上选点。如上述选的四个点,要求不能共线。要不然会减少有效数据。

5 i+ N# G- x2 n5 v7 [5 G( F
发表于 4 天前 | 显示全部楼层
本帖最后由 DaedraMech 于 2025-7-29 20:42 编辑 / x, g5 `$ c+ p! g1 a

- }7 y8 Q: s8 E4 w4 m没想到水水大侠对此问题如此孜孜以求,钻研精神和信息获取能力令小弟佩服,我比较功利,方法能解决问题就行。
, N/ q2 F7 R8 M# u# P  w; V" p! N$ j2 z9 T5 k+ W0 m
我把之前回复中的齐次变换矩阵改一下符号,楼主可以对比下和文章中的表达方式是不是一回事:
5 y$ z0 L: o! s, J  u
7 {. X" z  l2 v9 K$ K- J6 u2 }# [8 N9 A, U, r7 p, s6 C% Q+ w
平移、旋转、缩放这类坐标变换我们统称为线性变换。平移和缩放非常简单,没什么好说的,重点就是如何求得旋转矩阵R,上述两种方法就是通过纯代数的方法求解R。
# e. a4 ^3 J3 K7 M" m2 l0 [5 g你用什么方法和选择的工具有关,上述两种方法多用在图像处理和机器学习中,算法工程师手里的工具是集成编程环境,是代码,采用代数方法自然是比较直接的。但要知道矩阵可是联系代数和几何的桥梁啊,而我们则掌握了强大的几何工具SW,利用【旋转矩阵可以表示坐标系】这一几何意义我们可以直接得到R,完全不需要上面繁琐的运算。- P/ h% D7 K  K) F! y  q3 t( f

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Archiver|手机版|小黑屋|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-8-2 21:48 , Processed in 0.160275 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表