从头手搓一台ros2复合机器人(带机械臂)

本文介绍了姿态的不同表示方法,如旋转矩阵、欧拉角(固定轴与非固定轴)、轴角和四元数,以及它们在ROS2中的应用,重点讲解了坐标转换和不同表示之间的相互转换过程。
摘要由CSDN通过智能技术生成

一.前言

        这一节主要讲姿态的不同表示,说实话,这一节需要很强的数学功底,我跟着小鱼老师的文档学习理论知识到后面时头也发疼,这里我就把我理解的知识记录笔记在下面,想要更加深入了解的伙伴请自行学习。话不多说,马上开始!

二.ros2学习

        前6小节内容可以订阅往期博客。

7.姿态的多种表示

我们一共接触了三种姿态的表示方式:

  1. 旋转矩阵-在位姿描述一节中
  2. 坐标轴旋转-绕xyz轴旋转不同的角度(欧拉角)
  3. 四元数-ROS2的TF2中的姿态描述

常用的坐标描述分为三类,共五种:

  • 旋转矩阵-旋转矩阵
  • 坐标轴旋转-固定轴欧拉角,非固定轴欧拉角
  • 任意轴旋转-等效轴角,四元数

常用的坐标转换包括:

  • 固定角四元数互转
  • 固定角旋转矩阵互转
  • 四元数旋转矩阵互转

7.1 旋转矩阵

        旋转矩阵采用的是旋转后的坐标系三个轴分别与原坐标系三个轴的夹角余弦值共九个数字组成的3*3矩阵。

旋转矩阵一般记作R

若两个坐标系姿态相同,其旋转矩阵为单位矩阵。

7.2 欧拉角-绕坐标轴的旋转

        旋转矩阵是一个冗余的(九个值之间存在约束关系),可以只需要三个参数来表示的矩阵。

绕三个轴旋转的三个θ,按照特定的顺序将对应的旋转矩阵乘起来就可以确定一个旋转矩阵。

但需要注意的是,矩阵的乘法不具备交换性,所以旋转顺序不同会造成不同的结果。

所以我们对旋转顺序做排列组合,可以得到12种旋转顺序:

  • xyz,xyxxzy
  • xzx,yzxyzy
  • yxzyxy , zxy
  • zxzzyxzyz

除了要考虑旋转时所绕轴的顺序,还要考虑参考坐标系(坐标轴)的不同。

7.2.1 参考固定的坐标系

假设坐标系B与坐标系A初始姿态相同

  • 坐标系{B}绕坐标系A的x轴Ax旋转α
  • 接着坐标系{B}绕着A的y轴Ay旋转β
  • 接着绕Az旋转γ

        上述三次旋转,都是以A坐标系的xyz轴为参考坐标系进行旋转,该旋转方式为固定旋转轴的旋转,通常称之为固定角欧拉角或固定轴旋转。

7.2.2 考自身坐标系

        我们也可以不沿着坐标系A的各轴旋转,而是绕旋转之后B的某一轴再次旋转,我们称之为非固定旋转轴的欧拉角。

        无论是参考自身坐标系还是参考固定的坐标系,都有12种旋转方式,所以欧拉角有12*2=24种旋转方式,后面的计算中我们也将直观的感受到24种旋转方式的不同。

7.2.3 固定转轴欧拉角 转 旋转矩阵

结果:

结果是将绕Z轴的旋转矩阵乘绕X轴的旋转矩阵(具体怎么得来的我也不太清楚,可能是根据左行右列原则,先转的肯定先乘,所以我们先让向量v乘上Rx(45),再让其乘上Rz(90),在原有向量上做行变换)

所以我们可以得到,绕固定轴XYZ旋转的欧拉角转旋转矩阵方法:

7.2.4 非固定旋转轴的欧拉角

非固定旋转轴,即每次旋转是绕着自身的坐标轴进行旋转

每次旋转都是绕着自身进行的,我们可以将每次的旋转进行拆解

        旋转矩阵转欧拉角的方法需要使用双参变量的反正切函数,我们后面在程序当中直接调用对应函数即可实现,这里对原理就不再进行推导了

7.3 轴角

旋转矩阵转轴角需要根据情况讨论,该部分转换我们直接调用相应函数实现,这里对其原理不再叙述,感兴趣的同学可以参考:https://en.wikipedia.org/wiki/Rotation_matrix#Axis_of_a_rotation

7.4 四元数

        一种四个数字表示表示旋转的方式——四元数。

        四元数的四个数字由一个实部和三个虚部组成,是一个超复数形式:

                                                                q=w+x∗i+y∗j+z∗k

小计算: w^2+x^2+y^2+z^2=1

        这一步骤我在看了几遍之后,虽然对维度旋转有了点新的见解,但奈何自身实力还欠缺没有完全搞懂,所以这里就放一篇视频大家可以自行学习。

四元数的可视化_哔哩哔哩_bilibili

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值