• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 模擬技術 > 設計應用 > 一文搞懂《擴展卡爾曼濾波融合IMU和ODOM》

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

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

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

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

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

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

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

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

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

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

    但現實中,很多目標的運動是 “非線性的”:

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

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

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

    總結:關系就像 “基礎款計算器” 和 “科學計算器”

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

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

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

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

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

    IMU(慣性測量單元)

    • 定義

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

      • 加速度計

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

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


    ODOM(里程計)

    • 定義

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

      • 輪式里程計

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


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

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

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


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

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

    假設你現在要走路去超市,EKF 先根據 IMU 的信息,實時猜你每一秒的位置和速度。比如:

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

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

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


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

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

    走了一會兒,ODOM 這個 “路標” 說話了:“根據輪子轉的圈數,你現在應該在‘離小區門口 1.2 米’的地方”(ODOM 的測量值)。

    這時候 EKF 要做兩件事:

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

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

    比如:

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

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

    修正后,誤差范圍也會縮小(比如從 0.5 米變成 0.2 米),因為兩個線索交叉驗證了,結果更靠譜了。

    循環往復,越猜越準

    之后就重復這兩步:

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

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

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

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


    4、晦澀難懂的預測公式

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

    狀態預測方程的直觀理解

    這個方程描述了如何根據上一時刻的狀態估計當前的控制輸入,來預測當前時刻的系統狀態

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

    上一時刻的狀態:就像你現在知道自己的位置和速度

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

    數學符號詳細解釋

    讓我們拆解這個方程:

    符號含義:

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

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

      • x?_k|k-1

        表示:基于 k-1 時刻的信息,對 k 時刻狀態的預測
      • x?_k-1|k-1

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

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

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

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

    假設我們有一個在平面上移動的機器人,它的狀態包括:

    • 位置:x, y

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


    總結

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

    • 基于上一時刻的狀態估計

    • 加上控制輸入的影響
    • 考慮系統的不確定性
    • 預測當前時刻的狀

    通過這個方程,EKF 能夠利用 IMU 等高頻率的控制輸入數據,不斷預測系統的狀態變化。
    5、過程噪聲協方差矩陣
    過程噪聲協方差矩陣

    1. 矩陣結構與狀態對應

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

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

    •  i=j(對角線元素):表示單個狀態量的預測噪聲強度(不確定性大小)。
    •  i≠j(非對角線元素):表示兩個狀態量之間的噪聲相關性(通常設為 0,假設各狀態噪聲獨立)。

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

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

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

    y
    0.05
    y 方向位置的預測噪聲

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

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

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

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

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

    vpitch
    0.01
    俯仰角速度的預測噪聲

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

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

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

    3. 如何調參?核心邏輯

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

    • 對角線值越小

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

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


    一句話總結

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



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 广安市| 九台市| 阿合奇县| 锦州市| 岢岚县| 五寨县| 大荔县| 阜阳市| 上虞市| 马龙县| 南涧| 青州市| 西丰县| 武川县| 同心县| 中阳县| 新和县| 阿拉善左旗| 集贤县| 丹寨县| 山东| 通河县| 金湖县| 兴海县| 镇康县| 拜城县| 鄂温| 阿合奇县| 龙泉市| 鹤岗市| 开化县| 道真| 海淀区| 潮安县| 南澳县| 酒泉市| 马山县| 宁晋县| 郑州市| 无棣县| 萨嘎县|