找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 水水5

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

[复制链接]
 楼主| 发表于 5 天前 | 显示全部楼层
DaedraMech 发表于 2025-7-28 14:23; d& o3 ]2 m  ?$ {- R
一般对算法这边来说最直接的就是拿到变换矩阵了,不知道为什么还要舍近求远获得欧拉角,不过楼主需要的话 ...
6 r; F' [3 O0 W2 r$ h* l$ o9 L  ^$ ?
感谢层主,膜拜
! U9 H9 }1 f& P5 r5 S6 j) r$ j
我一定把它付诸实践9 S2 o' c- @% W: `7 e

" x+ @0 d% `/ T& Q. \我又搜索了一些其他的方法,再次请楼主给于指导。一些方法贴入后面的回复。2 B3 _, D9 I7 D
 楼主| 发表于 5 天前 | 显示全部楼层
" I4 O; ?8 `0 L0 u

. m! ]9 V# q* k方法一 本文转载自简书,作者是梁间。表示感谢* h5 m. H( E1 g" f6 m
数学模型已知两个坐标系在各方向上尺度缩放比例一致,两个坐标系的转换关系可以用7个参数来表示,3个旋转参数,3个平移参数,1个比例参数。已知三点在A、B两个坐标系中的坐标,那么这7个参数可以唯一确定。" e( p% n/ K3 P" J& ]
坐标转换的数学模型为:* C9 a  p+ t$ E0 I' T# g! }0 H

3 g% m% s% Q; d& F- B. f/ X9 Y其中,λ是比例参数,R是旋转矩阵,Δ是平移向量,A、B分别是两个坐标系中的坐标。
' o) B9 D7 R+ }5 `3 ~9 e比例参数λ最容易计算
: |% ~: U8 V4 c1 I' F) Q  C: G2 F$ z  o8 Q
其中两点在A坐标系中的距离。
- c) \% S/ A: B! U  z旋转矩阵R是一个3x3的正交矩阵,有3个自由度。可利用反对称矩阵S来构造旋转矩阵R:7 D) L. H: g) b# {) h9 ~  i0 ~
, A; R/ Y* W. P
那么; L* N' {. M* z5 S' c9 B- {: _

" x/ v- f9 i3 g1 M其中I是单位矩阵,这里R只有a、b、c三个变量,解出a、b、c即可确定旋转矩阵R。
: O% s9 W- {1 l; u两点带入(1)式并相减消去ΔX、ΔY、ΔZ
% Y  J* ~' x- ]- x, Z
8 f  p* j  y0 q1 O+ T这里点在A坐标系X轴向坐标值,为已知量。我们简化一下写法设定:/ B) D- ?4 N) f: E

+ x8 S1 m( [8 r- W% ]0 E这样(3)式可写为* }( y7 q5 ]- P! J
% A! q, v( m( m5 v! D1 T
把(2)式带入(4)7 t* @% W. |3 e- {1 y! r
; P/ \* R' `- t4 ~+ ~- l
带入S
0 ~7 J5 J: Z* F) ]9 d0 U5 t  u: T- ~. j, o- T& x
展开
" `: V# |, w& X
' V( u- ?' [( ^, z整理可得
4 B, B* m; b5 ?& m3 ]' t0 I  r! m+ d  K( t# m# m8 Z8 X2 ^
(5)式只有两个独立方程,解不出a、b、c三个未知量。带入点得到和(5)式类似的方程组,两个方程组联立,取3个独立方程- u* A& [- l7 f( [
1 ?$ @7 A. X' J

- p% m5 `( V/ P. J4 Q# W可结出& x: E1 ~6 m  @; e/ K+ B/ e& @
7 S; j# Z) _: T
把a、b、c带入(2)式可到旋转矩阵R,把任意一点坐标带入(1)式可得Δ。2 O+ w, w6 ]' g6 E* u7 h

% @9 Y1 ?$ z5 v. D; @6 q: `" l4 x4 k9 n5 E2 ~* u0 Q3 b

; ?8 [! ~9 Y8 m7 }0 U作者:梁间# l$ f" y6 s5 y9 E/ _
链接:https://www.jianshu.com/p/58cf5655f9a9
7 z3 d6 g% ?4 h# H来源:简书
1 A4 r( n  p  f$ G2 R# K8 \1 w著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。6 E9 Q: T* }* f4 R, m$ }& b

  \( d% N& I& B: W3 k$ V4 `
 楼主| 发表于 5 天前 | 显示全部楼层
方法二,这里提到了SVD算法
) y" W3 C  ?0 L0 }9 q5 N
通过实际的坐标点例子,来直观解释通过SVD求对应的坐标系关系。
已知四个点在坐标系A中的坐标为:
(0, 0, 0); (1,0,0); (1,1,0); (0,1,0)
可得矩阵A为

" S& v; `) v, ~% |6 [
7 u; k( T6 l! a; A- n矩阵A
这四个点在坐标系B中的坐标为:
(2,2, 2); (3,2,2); (3,3,2); (2,3,2)
可得矩阵B为
) d' m6 U- A! L9 M" [

! E- \( Z  w9 C$ X矩阵B步骤一:求两个数据集的质心
根据上述公式,可得质心为
步骤二:将两个数据集的质心移动至同一个点,即只存在于一个旋转的转换关系。
对应坐标系中的点同时减去质心,计算后的矩阵A和B分别为
8 e* y2 ?0 t8 G1 Q7 S
! j9 u& {4 R. b9 T1 h; p
计算后的矩阵A2 ?$ w4 |  P7 a# C
6 N3 u5 f/ u8 d
计算后的矩阵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。
根据公式
平移矩阵
总结:如果在实际项目中,需要获取多台设备间的关系,如机器人相对于产品间的关系,或者机床相对于产品的关系,则该方法较为实用。注意:在实际的选择参考点时,不要在一条线上选点。如上述选的四个点,要求不能共线。要不然会减少有效数据。
  u4 I" S1 x0 o" T7 _8 y
发表于 5 天前 | 显示全部楼层
本帖最后由 DaedraMech 于 2025-7-29 20:42 编辑
$ ?. f3 L+ f. x3 n9 d8 p3 P: [5 \7 a! j) x9 I
没想到水水大侠对此问题如此孜孜以求,钻研精神和信息获取能力令小弟佩服,我比较功利,方法能解决问题就行。- \5 m. r* _) A7 H3 X. E* w- \

* @, y0 N4 ~6 j$ z. o我把之前回复中的齐次变换矩阵改一下符号,楼主可以对比下和文章中的表达方式是不是一回事:
! F, ]6 c" f: q8 N1 E  }! x# \2 {4 [7 w& c9 b( a( k2 y
. ]8 I( e2 p4 @% h* [$ R4 l  Z
平移、旋转、缩放这类坐标变换我们统称为线性变换。平移和缩放非常简单,没什么好说的,重点就是如何求得旋转矩阵R,上述两种方法就是通过纯代数的方法求解R。/ ]1 n8 m/ e, u8 [3 [8 t
你用什么方法和选择的工具有关,上述两种方法多用在图像处理和机器学习中,算法工程师手里的工具是集成编程环境,是代码,采用代数方法自然是比较直接的。但要知道矩阵可是联系代数和几何的桥梁啊,而我们则掌握了强大的几何工具SW,利用【旋转矩阵可以表示坐标系】这一几何意义我们可以直接得到R,完全不需要上面繁琐的运算。
$ w- v- O( T/ D7 H# o. {$ ~( i/ {7 [

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-8-3 11:30 , Processed in 0.064146 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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