端午三日

123小时不关机,跟STM32的EKF死磕了两天半,顺便搭了个网站,给服务器做了个大保健,还看了部《低俗小说》

EKF调试 STM32 网站搭建 半个西瓜
EKF Debug Log — 端午三日速写
[Day1 09:00] CRC32 STIM300 IEEE 802.3 反射式确认 OK
[Day1 14:00] PPS PB0→PB12 迁移, EXTI15_10, 500ms消抖 OK
[Day1 20:00] Hermes 服务器自动巡检 cron 上线 OK
[Day2 10:00] Photos 照片墙 v1→v2→v3 三轮迭代 OK
[Day2 15:00] 西瓜 半个西瓜 → 精神崩溃 → 躺平
[Day2 21:00] Movie 《低俗小说》瘫沙发模式
[Day3 08:00] SBG 18个硬编码→cfg统一重构 OK
[Day3 13:00] EKF 15状态卡尔曼 — Bug 1-5: P矩阵/K/协方差
[Day3 16:00] EKF Bug 6 致命: 误差反馈符号全部反了!
[Day3 19:00] EKF Bug 10: RFU→FRD坐标系根本性错误
[Day3 22:00] Phase1 AHRS姿态通过 — roll≈+3° pitch≈-14° PASS
↓ 向下滑动阅读
第一天 第二天 第三天 EKF调试 数据汇总 感想
12
EKF Bug修复
5
AI Skill创建
97
系统升级包
0.5
西瓜 (撑到躺平)

端午节三天。计划是休息。实际是123小时不关机,跟STM32的EKF死磕了两天半,顺便搭了个网站,给服务器做了个大保健,还看了部《低俗小说》。以下是一份私人学习笔记。不严肃,但有料。

IMU DIARIES ☆端午三日☆ 高昆 STM32 INS DEVELOPER A PULP FICTION STYLE PRESENTATION 12 BUGS FIXED 5 SKILLS CREATED 1 INS AGENT

低俗小说风格海报 · 端午三日速写

🔧

第一天(6/19):PPS、岳麓山、服务器巡检

上午确认了一个重要细节:STIM300的CRC32用的是IEEE 802.3反射式,查表法正确。顺便发现另一个模块里有个非反射式的CRC32函数,不兼容STIM300,不过好在根本没被调用。

下午做了一件事:把F407的PPS信号从PB0迁移到PB12。PB0被EXTI0占用了,一开中断直接炸掉整个SBG通信。切到PB12的EXTI15_10,加了500ms消抖,完美。涉及GPIO、中断向量表、SBG桥接层的联动改动。

下午还去了趟岳麓山,2小时。劳逸结合。

晚上完善了服务器自动巡检脚本,Hermes的cron任务正式上岗——每几小时自动巡检,能自主决定封IP、杀进程、重启服务。

关键收获:PPS时间同步的clockStatus分三档(3/1/0),GPS status的反逻辑修了一处:0x000300020x00030000。这些小修小补看起来不起眼,但每一个都是SBG Center校验不过的根因。
🚀

第二天(6/20):网站爆发 + 半个西瓜

上午是最爽的一段——照片墙从零到上线,v1→v2→v3,三轮迭代一口气搞定。扫描脚本自动从照片目录生成json,Python切缩略图,月份分组时间轴配左侧旋钮选择器,Lightbox大图浏览。

主页随机背景也搞定了——每5分钟从照片墙随机抽一张图片做hero背景,带渐入动画。

导航栏重构:加了生活旅行未来遐想两个新栏目,统一了所有页面的导航。还搭了一个Vite+Vanilla JS的博客脚手架。

下午……买了菜,重新启用了冰箱。然后吃了半个西瓜。撑得不行。

晚上本来想继续搞点什么,结果精神直接崩了,只能瘫着看《低俗小说》。

服务器那边也没闲着——全量系统升级97个包,内核升级,重启验证正常。该开的服务都设了开机自启,不用每次手动拉起来。

网站是在上午12点之前爆发出活的。下午基本躺平。这说明:一天最有效的工作时间,其实就那么几个小时。认识到这一点,就不用为"下午什么都没干"焦虑了。
🔥

第三天(6/21):EKF死磕日

这一天从早干到晚,几乎没有停过。

上午:给SBG协议做了18个硬编码配置的统一重构,改成了cfg存储模式。验收通过。

