飞行姿态解算(三)

飞控学习笔记-姿态角解算(MPU6050 加速度计加陀螺仪) 全球首例整合性6轴运动处理组件 3轴陀螺仪+3轴加速度计 IIC接口,可用于扩展外部传感器 数据格式:旋转矩阵、四元数(quaternion)、欧拉角格式 体积小 无人机传感器 MPU6050:3轴陀螺仪+3轴加速度(姿态) HMC5883:3轴数字罗盘(精确方向控制) MS5611:气压计(高度计) Pitch:俯仰角(抬头低头) Roll:滚转角(翻身) Yaw:偏航角(转弯) 三个角度组合,可唯一确定一个姿态 ... 阅读详情

继之前研究了一些飞行姿态理论方面的问题后,又找到了之前很流行的一段外国大神写的代码,来分析分析。 第二篇文章的最后,讲到了文章中的算法在实际使用中有重大缺陷。

大家都知道,分析算法理论的时候很多情况下我们没有考虑太多外界干扰的情况,原因是很多情况下,传感器的精度以及受到的干扰并不会特别大,而显著的影响到算法。但是在IMU系统中,有点不同。由于地磁场十分微弱,而我们生活中有大量使用电子设备,使得磁场非常的混乱,以至于地磁传感器非常容易受到干扰。

由于以上算法把地磁传感器一同加入到姿态的测定中,并基本给予了地磁传感器与加速度传感器同样的加权,导致地磁传感器一旦被干扰,会对姿态产生地球重力突然被干扰一样的结果。。。对姿态的测量是毁灭性的。

综上,考虑到磁场的不稳定性,必须对地磁传感器进行降权处理,使得他对姿态的影响变小。

于是设计了以下的算法。

将磁场传感器的数据在姿态角度中剔除,更新姿态的俯仰角(PITCH)以及横滚角(ROLL)的时候只使用加速度传感器以及陀螺仪(角速度传感器)。

只在计算偏航角的(YAW)的时候使用磁场传感器。也就是只使用磁场传感器作为一个电子指南针,定位整个姿态在水平面旋转的角度。这样设计,让磁场传感器只影响姿态中的一个数值,减少了磁场的权重,即使磁场收到干扰,也不会导致姿态骤变,使得四轴坠机。

在对YAW进行计算的时候使用了如下函数。

eulerAngleRaw.yaw = 0.9 * (eulerAngleRaw.yaw - gzF*2*halfT) + 0.1 * angleMagYaw;

此处的0.9和0.1是可以变动的但他们相加应该为1,此处为一个最简单的1阶低通滤波器,增加0.1则是增大截止频率。

算法的流程图是这样的:


程序流程图

新的姿态更新算法是这样的

voidAHRSupdate(float gxf, float gyf, float gzf, float axf, float ayf, float azf, float mxf, float myf, float mzf)

