从理论到实战-如何理解那个把嫦娥送上天的卡尔曼滤波算法Kalman filter?
文章目錄
- 直觀理解
- 卡爾曼濾波怎么做的?
- 卡爾曼濾波Python代碼實踐
原文鏈接:https://zhuanlan.zhihu.com/p/77327349
直觀理解
**首先卡爾曼濾波要解決的問題是什么?**我以我軍發射一枚導彈攻擊敵方某固定位置目標為例(搞科技的總要點情懷,老是講啥小車運動,溫度計這些就太low)。導彈需要每隔一秒開雷達測量下離目標的距離。然后由于雷達有誤差,所以需要融合自己上個時刻的位置、速度等信息來更準確的確定當前時刻離目標的距離。這就是卡爾曼濾波需要解決的事
從直觀理解卡爾曼濾波是怎么解決這個問題的呢?
首先導彈已知“當前這秒雷達測量的導彈離目標的距離(我們稱它為觀測值,比如雷達直接測量導彈離目標距離7m)”,“上個時刻導彈離目標距離”和“導彈自己當前時刻的速度”這三個數據。而根據“上個時刻導彈離目標距離”和“導彈自己當前時刻的速度”可以估算出當前導彈離目標的距離(我們稱它為估計值)。比如:上一秒離目標10m,速度是4m/s,那么現在這秒估計就離目標距離是6m。這個速度數據可以從傳感器里面讀取也可以從發動機那獲得。(根據速度估計導彈距離這個計算叫做移動模型建模,想了解移動模型與觀測值和濾波算法之間的聯系可以看這篇文章《機器人移動模型:根據控制命令預測機器人位置》)
那么問題來了,導彈離目標的距離現在既有個觀測值7m,又有個估計值6m。到底相信哪個?單純相信觀測值萬一雷達被敵方干擾了呢?單純相信估計值那么萬一上個時刻的距離估計值或者速度不準呢?所以,我們要根據觀測值和估計值的準確度來得到最終導彈離目標的距離估計值。準確度高的就最終結果比重高,準確度低就占比低。如果雷達測量的那個7m準確度是49%,根據速度估計出的那個6m準確度是1%,那么最終的距離估計結果就是
(這些數據大家有直觀理解就好,文末會給出計算方法)
卡爾曼濾波怎么做的?
我們先回顧總結下直觀理解中是怎么做的。
根據上一秒導彈的位置 和 導彈的的速度估計出當前時刻導彈的位置粗略估計值。
將雷達測得導彈位置測量值和我們計算出的導彈位置粗略估計值根據這兩種數據可信度來進行線性加權和得到準確的導彈位置估計值。
在前面我們也提到了導彈的位置和雷達測量值都是有誤差的。所以卡爾曼想用概率來衡量數據的可信度。
比如:雷達測量的數據它就不只是一個數字了。而是說測量發現導彈有0.8的概率在7m那個位置,有0.1的概率在7.2m那個位置。有0.1的概率在6.9m那個位置。這些數據就叫做概率分布。概率分布的意思就是很多個值還有它們各自出現的概率多大所組成的數據就叫做概率分布。
卡爾曼認為導彈速度、導彈位置、雷達測距的測量值這些都服從正態分布(對就是高中學的那個正態分布)。這是啥意思呢?比如下面這個圖是講上個時刻導彈的位置的概率分布,從圖中看出它在10m(橫軸)那個位置的縱坐標最高所以概率最大。它在其他地方的概率相對小一點。
卡爾曼濾波Python代碼實踐
這個實踐的已知量是導彈做水平運動,已知導彈每個時刻的速度dv,和速度測量儀器的標準差是v_std,還已知每個時刻用GPS測量出導彈位置position_noise以及GPS的方差是predict_var。(注意標準差的平方是方差,不用覺得奇怪)
我們需要用卡爾曼濾波根據這些信息獲得融合兩種傳感器后的位置信息position_predict
總結
以上是生活随笔為你收集整理的从理论到实战-如何理解那个把嫦娥送上天的卡尔曼滤波算法Kalman filter?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Github推荐--PC端下载bilib
- 下一篇: 微型计算机的安装步骤,技嘉微型电脑BRI