记录一下学习数字滤波器时的碎碎念
只是卡尔曼滤波而已说的这么高级
先是基础的低通/高通滤波
模电中A=Vout/Vin
控制器看到的从来不是“真实速度”,而是经过传感器、采样、量化和滤波之后的速度估计。 估得不准,PID 再漂亮也只能围着一个不可靠的数字打转。
通带,阻带,过渡带
低通,高通,带通,带阻
放弃了我(https://www.bilibili.com/video/BV1Rh41117MT/)
(卡尔曼滤波): 666还有状态方程观测方程,还有现控
当前观测值 先验估计值(~上一次最优估计值) -> 最优估计值
卡尔曼增益
在实际开发(如无人机、两轮自平衡车、机器人)中,单靠卡尔曼滤波是不够的,通常采用组合拳:
• 上电静态校准(Static Calibration):在设备刚开机、保持绝对静止的几秒钟内,连续采集几百个陀螺仪数据求平均值,作为系统的初始零漂直接扣除。
• 硬件导热/恒温:尽量让 IMU 芯片远离发热源,或者进行软件温度补偿。
• 算法选择:
• 在算力有限的嵌入式芯片(如 STM32)上,经典的扩展卡尔曼滤波(EKF)或简化版的互补滤波(Complementary Filter)/ 互补卡尔曼更常用。
• 在现代高性能系统中,互补滤波(如马哈尼 Mahony 或马奇尼 Madgwick 算法)由于计算量小且对零漂有不错的抑制效果,有时比标准卡尔曼滤波更受欢迎。
就是因为不知道噪声,所以才用卡尔曼来修正,如果知道噪声,就不用修正啦
数据-传感器-滤波器-控制器(pid, lqr, mpc)(微机或者电脑计算)-执行单元(电机/液压系统)-机械结构
两种临界区:
硬件:
uint32_t saved = __get_PRIMASK(); // 保存原状态
__disable_irq();
// doing something
__set_PRIMASK(saved);
// 裸机任务表的任务函数内是可以用硬件临界区的
软件: (主要是线程啥啥的)
std::mutex mtx;
mtx.lock();
// doing something
mtx.unlock()
// or
std::lock_guard<std::mutex> guard(mtx); // 作用域在当前锁所在的大括号内(RAII)

浙公网安备 33010602011771号