2

的溢出感知執行我試圖實現卡爾曼濾波器獲得物體的定向,使用3軸加速計和3軸陀螺儀作爲傳感器。卡爾曼濾波器

選擇此過濾器的預測階段的動態模型是直線前進,它是:

new_angle = angle + angular_velocity * time 
new_angular_velocity = angular_velocity 

但我沒有浮點支持的手,我需要的精度每一位來建模角度。因此,我的計劃是將角度表示爲32位整數數據,表示完整轉爲2 pi爲2^32個小步驟。 因此,整數溢出處理換行(2 pi0方向相同)是免費的。

但是,這也構成了對過濾器的一個問題:如果估計的角度將,說359°,我的測量,然後過濾器是假設一個巨大的創新,導致不確定性和奇數值。

有什麼辦法讓過濾器意識到這種可能的包裝?在上述情況下僅創新

爲了規避這個問題,我想過使用角度的差異,而不是角度,但我不能找到合適的型號。

回答

2

今天我有類似KF同樣的問題......但我沒有限制你。

這裏是我所做的:

  1. 的predicted_angle值被計算剛過:

    //避免0和360
    之間跳躍如果(measured_angle < pi/2之間& & predicted_angle> 3 * pi/2)prediction_angle = predicted_angle - 2 * pi;
    if(measured_angle> 3 * pi/2 & & estimate_aAngle < pi/2)predicted_angle = predicted_angle + 2 * pi;

  2. 規範化estimated_angle經計算後。

如果你不介意犧牲一點精度可能會切換到有符號整數[-2 * PI,+ 2 * PI)範圍內,做同樣的。

P.S.如果每個樣本的最大角度變化很小,我認爲在KF中使用內部角度偏移可以犧牲一個比特的精度。偏移量必須大於該值。 您將擁有2^32 = 2 * Pi + 2 * OFFSET範圍而不是2 * pi。在KF中,將此OFFSET添加到局部角度變量並返回estimated_angle = normalize(offset_estimated_angle - OFFSET,0-2 * pi)。

HTH