自動駕駛中的傳感器融合算法:第一部分-卡爾曼濾波器和擴展卡爾曼濾波器

介紹:

追蹤靜止和移動的目標是自動駕駛技術領域最爲需要的核心技術之一。來源於多種傳感器的信號,包括攝像頭,雷達,以及激光雷達(基於脈衝激光的測距設備)等傳感器組合的組合體來估計位置,速度,軌跡以及目標的種類,例如其他車輛和行人。詳情請見:Link(原文中的鏈接是無效的因此我將原作者的文章連接替換了)

你可能會問——爲什麼我們需要這麼多的傳感器?

這是因爲每種傳感器提供了追蹤物體所需要的不同精度和類型的信息,尤其是在不同天氣條件下。比如,以激光雷達爲基礎的傳感器能很好地解決位置的問題,但是在糟糕的天氣條件下其精度和性能都會有很大程度的下降。另一方面,雷達的空間解決方案也相對便宜很多,與此同時,在惡劣的天氣條件下也能提供更準確的數據。

同樣的,不像激光雷達傳感器,雷達可以提供目標的速度和方位。雷達數據也是計算密集型的,因爲一束激光發射非常多包含每個獨立的激光點的範圍的數據,它使得你必須理解你的算法。

組合來自不同傳感器信息的技術稱之爲傳感器融合技術。之所以較早的討論這個,是因爲應用在傳感器融合之上的算法必須處理短暫的,充滿雜訊的輸入,生成可靠的運動狀態估計的概率。

該文章展示了在位置的追蹤和估計中最通用的算法,卡爾曼濾波器的變種——‘擴展卡爾曼濾波器’。在進一步的文章中,我們會兼顧到其他技術比如無損卡爾曼濾波器和粒子濾波器。

1.使用激光雷達數據的基礎卡爾曼濾波器:

卡爾曼濾波器的歷史已經超過半個世紀,但是對於輸入數據的噪聲信息和狀態估計的平滑來說仍然是最有效的傳感器融合算法之一.它假定位置參數是符合高斯分佈的,即完全可以被均值和協方差參數化:X∼N(μ, σ²)

當傳感器的信息流開始的時候,卡爾曼濾波器使用一系列的狀態信息來預測和衡量更新步驟去更新被追蹤目標的信心值(概率).預測和更細心的步驟如下圖所示:

狀態預測:

我們會使用一個簡化的線性狀態空間模型(Model Link)去闡述濾波器的工作方式. 一個系統在t時刻的線性狀態可以從t-1時刻根據以下等式被估計:

衡量更新:

卡爾曼濾波器的下一部分則是去使用實測參數z去更新預測狀態'x',通過縮放因子(通常稱之爲卡爾曼增益)成比例的計算估計值和測量值之間的誤差.

你可以在以下鏈接中找到衡量更新等式的求導:Derivation Link

舉個例子

理論部分結束!讓我們嘗試用一些代碼去表示一些卡爾曼濾波器的基礎過程。

對此,我們模擬一個目標,它的狀態被四維向量x=[px py vx vy]所描述。

在這個例子中測量傳感器是返回位置數據但是沒有速度信息的激光傳感器。爲了觀測到速度信息我們需要使用雷達傳感器數據。在接下來的章節中,當我們討論擴展卡爾曼濾波的時候我們將會涉及到這些。

讓我們以一些假設開始:

僞代碼:

基礎版本的卡爾曼濾波器代碼步驟列在了下面。你可以找到一個基礎的例子:code link

"""prediction step"""
def predict(x, P):
    x = (F * x) + u 
    P = F * P * F.transpose() #Acceleration noise Q is assumed to be zero
    return x, P

"""measurement update step"""
def update(x, P,z):
    # measurement update
    Z = matrix([z])
    y = Z.transpose() - (H * x)
    S = H * P * H.transpose() + R
    K = P * H.transpose() * S.inverse()
    x = x + (K * y)
    P = (I - (K * H)) * P
    return x, P

最後的迭代步驟通過測量和應用預測以及濾波器的更新步驟如下所示:

plot_position_variance(x,P,edgecolor='r')  #plot initial position and covariance in red   
for z in measurements:
    x,P = predict(x, P)
    x,P = update(x, P,z)
    plot_position_variance(x,P,edgecolor='b') #plot updates in blue
    print(x)
    print(P)

卡爾曼濾波器迭代:濾波器在迭代之後向真實值收斂

下方的圖闡述了濾波器在每次迭代中狀態向量的px,py維度和位置的協方差發生了哪些變化。紅圈表示初始過程不確定性。隨着預測和測量更新,我們開始有了較小的誤差(半徑),狀態估計開始越來越精確。

如同你看到的,最終估計的狀態向量x[11.99,2.05]非常接近最終的觀測值,誤差最小值也縮小到了0.05。

2.擴展卡爾曼濾波器——使用雷達數據

雷達數據帶來了一些更困難的挑戰。雷達返回數據值的是基於極座標系,其由三個部分構成:

- ρ /Range(從原點到此的距離) - ϕ / bearing ( ρ 和 x的夾角), - ρ˙:接近率/距離變化率

由於沒有H矩陣將狀態向量映射到雷達的測量空間,我們需要一個函數h(x)來將狀態空間銀蛇到測量空間以測量更新步驟。這個方法是映射極座標到笛卡爾座標的方法的衍生方法,定義如下:

這個映射闡述了一個非線性函數,它將使得卡爾曼濾波器的過程和測量符合高斯分佈的假設無效。擴展卡爾曼濾波器使用局部線性模型來逼近非線性模型,然後使用卡爾曼濾波應用到逼近值上。局部線性逼近是通過計算當前狀態估計的一階泰勒展開得出的。一階的逼近也叫雅克比矩陣。我們不會在這裏過多介紹雅克比矩陣的推到過程。相關內容在網絡中可以找到優秀的介紹,但是如果你想要直接使用這些東西,你可以在以下的github引用中找到代碼實例:Github Link

實現參考

你可以在github存儲庫中找到關於Kalman過濾器的c++編寫代碼:

代碼示例:code link

總結

到此我們涉及到了一些目標追蹤領域傳感器融合的基本算法。在下一個階段,將着眼於無損卡爾曼濾波,它將解決投影逼近值的問題。我們也會看看日益流行的基於蒙特卡洛數值積分的粒子濾波器。

想要繼續查看該篇文章相關鏈接和參考文獻?

長按鏈接點擊打開或點擊底部【閱讀原文】:

http://ai.yanxishe.com/page/TextTranslation/1136

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章