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

四元数概念

  四元数由实部和虚部组成,设 qqq 为四元数,则可表述为 q=s+xi+yj+zkq=s+xi+yj+zkq=s+xi+yj+zk ,其中 sss 为实部, ijkijkijk 为虚单位,满足 i2=j2=k2=ijk=−1i^2=j^2=k^2=ijk=-1i2=j2=k2=ijk=−1 。四元数的模计算公式∣q∣=w2+x2+y2+z2\left| q \right|=\sqrt{w^2+x^2+y^2+z^2} ∣q∣=w2+x2+y2+z2​当模等于1时,则为单位四元数,四元数也可写成向量形式 q=[s,u⃗]q=\left[ s,\vec{u} \right]q=[s,u] ,其中 sss 为实部,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]它表示任意向量 rrr 绕轴 vvv 旋转角度 θ\thetaθ 得到的四元数。

四元数的运算

共轭:设 q=[s,u⃗]q=\left[ s,\vec{u} \right]q=[s,u] 为四元数,则其共轭四元数为 q∗=[s,−u⃗]q^*=\left[ s,-\vec{u} \right]q∗=[s,−u]。
:单位四元数的逆 q−1=q∗q^{-1}=q^*q−1=q∗ 。
乘法:对应四元数 q=[s1,u1⃗]q=\left[ s_1,\vec{u_1} \right]q=[s1​,u1​​] 和 q=[s2,u2⃗]q=\left[ s_2,\vec{u_2} \right]q=[s2​,u2​​],则有 q1q2=[s1s2−u⃗1∗u⃗2,u⃗1×u⃗2+s1u⃗2+s2u⃗1]q_1q_2=\left[ s_1s_2-\vec{u}_1*\vec{u}_2,\vec{u}_1\times \vec{u}_2+s_1\vec{u}_2+s_2\vec{u}_1 \right]q1​q2​=[s1​s2​−u1​∗u2​,u1​×u2​+s1​u2​+s2​u1​] ,其中*和×分别表示三维向量的内积和外积。并且四元数的乘法是不可交换的。
数乘:对于 qqq 为四元数,rrr 为实数,则数乘定义为 rq=[r,0]q=[rs,rv⃗]rq=\left[ r,0 \right] q=\left[ rs,r\vec{v} \right]rq=[r,0]q=[rs,rv]。

四元数转换为旋转矩阵

  一个绕轴 vvv 旋转角度 θθθ 的操作可以用单位四元数 q=[q1,q2,q3,q4]=[s,x,y,z]=[cos⁡(θ/2),sin⁡(θ/2)∗ν]q=\left[ q_1, q_2, q_3, q_4 \right] =\left[ s,x,y,z \right] =\left[ \cos \left( \theta /2 \right) ,\sin \left( \theta /2 \right) *\nu \right]q=[q1​,q2​,q3​,q4​]=[s,x,y,z]=[cos(θ/2),sin(θ/2)∗ν] 进行表示,其中 θ∈[0,π]\theta \in \left[ 0,\pi \right]θ∈[0,π]。对应旋转矩阵为 R(q)=[2(q12+q22)−12(q2q3−q1q4)2(q2q4+q1q3)2(q2q3+q1q4)2(q12+q32)−12(q3q4−q1q2)2(q2q4−q1q3)2(q3q4+q1q2)2(q12+q42)−1]R\left( q \right) =\left[ \begin{matrix} 2\left( q_{1}^{2}+q_{2}^{2} \right) -1& 2\left( q_2q_3-q_1q_4 \right)& 2\left( q_2q_4+q_1q_3 \right)\\ 2\left( q_2q_3+q_1q_4 \right)& 2\left( q_{1}^{2}+q_{3}^{2} \right) -1& 2\left( q_3q_4-q_1q_2 \right)\\ 2\left( q_2q_4-q_1q_3 \right)& 2\left( q_3q_4+q_1q_2 \right)& 2\left( q_{1}^{2}+q_{4}^{2} \right) -1\\ \end{matrix} \right] R(q)=⎣⎡​2(q12​+q22​)−12(q2​q3​+q1​q4​)2(q2​q4​−q1​q3​)​2(q2​q3​−q1​q4​)2(q12​+q32​)−12(q3​q4​+q1​q2​)​2(q2​q4​+q1​q3​)2(q3​q4​−q1​q2​)2(q12​+q42​)−1​⎦⎤​

旋转矩阵转换为四元数

有旋转矩阵 iRj=[snα]=[sxnxαxsynyαysznzαz]^iR_j=\left[ \begin{matrix} s& n& \alpha\\ \end{matrix} \right] =\left[ \begin{matrix} s_x& n_x& \alpha _x\\ s_y& n_y& \alpha _y\\ s_z& n_z& \alpha _z\\ \end{matrix} \right]iRj​=[s​n​α​]=⎣⎡​sx​sy​sz​​nx​ny​nz​​αx​αy​αz​​⎦⎤​ , 转换为单位四元数q=[q1,q2,q3,q4]q=\left[ q_1, q_2, q_3, q_4 \right]q=[q1​,q2​,q3​,q4​]

q1=12sx+ηy+αz+1q_1=\frac{1}{2}\sqrt{s_x+\eta _y+\alpha _z+1} q1​=21​sx​+ηy​+αz​+1​

q2=12sign(nz−αy)sx−ηy−αz+1q_2=\frac{1}{2}sign\left( n_z-\alpha_y \right) \sqrt{s_x-\eta _y-\alpha _z+1} q2​=21​sign(nz​−αy​)sx​−ηy​−αz​+1​