下午到晚上:15状态EKF调试。这是整个端午最硬核的部分。

🧪

EKF调试全记录

先后试了5种方案做GPS/INS融合:

方案结果原因
直接输出GPS原始值位置跳变太大单点GPS噪声±3-10m
α-β平滑滤波完全组合不上固定增益无法适应不同运动状态
4状态卡尔曼滤波位置漂移几十公里速度噪声积分失控
EMA指数移动平均位置跳变无速度积分,本质是低通
GPS原始经纬度+诚实AHRS status保底可用用户认可

定了15状态EKF方案后,是一场与12个bug的拉锯战:

Bug 1-5(第一轮)
P矩阵初始化为零→K永远为零。没有加速度计修正→陀螺漂移。GPS更新50Hz重复调用→协方差崩溃。标量融合只更新对角线。协方差传播只加Q不乘F。
Bug 6(致命)
误差反馈闭合符号反了。δx = true - nominal,所以nominal += dx,不是 -=。六处代码全部改反。
Bug 7-9(截图诊断)
EKF速度跑到-4000多m/s→加保护强制重置。位置偏离28km→发散自恢复。GPS速度显示"No Data"→低速输出零。
Bug 10(坐标系根本性错误)
ICM20602的右前上(RFU)和SBG要求的前右下(FRD)对不上。重力方向反了,roll/pitch搞反了。改了F103传感器填充逻辑和F407桥接层的4处连带代码。
Bug 11
上电初期tilt correction把姿态推偏——0.5秒内pitch到-11°,roll到+60°。加了启动禁用期,降低了修正增益。

最后推倒重来,分三步验证。Phase 1 纯AHRS姿态(Mahony + Madgwick双实现)通过了——roll≈+3°, pitch≈-14°, yaw稳定不漂。Phase 2→3没通过,AHRS切EKF后GPS修正跟不上。暂退到Phase 1保底。

12个EKF bug,一天。有的修好了,有的只是绕过去了。但每踩一个坑,惯性导航这些概念就更清晰一点。有些东西急不得,需要时间当磨刀石,需要自己去磨。

同一天还穿插做了:网站3篇文章的编写和反复修改、serve.py从全量tar改成增量传输(manifest对比mtime+size)、4个扫描IP自动封禁、创建了5个AI Skill和1个惯导Agent。

晚上22点写完工作总结,尝到了自己冻的冰块——配着可乐喝了一口。效果不错。

📊

数据汇总

指标数值
EKF bug修复数12个
创建的AI Skill5个(px4-ekf2、psins-loose、sbg-ecom、ima-knowledge、site-deploy)
创建的AI Agent1个(ins-guru 惯导专家)
网站页面数8个
服务器系统升级包97个
网站文章3篇(关东烈传、AI驱动NPC、惯导AI-Skill)
EKF方案尝试5种(4种失败,1种保底+1种Phase1通过)
吃的西瓜半个 🍉(撑到躺平)
看的电影《低俗小说》
💭

一些感想

01

EKF不是调参就能用的

12个bug里只有两三个跟参数有关。其他全是:坐标系反了、符号反了、更新频率错了、传播写错了、反馈写反了。教科书上那些漂亮的公式,落到嵌入式C里面,随便一个符号就能让你调三天。

02

业余开发者最大的敌人不是能力

是时间。第二天的网站产出集中在上午3小时。第三天战斗了一整天。能做多少取决于能连续专注多久。

03

半个西瓜的威力

真的大。干完高强度工作之后不要吃整半个西瓜,会直接失去下午。这是本次端午最重要的生活经验。

04

《低俗小说》适合躺着看

瘫在沙发上,脑袋放空,时不时因为昆汀的台词笑一下。跟上午改EKF代码的状态形成完美反差。

端午三天,忙碌程度爆表,产出质量在线,休息勉强及格(岳麓山+低俗小说+冰可乐)。

说实话,代码大多是AI在写。我负责定方向、看SBG Center截图、告诉AI哪里不对劲、验证结果。真正的战斗不是一行行敲代码,而是知道自己要什么,知道问题出在哪,然后指挥AI去改

接下来打算结合AI的能力,继续自学STM32和惯导——不是让AI代替我,而是让AI跟着我一起学。自己理解原理,AI帮忙落地。

P.S. WorkBuddy积分耗光了,它要老实一阵子了。

← 返回