找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 水水5

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

  [复制链接]
 楼主| 发表于 2025-7-29 19:18:50 | 显示全部楼层
DaedraMech 发表于 2025-7-28 14:23
. x" P# s9 c* w  \  [一般对算法这边来说最直接的就是拿到变换矩阵了,不知道为什么还要舍近求远获得欧拉角,不过楼主需要的话 ...
: r- o- \7 Q. z3 A3 d# s+ i
感谢层主,膜拜
' E7 L' W! t. k7 K- s' n5 r7 F9 N" y$ P
我一定把它付诸实践
% N$ _. ~2 x* a$ c) }) x4 A+ J3 C0 V
我又搜索了一些其他的方法,再次请楼主给于指导。一些方法贴入后面的回复。
3 Z: Q' L( h, m1 p/ G: ~
 楼主| 发表于 2025-7-29 19:20:54 | 显示全部楼层
- E9 m, l* }0 X! ~
8 c  Q) J) x9 q6 |+ g9 P+ J! m5 @
方法一 本文转载自简书,作者是梁间。表示感谢
- x2 s" W5 b* l+ _4 {
数学模型已知两个坐标系在各方向上尺度缩放比例一致,两个坐标系的转换关系可以用7个参数来表示,3个旋转参数,3个平移参数,1个比例参数。已知三点在A、B两个坐标系中的坐标,那么这7个参数可以唯一确定。8 p" {8 H' P0 v. i. l8 ?
坐标转换的数学模型为:
& T; j( d% c  M+ D: b" W
3 c- N7 Z# s% y# P# A其中,λ是比例参数,R是旋转矩阵,Δ是平移向量,A、B分别是两个坐标系中的坐标。) a$ [. V* w: X5 z
比例参数λ最容易计算
0 |4 I+ M+ |$ X+ a% }; @2 I4 |, H  h& O7 Z0 ~
其中两点在A坐标系中的距离。
+ ~  r1 x8 k% J, |旋转矩阵R是一个3x3的正交矩阵,有3个自由度。可利用反对称矩阵S来构造旋转矩阵R:
. j; @& M. [3 p  ]6 c' o6 h" g# j- Z9 V/ F7 n/ h
那么
! v4 z: e. W) `) V; x
, g* _4 Q& i) n& A% y" u$ p其中I是单位矩阵,这里R只有a、b、c三个变量,解出a、b、c即可确定旋转矩阵R。5 c- V1 d3 j  h
两点带入(1)式并相减消去ΔX、ΔY、ΔZ
# F2 Q$ @: `1 J9 X$ F! H5 d2 i3 ]
这里点在A坐标系X轴向坐标值,为已知量。我们简化一下写法设定:
0 d4 ^+ x& V: L( G; l8 {! C# w0 X  n) b* O) v! C
这样(3)式可写为
/ d$ o& D0 {# S  E1 [" ~# r5 r& i8 w$ |/ \4 y; L+ R
把(2)式带入(4)
5 w$ o+ e9 {8 C9 x# u  E% L6 W# W# @- ?/ Y0 _! r
带入S: k! J5 i; m' h4 N) C4 K
7 L' ^, K# \$ u* f0 y9 \
展开$ ?) m% c2 _: s" o
1 K$ ]$ R6 |2 ]
整理可得
5 o& V7 I% A$ B8 k' P7 }# u5 s3 J  x' p! L
(5)式只有两个独立方程,解不出a、b、c三个未知量。带入点得到和(5)式类似的方程组,两个方程组联立,取3个独立方程" o4 l1 F3 q/ I( ^6 s$ c
+ J6 L; [( E7 I! U1 R: @4 ?
# R* x; t; q! O0 p
可结出
6 v6 t4 v$ i9 h* @/ A3 ^4 z2 C+ Z- ]6 y+ \/ T
把a、b、c带入(2)式可到旋转矩阵R,把任意一点坐标带入(1)式可得Δ。( k1 U' \. r5 v6 d, c% P3 l1 @$ r

2 q$ ~7 `  d3 f; H3 X* {* f: Y1 d) A; D9 Z$ @- U' d
5 V. p  J; }% ^1 r
作者:梁间2 U1 t# u- s0 d2 \
链接:https://www.jianshu.com/p/58cf5655f9a9
4 |6 h. _( E) c来源:简书& M- {2 i% `: d5 g) s0 ?
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。0 K: r' m- Q/ U6 ?+ |1 e* r

+ g& F9 d% y  S! ^/ I
 楼主| 发表于 2025-7-29 19:23:22 | 显示全部楼层
方法二,这里提到了SVD算法
+ D5 c3 ^3 s6 y: Z2 B: I. X7 i, g
通过实际的坐标点例子,来直观解释通过SVD求对应的坐标系关系。
已知四个点在坐标系A中的坐标为:
(0, 0, 0); (1,0,0); (1,1,0); (0,1,0)
可得矩阵A为

8 ]1 u8 z& X# C! j2 O
$ V6 a5 F+ A( K0 }矩阵A
这四个点在坐标系B中的坐标为:
(2,2, 2); (3,2,2); (3,3,2); (2,3,2)
可得矩阵B为
3 C6 |$ W+ H8 S1 Y) }  l& `
7 O6 M" o- m- L+ G7 Y2 P
矩阵B步骤一:求两个数据集的质心
根据上述公式,可得质心为
步骤二:将两个数据集的质心移动至同一个点,即只存在于一个旋转的转换关系。
对应坐标系中的点同时减去质心,计算后的矩阵A和B分别为
4 Q9 x: u: S$ E1 C

8 P! o9 m8 N- X; ~) l$ G# |* t计算后的矩阵A
# f" @9 K7 P3 u' _
3 ]1 t# c$ p7 G% n' `: u计算后的矩阵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。
根据公式
平移矩阵
总结:如果在实际项目中,需要获取多台设备间的关系,如机器人相对于产品间的关系,或者机床相对于产品的关系,则该方法较为实用。注意:在实际的选择参考点时,不要在一条线上选点。如上述选的四个点,要求不能共线。要不然会减少有效数据。

