【SLAM】状态估计系统和卡尔曼滤波

本文探讨了状态估计在动态系统中的作用,特别是在SLAM系统中,对比了卡尔曼滤波与非线性优化方法的优劣。卡尔曼滤波是一种基于线性系统状态方程,利用输入输出观测数据进行系统状态最优估计的算法,适用于去除噪声并实时更新数据。然而,由于其马尔可夫性假设,非线性优化方法在考虑全局状态估计时更为优越。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.状态估计

> 状态估计(state estimation)根据可获取的量测数据估算动态系统内部状态的方法。对系统的输入和输出进行测量而得到的数据只能反映系统的外部特性,而系统的动态规律需要用内部(通常无法直接测量)状态变量来描述。因此状态估计对于了解和控制一个系统具有重要意义。状态估计(state estimation)根据可获取的量测数据估算动态系统内部状态的方法。对系统的输入和输出进行测量而得到的数据只能反映系统的外部特性,而系统的动态规律需要用内部(通常无法直接测量)状态变量来描述。因此状态估计对于了解和控制一个系统具有重要意义。

按照之前讨论所讲,我们对于2帧之间进行估计,这是一种时间暂时性估计,就是短期的,但是SLAM系统是一个长期运行的系统,我们希望长期估计相机的位姿运动等等。这就是需要一定的状态估计的知识。

上图是我们假设的系统状态。

x为状态,z为观测。很明显观测方程的数量要远远多于状态方程。用方程表达一个系统,加上高斯噪声。

对于非线性优化问题,我们可以使用最大似然估计法,将最大似然估计问题转化为最小二乘问题的求解。

我们假设当前观测为u和z,需要估计x和y。

这个问题就转换为了最大似然值了。

2.卡尔曼滤波

> 卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。
数据滤波是去除噪声还原真实数据的一种数据处理技术,Kalman滤波在测量方差已知的情况下能够从一系列存在测量噪声的数据中,估计动态系统的状态。由于它便于计算机编程实现,并能够对现场采集的数据进行实时的更新和处理,Kalman滤波是目前应用最为广泛的滤波方法,在通信,导航,制导与控制等多领域得到了较好的应用。

当我们假设当前状态只和上一个状态有关时,就隐含了马尔可夫性,这是一种估计状态的方法。

推导过程如下:
e(k|k-1)=X(k)-X(k|k-1)=A( x(k)-x(k-1|k-1) ) + W(k)
P(k|k-1)=E{ ( X(k) - X(k|k-1) ) ( X(k) - X(k|k-1) )’}
=E{ ( AX(k-1)+BU(k)+W(k)-AX(k-1|k-1)-BU(k) ) ( AX(k-1) + BU(k) + W(k) - AX(k-1|k-1) - BU(k) )’}
=E{ ( A( X(k-1) - X(k-1|k-1) ) + W(k) ) ( A( X(k-1) - X(k-1|k-1) )+W(k) )’}
=E{ A( X(k-1) - X(k-1|k-1) ) ( X(k-1)-X(k-1|k-1) )’A’+ W(k)W(k)’}
=A E{ ( X(k-1) - X(k-1|k-1) ) ( X(k-1) - X(k-1|k-1) )’} A’+ E{ W(k)W(k)’}
=A P(k-1|k-1) A’+ Q

这里不做过多赘述。

3.实践

接下来我们通过程序来理解一下这个卡尔曼滤波的原理:

function output = kalmanFilter(data, Q, R, N)
 
if ~exist('Q', 'var')
    Q = 0.01;
end
if ~exist('R', 'var')
    R = 1;
end
if ~exist('N', 'var')
    N = 0;
end
 
X = 0;
P = 1;
A = 1;
H = 1;
 
output = zeros(size(data));
 
for ii = N + 1 : length(data)
   X_k = A * X;
   P_k = A * P * A' + Q;
   Kg = P_k * H' / (H * P_k * H' + R);
   z_k = data(ii - round(rand() * N));
   X = X_k + Kg * (z_k - H * X_k);
   P = (1 - Kg*H) * P_k;
   output(ii) = X;
end
 
end

由于卡尔曼滤波存在各种各样的问题,我们在如今的slam系统中更多的使用非线性优化的方法,不再使用卡尔曼滤波。

