【机器人】四元数与旋转矩阵的转换关系

本文探讨了如何利用四元数表示和插补电机与机械臂的姿态,对比了四元数与旋转矩阵的转换,并提供了详细的计算公式。重点介绍了四元数的构造、运算规则,包括共轭、逆运算和乘法规则,以及如何将旋转操作转化为矩阵和从矩阵回溯到四元数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导语:最近在搭建电机与机械臂的联合仿真,闲暇之余顺便看了一下姿态轨迹规划的文章,对姿态的插补有点感兴趣,发现用四元数表示姿态然后来进行姿态的插补非常方便,且不会出现奇异。这里对四元数与常规的旋转矩阵的转换做一下总结。

四元数概念

  四元数由实部和虚部组成,设 q q q 为四元数,则可表述为 q = w + x i + y j + z k q=w+xi+yj+zk q=w+xi+yj+zk ,其中 w w w 为实部, i j k ijk ijk 为虚单位,满足 i 2 = j 2 = k 2 = i j k = − 1 i^2=j^2=k^2=ijk=-1 i2=j2=k2=ijk=1 。四元数的模计算公式 ∣ q ∣ = w 2 + x 2 + y 2 + z 2 \left| q \right|=\sqrt{w^2+x^2+y^2+z^2} q=w2+x2+y2+z2 模等于1时,则为单位四元数,四元数也可写成向量形式 q = [ w , u ⃗ ] q=\left[ w,\vec{u} \right] q=[w,u ] ,其中 w w w 为实部, u ⃗ = [ x , y , z ] \vec{u}=\left[ x,y,z \right] u =[x,y,z] 为三个实数构成的虚部向量。单位四元数又可表示为轴对角的形式
q = [ cos ⁡ ( θ / 2 ) , sin ⁡ ( θ / 2 ) ∗ v ] q=\left[ \cos \left( \theta /2 \right) ,\sin \left( \theta /2 \right) *v \right] q=[cos(θ/2),sin(θ/2)v]它表示任意向量 r r r 绕轴 v v v 旋转角度 θ \theta θ 得到的四元数。

四元数的运算

共轭:设 q = [ w , u ⃗ ] q=\left[ w,\vec{u} \right] q=[w,u ] 为四元数,则其共轭四元数为 q ∗ = [ w , − u ⃗ ] q^*=\left[ w,-\vec{u} \right] q=[w,u ]
:单位四元数的逆 q − 1 = q ∗ q^{-1}=q^* q1=q
乘法:对应四元数 q = [ w 1 , u 1 ⃗ ] q=\left[ w_1,\vec{u_1} \right] q=[w1,u1 ] q = [ w 2 , u 2 ⃗ ] q=\left[ w_2,\vec{u_2} \right] q=[w2,u2 ],则有 q 1 q 2 = [ w 1 w 2 − u ⃗ 1 ∗ u ⃗ 2 , u ⃗ 1 × u ⃗ 2 + w 1 u ⃗ 2 + w 2 u ⃗ 1 ] q_1q_2=\left[ w_1w_2-\vec{u}_1*\vec{u}_2,\vec{u}_1\times \vec{u}_2+w_1\vec{u}_2+w_2\vec{u}_1 \right] q1q2=[w1w2u 1u 2,u 1×u 2+w1u 2+w2u 1] ,其中*和×分别表示三维向量的内积和外积。并且四元数的乘法是不可交换的。
数乘:对于 q q q 为四元数, r r r 为实数,则数乘定义为 r q = [ r , 0 ] q = [ r w , r u ⃗ ] rq=\left[ r,0 \right] q=\left[ rw,r\vec{u} \right] rq=[r,0]q=[rw,ru ]

四元数转换为旋转矩阵

  一个绕轴 v v v 旋转角度 θ θ θ 的操作可以用单位四元数 q = [ w , x , y , z ] = [ cos ⁡ ( θ / 2 ) , sin ⁡ ( θ / 2 ) ∗ ν ] q=\left[ w,x,y,z \right] =\left[ \cos \left( \theta /2 \right) ,\sin \left( \theta /2 \right) *\nu \right] q=[w,x,y,z]=[cos(θ/2),sin(θ/2)ν] 进行表示,其中 θ ∈ [ 0 , π ] \theta \in \left[ 0,\pi \right] θ[0,π]。对应旋转矩阵为 R ( q ) = [ 1 − 2 y 2 − 2 z 2 2 x y − 2 z w 2 x z + 2 y w 2 x y + 2 z w 1 − 2 x 2 − 2 z 2 2 y z − 2 x w 2 x z − 2 y w 2 y z + 2 x w 1 − 2 x 2 − 2 y 2 ] R\left( q \right) =\left[ \begin{matrix} 1-2y^2-2z^2& 2xy-2zw& 2xz+2yw\\ 2xy+2zw& 1-2x^2-2z^2& 2yz-2xw\\ 2xz-2yw& 2yz+2xw& 1-2x^2-2y^2\\ \end{matrix} \right] R(q)= 12y22z22xy+2zw2xz2yw2xy2zw12x22z22yz+2xw2xz+2yw2yz2xw12x22y2

旋转矩阵转换为四元数

有旋转矩阵 i R j = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] ^iR_j=\left[ \begin{matrix} r_{11}& r_{12}& r_{13}\\ r_{21}& r_{22}& r_{23}\\ r_{31}& r_{32}& r_{33}\\ \end{matrix} \right] iRj= r11r21r31r12r22r32r13r23r33 , 转换为单位四元数 q = [ w , x , y , z ] q=\left[ w, x, y, z \right] q=[w,x,y,z]

w = r 11 + r 22 + r 33 + 1 2 w=\frac{\sqrt{r_{11}+r_{22}+r_{33}+1}}{2} w=2r11+r22+r33+1

x = r 32 − r 23 4 w x=\frac{r_{32}-r_{23}}{4w} x=4wr32r23

y = r 13 − r 31 4 w y=\frac{r_{13}-r_{31}}{4w} y=4wr13r31

z = r 21 − r 12 4 w z=\frac{r_{21}-r_{12}}{4w} z=4wr21r12

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值