{

double norm;

float vx, vy, vz;

float ex, ey, ez;

float halfT; //采样周期的一半

// 辅助变量,以减少重复操作数

float q0q0 = q0*q0;

float q0q1 = q0*q1;

float q0q2 = q0*q2;

float q0q3 = q0*q3;

float q1q1 = q1*q1;

float q1q2 = q1*q2;

float q1q3 = q1*q3;

float q2q2 = q2*q2;

float q2q3 = q2*q3;

float q3q3 = q3*q3;

// 测量归一化

norm = invSqrt(axf*axf + ayf*ayf + azf*azf);

axf = axf * norm; //向量a 为传感器重力 飞行器分量

ayf = ayf * norm;

azf = azf * norm;

//norm = invSqrt(mxf*mxf + myf*myf + mzf*mzf);

// 向量m 为传感器磁场 飞行器分量

//mxf = mxf * norm;

//myf = myf * norm;

//mzf = mzf * norm;

// 计算参考磁通方向

//hx = 2*mxf*(0.5 - q2q2 - q3q3) + 2*myf*(q1q2 - q0q3) + 2*mzf*(q1q3 + q0q2); //向量h 为磁场通过旋转以后 参考系分量

//hy = 2*mxf*(q1q2 + q0q3) + 2*myf*(0.5 - q1q1 - q3q3) + 2*mzf*(q2q3 - q0q1);

//hz = 2*mxf*(q1q3 - q0q2) + 2*myf*(q2q3 + q0q1) + 2*mzf*(0.5 - q1q1 - q2q2);

//bx = 1.0f/invSqrt((hx*hx) + (hy*hy));

//原则上应该只有X向的分量 ex的磁场传感器部分误差就是由此式产生。

//bz = hz;

//估计方向的重力和磁通(V和W)

//反向使用 四元数 及把a用-a替换。

vx = 2*(q1q3 - q0q2);

//v为把重力反向旋转到飞行器参考系时重力的向量

vy = 2*(q0q1 + q2q3);

vz = q0q0 - q1q1 - q2q2 + q3q3;

//wx = 2*bx*(0.5 - q2q2 - q3q3) + 2*bz*(q1q3 - q0q2);

// w为把磁场反向旋转到飞行器参考系时磁场的向量

//wy = 2*bx*(q1q2 - q0q3) + 2*bz*(q0q1 + q2q3);

//wz = 2*bx*(q0q2 + q1q3) + 2*bz*(0.5 - q1q1 - q2q2);

// 错误是跨产品的总和之间的参考方向的领域和方向测量传感器 //建立误差函数 向量的外积

//ex = (ayf*vz - azf*vy) + (myf*wz - mzf*wy);

//ey = (azf*vx - axf*vz) + (mzf*wx - mxf*wz);

//ez = (axf*vy - ayf*vx) + (mxf*wy - myf*wx);

ex = (ayf*vz - azf*vy);

ey = (azf*vx - axf*vz);

ez = (axf*vy - ayf*vx);

halfT=getCurrentTime(timer4);

if (halfT>0.05)halfT=0;

//printf("%f\n\r",halfT);

if(ex != 0.0f && ey != 0.0f && ez != 0.0f)

{

// 积分误差比例积分增益

exInt = exInt + ex*Ki*(halfT);

eyInt = eyInt + ey*Ki*(halfT);

ezInt = ezInt + ez*Ki*(halfT);

// 调整后的陀螺仪测量

gxf = gxf + Kp*ex + exInt;

gyf = gyf + Kp*ey + eyInt;

gzf = gzf + Kp*ez + ezInt;

}

// halfT=getCurrentTime();

// printf("%f \n\r", halfT);

// 整合四元数率和归一化

//龙格-库格法

q0 = q0 + (-q1*gxf - q2*gyf - q3*gzf)*halfT;

q1 = q1 + (q0*gxf + q2*gzf - q3*gyf)*halfT;

q2 = q2 + (q0*gyf - q1*gzf + q3*gxf)*halfT;

q3 = q3 + (q0*gzf + q1*gyf - q2*gxf)*halfT;

// 归一化四元数

norm = invSqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);

q0 = q0 * norm;

q1 = q1 * norm;

q2 = q2 * norm;

q3 = q3 * norm;

}

与第二篇相比,算法中注释掉了所有与磁场有关的部分。

姿态更新后,用如下语句与磁场传感器计算出来的YAW(偏航角)进行混合

eulerAngleRaw.yaw = 0.9 * (eulerAngleRaw.yaw - gzF*2*halfT) + 0.1 * angleMagYaw;

经过检验,该算法姿态稳定,准确,变化迅速,YAW的值也能长期保证稳定,能为四轴飞行器提供很好的姿态数据。

飞行器控制笔记(三)——姿态解算之方向余弦更新姿态 飞行器控制笔记(三)——姿态解算之四元数更新姿态 0向量叉乘的性质 对于向量 参考文献 全权,多旋翼飞行器设计与控制.北京:电子工业出版社,2018 秦永元,惯性导航.北京:科学出版社,2006 ... 阅读详情

相关推荐

MPU6050的四元数解算姿态方法

使用MPU6050硬件DMP解算姿态是非常简单的,下面介绍由三轴陀螺仪和加速度计的值来使用四元数软件解算姿态的方法。 我们先来看看如何用欧拉角描述一次平面旋转(坐标变换): MPU6050的四元数解算姿态方法 设坐标系绕旋转α角后得到坐标系,在空间中有一个矢量在坐标系中的投影为,在内的投影为由于旋转绕进行,所以Z坐标未变,即有。 转换成矩阵形式表示为: 即 所以从旋转到可以写成上面仅仅是绕一根轴的旋转,如果三维空间中的欧拉角旋转要转三次: MPU6050的四元数解算姿态方法 上面得到了一个表示旋转的方