! }6 O" R* c# \" X; c
发表于 2025-7-29 20:37:54 | 显示全部楼层
本帖最后由 DaedraMech 于 2025-7-29 20:42 编辑
3 \6 E! R  T6 g; S: }" B- ~: H8 e$ o
5 G" v5 f6 n8 n: f' k& B没想到水水大侠对此问题如此孜孜以求,钻研精神和信息获取能力令小弟佩服,我比较功利,方法能解决问题就行。
" \8 I3 }% i' r9 L" I* I
. X8 Z, @1 @/ o我把之前回复中的齐次变换矩阵改一下符号,楼主可以对比下和文章中的表达方式是不是一回事:0 @; l: S* {' S! ?

  Z2 K! x- ?4 `  I/ b3 l
4 U; P4 k- }8 J0 E平移、旋转、缩放这类坐标变换我们统称为线性变换。平移和缩放非常简单,没什么好说的,重点就是如何求得旋转矩阵R,上述两种方法就是通过纯代数的方法求解R。! l) O4 S) R! m1 i0 H( Z# I
你用什么方法和选择的工具有关,上述两种方法多用在图像处理和机器学习中,算法工程师手里的工具是集成编程环境,是代码,采用代数方法自然是比较直接的。但要知道矩阵可是联系代数和几何的桥梁啊,而我们则掌握了强大的几何工具SW,利用【旋转矩阵可以表示坐标系】这一几何意义我们可以直接得到R,完全不需要上面繁琐的运算。/ w$ C9 S# T2 W+ C0 h# @

本帖子中包含更多资源

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

×
 楼主| 发表于 2025-8-3 20:15:09 | 显示全部楼层
本帖最后由 水水5 于 2025-8-3 20:21 编辑
- y1 b# ?, o/ j( {* K
DaedraMech 发表于 2025-7-29 20:37
  ?8 L: E" A0 n没想到水水大侠对此问题如此孜孜以求,钻研精神和信息获取能力令小弟佩服,我比较功利,方法能解决问题就行 ...

4 N4 l$ I$ F4 J. \8 `) I' r  L感谢大侠的持续教诲。大侠如果有,从变换矩阵导出欧拉角,的计算公式,恭请再给明示下。1 ]: M' R7 U7 ]& m) {
$ z/ i0 H+ p! @
经过又一个周末的摸索和学习,我已经学到了旋转矩阵的测量方法,并且通过计算一个点的坐标在两个坐标系中的坐标值进行了验证。  }2 V# l# t! u) ]" Y

