ESP32 之 ESP-IDF 实战(一)—— 物联网风力摆控制系统(①姿态解算部分)

本文章 来自原创专栏《ESP32教学专栏 (基于ESP-IDF)》,讲解如何使用 ESP-IDF 构建 ESP32 程序,发布文章并会持续为已发布文章添加新内容! 每篇文章都经过了精打细磨!

↓↓↓通过下方对话框进入专栏目录页↓↓↓
CSDN 请求进入目录       _ O x

是否进入ESP32教学导航(基于ESP-IDF)?

       确定


完整项目地址:(ESP32 + Android双端源代码)
https://gitee.com/augtons-zhengxie/esp32-wind-swing

一、姿态解算算法简介

姿态解算,也叫做姿态分析,姿态估计,姿态融合。是指通过传感器的数据(如加速度,角速度)推算出物体当前姿态的过程。

本期项目使用MPU6050传感器测量加速度和角速度,进而解算出姿态。

1. 为什么要至少两种传感器

有人可能会有疑问,只用加速度传感器不就能测出姿态了吗。直接对重力加速度分解到3个坐标轴上不就读取出来了吗。

其实这是不正确的,因为物体并非就一定处于平衡状态。想象一下当物体被静止悬挂的时候,确实可以直接使用加速度传感器读取出当时的姿态,即俯仰角度和横滚角度。但是当物体在运动状态呢,尤其是有外部作用力驱动的时候呢(如风力摆,将采用风力作为驱动),加速度传感器的值就会变成重力加速度和运动加速度的矢量和了,显然这样做是不准确的。

2. 传感器的零点漂移问题

加速度传感器和陀螺仪(测角速度)两种传感器都会有零点漂移。

对于加速度传感器,我们不能保证其平放的时候就一定测出一个竖直向下的加速度,而是会有一定的偏移量,而且这个偏移量也会有浮动。

对于陀螺仪,即使当物体处于完全静止状态的时候,也不能保证陀螺仪的读数为0。即使物体无角速度,也会被传感器读出一个较小的角速度。

我么知道了这两种传感器都会产生误差,那么具体这两者的误差有什么区别呢。
我们的姿态最终要反映为角度,加速度传感器的读数能直接通过分解与姿态建立关系,但是其无法区分重力加速度还是运动加速度,因此其会产生一个高频误差(误差主要来自高频运动噪声)。

而陀螺仪则与之不同了,陀螺仪测出的是角速度,它与角度呈一阶微分关系,因此陀螺仪需要经过积分环节才能转换为姿态,会产生积分误差。因此其误差主要反映在由零飘导致的误差,即会产生低频误差(误差主要来自低频零飘噪声)。

加速度传感器高频误差较大,陀螺仪低频误差大,因此我们要将其融合。这也是我们所要研究的

二、姿态的表示方法

描述一个物体的姿态有很多种方法,最常见的如四元数法和欧拉角法。

1. 欧拉角

(1)简介

欧拉角指的是物体绕三个轴依次旋转相应角度,表示当前的姿态。优点是十分直观。

一种欧拉角为绕固定坐标系的,另一种是绕自身(载体)坐标系的。一般通过绕自身坐标系来描述姿态。我们一般用小写字母xyz表示固定坐标系,用大写字母XYZ表示自身坐标系欧拉角的3个字母的顺序表示旋转顺序。

可以证明:绕固定坐标系的xyz欧拉角相当于绕自身坐标系的ZYX欧拉角(角度不变,旋转顺序相反)

(2)缺陷:万向节死锁

2. 四元数

(1)四元数则描述了三维空间的旋转旋转

四元数一种是用一个四维向量表示三维空间姿态的旋转的方法。
考虑矢量旋转:

矢量绕法轴旋转:
向量 a \boldsymbol{a} a在某平面内旋转了 θ \theta θ角得到向量 b \boldsymbol b b,则
a = ( cos ⁡ θ + n sin ⁡ θ ) b \boldsymbol{a}=(\cos \theta + \boldsymbol n\sin \theta)\boldsymbol b a=(cosθ+nsinθ)b(其中等号右侧的运算为向量的“直乘”; n \boldsymbol n n为与该平面垂直的单位向量(转轴),方向与向量旋转方向满足右手定则关系)


矢量旋转的四元数表示:
向量 a \boldsymbol{a} a以单位向量 e n \boldsymbol e_n en为轴旋转了 θ \theta θ角得到向量 b \boldsymbol b b,则 b = u a u − 1 \boldsymbol b = \boldsymbol u\boldsymbol a \boldsymbol u^{-1} b=uau1其中 u \boldsymbol u u为描述此旋转的四元数,且有 u = cos ⁡ θ 2 + e n sin ⁡ θ 2 \boldsymbol u =\cos \frac{\theta}{2} +\boldsymbol e_n \sin \frac\theta2 u=cos2θ+ensin2θ
u − 1 \boldsymbol u^{-1} u1 u \boldsymbol u u的逆,为u的共轭除以u的“模的平方”,因为此时u为单位四元数,模为1,故u的逆即为u的共轭。

(2)四元数与欧拉角的关系

对于ZYX欧拉角(绕自身坐标系ZYX分别旋转 α β γ \alpha \beta \gamma αβγ,或绕固定座标xyz分别旋转 α β γ \alpha \beta \gamma αβγ),四元数 q = ( q 0 , q 1 , q 2 , q 3 ) q=(q_0,q_1,q_2,q_3) q=(q0,q1,q2,q3),有
在这里插入图片描述

三、姿态融合:根据加速度和角速度计算四元数

1. 使用一阶龙格——库塔法求四元数

使用一阶龙格——库塔法求四元数
[ q 0 q 1 q 2 q 3 ] t + Δ t = [ q 0 q 1 q 2 q 3 ] t + Δ t 2 [ − ω x q 1 − ω y q 2 − ω z q 3 ω x q 0 + ω z q 2 − ω y q 3 ω y q 0 − ω z q 1 + ω x q 3 ω z q 0 + ω y q 1 − ω x q 2 ] \left[\begin{matrix}q_{0}\\q_{1}\\q_{2}\\q_{3}\end{matrix}\right]_{t+\Delta t} = \left[\begin{matrix}q_{0}\\q_{1}\\q_{2}\\q_{3}\end{matrix}\right]_{t} + \frac{\Delta t}2 \left[\begin{matrix}{-\omega_x q_1 - \omega_y q_2-\omega _zq_3}\\{\omega_xq_0+\omega_zq_2-\omega_yq_3}\\{\omega_yq_0-\omega_zq_1+\omega_xq_3}\\\omega_zq_0+\omega_yq_1-\omega_xq_2\end{matrix}\right] q0q1q2q3t+Δt=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Augtons正(单片机)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值