久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 模擬技術(shù) > 設(shè)計應(yīng)用 > 一文搞懂《擴展卡爾曼濾波融合IMU和ODOM》

一文搞懂《擴展卡爾曼濾波融合IMU和ODOM》

作者: 時間:2025-07-29 來源:硬十 收藏
1、什么是?

(Kalman filtering)是一種利用線性系統(tǒng)狀態(tài)方程,通過系統(tǒng)輸入輸出觀測數(shù)據(jù),對系統(tǒng)狀態(tài)進行最優(yōu)估計的算法。由于觀測數(shù)據(jù)中包括系統(tǒng)中的噪聲和干擾的影響,所以最優(yōu)估計也可看作是濾波過程。
就像移動靶在運動中,每一刻都有 “實際在哪”“跑多快”“往哪個方向拐” 這些真實狀態(tài)(對應(yīng)系統(tǒng)狀態(tài)向量x)。但狙擊手看不到這些 “真實值”,只能通過瞄準鏡(傳感器)得到帶誤差的觀測(比如 “好像在 100 米處,可能偏左半米”)。

觀測數(shù)據(jù)里的 “噪聲和干擾”,就像瞄準鏡前的樹葉、霧氣、樹木遮擋

當樹葉擋住視線時(觀測數(shù)據(jù)突然不準),不會完全相信這一幀的觀測,而是更多依賴 “基于目標運動規(guī)律的預(yù)判”(比如 “剛才目標在勻速跑,不可能突然跳 10 米,這幀數(shù)據(jù)肯定是被樹葉擋了,忽略它”)。

當視線清晰時(觀測可靠),濾波會用新觀測修正之前的預(yù)判(比如 “果然在 105 米,和我想的差不多,稍微調(diào)一下瞄準點”)。
卡爾曼濾波就像一個經(jīng)驗豐富的狙擊手:用目標的運動規(guī)律(系統(tǒng)模型)做預(yù)判,用帶噪聲的觀測(傳感器數(shù)據(jù))做修正,最終在干擾中鎖定真實位置。這個過程既不盲目相信單次觀測(過濾噪聲),也不固執(zhí)依賴歷史判斷(結(jié)合新信息),從而實現(xiàn) “最優(yōu)估計”。
2、擴展卡爾曼濾波(EKF)和 卡爾曼濾波(KF)
卡爾曼最初提出的濾波理論只適用于線性系統(tǒng),Bucy,Sunahara等人提出并研究了擴展卡爾曼濾波(Extended Kalman Filter,簡稱EKF),將卡爾曼濾波理論進一步應(yīng)用到非線性領(lǐng)域。EKF的基本思想是將非線性系統(tǒng)線性化,然后進行卡爾曼濾波,因此EKF是一種次優(yōu)濾波。其后,多種二階廣義卡爾曼濾波方法的提出及應(yīng)用進一步提高了卡爾曼濾波對非線性系統(tǒng)的估計性能。二階濾波方法考慮了Taylor級數(shù)展開的二次項,因此減少了由于線性化所引起的估計誤差,但大大增加了運算量,因此在實際中反而沒有一階EKF應(yīng)用廣泛。
EKF全稱ExtendedKalmanFilter,即擴展卡爾曼濾波器,一種高效率的遞歸濾波器(自回歸濾波器)。

擴展卡爾曼濾波(EKF)是卡爾曼濾波(KF)的 “升級版”,專門用來解決卡爾曼濾波搞不定的場景。我們可以繼續(xù)用 “狙擊槍瞄準移動靶” 的比喻來理解它們的關(guān)系:

1. 卡爾曼濾波(KF):只能對付 “規(guī)矩的目標”

卡爾曼濾波的核心前提是:目標的運動規(guī)律是 “線性的”。
比如移動靶在勻速直線運動(速度不變、方向不變),或者勻加速運動(每秒多跑 1m/s)—— 這些運動可以用簡單的線性公式描述(比如 “下一秒位置 = 現(xiàn)在位置 + 速度 × 時間”)。
這時候,狙擊手只要用 “勻速 / 勻加速模型” 就能精準預(yù)判,卡爾曼濾波的公式也能直接套用,計算簡單又高效。

2. 擴展卡爾曼濾波(EKF):能搞定 “調(diào)皮的目標”

但現(xiàn)實中,很多目標的運動是 “非線性的”:

  • 比如移動靶突然轉(zhuǎn)彎、繞圈,甚至做 S 形走位(運動方向和速度的關(guān)系不是簡單的線性公式);

  • 或者傳感器的觀測方式是非線性的(比如用雷達測角度,角度和位置的關(guān)系是三角函數(shù),不是直線關(guān)系)。