qq_41938005的博客 8392

四轴飞行器飞控研究(三)--姿态完整改进算法

继之前研究了一些飞行姿态理论方面的问题后,又找到了之前很流行的一段外国大神写的代码,来分析分析。       第二篇文章的最后,讲到了文章中的算法在实际使用中有重大缺陷。        大家都知道,分析算法理论的时候很多情况下我们没有考虑太多外界干扰的情况,原因是很多情况下,传感器的精度以及受到的干扰并不会特别大,而显著的影响到算法。但是在IMU系统中,有点不同。由于地磁场十分微弱,而我们生

问江南的博客 4479

基于ESP32-C6与MPU6050的体感控制飞行汽车模型开发实战

姿态传感器与嵌入式微控制器是物联网和机器人领域的核心技术。MPU6050等惯性测量单元通过采集加速度和角速度数据,结合互补滤波或卡尔曼滤波等算法进行姿态解算,能够精确感知物体的三维空间朝向。这项技术为设备提供了自主导航和稳定控制的基础能力,在无人机、机器人、可穿戴设备等场景中价值显著。本文聚焦于一个融合了这些核心技术的工程实践项目:利用ESP32-C6开发板构建一个完整的体感遥控飞行汽车系统。项目深入探讨了如何将MPU6050的原始数据通过滤波算法转化为稳定的控制指令,并利用ESP32-C6的多协议无线通信

weixin_34221073的博客 302

飞行器姿态计算

在飞行器的控制中,姿态计算是至关重要的一步。姿态计算的目标是确定飞行器相对于参考坐标系的姿态,通常以欧拉角(滚转、俯仰和偏航)或四元数的形式表示。以下是姿态计算的原理和常用方法的简要介绍:原理:姿态计算基于惯性测量单元(IMU),其中包括加速度计和陀螺仪。加速度计测量物体在三个轴向上的加速度,而陀螺仪测量物体绕三个轴向上的角速度。通过结合这些测量值,可以推导出飞行器的姿态。常用方法:互补滤波器(Complementary Filter):这是一种简单且常用的姿态计算方法。

blog.boringhex.top 1195

STM32微型四轴飞行器DIY:从硬件设计到PID飞控算法全解析

嵌入式系统开发是连接硬件与软件的核心技术领域,其关键在于微控制器对传感器数据的实时处理与精准控制。通过姿态传感器融合与PID控制算法,系统能够实现稳定的自主决策与动作执行,这一原理在无人机、机器人等自动控制场景中具有重要价值。本文聚焦于基于STM32的微型四轴飞行器项目,深入剖析了其硬件电路设计、MPU6050传感器数据融合以及电机驱动混控等工程实践,为嵌入式与自动控制爱好者提供了一个从零搭建完整系统的实战案例。

weixin_29189003的博客 302

基于ESP32-C6与MicroPython的体感控制飞行汽车项目实战

嵌入式系统开发是连接物理世界与数字世界的桥梁,其核心在于通过微控制器实时处理传感器数据并驱动执行器。在物联网和智能硬件领域,Wi-Fi 6与低功耗蓝牙5.0等无线通信技术为实现低延迟、高可靠的设备互联提供了基础。MicroPython作为一种高效的嵌入式开发语言,极大地提升了原型开发与算法验证的速度。这些技术的结合,催生了创新的交互方式,例如体感控制,它通过姿态传感器将人体动作映射为控制指令,为人机交互带来了直观体验。本项目正是这些概念与技术的综合实践,详细展示了如何利用FireBeetle 2 ESP32

weixin_29194693的博客 252

四元数转yaw、pitch、roll

此计算公式基于内在旋转(intrinsic)与泰特-布莱恩角(Tait–Bryan angles)。 yaw = atan2(2.0*(qy*qz + qw*qx), qw*qw - qx*qx - qy*qy + qz*qz); pitch = asin(-2.0*(qx*qz - qw*qy)); roll = atan2(2.0*(qx*qy + qw*qz), qw*qw + qx*qx - qy*qy - qz*qz); 关于内在旋转(intrinsic)与泰特-布莱恩角角的解释: 对于每

