2 回答

TA貢獻1802條經驗 獲得超5個贊
我沒有運行你的代碼,但你的變量Err_est_x和Err_est_y只會變得更?。磕仨氃诿看握{用后增加這些變量,updateCall如下所示:
# in method paint()
#
kg_x, Est_x, Err_est_x = updateKal(x, kg_x, Est_x, Err_est_x, 0.5)
kg_y, Est_y, Err_est_y = updateKal(y, kg_y, Est_y, Err_est_y, 0.5)
Err_est_x = 1.1 * Err_est_x + 0.1 # new code
Err_est_y = 1.1 * Err_est_y + 0.1 # new code
解釋:如果您的估計誤差較低,則新的噪聲測量的信息也較低 [1]。這在您的可視化中也可見:最初,紅色卡爾曼估計“非??臁?,因為您的估計誤差很高。但是,當您的估計誤差越來越小時,您的紅色卡爾曼估計就會“減慢完成”。
請注意,我沒有運行您的代碼,因此所選值(1.1 和 0.1)可能過高或過小。增加/減少這兩個數字以增加/減少紅色卡爾曼估計的“速度”。
[1] 例如,如果您的估計誤差為 0,則新測量的信息增益也為 0。

TA貢獻1966條經驗 獲得超4個贊
我認為您缺少的是流程模型。如果您正在測量靜態參數,這樣的策略是有效的,但如果您正在跟蹤的狀態本身正在發生變化,就像這里一樣,您需要一個過程模型來考慮這些變化。您將在每個更新步驟之前執行流程模型估計步驟。
本例中的過程模型將涉及一些基本的牛頓物理學。我建議擴展您正在跟蹤的狀態(x 和 y)以包括速度(vx,vy)和加速度(ax,ay)。因此,您的狀態向量將是X = [xy vx vy ax ay] T ,而不是 [xy] T。(您可以根據每個時間步長的運動量得出速度,并且可以嘗試從多個時間步長的運動中得出實際加速度,或者假設一個合理的加速度可能就足夠了,因為真實加速度這種情況可能會不穩定并且不容易建模。)您還需要一個過程矩陣F來將X轉換為測量向量Z(即, [xy] T,您正在進行的模糊測量)。在這種情況下,F將是一個 2x6 矩陣。
添加回答
舉報