再来一个例子,这个实例希望大家自己分析结果。

%-------------------------------------------------------------------------
% DESC: Simulation of measured voltage measurements with 0.1 volt RMS white 
%       noise (actual voltage should be -0.37727 volts).
% The Kalman filter is used to estimate the optimal voltage value.
%-------------------------------------------------------------------------

clear all; clc;

N=50; 
x(1)=0;  %初始估计状态
p(1)=1;  %初始估计协方差
Q=10^-6;  %过程噪声的协方差
R=10^-2;  %观测噪声的协方差
t=1:N; 

%---------------------NOISY MEASUREMENT-----------------------------------
voltage = [-0.46687,-0.36375,-0.39117,-0.49361,-0.2589,-0.37881,-0.32365,...
    -0.44891,-0.44283,-0.34583,-0.36659,-0.19245,-0.40478,-0.15601,-0.22642,...
    -0.57178,-0.54532,-0.43462,-0.39585,-0.37638,-0.29358,-0.4495,-0.44942,...
    -0.39739,-0.37932,-0.34938,-0.27144,-0.3151,-0.55233,-0.30754,-0.29612,...
    -0.31364,-0.24626,-0.34456,-0.44457,-0.3922,-0.62217,-0.32994,-0.36558,...
    -0.43638,-0.44274,-0.48534,-0.38204,-0.33934,-0.41031,-0.42726,-0.38087,...
    -0.39475,-0.473,-0.24802;];
%-------------------------------------------------------------------------

for i=2:N 
    y(i)=x(i-1); %预测的状态
    p1(i)=p(i-1)+Q; %预测的协方差
    kg(i)=p1(i)/(p1(i)+R); %卡尔曼增益
    x(i)=y(i)+kg(i)*(voltage(i)-y(i)); %更新的状态
    p(i)=(1-kg(i))*p1(i); %更新的协方差 
end 

plot(t,x,'r');
hold on 
plot([0 50],[-0.37727 -0.37727],'k');
plot(voltage,'-b');
axis([0 50 -0.7 0]);
xlabel('time');
ylabel('voltage');

4.小结:

通常情况,在计算资源严重受限的时候,我们会使用卡尔曼滤波,但是,现有的非线性优化的方法要优于卡尔曼滤波的方法,因为卡尔曼滤波有着马尔可夫性的假设,我们在slam系统中更加希望使用全局的状态来估计下一个状态,所以非线性优化无疑是一个更好的办法。

作者:Timothy D. Barfoot ,最新2018高清资源,完整395页,持续更新。 版权归作者所有,任何形式转载请联系作者。 State Estimation for Robotics早已在SLAM领域广为流传,几乎是SLAM入门必读的经典书籍之一。本书深入讲解了状态估计的机理、三维几何学基础、矩阵李群以及位姿点的估计方法等,尤其对基于滤波器的状态估计方法的介绍全面深刻。现在在高翔、颜沁睿、刘富强等十多位SLAM专家、爱好者的共同努力下,中文译本《机器人学中的状态估计》也终于得以面世。这对于国内广大SLAM爱好者来说,可谓一大福音,值得隆重推荐。 ——浙江大学教授,CAD & CG国家重点实验室计算机视觉团队带头人,章国锋 State Estimation for Robotics是加拿大多伦多大学Barfoot教授的名著,也是机器人方向的经典教材之一。该书侧重数学基础,先花了三分之二的篇幅来介绍概率、几何方面的基础知识,最后又回到应用问题,详细介绍了基于点云图像的姿态估计。 这是一本难得的既注重基础又顾及前沿研究问题的教材。书的译者是一群对机器人技术富有激情的年轻人,他们中的许多人在计算机视觉、机器人等科研领域开始崭露头角。这本译作倾注了他们的满腔热忱对国内技术发展的期望。 ——加拿大西蒙弗雷泽大学终身教授,谭平 本书介绍了机器人领域的重要核心技术——状态估计。这本书不只介绍了一些传统的经典算法,也涉及了最新的行业进展应用,同时还传授了一些基础的数学工具。本书使用严谨的数学语言,同时又深入浅出,是初学者不可多得的良师益友。 ——自动驾驶公司AutoX创始人,原美国普林斯顿大学计算机视觉与机器人实验室主任,麻省理工学院博士 肖健雄
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值