想要讲欧拉角,我们需要先讲物体的姿态与自由度。

什么是物体的位姿


为了描述物体(此处指的是我们的末端执行器)在空间中的位置,我们可以用一个3*1的位置矩阵去描述。
P ′ ′ = [ P X ′ ′ , P Y ′ ′ , P Z ′ ′ ] T P''=[P_X'',P_Y'',P_Z'']^T P′′=[PX′′​,PY′′​,PZ′′​]T
其中P’‘就是末端执行器的自身坐标系(x’‘y’‘z’')原点在固定坐标系(xyz)下的坐标。

为了描述物体在空间中的姿态,我们可以使用3*3的姿态矩阵去描述。
R ′ ′ = [ n x ′ ′ o x ′ ′ a x ′ ′ n y ′ ′ o y ′ ′ a y ′ ′ n z ′ ′ o z ′ ′ a z ′ ′ ] R''= \left[ \begin{matrix} n_x'' &o_x''&a_x'' \\ n_y'' &o_y''&a_y'' \\ n_z''&o_z''&a_z'' \\ \end{matrix} \right] R′′= ​nx′′​ny′′​nz′′​​ox′′​oy′′​oz′′​​ax′′​ay′′​az′′​​ ​
其中三个列向量分别代表了末端执行器自身坐标系的x’‘,y’‘,z’'轴上的单位向量在固定坐标系下的坐标
或者说该矩阵的每个值是自身坐标系坐标轴上的单位向量在固定坐标系下x,y,z的投影。

当然我们也可以使用四元数,一个4*1的矩阵去描述物体的姿态。也可以使用欧拉角来描述物体的姿态。如果你不懂四元数和欧拉角没关系,接下来我会介绍他们。

什么是自由度

自由度在很多领域中都有应用。这里只介绍一下与本文相关的一个概念:自由度是根据机械原理,机构具有确定运动时所必须给定的独立运动参数的数目。
一般来讲在机器人学科中关节的数目就是自由度。
我们都知道一个刚体在空间中的自由度是6,注意此处是刚体(因为会变形的物体可能有更多的自由度)。其中刚体能够沿3个轴做直线运动,有3个自由度;
能够绕3个轴旋转,有3个自由度。共6个自由度。
看起来很显然对吧。
平动的三个自由度是很容易理解的,但是转动的三个自由度就不是那么显然了。
我们从数学概念的自由度入手来理解这件事:
假设我们有三个变量: x , y , z x,y,z x,y,z
但是有一个限制条件: x + y + z = 18 x+y+z=18 x+y+z=18
此时我们的自由度为: 3 ( 变量 ) − 1 (限制) = 2 (自由取值的变量) 3(变量)-1(限制)=2(自由取值的变量) 3(变量)−1(限制)=2(自由取值的变量)

从姿态矩阵推导旋转自由度为3

我们前文提到:
姿态矩阵是我们描述物体姿态的一个矩阵,其中有9个变量。
R ′ ′ = [ n x ′ ′ o x ′ ′ a x ′ ′ n y ′ ′ o y ′ ′ a y ′ ′ n z ′ ′ o z ′ ′ a z ′ ′ ] R''= \left[ \begin{matrix} n_x'' &o_x''&a_x'' \\ n_y'' &o_y''&a_y'' \\ n_z''&o_z''&a_z'' \\ \end{matrix} \right] R′′= ​nx′′​ny′′​nz′′​​ox′′​oy′′​oz′′​​ax′′​ay′′​az′′​​ ​
那我们的限制条件有哪些呢:
每个行向量为单位矩阵(3个限制条件):
n x ′ ′ 2 + n y ′ ′ 2 + n z ′ ′ 2 = 1 n_x''^2+n_y''^2+n_z''^2=1 nx′′2​+ny′′2​+nz′′2​=1
o x ′ ′ 2 + o y ′ ′ 2 + o z ′ ′ 2 = 1 o_x''^2+o_y''^2+o_z''^2=1 ox′′2​+oy′′2​+oz′′2​=1
a x ′ ′ 2 + a y ′ ′ 2 + a z ′ ′ 2 = 1 a_x''^2+a_y''^2+a_z''^2=1 ax′′2​+ay′′2​+az′′2​=1
每个行向量之间两两垂直(3个限制条件):
( n x ′ ′ , n y ′ ′ , n z ′ ′ ) ⋅ ( o x ′ ′ , o y ′ ′ , o z ′ ′ ) = 0 (n_x'',n_y'',n_z'') \cdot(o_x'',o_y'',o_z'')=0 (nx′′​,ny′′​,nz′′​)⋅(ox′′​,oy′′​,oz′′​)=0
( n x ′ ′ , n y ′ ′ , n z ′ ′ ) ⋅ ( a x ′ ′ , a y ′ ′ , a z ′ ′ ) = 0 (n_x'',n_y'',n_z'') \cdot(a_x'',a_y'',a_z'') =0 (nx′′​,ny′′​,nz′′​)⋅(ax′′​,ay′′​,az′′​)=0
( o x ′ ′ , o y ′ ′ , o z ′ ′ ) ⋅ ( a x ′ ′ , a y ′ ′ , a z ′ ′ ) = 0 (o_x'',o_y'',o_z'') \cdot(a_x'',a_y'',a_z'')=0 (ox′′​,oy′′​,oz′′​)⋅(ax′′​,ay′′​,az′′​)=0
因此此时的自由度为: 9 ( 变量 ) − 6 (限制) = 3 (自由取值的变量) 9(变量)-6(限制)=3(自由取值的变量) 9(变量)−6(限制)=3(自由取值的变量)

从四元数推导旋转自由度为3

需要推导四元数的可以看我的另一篇文章:

https://blog.csdn.net/weixin_49813139/article/details/126733797

四元数我们一般写成这样
p = [ c o s ( θ / 2 ) , s i n ( θ / 2 ) u ] p=[cos(\theta/2),sin(\theta/2)\mathbf u] p=[cos(θ/2),sin(θ/2)u]
其中 u \mathbf u u为旋转轴是一个单位向量, θ \theta θ为绕轴旋转的角度。
将四元数写成完整形式为 p = [ c o s ( θ / 2 ) , s i n ( θ / 2 ) u x , s i n ( θ / 2 ) u y , s i n ( θ / 2 ) u z ] p=[cos(\theta/2),sin(\theta/2)\mathbf u_x,sin(\theta/2)\mathbf u_y,sin(\theta/2)\mathbf u_z] p=[cos(θ/2),sin(θ/2)ux​,sin(θ/2)uy​,sin(θ/2)uz​]
该公式中很容易推导的是四元数各分量的平方和为1。
因此我们有变量4个,限制条件1个。
此时的自由度为: 4 ( 变量 ) − 1 (限制) = 3 (自由取值的变量) 4(变量)-1(限制)=3(自由取值的变量) 4(变量)−1(限制)=3(自由取值的变量)

从上文可以看到,我们要描述一个刚体的姿态,我们最小的独立变量个数就是3,因此我们说刚体的转动自由度为3。

什么是欧拉角


上图是一个很常见的介绍欧拉角的图,摘自维基百科,我们根据右手系的定义(假设竖直向上的为Z轴)可以知道,该图是先绕Z轴(运动坐标系)转,然后绕X轴(运动坐标系)转,最后又绕Z轴(运动坐标系)转形成的最终的坐标系(运动坐标系)。

右手系

右手系可以用手的多种形状去展示,这里用百度百科的图如下:

我的老师教我的是右手大拇指是Z轴,然后右手从张开到握起来分别经过了X,Y轴。

按照旋转的轴的顺序,欧拉角一共有12种:
六种:Proper Euler angles (z−x−z, x−y−x, y−z−y, z−y−z, x−z−x, y−x−y)
六种:Tait-Bryan angles (x−y−z, y−z−x, z−x−y, x−z−y, z−y−x, y−x−z)
也就是说我们可以先绕Z轴转,再绕X轴转,再绕Z轴转,也可以先绕X轴转,再绕Y轴转,再绕Z轴转.
下图是按照运动坐标系X-Y-Z分别旋转60°、30°、10°的动图。

按照固定的轴的顺序,欧拉角也有12种。
比如下图是按照固定坐标系X-Y-Z分别旋转60°、30°、10°的动图。

因此欧拉角严格来说有12+12=24种。

欧拉角的多种形式造成了我们在不同学科中使用欧拉角时一定要知道对方学科的欧拉角是用的哪种顺序进行旋转的。
比如:经典力学中使用zxz,量子力学使用的是zyz,航空航天使用zyx/zxy

https://www.zhihu.com/tardis/landing/m/360/art/98320567

本文不讲解欧拉角的证明和矩阵相关内容,这部分很多文章都有。

欧拉角与偏航角、俯仰角、横滚角的关系

偏航角、俯仰角、横滚角是欧拉角24种中的一种。使用欧拉角表示姿态,令ψ,θ和Φ代表ZYX欧拉角,分别称为偏航角、俯仰角和横滚角。也就是说我们先绕Z轴转ψ称为偏航角,再绕Y轴转θ称为俯仰角,再绕X轴转Φ称为横滚角。
这里说的X,Y,Z为运动坐标系的坐标轴。
图中X轴朝前,Z轴朝上,Y轴根据右手系确定朝右。

下图是一个动图,可以看到从上到下,进度条分别表示的是绕ZYX轴旋转的角度。我们从上到下进行调整可以发现,我们先后调整的是飞机的偏航角、俯仰角、横滚角。(注意顺序 ,调整的顺序是Z、Y、X。也就是说,你调整好Z、Y、X的角度后再去返回去调整Z,他的含义依旧是先Z后Y后X,与你改变数值的顺序无关(此处也是造成欧拉角死锁的原因))

机器人中欧拉角,偏航角、俯仰角、横滚角的自锁现象与四元数的来源于推导相关推荐

  1. 横滚角,俯仰角,航向角

    一般定义载体的右.前.上三个方向构成右手系 绕向前的轴旋转就是横滚角: 绕向右的轴旋转就是俯仰角: 绕向上的轴旋转就是航向角.

  2. 偏航角、俯仰角、横滚角的理解

    最近研究IMU陀螺仪,经过一早上的调试,最后发现根本看不懂xyz三个角度的度数是怎么来的,看了一些教程,也觉得不够直观,去了b站找了个视频,发现讲解的还不错,顺便也加上自己的一些理解,但是写的可能并不 ...

  3. 俯仰角与横滚角的介绍

    一般定义载体的右.前.上三个方向构成右手系,绕向前的轴旋转就是横滚角,绕向右的轴旋转就是俯仰角,绕向上的轴旋转就是航向角. 俯仰角:机体坐标系X轴与水平面的夹角.当X轴的正半轴位于过坐标原点的水平面之 ...

  4. 天体观测位置的计算--方位角和俯仰角

    天体方位角(AZ)和俯仰角(ALT)的计算 假如得知观测地点的日期.时间(UT)以及该天体的赤经(RA)和赤纬(DEC),就可以计算得出该天体的方位角(AZ)和俯仰角(ALT). 作为一个具体的例子, ...

  5. 机器人中的坐标转换关系(个人记录学习)

    1.前言: 在机器人的应用中,可以使用不同的坐标系来定义机器人,传感器和其他物体的位置.通常,对象在三维空间中的位置可以通过位置和方向值指定.这些值有多个可能的表示形式应用于某些特定应用程序.平移和旋 ...

  6. 强化学习在机器人中的应用

    强化学习是机器学习中的一个子领域,其中智能体通过与环境的交互,观测交互结果以及获得相应的回报.这种学习的方式是模拟人或动物的学习过程 我们人类,与我们所处的环境有一个直接的感官接触,我们可以通过执行动 ...

  7. 工业机器人电路图讲解话术_燃气传感器技术在防爆喷涂机器人中的应用

    工业环境.日常生活环境中可燃性气体发生泄露,燃气报警器检测到燃气浓度达到报警器设置的报警值时,报警器就会发出声.光报警信号,以提醒采取人员疏散.强制排风.关停设备等安全措施.作为燃气报警器的关键性检测 ...

  8. 【每周NLP论文推荐】 聊天机器人中FAQ相关的论文推荐

    欢迎来到<每周NLP论文推荐>.在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的. 今天推荐FAQ相关的论文,FAQ是聊天机器 ...

  9. 使用java实现类似nc的功能_在FANUC机器人中使用后台运行逻辑实现PLC功能

    后台逻辑概念 PLC是工业自动化领域常用的一种逻辑控制产品,以其性能稳定.兼容性好.可扩展性强.体积小.性价比高而被广泛应用.在机器人产品中,为了降低系统集成的难度,很多机器人产品自身也会在控制系统中 ...

最新文章

  1. 90%的人会遇到性能问题,如何用1行代码快速定位?
  2. 友盟-统计不到线上应用数据的坑
  3. python处理excel表格大小-如何用python处理excel表格
  4. c语言铁道,C语言程序设计(方少卿) 铁道C第8章(修订版).pdf
  5. 网络爬虫之Java基础篇(Ⅱ)
  6. python给空列表赋值_Python Pandas:如果数据是NaN,则更改为0,否则在数据框中更改为1...
  7. android 功耗(1)---android 功耗分析方法和优化
  8. 关于python中的setup.py(转)
  9. Excel学习 -- 数据透视表功能
  10. 火灾自动报警系统下综合布线施工要素
  11. mysql查询耗时操作_mysql记录耗时的sql实例详解
  12. Jetson TX2刷机教程
  13. 上市十天高管大换血 甘李药业有隐疾?
  14. python短信验证码登录_玩转python之获取短信验证码
  15. 【建议收藏】数据结构和算法面试题
  16. PAT_(STL使用)map-1100 Mars Numbers (20分)-1054 The Dominant Color (20分)-1071-1022
  17. 同济版高等数学复习笔记(上册第五、六章)
  18. 元宇宙,真的是人类的“死路”吗?
  19. VC 2010 安装OpenCV2.4.3
  20. 企鲸客scrm跟小裂变的功能对比

热门文章

  1. 宝塔Linux面板安装命令脚本大全(Centos/Ubuntu/Debian/Fedora/Deepin)
  2. mavlink协议_MAVLink学习之路03_XML中定义MSG并生成C代码
  3. Sql语句操作数据库(修改表,修改数据库)
  4. Thymeleaf 变量输出与字符串操作
  5. 集成灶哪个品牌质量好(六款热销集成灶对比测评)
  6. android配置阿里云仓库
  7. c#中 .length和length()的差别
  8. pikachu-XSS(跨站脚本攻击)
  9. 几种python入门级OCR开源库中文识别效果对比
  10. 举例说明计算机在现实应用中的作用,,谈一谈‘‘九思’’述说的内容在今天有什么现实意义?...