滤波理论在机器人状态估计里的重要性不言而喻,因此对滤波理论进行系统的了解非常有必要。本篇文章目的是从贝叶斯滤波(BF)的角度来串联现在流行的几种滤波方法:卡尔曼(KF)、扩展卡尔曼(EKF)、无迹卡尔曼(UKF)、粒子滤波(PF)等。
本篇文章主要参考文献为:
《贝叶斯滤波与平滑》,作者:希莫·萨日伽,译者:程建华等。
英文原版:《Bayesian Filtering and Smoothing》
为了简便起见,下文中用英文缩写来代表各种滤波器。
贝叶斯滤波:Bayes Filter:BF
卡尔曼滤波:Kalman Filter:KF
扩展卡尔曼:Extend Kalman Filter:EKF
无迹卡尔曼:Unscent Kalman Filter:UKF
首先,BF是什么?BF是依据机器人传感器获取的观测数据,利用Bayes公式(概率论)去估计机器人的状态的一种手段。这里的关键点在于,BF假设了机器人当前的状态服从某一个概率分布,将机器人状态估计问题建模为一个概率分布的估计问题,从而利用概率论的数学工具来解决机器人的状态估计。
那么为什么要用BF呢?这是因为,机器人的运动模型以及传感器的观测模型常常受到噪声干扰,而这种噪声都是随机性的。这样建模就可以有利于我们把噪声的分布、统计特性给估计出来,从而去除噪声,得到真实观测以及真实状态。
那么,BF具体是怎么对机器人状态估计问题建模的呢?
举一个例子,我做了一只小狗机器人,它身上装了GPS,可以时刻返回小狗机器人的位置。为了遥控它,我还给它装了一个遥控接收装置(根据小狗之前在的位置加上遥控量,也能算出小狗的位置)。但是,我遇到两个问题。一是,我花的钱太少了,买到GPS不太准,本来小狗应该在(5,3)的位置,但是测量的结果却是(5.1,2.8)。二是,小狗机器人接收到指令是前进1米,但是实际走的却可能是0.98米。小狗机器人的观测过程和运动过程中都存在噪声的干扰,这使得我想要知道我的小狗跑到哪里变得很困难,需要借助滤波手段来估计小狗位置。
基于这个例子,由于受到噪声污染,小狗机器人位置和GPS的观测可以被建模为概率分布,以表征其不确定性,即:
当然,上面这种建模方式是比较一般化的情况,而有些情况下(例如本例),k时刻的状态和观测未必和很久以前的状态与观测有关系,这时可以对这种建模方式进行一定简化。
简化一:状态量的马尔科夫性
假设k时刻小狗的位置只与k-1时刻的小狗的位置有关,由此:
当然,机器人状态估计不一定只能用求解概率分布的方法。最小二乘(观测与状态误差最小)也是常用的方法,卡尔曼滤波最早实际上是从最小二乘法的基础上推导出来的。
由于将机器人的状态估计问题考虑为了估计机器人状态的概率分布问题,那么就可以引入Bayes公式来进行计算了。这部分首先介绍Bayes公式,然后介绍利用Bayes公式估计状态概率分布的方法。
这个公式是接下去一切讨论的前题,罗列如下,不多做解释,其中a、b、c是不同的随机变量。
Bayes公式:
首先,我们需要明确BF的目标是什么?
估计机器人状态的概率分布。在小狗的例子中,就是通过手头信息估计出k时刻小狗位置的概率分布p(xk|y1:k)。而我们手头的信息就包括,1到k-1时刻小狗的位置x1:k−1以及1到k时刻 GPS的测量值y1:k。
因此,我们首先想到的方法大概是:
事实上,在k时刻,我们除了GPS的测量值y1:k以外,还有k-1时刻对小狗位置的估计p(xk−1|y1:k−1)。(需要注意,当k=1时,由于k-1=0时刻没有观测值,小狗位置的概率分布p(x0)比较特殊,与观测无关。这个分布由人为给定,被当做小狗位置的先验分布。)
因此,我们根据k-1时刻的小狗位置分布和k时刻的GPS观测可以利用递归的方法得到k时刻的位置分布,这也就是BF的核心。估计k时刻小狗位置的计算过程包括两步,如下:
1-Step:预测
这一步是用p(xk−1|y1:k−1)去得到p(xk|y1:k−1),注意这里并没有用到k时刻的观测值。
这一步之所以称为预测步,可以理解为,在已知k-1时刻机器人位置的情况下,根据机器人本身运动学模型(通常是状态方程),去预测k时刻机器人的位置。p(xk−1|y1:k−1)在这里被作为先验分布,p(xk|y1:k−1)是由机器人运动学模型预测得到的预测分布。
2-Step:更新
这一步是用观测值yk去更新预测分布p(xk|y1:k−1),从而得到k时刻机器人位置的后验分布p(xk|y1:k)。
这一步之所以称为更新是因为这步中用到了k时刻的观测量,从而将原本的预测分布p(xk|y1:k−1)更新为了后验分布p(xk|y1:k)。而这个后验分布,将作为估计k+1时刻小狗机器人位置的先验分布,从而开始下一轮的递归解算。
总结
BF的整个过程可以描述为,首先选定一个最初状态的先验分布p(x0),进行预测步,得到k=1的预测分布,再用k=1的观测去更新预测分布得到k=1的后验分布,然后将这个后验分布作为先验分布,去预测k=2的预测分布,然后以此类推。。。
虽然BF的过程看着很简单,但是实际应用起来却并没有这么容易。首先,初始的先验分布不好猜测,动态模型以及观测模型的概率分布也不容易确定,只能去假设其形式,常见的比如高斯分布。另外,公式里的积分同样是个非常头疼的问题,只有再状态模型、观测模型很特殊的情况下才比较好求闭型解。因此,想要实际应用BF还需要做更多的假设,使得问题得到简化。而不同的假设方案,就由此引出了不同的滤波器。接下来,我就将进一步介绍KF、EKF、UKF是如何在BF的框架下被推导出来的!!!!!!请马上走开,不要回来!!!!!!