四轴姿态解算-imu算法

理论篇

欧拉角四元数方向余弦矩阵

  • 强调三者描述的是坐标系A,A`之间的变换关系

欧拉角,四元数,方向余弦矩阵都可以描述四轴的姿态变换
注意这里强调的是变换
三者转换公式
在这里插入图片描述
在这里插入图片描述

一阶龙格库塔法

核心要点简介: 假设一阶函数随时间关系如: y = a * T1+b 则,在经过时间△t后,公式变为y = a * (T1 + △t) + b

由此衍生 四元数q在经历△t时间后的新四元数推导公式
【高中数学的一阶求导与多项式之间的关系】

在这里插入图片描述
可得出更新四元数的程序代码为:(其中w为陀螺仪角速度)
q0=q0+(-wxq1-wyq2-wzq3)half_T;
q1=q1+(wx
q0+wz
q2-wyq3)half_T;
q2=q2+(wy
q0-wz
q1+wxq3)half_T;
q3=q3+(wz
q0+wy
q1-wx*q2)*half_T;

  • 总结: 上述的数学定义是我们进行姿态解算的基础理论
  • 通过角速度与时间的积分,在已知四元数初始值,便可以求得△t时间的四元数
  • 通过四元数便可以求得姿态角,同时避免了万向锁问题,从而可以进行全姿态360度飞行控制

6轴IMU(Mahony)姿态融合原理图

在这里插入图片描述

原理解释
n系的加速度归一化,也就是地球参考坐标系的加速度为重力加速度,按道理在x,y,z轴为0,0,g,归一化为0,0,11
通过余弦矩阵的第三行得到在机体坐标系下加速度的投影向量
通过陀螺仪测量值与重力加速度通过四元数转换到机体坐标系的加速度进行向量叉乘从而获得误差e
通过KI积分补偿误差,并通过KP与角速度数据融合
通过一阶龙格库塔法更新四元数

向量叉乘含义: 为a向量在b向量上的投影
所以可以将重力加速度在地球坐标系下的值投影到机体坐标系,从而与陀螺仪测量值进行比较

余弦矩阵第三行的含义
每一行代表x1、y1、z1分别在(x,y,z)轴上的分量,所以第三行可以表示在z轴的投影

实践篇

mahony算法实现

void imuUpdate(Axis3f acc, Axis3f gyro, state_t *state , float dt)	/*数据融合 互补滤波*/
{float normalise;float ex, ey, ez;float halfT = 0.5f * dt;float accBuf[3] = {0.f};Axis3f tempacc = acc;// 角速度gyro.x = gyro.x * DEG2RAD;	/* 度转弧度 */gyro.y = gyro.y * DEG2RAD;gyro.z = gyro.z * DEG2RAD;/* 加速度计输出有效时,利用加速度计补偿陀螺仪*/if((acc.x != 0.0f) || (acc.y != 0.0f) || (acc.z != 0.0f)){/*单位化加速计测量值*/normalise = invSqrt(acc.x * acc.x + acc.y * acc.y + acc.z * acc.z);acc.x *= normalise;acc.y *= normalise;acc.z *= normalise;// 矩阵第三行rMat[2][0] = 2.0f * (q1q3 + -q0q2);rMat[2][1] = 2.0f * (q2q3 - -q0q1);rMat[2][2] = 1.0f - 2.0f * q1q1 - 2.0f * q2q2;/*加速计读取的方向与重力加速计方向的差值,用向量叉乘计算*/ex = (acc.y * rMat[2][2] - acc.z * rMat[2][1]);ey = (acc.z * rMat[2][0] - acc.x * rMat[2][2]);ez = (acc.x * rMat[2][1] - acc.y * rMat[2][0]);/*误差累计,与积分常数相乘*/exInt += Ki * ex * dt ;  eyInt += Ki * ey * dt ;ezInt += Ki * ez * dt ;/*用叉积误差来做PI修正陀螺零偏,即抵消陀螺读数中的偏移量*/gyro.x += Kp * ex + exInt;gyro.y += Kp * ey + eyInt;gyro.z += Kp * ez + ezInt;}/* 一阶龙格库塔算法,四元数运动学方程的离散化形式和积分 */float q0Last = q0;float q1Last = q1;float q2Last = q2;float q3Last = q3;q0 += (-q1Last * gyro.x - q2Last * gyro.y - q3Last * gyro.z) * halfT;q1 += ( q0Last * gyro.x + q2Last * gyro.z - q3Last * gyro.y) * halfT;q2 += ( q0Last * gyro.y - q1Last * gyro.z + q3Last * gyro.x) * halfT;q3 += ( q0Last * gyro.z + q1Last * gyro.y - q2Last * gyro.x) * halfT;/*单位化四元数*/normalise = invSqrt(q0 * q0 + q1 * q1 + q2 * q2 + q3 * q3);q0 *= normalise;q1 *= normalise;q2 *= normalise;q3 *= normalise;imuComputeRotationMatrix();	/*计算旋转矩阵*//* 四元数计算roll pitch yaw 欧拉角*/state->attitude.pitch = -asinf(rMat[2][0]) * RAD2DEG; state->attitude.roll = atan2f(rMat[2][1], rMat[2][2]) * RAD2DEG;state->attitude.yaw = atan2f(rMat[1][0], rMat[0][0]) * RAD2DEG;}

附录

  • 此外,通过dmp库可直接获取四元数从而获得姿态信息
  • AHRS航姿参考系统在此基础上融入磁力计信息[后续介绍]
  • 四轴姿态控制推荐采用串级pid[必须]
  • 保持绝对定位,还需要引入光流传感器,气压计等,从而在姿态的基础上进一步通过x,y,z位置pid控制四轴位置+姿态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/254714.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode - 10 正则表达式匹配

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 10. 正则表达式匹配 - 力扣(LeetCode) 题目描述 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符 * 匹配零个或…

感恩计算机专业作文,感恩作文(精选10篇)

感恩作文(精选10篇) 在学习、工作或生活中,大家都经常接触到作文吧,借助作文人们可以实现文化交流的目的。怎么写作文才能避免踩雷呢?下面是小编整理的感恩作文(精选10篇),希望对大家有所帮助。 感恩作文1 父母,是世界…

一岁一礼,感恩相遇 | 中创员工生日会

生日快乐happy birthday to you 一岁一礼,承载着祝福 纸短情长,记录着温暖 中创算力2022开年 第一场生日会如约而至 11位中创寿星 共赴一场生日庆宴 享受专属于寿星们的幸福时光! HAPPY BIRTHDAY 生日party 生活需要仪式感 每一个特…

生日快乐网站_【总结 】文化自信源自基层贺房氏网站建站十五周年

重要提醒:2004年起创建房氏网(房氏网站fang.org.cn)及QQ群,收集房氏家谱、源流、名人、企业,搭建寻根、联谊等一体文化平台,专业专注于房氏文化,为全球100多万房家人服务的一个综合体,欢迎大家的加入与参与…

一个生日微信小程序 生日动画_生日当天发朋友圈的文案 生日快乐微信小句子...

1.承蒙时光不弃,终究又长大了一岁,感谢每个阶段不同的自己。 2.希望我以后的人生平安喜乐,得偿所愿。 3.又长大了一岁,要更勇敢,少发脾气,按时睡觉,不要乱想。 4.要长大,要乖&#x…

用python写生日快乐说说_生日快乐的说说(精选50句)

生日快乐的说说(精选50句) 随着移动互联网和社交网络的发展,越来越多人喜欢在朋友圈上发布说说,用以分享自己当日的心情和优美的句子。还在苦苦寻找个性、独特的说说吗?以下是小编精心整理的生日快乐的说说(精选50句),欢迎大家借鉴…

flex 布局的基本概念 - 详解

flex 布局的基本概念 Flexible Box 模型,通常被称为 flexbox,是一种一维的布局模型。它给 flexbox 的子元素之间提供了强大的空间分布和对齐能力。本文给出了 flexbox 的主要特性,更多的细节将在别的文档中探索。我们说 flexbox 是一种一维的…

祝妈妈生日快乐的html的代码,祝妈妈生日快乐的朋友圈说说 祝妈妈生日快乐的说说句子...

妈妈是这个世界上伟大而又平凡的人物,给了我们生命,同时承担教育之责,很少会有机会和妈妈说一些暖心的话,所以在妈妈生日这一天,一定要祝妈妈生日快乐,下面八宝网小编就带来祝妈妈生日快乐的朋友圈说说,祝妈妈生日快乐的说说句子。 祝妈妈生日快乐的朋友圈说说 妈妈,今天…

生日祝福html_更新,礼包选择,头像框及太子生日金币活动

幻之试炼2: 全人物解锁教学 ||| 全通关方法总结 |||全隐藏关卡、bug总结 本周攻略: 百忍大战攻略 ||| C忍-忍者新秀止水教学 ||| B忍六尾人柱力羽高教学 ||| 截至10/5日,微信QQ全礼包 >>>本周快报活动更新 忍法帖新忍者—金加银角 1…

23岁生日感言:坚持到成功的那刻为止

子健说 王子健的创业之路 作者 l 王子健 来源 l 子健说(ID:zijianshuo) 转载请联系授权(微信ID:WZJ455) 今天是2019年5月3日,我已经正式步入了23岁。 美美地睡了一个懒觉,舒服地泡…

高晓松50岁生日感言:可感恩的很多,可原谅的很少

点击“技术领导力”关注∆ 每天早上8:30推送 作者 l 文七君 来源 l 粥左罗(ID:fangdushe520) 2019年11月14日,高晓松50岁。 凌晨时分,他发了张敷着面膜的自拍。下午三点,又补发了一篇长文。 高晓松说过&a…

【C++】string类的模拟实现

目录 1.默认成员函数1.1 构造函数1.2 拷贝构造1.2.1 传统写法1.2.2 现代写法 1.3 赋值构造1.3.1 传统写法1.3.2 现代写法 1.4 析构函数 2.其他成员函数2.1 迭代器2.2 容量操作2.2.1 size()2.2.2 capacity()2.2.3 reserve()2.2.4 resize()2.2.5 clear() 2.3 访问操作&#xff08…

一文读懂TSC时钟: (x86_64/arm64)实现介绍和编程使用

Linux(16)之Time Stamp Counter Author:Once Day Date:2023年5月30日 参考文档: 4. Environment Abstraction Layer — Data Plane Development Kit 23.03.0 documentation (dpdk.org)DPDK: lib/eal/include/generic/rte_cycles.h File Reference测量…

反射之使用自定义注解并处理自定义注解

注解:说起注解初学者可能不太明白,annotation是jdk1.5 引入的新特性,中文名叫注解,它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员…

java自定义注解解析及自定义注解

jdk1.5之后提供了注解(Annotation)这一种语法。其主要作用是编译检查(比如override)和代码分析(通过代码中添加注解,利用注解解析器对添加了注解的代码进行分析,获取想要的结果,一般…

自定义注解开发

自定义注解的语法要求: Target({ElementType.METHOD,ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Inherited Documented public interface Description {String desc();String author();int age() default 18; } 首先我们要明确这不是一个接口&#x…

自定义注解(上)自定义注解的定义和检查

什么是注解? 注解是接口的一种变型,定义一组属性,让类、方法或属性用标记的方式调用这些属性。不仅是带有一些属性和值,某些注解带有一些特殊的功能。 如单元测试Test,可以让方法不依赖主函数单独运行,右…

自定义注解详解

文章引用 深入理解Java:注解(Annotation)自定义注解入门 自定义注解详细介绍 说在最前 文章忽略特性的一些基本概念 注解的本质是反射 1. 自定义注解 注解其实就是一种标记,可以在程序代码中的关键节点(类、方法、…

查看 HTTP 请求的数据.

文章结构 如果是 GET 请求如果是 POST 请求方法1:DEBUG 窗口(**爽、超级爽、吴迪爽**):方法2:写方法读取流中数据(繁琐,难用): 我们可能会碰到 MVC 拿不到前端的参数&…

基于Html5的在线资料库的设计与实现(asp.NET,SQLServer)

在线资料库系统采用.NET开发平台进行开发,开发工具采用Microsoft Visual Studio 2010集成开发环境,后台编程语言采用C#编程语言来进行编程开发,数据库我们采用当下流行的SQL Server 2008数据库管理系统来存放平台中的数据信息,整个…