jxyyl的博客 2736

Claude + Figma MCP 实战教程

• 拥有 Figma 的 Dev 或 Full seat(专业/企业账号)权限 才能启用 Dev-Mode MCP 服务 。• MCP 是通过标准接口连接 Claude 与 Figma,效率高,但目前仍为 Beta,稳定性可能有限。3. 服务启动后,会在本地运行,比如 http://127.0.0.1:3845/mcp 。如果设置正确,会显示已连接的 figma-dev-mode-mcp-server  。• 如果多次转换复杂组件,可能需要多次选择与多次生成,建议合理拆分设计任务。

weixin_49869937的博客 4445

(11)四元数与欧拉角的转换

Table of Contents 0、简介 一、四元数的定义 二、欧拉角到四元数的转换 2.1 公式: 2.2 code: 三、四元数到欧拉角的转换 3.1 公式 3.2 code: 3.3四元素到旋转矩阵转换 四.奇点 五. 矢量旋转 证明: 六 . 其他参考 七 python 四元素欧拉角互相转换 8 Eigen transform 欧拉角到四元素 四元素得到yaw 四元素到旋转向量 旋转轴向量到四元素 0、简介 四元数与欧拉角之间的转换 百度百科四元素..

weixin_45729043的博客 3816

抽象代数学习笔记(抽象代数的历史、运算)

1. 抽象代数历史 对于五次及以上的代数方程是否存在根式解这个问题,欧拉、拉格朗日、高斯等数学家都没得到答案,但是他们得出五次及以上的代数方程组不存在根式解的结论。19世纪初,阿贝尔提出五次及以上的代数方程不存在根式解,并找出一类特殊的五次及以上的代数方程可以用根式解表示出来。另外一个年轻的数学家伽罗华...

huangzhpei的博客 3666

STM32F103到F407移植OLED,为啥F4屏幕不亮?一个延时函数搞定时序问题

本文详细分析了STM32F103到F407移植OLED时屏幕不亮的问题,指出时钟频率差异导致的时序问题是关键原因。通过对比F103和F407的时钟架构差异,提供了精确延时函数的实现方法,并指导在I2C通信关键点插入适当延时,确保OLED正常显示。文章还涵盖了完整的测试方案和高级优化技巧,帮助开发者彻底解决移植中的时序问题。

weixin_30642561的博客 548

姿态解算

1.MPU6050 软件姿态解算。首先呢,我们在做完智能车比赛之后就萌发了再做一个四旋翼的想法,当然也是想参加来年的全国电设。我们选用MPU6050作为传感器,MPU6050是一款三轴陀螺仪,三轴加速度计芯片,自动反馈三个轴上的角速度和加速度分量。拿这些数据怎么去变成我们所需要的对于四轴的控制量呢,我们需要通过这个6个数据分量融合成三个方向的欧拉角(YAW,ROLL,PITCH)。这个过程,称之为...

void_xinyue的博客 2663

MBIST --- PATR1.Memorybist测试原理

mem bist作为现在design设计中不可或缺的DFT设计内容,越发重要。本章节主要介绍mem bist组成部分,测试的原理以及注意事项。

sinat_27691203的博客 1万+

C语言与无人机飞行控制系统开发:姿态解算、PID控制与航路规划(三)

航路规划是指为移动机器人(如无人机)在给定环境中确定一条从起点到终点的有效路径的过程,该路径应满足特定约束(如避开障碍物、遵循飞行限制、最小化飞行成本等),确保机器人能够在预定时间内安全、高效地到达目的地。

weixin_56154577的博客 1423

【WRF-Urban】使用 CGLC-MODIS-LCZ_100m 数据集运行 WRF 时的城市参数化问题

【WRF-Urban】使用 CGLC-MODIS-LCZ_100m 数据集运行 WRF 时的城市参数化问题

WW、forever的博客 709

C++ 小游戏程序 (共七款)

C++编程小游戏_闪耀的天狼星的博客-优快云博客_游戏c++C++跑酷小游戏_闪耀的天狼星的博客-优快云博客。好玩的c++编程小游戏,共六款。代码】C++跑酷小游戏。

