原理
卡尔曼滤波器是一种基础预测定位算法。原理非常简单易懂。核心过程可以用一个图说明:
本质上就是这两个状态过程的迭代,来逐步的准确定位。
预测:当前状态环境下,对下一个时间段t的位置估计计算的值。
更新:更具传感器获取到比较准确的位置信息后来更新当前的预测问位置,也就是纠正预测的错误。
你可能要问为什么有传感器的数据了还要进行更新?因为在现实世界中传感器是存在很多噪声干扰的,所以也不能完全相信传感器数据。卡尔曼算法依赖于线性计算,高斯分布,我们以一维定位来介绍算法的实现。
接下来我们开更新,预测后我们获取到传感器数据,表示目前传感器发现小车的位置应该是在26这个位置,在这种情况下,我们肯定是觉得传感器的准确度比我之前的预测瞎猜要来的准确。
所以方差自然会比较小,最终我们觉得真是的小车位置应该是更靠近传感器数据的,而且方差会缩小,以至于,想想也很清楚,我猜了一个预测值,现在有个专家告诉了我相对比较靠谱的数据,那我对小车的位置的自信度肯定会上升啊。
最终小车的位置经过这个时间段t的更新就是下图红色的高斯图:
就这样不停的移动更新,最终小车的位置就会越来越准确。
一维模型下的kalman公式:
预测
更新
参考代码:
#include #include #include using namespace std;double new_mean, new_var;tuple measurement_update(double mean1, double var1, double mean2, double var2){ new_mean = (var2 * mean1 + var1 * mean2) / (var1 + var2); new_var = 1 / (1 / var1 + 1 / var2); return make_tuple(new_mean, new_var);}tuple state_prediction(double mean1, double var1, double mean2, double var2){ new_mean = mean1 + mean2; new_var = var1 + var2; return make_tuple(new_mean, new_var);}int main(){ //measurements and measurement variance double measurements[5] = { 5, 6, 7, 9, 10 }; double measurement_sig = 4; //motions and motion variance double motion[5] = { 1, 1, 2, 1, 1 }; double motion_sig = 2; //initial state double mu = 0; double sig = 1000; for (int i = 0; i < sizeof(measurements) / sizeof(measurements[0]); i++) { tie(mu, sig) = measurement_update(mu, sig, measurements[i], measurement_sig); printf(update: [%f, %f], mu, sig); tie(mu, sig) = state_prediction(mu, sig, motion[i], motion_sig); printf(predict: [%f, %f], mu, sig); } return 0;}
基于数字信号处理器实现调度器的系统设计
在逐渐令人迷失的城市里,我却有幸遇到这样的平台…
Virtualitics完成700万美元B轮融资推动其VR可视化平台
iPhone8上市时间确定:国行版iPhone8备货量仅100万台,价格“铁定有惊喜”!
基于ZYNQ的内窥镜方案
卡尔曼滤波器原理分析
智能开关开箱测评-打造智能生活新时代
基于AVR16单片机核心板的智能窗户窗帘设计
华为平板M6系列正式发布搭载了麒麟980芯片和GPU Turbo 3.0技术
ups电源有稳压功能吗_稳压器和UPS的作用一样吗
Qualcomm® Quick Charge™现已集成至超过1000款移动终端、配件和控制器中
台积电2022年开始量产3nm芯片,Yuneec推出Mantis Q无人机
虹科LIBERO Gx系列无线实时传输和定位温度记录仪
拥有Adobe国际认证,让你在ChatGPT肆虐的设计岗位下,依然坚挺
想要扩展大脑记忆容量得需要一个外部存储器
PLC的扫描过程和执行原理
如何防止毒块攻击
Oracle 推出供应商返利管理 空中客车公司签署30 架 A220-300订单
人脸识别,指纹识别,到底安不安全?
ESP32-WROOM-32E核心板 采用CH340C自动下载的设计