RM赛事C型板九轴IMU解算(3)(姿态融合算法)

姿态解算是将陀螺仪的角速度数据,加速度计的加速 度计数据,磁力计的磁场数据进行融合,以解算出当前载体的姿态角。姿态解算算法的好坏
将影响到姿态角度的精度。我们以mahony算法为例,移植相关算法,创建姿态解算任务

这篇还是教大家如何移植,至于如何进行优化,大家自行决定,比如加上DMA,用FreeRTOS多线程,等等

首先是配置就把前面两篇文章的所有配置在CubeMX中配置,和并把前面用到的文件一直到新的KEIL中并进行添加

然后再加入这两个文件

然后再在这个文件目录下,找到这两文件,添加到你的keil工程中

然后打开工程

在main.c中添加这些头文件

#include "imu_temp_control_task.h" #include "BMI088driver.h" #include "pid.h" #include "bsp_imu_pwm.h" #include "ist8310driver.h" #include "ist8310driver_middleware.h" #include "MahonyAHRS.h" #include <math.h>

和这些宏定义和变量

#define IMU_temp_PWM(pwm) imu_pwm_set(pwm) //pwm???? #define TEMPERATURE_PID_KP 1600.0f //kp of temperature control PID #define TEMPERATURE_PID_KI 0.2f //ki of temperature control PID #define TEMPERATURE_PID_KD 0.0f //kd of temperature control PID #define TEMPERATURE_PID_MAX_OUT 4500.0f //max out of temperature control PID #define TEMPERATURE_PID_MAX_IOUT 4400.0f //max iout of temperature control PID extern SPI_HandleTypeDef hspi1; volatile uint8_t imu_start_flag = 0; uint16_t tempPWM; fp32 gyro[3], accel[3], temp;float mag[3]; //kp, ki,kd three params const fp32 imu_temp_PID[3] = {TEMPERATURE_PID_KP, TEMPERATURE_PID_KI, TEMPERATURE_PID_KD}; //pid struct pid_type_def imu_temp_pid; fp32 quat[4] = {0.0f, 0.0f, 0.0f, 0.0f}; fp64 INS_angle[3] = {0.0f, 0.0f, 0.0f};

然后成立这个函数进行四元数对角度的转化

void get_angle(fp32 q[4], fp64 *yaw, fp64 *pitch, fp64 *roll) { *yaw = atan2f(2.0f*(q[0]*q[3]+q[1]*q[2]), 2.0f*(q[0]*q[0]+q[1]*q[1])-1.0f)*57.29578; *pitch = asinf(-2.0f*(q[1]*q[3]-q[0]*q[2]))*57.29578; *roll = atan2f(2.0f*(q[0]*q[1]+q[2]*q[3]),2.0f*(q[0]*q[0]+q[3]*q[3])-1.0f)*57.29578; }

然后进行这些初始化

HAL_TIM_PWM_Start(&htim10,TIM_CHANNEL_1); /* USER CODE BEGIN 2 */ PID_init(&imu_temp_pid, PID_POSITION, imu_temp_PID, TEMPERATURE_PID_MAX_OUT, TEMPERATURE_PID_MAX_IOUT); ist8310_init(); while(BMI088_init()) { ; } //set spi frequency hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; if (HAL_SPI_Init(&hspi1) != HAL_OK) { Error_Handler(); } quat[0] = 1.0f; quat[1] = 0.0f; quat[2] = 0.0f; quat[3] = 0.0f;

最后替换掉原来的while(1)循环