這時候,卡爾曼濾波就失效了 —— 因為它的公式只能處理線性關(guān)系,面對轉(zhuǎn)彎的目標,用 “勻速直線” 模型預(yù)判會偏差越來越大。
EKF 的作用就是 “把非線性問題掰彎了變成線性的”
它會在 “當前估計的狀態(tài)點” 附近,用一條直線(切線)近似目標的非線性運動軌跡(就像用很多小線段拼接成曲線)。這樣一來,就能繼續(xù)套用卡爾曼濾波的線性公式來計算,只不過每次都要重新算這條 “切線”(專業(yè)上叫 “線性化”,用雅克比矩陣實現(xiàn))。

總結(jié):關(guān)系就像 “基礎(chǔ)款計算器” 和 “科學計算器”

  • 卡爾曼濾波是 “基礎(chǔ)款”:只能算加減乘除(線性問題),簡單直接,速度快。
  • 擴展卡爾曼濾波是 “科學計算器”:能處理三角函數(shù)、指數(shù)等復(fù)雜運算(非線性問題),通過 “近似線性化” 擴展了適用范圍,但計算更復(fù)雜一點。

  • 兩者的核心邏輯(“預(yù)判 + 修正” 的濾波思想)完全一致,只是 EKF 能應(yīng)對更貼近現(xiàn)實的非線性場景。

3、EKF融合IMU和ODOM的計算過程

咱們可以把 EKF 融合 IMU 和 ODOM 的過程,想象成一個 “猜位置” 的游戲,你需要結(jié)合兩種 “線索” 來不斷修正自己的猜測,讓結(jié)果越來越準。

IMU(Inertial Measurement Unit)和 ODOM(Odometry)在機器人領(lǐng)域以及其他涉及運動感知和定位的系統(tǒng)中是非常重要的概念,以下是它們的詳細介紹:

IMU(慣性測量單元)

  • 定義

    IMU 是一種能夠測量物體三軸加速度和三軸角速度的組合式傳感器,有的 IMU 還集成了磁力計 ,可以測量物體的磁場信息,輔助確定物體的方向。它是一個小型化、高度集成的系統(tǒng),能夠?qū)崟r提供物體的運動狀態(tài)信息。
  • 工作原理

    • 加速度計

      :基于牛頓第二定律,通過檢測內(nèi)部質(zhì)量塊在加速度作用下產(chǎn)生的力,來測量加速度。比如,當物體加速時,質(zhì)量塊會相對于傳感器內(nèi)部的固定結(jié)構(gòu)產(chǎn)生位移,通過檢測這種位移并將其轉(zhuǎn)換為電信號,就可以得到加速度的大小和方向。
    • 陀螺儀

      :利用科里奧利力原理工作。當陀螺儀的殼體發(fā)生旋轉(zhuǎn)時,內(nèi)部的旋轉(zhuǎn)質(zhì)量塊會受到科里奧利力的作用,從而產(chǎn)生微小的振動或偏移,通過檢測這些變化就可以測量出角速度。


ODOM(里程計)

  • 定義

    里程計是一種用于測量物體在運動過程中移動距離和方向的裝置或算法,通過對運動過程中的一些參數(shù)進行累計和計算,來確定物體的位置變化。
  • 工作原理

    • 輪式里程計

      :常見于輪式機器人,通過安裝在輪子上的編碼器來記錄輪子的轉(zhuǎn)動圈數(shù)。結(jié)合輪子的半徑,就可以計算出機器人在平面上移動的距離。同時,通過一些額外的傳感器(如安裝在差速驅(qū)動機器人兩個輪子上的編碼器,對比兩個輪子的轉(zhuǎn)動圈數(shù)差異),可以推算出機器人的轉(zhuǎn)向角度和方向變化。


先給兩個 “線索源” 做個簡單畫像:

  • IMU:像你身上的 “運動傳感器”,能實時感覺到自己在怎么動 —— 比如走得快還是慢、有沒有轉(zhuǎn)彎(用角速度測轉(zhuǎn)彎,用加速度測加速)。但它有個毛?。翰露嗔藭?“跑偏”(比如站著不動,它可能會慢慢覺得你在挪位置,這叫 “漂移”)。

  • ODOM:像你手里的 “路標導航”,每隔一會兒告訴你當前的位置和速度(比如輪式里程計通過輪子轉(zhuǎn)了多少圈算位置,或者視覺里程計通過攝像頭看環(huán)境算位置)。它相對穩(wěn)定,不會輕易跑偏,但更新沒那么快(比如輪子轉(zhuǎn)半圈才出一次數(shù)據(jù)),而且偶爾會 “騙你”(比如輪子打滑時,它算的位置就不準了)。


EKF 做的事,就是用 IMU 的 “實時感覺” 先“猜”,再用 ODOM 的 “路標信息” 來修正,最后得到一個又快又準的結(jié)果。具體分兩步:

