记录一下做平衡小车时接触到的四元数的知识,相关的学习资料里面只对四元数的概念进行了简单介绍,先贴在这里后面有需要再补充
姿态角
姿态角的相关介绍如图所示,就是绕x、y、z轴旋转的角度
陀螺仪检测角度的误差来源
陀螺仪会有基于时间累加的测量误差。
例如,某种陀螺仪的误差是0.1度/秒,当陀螺仪静止不动时,理想的角速度应为0,无论它静止多久,对它进行积分测量得的旋转角度都是0,这是理想的状态;而由于存在0.1度/秒的误差,当陀螺仪静止不动时,它采样得的角速度一直为0.1度/秒,若静止了1分钟,对它进行积分测量得的旋转角度为6度,若静止了1小时,陀螺仪进行积分测量得的旋转角度就是360度,即转过了一整圈,这就变得无法忍受了。只有当正方向误差和负方向误差能正好互相抵消的时候,才能消除这种累计误差。
为了消除这个误差,引入了检测倾角的传感器(一般是加速度传感器)。
加速度传感器通过检测器件在各个方向的形变情况而采样得到受力数据,根据F=ma转换,传感器直接输出加速度数据,因而被称为加速度传感器。由于地球存在重力场,所以重力在任何时刻都会作用于传感器,当传感器静止的时候(实际上加速度为0),传感器会在该方向检测出加速度g,不能认为重力方向测出的加速度为g,就表示传感器在该方向作加速度为g的运动。
我的理解是根据重力在竖直向下方向上的分力大小求出夹角:sin(θ) = 分力/重力,用反三角函数得到角度θ.
但是加速度传感器也有其弊端,基于重力加速度测量的数据会受到小车运动时的加速度影响而出现误差。
陀螺仪在运动时比较准确而加速度传感器在静止时比较准确,由于两种传感器的准确场景可以互补,于是就有了姿态融合的操作。
姿态融合
姿态融合也就是将两个传感器测出来的姿态数据融合起来,在静止时以加速度传感器的数据为主,在运动时则以陀螺仪的数据为主。(通过设置不同情况下的权重实现)
六轴mpu6050:使用陀螺仪检测角度时,在静止状态下存在缺陷,且受时间影响,而加速度传感器检测角度时,在运动状态下存在缺陷,且不受时间影响,刚好互补。假如我们同时使用这两种传感器,并设计一个滤波算法,当物体处于静止状态时,增大加速度数据的权重,当物体处于运动状时,增大陀螺仪数据的权重,从而获得更准确的姿态数据。
同理,检测偏航角,当载体在静止状态时,可增大磁场检测器数据的权重,当载体在运动状态时,增大陀螺仪和GPS检测数据的权重。这些采用多种传感器数据来检测姿态的处理算法被称为姿态融合。(偏航角暂时不考虑)
这里面说的滤波算法就是加权计算。
四元数
根据两个传感器在xyz三个轴上测出的两组数据经过计算可以得到一个四元组,再使用四元组里的q0~q3四个数对roll、pitch、yaw三个角度进行解算。
在姿态融合解算的时候常常使用“四元数”来表示姿态,它由三个实数及一个虚数组成,因而被称之为四元数。使用四元数表示姿态并不直观,但因为使用欧拉角(即前面说的偏航角、横滚角及俯仰角)表示姿态的时候会有“万向节死锁”问题,且运算比较复杂,所以一般在数据处理的时候会使用四元数,处理完毕后再把四元数转换成欧拉角。
也就是说,四元数是姿态角的另一种表示方式,感兴趣的话可自行查阅相关资料。
万向节死锁:顺序在前的轴转动时会带动顺序在后的轴一起旋转而顺序在后的轴的旋转不会影响前面的轴,当一次旋转使这次旋转前面的轴和后面的轴重合时,下一次旋转就会发生死锁现象。
例如:x-y-z,绕y旋转90°时被带着旋转的z轴与x轴重合了,在绕z轴旋转时的现象会与绕x轴旋转相同b站视频。