while (1) { BMI088_read(gyro, accel, &temp); ist8310_read_mag(mag); // uint16_t tempPWM; PID_calc(&imu_temp_pid, temp, 40.0f); if (imu_temp_pid.out < 0.0f) { imu_temp_pid.out = 0.0f; } tempPWM = (uint16_t)imu_temp_pid.out; IMU_temp_PWM(tempPWM); MahonyAHRSupdate(quat, gyro[0], gyro[1], gyro[2], accel[0], accel[1], accel[2], mag[0], mag[1], mag[2]); get_angle(quat, INS_angle + 0, INS_angle + 1, INS_angle + 2); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ }

最后只需要读取INS_angle[3]的三个数据就分别是,Yao,Pitch,Roll的角度

但是我们这个姿态的解算没有进行滤波,也没用DMA所以数据的时效性不强,所以大家也可以根据大疆的例程进行修改

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lua基础语法(上篇)

初识 Lua Lua 是一种轻量小巧的脚本语言,它用标准C语言编写并以源代码形式开放。这意味着什么呢?这意味着Lua虚拟机可以很方便的嵌入别的程序里,从而为应用程序提供灵活的扩展和定制功能。而整个Lua虚拟机编译后仅仅…

驱动千店销售转化提升10%:3C零售门店的人效优化实战方案

运营现状&#xff1a;经验驱动型排班的增长瓶颈 在3C零售领域&#xff0c;门店的核心竞争力始终围绕“人货场”的匹配精度展开&#xff0c;而A集团在深度调研中发现&#xff0c;其经销商门店正面临着一个制约增长的核心困境——长期依赖手工排班模式&#xff0c;往往出现销售能…

破解出海管理“消耗战”:中企如何用数字化工具赢得海外团队信任?

当“管控”在海外失效&#xff0c;什么才是解药&#xff1f;在全球化征程中&#xff0c;许多中国企业管理者都体验过一种深深的无力感&#xff1a;曾经在国内市场被验证卓有成效的管理手段&#xff0c;在海外团队面前却频频碰壁。这种困境非常普遍——出海管理极易演变为一场无…

【通信】基于matlab DPCM编码及2DPSK调制数字频带通信系统仿真【含Matlab源码 15019期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

【光学】基于matlab水波在多个垂直薄板下的透射系数【含Matlab源码 15013期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

【图像加密】基于matlab双随机相位编码和压缩传感实现安全图像加密【含Matlab源码 15009期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

2026年 不锈钢模块/不锈钢加工厂/不锈钢剪板折弯厂家推荐排行榜:匠心工艺与精密制造实力解析

2026年不锈钢模块/不锈钢加工厂/不锈钢剪板折弯厂家推荐排行榜:匠心工艺与精密制造实力解析 在现代工业制造体系中,不锈钢以其卓越的耐腐蚀性、高强度及美观的金属质感,成为高端装备、精密仪器、建筑装饰及特种环境…

基于 Vue + VueUse 的 WebSocket 优雅封装:打造高可用的全局连接管理方案

在现代前端开发中&#xff0c;WebSocket 作为全双工通信协议&#xff0c;被广泛应用于实时消息推送、在线协作、实时数据监控等场景。但原生 WebSocket API 使用繁琐&#xff0c;且在多连接、重连、心跳检测、状态管理等场景下需要大量重复代码。本文将分享基于 Vue3 VueUse 的…

AI赋能运营:数字化系统如何自动分配收益与激励?

前面讨论的精巧设计&#xff0c;都需要一个高效、公平的“Chao级大脑”来执行。这就是AI数字化系统。本文揭示技术如何成为运营的基石&#xff0c;让复杂商业模型得以完美运转。1. 自动化&#xff1a;解决运营中繁琐的“分配”问题传统的分销或代理模式&#xff0c;佣金计算、业…

ArcGIS大师之路500技---066DEM不进位保留一位小数

文章目录前言一、 问题描述二、 栅格计算器前言 本文介绍使用栅格计算器实现不进位保留一位小数。 一、 问题描述 样例DEM有多位小数&#xff0c;我们的目标是DEM只保留一位有效数字。 二、 栅格计算器 工具位置&#xff1a;系统工具箱—Spatial Analyst Tools—地图代数—…

从出题到成绩:在线笔试系统如何提升 HR 招聘效率?

在人才竞争白热化的当下&#xff0c;招聘效率与质量直接决定企业核心竞争力。传统线下笔试模式长期以来积累的诸多痛点&#xff0c;如组织成本高企、异地招聘受阻、公平性难以保障等&#xff0c;已成为 HR 部门高效选才的 “拦路虎”。数字化转型浪潮下&#xff0c;在线笔试系统…

考试云:在线答题系统,构建一体化赛事解决方案

在数字化转型的浪潮中&#xff0c;传统的纸质考试模式正逐渐被更加高效、便捷、公正的在线考试方式所取代。特别是在教育、企业培训、政府机关、职业认证等领域&#xff0c;如何借助信息化手段实现测评流程的智能化与标准化&#xff0c;已成为各行各业关注的重点。考试云在线考…

如何通过接近开关降低误停机成本

误停机是自动化产线中最隐蔽、也最昂贵的成本来源之一。很多时候&#xff0c;问题并不在于设备本身&#xff0c;而在于传感器误动作触发了保护逻辑。通过合理选型和布点设计&#xff0c;接近开关可以显著降低这种风险。例如&#xff0c;在关键位置采用抗干扰能力更强的型号&…

【AI】AI学习笔记:翻译langGraph 记忆概述(Memory)

记忆概述 记忆是一个能够记录先前交互信息的系统。对于AI智能体而言&#xff0c;记忆至关重要&#xff0c;它使智能体能够记住过去的交互、从反馈中学习并适应用户偏好。随着智能体处理愈发复杂且交互频繁的任务&#xff0c;这种能力对于提升效率和用户满意度都变得不可或缺。本…

什么是动态ip/ 什么情况下使用动态ip

动态住宅 IP 核心解析&#xff1a;跨境业务必备工具在网络应用及跨境业务中&#xff0c;代理 IP 应用广泛。动态住宅 IP 作为核心类型之一&#xff0c;需结合业务需求选择&#xff0c;以下为其核心解析。一、动态住宅 IP 是什么&#xff1f;动态住宅 IP&#xff08;轮换代理&am…

P8329 ZJOI2022 树 题解 / 容斥

题目传送门:P8329 ZJOI2022 树。 设 \(F(S)\) 表示第一棵树的叶子集合为 \(S\) 的方案数,\(G(T)\) 表示第二棵树的叶子集合为 \(T\) 的方案数。 那么答案即为 \(ans=\sum\limits_{S \cap T = \varnothing,S \cup T=\…

‌AI伦理测试框架:构建负责任软件的基石

一、为什么AI伦理测试不再是“可选项”&#xff0c;而是测试工程师的职责边界&#xff1f;‌ 传统软件测试关注“功能是否实现”&#xff0c;而AI系统测试必须追问&#xff1a;“它是否公平&#xff1f;”“它是否可问责&#xff1f;”“它是否在伤害边缘群体&#xff1f;” …

2026年 楼承板设备厂家推荐排行榜,钢承板/免浇筑/闭口/开口楼承板设备,十大楼承板成型机及压型设备实力品牌深度解析

2026年楼承板设备行业展望与实力品牌深度解析 随着建筑工业化与装配式建筑的深入推进,楼承板作为现代钢结构建筑体系中的关键构件,其生产设备——楼承板设备(亦称钢承板设备)的技术水平与市场格局正经历深刻变革。…

AI测试工具快速上手指南:从零到精通的实战教程

一、AI测试工具概述&#xff1a;为何成为测试从业者的必备技能 人工智能&#xff08;AI&#xff09;正重塑软件测试领域&#xff0c;通过自动化重复任务、提升测试覆盖率和减少维护成本&#xff0c;为测试工程师释放更多高阶分析空间。AI测试工具利用机器学习、自然语言处理等…

深度实践:从“手动排障”到“对话诊断”,构建基于 GenAI 的 K8s 智能运维平台

&#x1f680; 引言 在云原生架构迈向深水区的今天&#xff0c;管理大规模 Kubernetes&#xff08;如 Amazon EKS&#xff09;集群已不再是简单的“自动化”问题&#xff0c;而是“智能化”的博弈。当集群规模达到数百甚至上千时&#xff0c;工程师往往淹没在海量的日志和指标…