q3=12sign(αx−sz)−sx+ηy−αz+1q_3=\frac{1}{2}sign\left( \alpha_x-s_z \right) \sqrt{-s_x+\eta _y-\alpha _z+1} q3​=21​sign(αx​−sz​)−sx​+ηy​−αz​+1​

q4=12sign(sy−nx)−sx−ηy+αz+1q_4=\frac{1}{2}sign\left( s_y-n_x \right) \sqrt{-s_x-\eta _y+\alpha _z+1} q4​=21​sign(sy​−nx​)−sx​−ηy​+αz​+1​

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

  1. 欧拉角与旋转矩阵的转换关系

    欧拉角因为其奇异性,虽然在优化和插值的不会使用,但是当我们对别人描述一个旋转的过程是怎么样的时候,欧拉角还是很有用的,比如,做无人机姿态控制的时候使用的就是欧拉角,但是搞明白欧拉角与旋转矩阵的转换确实 ...

  2. 角速度与旋转矩阵的转换关系及思考

    在机器人的控制和轨迹规划等领域,算法结果常常能够得到机器人执行器的速度,如移动机器人的角速度和线速度.在有些仿真情况下,或是其它需要实时更新机器人的运动状态时,我们常常需要根据这些计算出的速度参数(控 ...

  3. unity3d四元数和旋转矩阵

    一 四元数 Quaternion中存放了x,y,z,w四个数据成员,可以用下标来进行访问,对应的下标分别是0,1,2,3. 主要介绍几个函数 <1> 根据两个向量计算出旋转量,计算出来的旋 ...

  4. 四元数转旋转矩阵公式推导

    容易知以下公式成立: ∂Rp∂p=R\frac{\partial R p}{\partial p}=R∂p∂Rp​=R 上面公式用四元数表示如下: ∂(q⊗p⊗q∗)∂p=R\frac{\partia ...

  5. 旋转矩阵、欧拉角、四元数理论及其转换关系

    旋转矩阵.欧拉角.四元数理论及其转换关系 author@jason_ql(lql0716) http://blog.csdn.net/lql0716 1.概述 旋转矩阵.欧拉角.四元数主要用于表示坐标 ...

  6. 转换矩阵、平移矩阵、旋转矩阵关系以及python实现旋转矩阵、四元数、欧拉角之间转换

    文章目录 1. 转换矩阵.平移矩阵.旋转矩阵之间的关系 2. 缩放变换.平移变换和旋转变换 2. python实现旋转矩阵.四元数.欧拉角互相转化 由于在平时总是或多或少的遇到平移旋转的问题,每次都是 ...

  7. 罗德里格斯公式推导(轴角与旋转矩阵的关系)以及四元数与旋转向量、旋转矩阵、欧拉角之间的转换关系

    罗德里格斯公式推导(轴角与旋转矩阵的关系) 意义:罗德里格斯公式表示旋转向量到旋转矩阵之间爱你的转换关系 旋转向量:一个向量,方向与旋转轴一致,长度等于旋转角度 空间中任意旋转都可以用一个旋转轴和一个 ...

  8. matlab和eigen在旋转向量,欧拉角,四元数,旋转矩阵转换的对比(一 旋转矩阵转其他)

    1. 参考: eigen安装:clion使用Eigen_gxt_kt的博客-CSDN博客_clion eigen matlab 角度转四元数_四元数的两种写法与转换_女王丁丁的博客-CSDN博客 机械 ...

  9. 【游戏课】技术片段之——四元数与旋转矩阵的关系

    什么是四元数 四元数将三维空间的旋转拓展到思维空间,在旋转和方向的变化方面,优于欧拉角和变换矩阵.因为四元数把三维空间中的绕三个轴向的旋转变换为四维空间中绕一个轴向的旋转,从而使其比欧拉角的直接插值能 ...

最新文章

  1. react性能优化方案_React灵敏且性能卓越的Spray + Akka解决方案,以“在Java和Node.js中发挥并发性和性能”...
  2. 关于科技创新,2021年政府工作报告这样说
  3. python面试题之介绍一下Python中webbrowser的用法
  4. java 类对象_Java中的对象和类是什么?
  5. 超级详细的软件著作权登记所需的软件说明书撰写模板及步骤
  6. DosBox 的 DOSBOX.CONF 的详细配置说
  7. ES3,ES5,ES6的区别
  8. parameter与argument,property与attribute,这些翻译意思相近的词的区别
  9. 有向图中判正环:POJ1860 货币交换
  10. 高斯投影坐标转换正算参数
  11. ElasticSearch教程——proximity match 近似匹配
  12. 计算机安全模式无法启动修复,win7系统崩溃无法修复和进入安全模式的解决方法...
  13. html中文网app,app.vue什么作用?
  14. 解决:python爬取豆瓣电影遇到的KeyError: 'subject_collection_items'错误
  15. base 64 转码解码 表情包emoji转码
  16. Meta:不用插管!AI看看脑电图就知道你在想啥
  17. springboot 分布式 --- 慕课网
  18. Sentinel第二篇:降级
  19. 七个基本量纲_七个基本量
  20. DAYU200最新烧录OpenHarmony系统教程

热门文章

  1. Intent中的Flag
  2. 多点触控与多鼠标支持
  3. 好久不上来,发现这个世界变得真是快啊,都.NET 2.0 AJAX了~~
  4. component、constituent、element、ingredient的区别
  5. 计算机专业岗位细分及学习必备清单
  6. 医疗大数据的风险及应对方法
  7. 5G对于数据中心的影响有哪些
  8. 删除下拉框只找23火星软件_下拉框搜索就找23火星软件/下拉框软件速来火星下拉...
  9. android 发送按键 0,android monitor tool (8.0 模拟发送按键及触摸屏事件实现)
  10. php爬虫伪造请求头,Nodejs 伪造IP 爬取图片