小天狼星_布莱克 的博客 3万+

关于实现四轴无人机的姿态解算

我这个四轴无人机是基于STM32所设计的,陀螺仪使用的MPU6050,远程控制通信用的NRF24L01。想要让自己的无人机能起飞,还要再空中保持稳定,所需要有什么呢。 我这边总结了一下:整体架构,飞控、电池、电机、螺旋桨等选择。陀螺仪姿态解算,能随时掌握无人机的状态,辅助电机操控保持无人机平稳。 PID计算控制电机,调整电机输出让无人机按照自己的指令飞行。 此篇也主要是讲解无人机飞行中的软件设计部分,这边也只会讲解STM32联动MPU6050如何控制电机。该部分中关于头文件、引用这些都没有写进去,只写了主体

Maybe2001的博客 450

肺癌术后随访离散选择实验(DCE)设计与SAS实现

随着肺癌早期诊断和治疗技术的进步,肺癌患者的生存率显著提高,术后随访管理成为提升患者生活质量的关键环节。然而,如何在有限的医疗资源下设计出既符合患者需求又具有成本效益的随访方案,是临床决策面临的重要挑战。 离散选择实验(Discrete Choice Experiment, DCE)是一种定量研究方法,通过模拟真实世界的选择情境,测量患者对不同随访方案属性的偏好程度。本研究旨在通过DCE方法,系统评估肺癌术后患者对随访服务的偏好,为制定以患者为中心的随访策略提供循证依据。

huanghm88的专栏 96

基于stm32的四旋翼无人机的设计——飞行控制系统软件设计

摘要:本文设计了一款基于STM32的四旋翼无人机控制系统,采用X型机身架构和PID控制算法实现稳定飞行。系统硬件包括STM32F103C8T6主控、MPU6050传感器等模块,软件部分重点实现了卡尔曼滤波、四元数姿态解算和PID控制三大算法。通过模块化程序设计,完成了数据采集、姿态解算和电机控制等功能。测试表明,无人机飞行姿态稳定,响应时间约2秒,倾角误差控制在±4°以内。整个设计过程融合了数学建模、控制理论和嵌入式开发等知识,为无人机控制系统开发提供了实用参考。

2301_79312104的博客 1019

YOLOv5改进有效涨点目录 | 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制

Hello,各位读者们好本专栏自开设两个月以来已经更新改进教程60余篇其中包含C2f、主干、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新。同时本人一些讲解视频和包含我所有创新的YOLOv8文档并不能在优快云上传(所有的创新点都经过我的测试是可用的,得到该文件之后大家可以随意组合使用),所以会建立群的形式在内上传我的文件和视频我也会在群内不定期和大家交流回答大家问题,同时定期会更新一些文章的创新点(经过我融合测试后的,先到先得)。本专栏持续更新网络上的所有前沿文章。

Snu77的博客 3万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【四旋翼】六自由度6-DOF四旋翼无人机的飞行动力学与控制仿真,采用级联控制策略,可实现复杂三维轨迹(如螺旋上升轨迹)的高精度跟踪控制MATLAB/Simulink仿真

本仓库包含一套完整的 MATLAB/Simulink 工程,用于六自由度(6-DOF)四旋翼无人机的飞行动力学与控制仿真。项目采用级联控制策略,可实现复杂三维轨迹(如螺旋上升轨迹)的高精度跟踪控制。本仿真建立了四旋翼的完整物理模型,涵盖刚体动力学、电机混控逻辑与环境反馈环节;通过闭环反馈控制架构,实时计算期望轨迹与无人机当前状态的误差,以此调整四个旋翼的转速(w1 ~ w4),最终实现飞行控制。

Matlab245的博客 204

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【无人机控制】基于MATLAB模拟六自由度四旋翼无人飞行器(UAV)的飞行动力学与控制

仿真完整搭建四旋翼物理动力学模型,包含刚体动力学、电机分配矩阵、环境反馈等模块;通过闭环反馈控制,根据期望轨迹与无人机实时状态的偏差调整四旋翼电机转速 w1∼w4。

Matlab245的博客 232

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 飞行姿态解算(二)
下一篇: 电路知识--认识原理图(一)
csshuke
博客等级 码龄16年 1517粉丝 8原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值