嵌入式常用滤波算法与控制算法

发布时间:2026/10/7 0:49:43

嵌入式常用滤波算法与控制算法 前面讲了卡尔曼滤波——数学严谨但调参麻烦。在姿态估计领域有一种更简单实用的替代方案互补滤波。代码量只有卡尔曼的 1/5效果却不差。1. 为什么需要互补陀螺仪和加速度计测量的是同一个角度但噪声特征完全不同陀螺仪 (gyro) ✅ 短时间非常准不受振动影响 ❌ 积分会漂移——误差随时间累积1 分钟漂 5° 加速度计 (accel) ✅ 长时间平均是准的重力方向 ❌ 短时间噪声大——一振动就乱跳±5°互补滤波的思路陀螺仪 → 可信高频部分短时间内的角度变化加速度计 → 可信低频部分长时间的角度基准用一高一低两个滤波器把它们拼起来加速度计 → [低通] ─┐ ├→ 融合角度 陀螺仪 → [高通] ─┘但实际上高通 1 - 低通所以只需要一个低通滤波器融合角度 低通(加速度计角度) (1 - 低通)(陀螺仪积分角度)2. 一行公式搞定等价于这个递推公式angle α × (angle gyro × dt) (1 - α) × accel_angle 或者更直观的写法 angle (1 - α) × (angle gyro × dt) α × accel_angle └──── 陀螺仪占主导 ────┘ └── 加一点加速度计修正 ──┘α 的含义α 大 → 更信加速度计 → 收敛快但怕振动α 小 → 更信陀螺仪 → 平滑但怕漂移典型值α 0.022% 加速度计 98% 陀螺仪3. C 代码实现不到 30 行// comp_filter.h typedef struct { float angle; // 当前角度估计 float alpha; // 互补系数 (0.0 ~ 1.0) float dt; // 采样周期秒 } comp_filter_t; void comp_init(comp_filter_t *cf, float alpha, float dt); float comp_update(comp_filter_t *cf, float accel_angle, float gyro_rate);// comp_filter.c #include comp_filter.h void comp_init(comp_filter_t *cf, float alpha, float dt) { cf-alpha alpha; cf-dt dt; cf-angle 0; } float comp_update(comp_filter_t *cf, float accel_angle, float gyro_rate) { // 陀螺仪积分 → 预测下一秒的角度 float gyro_prediction cf-angle gyro_rate * cf-dt; // 互补融合大部分信陀螺仪小部分拉回加速度计 cf-angle (1.0f - cf-alpha) * gyro_prediction cf-alpha * accel_angle; return cf-angle; }4. 实战MPU6050 全姿态Roll Pitchcomp_filter_t roll_cf, pitch_cf; void imu_init(void) { mpu6050_init(); comp_init(roll_cf, 0.02f, 0.005f); // α0.02, dt5ms comp_init(pitch_cf, 0.02f, 0.005f); } void imu_read(float *roll, float *pitch) { float ax, ay, az, gx, gy, gz; mpu6050_read_all(ax, ay, az, gx, gy, gz); // 加速度计推算角度 float accel_roll atan2f(ay, az); float accel_pitch atan2f(-ax, sqrtf(ay*ay az*az)); // 陀螺仪速率rad/s直接传给互补滤波 *roll comp_update(roll_cf, accel_roll, gx); *pitch comp_update(pitch_cf, accel_pitch, gy); }α 值调参实验α 值抗振动抗漂移收敛速度推荐0.005极好差漂移明显慢飞行器悬停0.02好好中推荐默认0.05中好快快速运动0.1差好很快仅初始对准时用5. 互补滤波 vs 卡尔曼滤波互补滤波卡尔曼滤波代码量15 行80 行调参1 个参数 α2 个矩阵 Q, RCPU 开销极小中等矩阵运算精度够用±1°更高±0.5°理论最优❌ 不是✅ 是线性高斯假设下选择建议做平衡车、云台、航模 →互补滤波够用且简单做无人机导航、机器人定位 →卡尔曼精度要求高下一篇限幅滤波 消抖滤波——两种轻量级方案各 10 行代码
延伸阅读

更多相关文章

2026/10/6 5:47:06

Embedding 基础使用:用 Ollama 和 LangChain.js 生成文本向量

前言 Embedding 的基本使用流程并不复杂: 文本 ↓ Embedding 模型 向量 本文会完成以下内容: 使用 Ollama 在本地运行 Embedding 模型;通过 Ollama HTTP API 生成向量;使用 LangChain.js 调用 Embedding 模型;理解…

2026/10/5 3:49:50

Solana实现750 TPS的技术原理与高性能DApp开发实践

如果你最近关注区块链性能优化,可能会注意到一个让人惊讶的数字:Solana 网络在 7 月有望达到 750 token/秒的处理速度。这个数字背后不仅仅是技术参数的提升,更意味着区块链基础设施正在经历从"够用"到"实用"的关键转折点…

2026/10/6 15:51:39

深入解析C++ std::list:双向链表的迭代器稳定性与实战应用

1. 项目概述:为什么我们需要再次审视std::list?在C的日常开发中,std::vector因其连续内存和缓存友好性,几乎成了默认的“首选容器”。但作为一名有经验的C开发者,我常常发现,当新手甚至一些中级开发者遇到需…

2026/10/6 23:59:55

回溯法详解:LeetCode 46. 全排列

一、 问题描述给定一个不含重复数字的数组 nums,返回其所有可能的全排列。你可以按任意顺序返回答案。示例:输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]二、 核心思路:回溯 (Backtrac…

2026/10/6 23:59:55

【Web全栈进阶】PostgreSQL上手:Docker跑库 + 把早报站从SQLite迁过去

今天不写新功能,做一次“搬家”:把早报站的数据从SQLite搬进PostgreSQL——这是整个二季的地基工程。 🎯 本篇产出:一个跑在Docker里的PostgreSQL、一份可重复执行的数据迁移脚本、以及“为什么换”的完整决策链。含代码约60行。 …

2026/10/6 23:59:55

AI获客怎样减少重复线索?意客AI的原文复用与版本筛选

销售昨天看过一条办公室搬迁需求,今天又在“新线索”里看到它。如果对方已经暂停搬迁,第二次出现带来的只是一次重复阅读;如果需求范围变了,沿用昨天的沟通准备还可能问错问题。 星河卓越旗下意客AI根据业务描述寻找匹配需求&…

2026/10/6 23:59:55

装配车间MES落地指南:SimpleMES工单流转、BOM与齐套检查实战

简介:一套基于.NET 4.0的SimpleMES加工装配模拟系统,面向MES系统学习者、课程设计或毕业设计人员,以及需要快速搭建制造执行原型的开发者。服务端与客户端分工明确:服务端包含基础档案、加工与装配计划管理、实时看板和数据初始化…

2026/10/6 23:54:55

26年程序员转AI指南:收藏这份学习路线,轻松拥抱大模型时代!

文章分享了程序员如何成功转型AI领域的心得与经验。核心内容围绕五个学习阶段展开:先理解大模型调用本身,再学习AI应用开发所需能力,重点掌握RAG,随后学习Agent,最后通过项目实践积累经验。强调理解模型、业务和工程的…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/6 4:01:51

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/6 17:46:51

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