卡尔曼滤波器可以估计模型的一个因子吗?两个状态变量的乘积

信息处理 卡尔曼滤波器
2022-02-24 23:26:02

我已经为一个简单的钟摆写下了一个离散的状态空间模型,其中包含状态变量角度、角速度和角加速度。

这可以很容易地插入一个简单的卡尔曼滤波器来估计状态。但是,如果字符串的长度l是恒定的但未知,有没有办法使用卡尔曼滤波器来估计l状态的其余部分?

我不知道如何线性化这个术语angle / lEKF 在这里有帮助吗?

g = 9.81;
l = 3;
dt = 30e-3; % 30 ms

A = [   1  dt   0;   % angle_{k+1}   = angle_k   + dt * ang_vel_k
        0   1  dt;   % ang_vel_{k+1} = ang_vel_k + dt * ang_acc_k
      -g/l  0   0 ]; % ang_acc_{k+1} = -g/l * angle_k

B = [ 5/360*2*pi*dt; 0; 0]; 
C = [ 1 0 0 ];
D = 0;
sys = ss(A,B,C,D,dt);
1个回答

是的,扩展卡尔曼(或无味卡尔曼,或卡尔曼滤波器的其他扩展以处理非线性系统)在这里会有所帮助。

修正钟摆运动的微分方程也会有所帮助——基本上,角加速度不是一个状态;像这样对待它只会使事情变得混乱。

对于 EKF 或其他非线性卡尔曼,让您的状态向量为,其中是角度,是角速率,是长度('l' 看起来太像 '1')。请注意,这里没有角加速度,但有那个长度。忽略噪声,您的运动方程为(包括长度):x=[θ,ω,d]Tθω=θ˙d

x˙=f(x)=[ωglθ0]

(请注意,上面使用;即它使用函数的小角度近似。你已经越过了非线性系统 Rubicon,所以如果你想,你可以使用,因为无论如何你都会非线性 - 这样做取决于你是否预计角度偏移会很大足以使的小角近似成立。ω˙=gdθsinω˙=glsinθsinθ

对于 EKF,你“简单地”需要计算的向量导数以用于你的连续时间然后将其离散化,并在您的 EKF 中使用它。xAA=xf(x)