第一步:用 IMU “猜”(預(yù)測階段)

假設(shè)你現(xiàn)在要走路去超市,EKF 先根據(jù) IMU 的信息,實時猜你每一秒的位置和速度。比如:

  • 上一秒你在 “小區(qū)門口”(上一時刻的位置),速度是 “1 米 / 秒向前”(上一時刻的速度)。

  • 這一秒 IMU 告訴你:“你沒轉(zhuǎn)彎(角速度為 0),也沒加速(加速度為 0)”(IMU 的測量值)。

  • 那 EKF 就會猜:“這一秒你應(yīng)該在小區(qū)門口往前 1 米的地方,速度還是 1 米 / 秒”(預(yù)測的當前位置和速度)。


但 EKF 知道 IMU 會 “跑偏”,所以猜的時候會留個 “誤差范圍”:比如 “位置大概在 1 米左右,誤差可能有 0.5 米”(這個誤差會隨著 IMU 用得越久慢慢變大,就像猜多了越來越?jīng)]譜)。

第二步:用 ODOM “修正”(更新階段)

走了一會兒,ODOM 這個 “路標” 說話了:“根據(jù)輪子轉(zhuǎn)的圈數(shù),你現(xiàn)在應(yīng)該在‘離小區(qū)門口 1.2 米’的地方”(ODOM 的測量值)。

這時候 EKF 要做兩件事:

  • 對比 “猜的位置(1 米)” 和 “ODOM 說的位置(1.2 米)”,算出差了 0.2 米。

  • 看看這兩個線索誰更可信,再決定怎么修正。

比如:

  • 如果地面很平,輪子沒打滑,ODOM 很靠譜(權(quán)重高),那就多聽 ODOM 的,把猜測從 1 米調(diào)成 1.15 米(靠近 1.2 米)。

  • 如果地面坑坑洼洼,輪子可能打滑了,ODOM 不太準(權(quán)重低),就少聽 ODOM 的,調(diào)成 1.05 米(靠近原來的猜測)。

修正后,誤差范圍也會縮?。ū热鐝?0.5 米變成 0.2 米),因為兩個線索交叉驗證了,結(jié)果更靠譜了。

循環(huán)往復(fù),越猜越準

之后就重復(fù)這兩步:

  • 沒 ODOM 數(shù)據(jù)時,用 IMU 實時猜(預(yù)測),誤差慢慢變大;

  • 有 ODOM 數(shù)據(jù)時,用它修正猜測(更新),誤差縮小。

這樣一來,既利用了 IMU “反應(yīng)快” 的優(yōu)點(實時跟緊運動),又用 ODOM “不跑偏” 的優(yōu)點(修正累積誤差),最后得到的位置、速度就會又快又準。
簡單說,EKF 就像個 “聰明的裁判”:

  • 讓 IMU 當 “實時報信員”,隨時喊 “現(xiàn)在往哪動、動多快”;
  • 讓 ODOM 當 “定期校準員”,每隔一會兒喊 “實際位置在這”;
  • 裁判根據(jù)兩者的靠譜程度,綜合出一個最準的結(jié)果。


4、晦澀難懂的預(yù)測公式

這個方程是擴展卡爾曼濾波器(EKF)的核心預(yù)測方程,確實比較抽象。我來一步步解釋,讓它變得更容易理解。

狀態(tài)預(yù)測方程的直觀理解

這個方程描述了如何根據(jù)上一時刻的狀態(tài)估計當前的控制輸入,來預(yù)測當前時刻的系統(tǒng)狀態(tài)。

我們可以用一個生活中的例子來類比:

上一時刻的狀態(tài):就像你現(xiàn)在知道自己的位置和速度

控制輸入:就像你知道自己正在向前走,或者正在轉(zhuǎn)彎
預(yù)測的狀態(tài):基于現(xiàn)在的位置、速度和動作,預(yù)測出下一刻你會在哪里

數(shù)學符號詳細解釋

讓我們拆解這個方程:

符號含義:

  • x?:帶帽子的 x 表示 "估計值"(不是真實值,因為有誤差)

  • k|k-1:豎線后面的數(shù)字表示 "基于哪個時刻的信息"

    • x?_k|k-1

      表示:基于 k-1 時刻的信息,對 k 時刻狀態(tài)的預(yù)測
    • x?_k-1|k-1

      表示:基于 k-1 時刻的信息,對 k-1 時刻狀態(tài)的估計(這是上一輪更新得到的結(jié)果)
  • f():這是一個函數(shù),表示狀態(tài)如何從一個時刻轉(zhuǎn)移到下一個時刻

  • u_k:控制輸入,例如 IMU 測量的加速度和角速度

  • w_k:過程噪聲,表示系統(tǒng)的不確定性(例如,你的動作可能不完全按照計劃執(zhí)行)