- X( D+ o* y( s4 U5 X7 d+ L这是第一步,下一步是求欧拉角。6 D5 [/ J/ U% R2 g5 \

/ T% @$ ]* I$ c# |我最终的目的是:
5 ?/ I7 ?2 r% c- h+ I6 P# Z6 A3 O% T“在机器人示教工具坐标系的时候,不需要再繁琐的用6点法搞一个小时示教,而是我作为机械工程师,可以直接从三维中计算出,通过计算,直接可以提供XYZABC的数值”, L! m9 p4 T0 ?2 |9 ~2 r& i) e9 Y
7 P; r/ x& V5 `" N0 T1 X
但是这里面有个难题,我不知道机器人工具坐标系参数他是采用的哪种形式的欧拉角$ `$ k. v0 @9 Q$ a2 L
下图是我的作业
/ N% G$ m8 r1 h! i' s) K6 H, l/ l1 y; A  r7 M4 L

本帖子中包含更多资源

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

×
发表于 2025-8-6 20:03:41 | 显示全部楼层
本帖最后由 DaedraMech 于 2025-8-6 20:06 编辑
% L2 s, E2 e( r. K+ U# R; C& I; O: ~. t4 e1 ^+ H, p
欧拉角其实也不难求出,就是麻烦点。
5 S9 d; K9 p9 \1 G; C( r1 G* M9 ]
假设你手上的示教器里面欧拉角就是按照常规的Roll-Pitch-Yaw顺序(ZYX顺序)定义的,那我们不妨把单独绕Z、Y、X轴的旋转矩阵从左到右依次乘起来,看看最终的旋转矩阵里各个元素的表达式都是啥。/ m' J# u8 j6 d
7 z0 b" _. l; F4 ~
从上面的结果可以看出,通过对矩阵中特定元素之间的运算,我们是能够分离出绕特定坐标轴的转角的,即:' k+ f) z6 u* t' P! O$ f) M; q
" C3 z( R0 I" x  e/ B2 d, m
如果不知道示教器中欧拉角是如何定义的(并且上述顺序错误的话),就需要再交换单轴旋转矩阵的乘法顺序,获得新的表达式再次实验。(也可以直接在示教器上输入角度看机械臂到底先绕哪个轴旋转)$ M8 e# m% [; \% G: |+ z1 w

& X) b% U9 F2 a2 L另外可以想象到,空间中一定存在某个轴,能够让坐标系一步到位,直接一次旋转到最终位置,而这就要用到四元数。所以如果示教器还支持四元数输入的话,也可以将旋转矩阵转化为四元数:5 _6 ]7 X9 |# F* e8 @
4 Y! I9 a& j, g3 l5 V
四元数中xyz表示了转轴的方向,w表示了绕这个轴的转角,其值为转角的半角余弦值。/ b  \) ?, e* [8 r1 J$ _

, o# W/ v  N7 _7 \1 f/ v% S/ A  A0 t- h4 Y* z

本帖子中包含更多资源

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

×
 楼主| 发表于 2025-8-9 08:15:40 | 显示全部楼层
本帖最后由 水水5 于 2025-8-9 08:23 编辑 * r; }7 b* a) I+ s1 d* ]  h
DaedraMech 发表于 2025-8-6 20:03
+ @0 m8 S$ {- H3 H, a' p8 f欧拉角其实也不难求出,就是麻烦点。
; ]/ \9 }3 T: f; Z' t% ~6 W& L  i5 C/ S2 n' @
假设你手上的示教器里面欧拉角就是按照常规的Roll-Pitch-Yaw顺序(ZY ...

2 C9 Z! b4 w/ O1 n' [感谢大侠的热情回复。汇报下进展:# O- J. T, P# G3 E4 Z0 Q1 d

0 P8 R; ~( J9 V: f! @4 F6 R首先证明了旋转矩阵是对的,第一步已经完成,$ h* Y  Q3 V& f) a( V
第二步,我找了那些计算欧拉角和四元数的公式,公式应该是没错的。虽然欧拉角的解不唯一,但是四元数是唯一解。经过比对,还是和示教器中的数值有一定的差距。
$ v* S' ?: }' ~: i/ A
, `4 z* h5 N0 j/ f! J. r- w7 U经过分析,机械安装有一定的误差,手爪又这么长。所以至少证明了理论计算是正确的。但是实际应用,还是要修正。免不了还是要示教一下。( k2 W1 v5 [9 D. {
第三步,通过咨询得到 欧拉角的旋转方式。还未进一步计算,等下次有机会了再实验。0 m% Z$ t6 Y' U. B- T

) u7 z& ^  ]4 p* j1 [; C$ E这是FANUC对坐标系欧拉角的描述,市面上绝大多数机器人,都是遵循固定坐标系XYZ这样的一个旋转顺序。
. y+ O) o$ S1 G8 e- I  e! z' Q2 j) h, b% |$ l# T- y
上士闻道,勤而行之;中士闻道;若存若亡;下士闻道,大笑之。不笑不足以为道。0 D6 w% |0 e1 r$ ^4 i" [
感谢各位的技术支持,感谢论坛。) d+ @+ W" [, M

本帖子中包含更多资源

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

×
 楼主| 发表于 2025-8-9 08:38:57 | 显示全部楼层
DaedraMech 发表于 2025-8-6 20:03
6 r" D7 g$ t& z- ~  l欧拉角其实也不难求出,就是麻烦点。
' `; z6 N' c: X& ?) b' E* e* x8 `8 U/ Y- V. u
假设你手上的示教器里面欧拉角就是按照常规的Roll-Pitch-Yaw顺序(ZY ...

8 X- [* d* U+ S3 ~, B大侠有没有 mathcad 教程 源文件?
) v% O+ c% Q8 [9 ]" W7 G
) l/ U7 c( J2 o4 v您给出的公式的求解,还是有点一知半解。数学没学好,尴尬" w# C5 W& \: c! H7 ?

点评

实在抱歉,mathcad源文件是下班在公司写的,有保密限流发不出来,楼主复习下矩阵乘法应该就能理解推导过程了  发表于 2025-8-10 10:55
发表于 2025-8-12 22:39:46 | 显示全部楼层
欧拉角旋转很简单的,不管是什么顺规的旋转,都可以用基本旋转矩阵推导出来,但是欧拉角的万向锁问题很烦人,虽然有算法可以解决.
发表于 2025-9-9 04:39:23 | 显示全部楼层
提供一种思路:在一个统一的坐标系下,执行器、工件目标平面都提取一个平面法向向量,把他们弄成平行的(调整机器人的角度),最后就是平移。不难就是有点烧脑
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-9-17 18:41 , Processed in 0.071170 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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