写在前面
上一篇博客中讲解了IMU的几个模块的基本原理,对于陀螺仪来说我们获取到的是物体运动的角速度,相信有高数基础的同学都很容易想到角速度对时间积分后就能得到三轴的角度。这便是最接近我们思维的一种表达方式——欧拉角。
欧拉角
有一个动图很形象的表达了欧拉角的概念
在图片中绕z轴水平旋转的是YAW即偏航角,第二次旋转是俯仰角Pitch,最后的称为偏航角Roll。是不是感觉超级简单,十分直观符合我们日常的习惯。但是欧拉角描述刚体旋转会遇到一个著名的万向节锁问题,具体详细的介绍请移步下面连接
https://www.matongxue.com/madocs/442.html
旋转矩阵
旋转矩阵对于有线性代数基础的同学一定不陌生了
简单点来说,一个向量从x坐标系变换到y坐标系,根据坐标系的定义有:
稍作变换
这里的R便是旋转矩阵了。
具体的绕x轴旋转,绕y轴旋转及z轴旋转还请移步下面博客。
https://blog.csdn.net/csxiaoshui/article/details/65446125
四元数
目前已经有了欧拉角和旋转矩阵两种描述方法,为什么数学家们要提出四元数的概念呢?它是为了解决这两个问题
- 欧拉角的万向节锁问题
- 旋转矩阵的9个数值不相互独立。
首先万向节锁相信大家看过博客都基本了解了,那旋转矩阵9个数值不独立指什么呢?
不独立我这里指的是有约束,比如旋转矩阵有R 等于R的转置的特性,导致它各个变量有相互约束的问题给后期求解带来了很多麻烦。这时,四元数应运而生四个变量相互独立而且避免了万向节锁问题,因而广泛采用。具体的四元数的定义运算及旋转的表达法,请参考下面博客,避免重复造轮子。
https://www.zhihu.com/question/23005815
李群李代数
目前我们采用四元数已经能很好的表达旋转了为什么又要引入这么抽象的概念呢?关键在于求导数,旋转矩阵的变换以及四元数的旋转变换都是乘法,但是学过微积分的同学都知道积分和微分的基础是加法。也就是说旋转矩阵无法对旋转求导(工程上很多时候都是取两次差值作为导数),伟大的数学家注意到对数能将乘法变成加法
所以对旋转矩阵取ln后得到新的表达方法,这时便可以对旋转求导数了。当然这部分内容比较抽象,知识有限很难讲透彻,有兴趣的参考高翔博士的博客
https://www.cnblogs.com/gaoxiang12/p/5137454.html
小节
本次大致了解了旋转的多种表达方法,大多参考网上资料也还是属于基础知识与内容。后面就要开始实际用学到的知识去解算IMU的姿态了,但是有一个问题。陀螺仪能解算姿态,加速度计也行,磁力计也ok,那么我们怎么得到最优解呢?下一篇真正开始数据融合。
后期内容
从互补滤波推导到卡尔曼滤波
AHRS算法推导及代码实现(上)
AHRS算法推导及代码实现(下)