更具體的例子:移動機器人

假設(shè)我們有一個在平面上移動的機器人,它的狀態(tài)包括:

  • 位置:x, y

  • 朝向:θ(角度)
  • 速度:v_x, v_y(x 和 y 方向的速度)


總結(jié)

狀態(tài)預(yù)測方程x?_k|k-1 = f(x?_k-1|k-1, u_k, w_k)的核心思想是:

  • 基于上一時刻的狀態(tài)估計

  • 加上控制輸入的影響
  • 考慮系統(tǒng)的不確定性
  • 預(yù)測當前時刻的狀態(tài)

通過這個方程,EKF 能夠利用 IMU 等高頻率的控制輸入數(shù)據(jù),不斷預(yù)測系統(tǒng)的狀態(tài)變化。
5、過程噪聲協(xié)方差矩陣
過程噪聲協(xié)方差矩陣

1. 矩陣結(jié)構(gòu)與狀態(tài)對應(yīng)

矩陣的行和列嚴格對應(yīng) EKF 狀態(tài)向量的順序,通常是:
[x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az]

每個元素 process_noise_covariance[i][j] 的含義:

  •  i=j(對角線元素):表示單個狀態(tài)量的預(yù)測噪聲強度(不確定性大?。?/span>
  •  i≠j(非對角線元素):表示兩個狀態(tài)量之間的噪聲相關(guān)性(通常設(shè)為 0,假設(shè)各狀態(tài)噪聲獨立)。

2. 逐行 / 列解讀(以你的配置為例)

下面結(jié)合常見機器人運動場景(如差速底盤、機械臂),解釋對角線元素(非對角線多為 0,代表噪聲獨立)的物理意義:

狀態(tài)維度
索引
對角線值
含義(預(yù)測時的不確定性)
位置
x
0.05
預(yù)測 x 方向位置時,假設(shè)的噪聲強度(比如機器人在 x 軸運動,模型誤差導致的位置偏差 “大概這么大”)

y
0.05
y 方向位置的預(yù)測噪聲

z
0.06
z 方向位置(高度)的預(yù)測噪聲(若機器人是地面移動設(shè)備,z 變化少,噪聲可更??;若涉及飛行則需調(diào)大)
姿態(tài)(角)
roll
0.03
橫滾角(roll)的預(yù)測噪聲(比如模型假設(shè) “姿態(tài)不變”,但實際因振動等導致的誤差)

pitch
0.03
俯仰角(pitch)的預(yù)測噪聲

yaw
0.1
偏航角(yaw)的預(yù)測噪聲(地面機器人轉(zhuǎn)向時,yaw 易受干擾,噪聲通常更大)
線速度
vx
0.025
x 方向線速度的預(yù)測噪聲(模型假設(shè) “勻速”,但實際加減速、打滑會導致誤差)

vy
0.025
y 方向線速度的預(yù)測噪聲

vz
0.04
z 方向線速度(高度變化率)的預(yù)測噪聲
角速度
vroll
0.01
橫滾角速度的預(yù)測噪聲

vpitch
0.01
俯仰角速度的預(yù)測噪聲

vyaw
0.02
偏航角速度的預(yù)測噪聲(轉(zhuǎn)向時角速度易波動,噪聲通常高于其他軸)
線加速度
ax
0.01
x 方向線加速度的預(yù)測噪聲(加速度計本身有噪聲,模型外推也會引入誤差)

ay
0.01
y 方向線加速度的預(yù)測噪聲

az
0.015
z 方向線加速度的預(yù)測噪聲(受重力影響,若用于地面設(shè)備,az 需覆蓋 “靜止時 1g” 的誤差)

3. 如何調(diào)參?核心邏輯

EKF 的本質(zhì)是 **“信任模型預(yù)測” vs “信任傳感器觀測”** 的平衡,process_noise_covariance 控制對 “模型預(yù)測” 的信任度

  • 對角線值越小

    :認為 “模型預(yù)測的狀態(tài)越準”,濾波會更依賴預(yù)測(適合模型精確的場景,比如高精度機械臂)。
  • 對角線值越大

    :認為 “模型預(yù)測的不確定性越高”,濾波會更依賴傳感器觀測(適合干擾多、模型粗糙的場景,比如地面機器人打滑)。


一句話總結(jié)

process_noise_covariance 是 EKF 的 “模型信任度旋鈕”—— 值越小,越相信模型預(yù)測;值越大,越依賴傳感器。調(diào)參時,先保持默認值跑場景,遇到 “收斂慢”(比如轉(zhuǎn)向后角度回不來)就增大對應(yīng)維度的噪聲,遇到 “太敏感”(比如傳感器一飄就跟丟)就減小噪聲,反復(fù)迭代即可。



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