首页 关于
树枝想去撕裂天空 / 却只戳了几个微小的窟窿 / 它透出天外的光亮 / 人们把它叫做月亮和星星
目录

第二章:迭代状态估计

2.1 介绍

概率机器人学的核心理念就是根据传感器的数据估计状态。所谓的状态估计就是要得到一些传感器数据中不能直接得出,却可以推导出的一些定量描述。 在很多机器人应用中,只有明确了特定的定量属性才可以相对容易的做出决策。比如说,对于移动机器人而言,如果我们知道了它的位置以及周围的障碍物,就能够轻松的控制它了。 不幸的是,这些变量都不能直接获得。实际上,机器人依靠它的传感器来收集信息,而传感器只能采集到关于这些变量的部分信息,而且其测量值还存在一定的噪声。 状态估计就是要从这些数据中寻找并恢复状态变量。概率学的状态估计算法计算整个状态空间下的置信度分布(belief distribution)。 在本书的介绍章节中就已经看到了一个概率学状态估计的例子:移动机器人的定位。

本章是要介绍从传感器数据中估计状态需要用到的基本名词和数学工具。

2.2 概率论的基本概念

本节介绍一些概率论的基本概念和定理。在概率机器人学中,传感器的测量值、控制量、机器人和环境的状态等变量都被认为是随机变量random variables。 它们可以有多个取值,并且满足特定的概率学定律。所谓概率学推理就是根据概率学定律,从其他随机变量以及观测数据中,计算目标随机变量的过程。

令\(X\)表示一个随机变量,\(x\)为\(X\)的一个可能取值。一个典型的随机变量的例子就是硬币的正反面,\(X\)只有正面和反面两个可能的取值。 如果变量\(X\)像这里的硬币正反面一样,取值空间是离散的,那么我们可以用如下符号表示\(X\)取值为\(x\)的概率: $$ \begin{equation}\label{f1} p(X=x) \end{equation} $$ 对于一个均匀的硬币,有\(p(X=正面) = p(X=反面) = \frac{1}{2}\)。取值空间中所有的概率之和和为1,即 $$ \begin{equation}\label{f2} \sum_x{p(X=x)} = 1 \end{equation} $$ 当然,概率值总是非负数,即\(p(X=x) ≥ 0\)。为了简化符号,我们通常省略随机变量的显式表示,用\(p(x)\)代替\(p(X=x)\)。

本书中的大部分技术都假设估计空间和决策空间是连续的。连续的空间意味着随机变量可以取连续值。 除非特别声明,我们假设所有的连续随机变量都有一个概率密度函数(Probability Density Function, PDF)。一维正态分布的概率密度函数可以用均值\(μ\)和方差\(σ^2\)来表示, 也就是所谓的高斯函数Gaussian,其形式为如下: $$ \begin{equation}\label{f3} p(x) = (2\pi σ^2)^{-\frac{1}{2}} \exp\left\{-\frac{1}{2}\frac{(x-μ)^2}{σ^2}\right\} \end{equation} $$ 正态分布在本书中有着重要的作用。我们通常都将之简写为\(\mathcal{N}(x;μ,σ^2)\),其中\(x,μ,σ^2\)分别表示随机变量、均值和方差。 公式(\(\ref{f3}\))中的随机变量\(x\)是一个标量。更多情况下,\(x\)是一个多维的向量。针对向量的正态分布称为多变量multivariable正态分布, 其概率密度函数为: $$ \begin{equation}\label{f4} p(x) = \det(2\pi \Sigma)^{-\frac{1}{2}} \exp\left\{-\frac{1}{2}(x-μ)^T\Sigma^{-1}(x-μ)\right\} \end{equation} $$ 其中,\(μ\)为均值向量,\(\Sigma\)是一个半正定的对称矩阵称为协方差矩阵covariance matrix。 上角标\(T\)表示向量的转置。这个概率密度函数的指数部分的参数是\(x\)的二次型。 读者应该可以发现公式(\(\ref{f4}\))实际上就是公式(\(\ref{f3}\))的扩展。如果\(x\)是一个一维的向量(也就是一个标量), 那么两个公式就是完全相同的。

公式(\(\ref{f3},\ref{f4}\))都是PDF的例子。与离散概率分布的求和为1类似的,它们的积分总是为1: $$ \begin{equation}\label{f5} \int{p(x)dx} = 1 \end{equation} $$

两个随机变量\(X,Y\)的联合分布joint distribution由下式给出: $$ \begin{equation}\label{f6} p(x,y) = p(X = x, Y = y) \end{equation} $$ 该式描述的是随机变量\(X\)取值为\(x\)并且\(Y\)取值为\(y\)的概率。如果\(X,Y\)是独立的,我们就有 $$ \begin{equation}\label{f7} p(x,y) = p(x)p(y) \end{equation} $$ 通常随机变量还会携带其它变量的信息。假设我们已经知道\(Y\)的取值为\(y\),在此条件下我们就有\(X=x\)的概率: $$ \begin{equation}\label{f8} p(x|y) = p(x=x | Y=y) \end{equation} $$ 称之为条件概率(conditional probability)。如果\(p(y) > 0\),那么其条件概率定义为: $$ \begin{equation}\label{f9} p(x|y) = \frac{p(x,y)}{p(y)} \end{equation} $$ 如果\(X,Y\)相互独立,我们有 $$ \begin{equation}\label{f10} p(x|y) = \frac{p(x)p(y)}{p(y)} = p(x) \end{equation} $$ 也就是说,如果\(X,Y\)相互独立,那么\(Y\)将不能为我们带来任何关于\(X\)的信息。根据条件概率的定义和概率测量公理(axioms),可以推出全概率公式: $$ \begin{equation}\label{f11} p(x) = \sum_y{p(x|y)p(y)} \end{equation} $$ $$ \begin{equation}\label{f12} p(x) = \int{p(x|y)p(y)dy} \end{equation} $$ 进而可以得到贝叶斯公式(Bayes rule): $$ \begin{equation}\label{f13} p(x|y) = \frac{p(y|x)p(x)}{p(y)} = \frac{p(y|x)p(x)}{\sum_{x'}{p(y|x')p(x')}} \end{equation} $$ $$ \begin{equation}\label{f14} p(x|y) = \frac{p(y|x)p(x)}{p(y)} = \frac{p(y|x)p(x)}{\int{p(y|x')p(x')dx'}} \end{equation} $$ 如果我们需要从\(y\)中窥测\(x\),那么概率\(p(x)\)就被称为先验概率分布(prior probability distribution),\(y\)称为数据(data,比如说是传感器的测量值)。 概率\(p(x|y)\)称为\(X\)的后验概率密度(posterior probability distribution)。正如公式(\(\ref{f14}\))所描述的那样, 贝叶斯公式建立了后验概率\(p(x|y)\)与其"反"(译者按.\(p(y|x)\)在一些资料中称之为似然概率)和先验概率之间的关系。 也就是说,贝叶斯公式为我们提供了通过传感器数据\(y\)获得状态\(x\)的定量表述的方法。 在机器人学中,\(p(y|x)\)通常称为生成模型(generative model),因为它在一定的抽象程度上描述了状态变量\(X\)是如何影响传感器测量值\(Y\)的。

贝叶斯公式中的分母\(p(y)\)的取值于\(x\)无关。因为,无论\(x\)取什么值,公式(\(\ref{f13},\ref{f14}\))中的因子\(p(y)^{-1}\)都是一样的。 因此,\(p(y)^{-1}\)通常都被写为一个归一化(normalizer)的变量,用符号\(\eta\)表示: $$ \begin{equation}\label{f15} p(x|y) = \eta p(y|x)p(x) \end{equation} $$ 这种表达形式很简单,如果要写出归一化算子的完整数学形式,它将变得很复杂。这里仅用一个符号\(\eta\)来表示这种归一化的操作。 在本书中,归一化操作都是用类似的符号来表示,可以是\(\eta\)或者是\(\eta ', \eta '', \dots\)。即使实际的取值不一样,我们也在不同的公式中用\(\eta\)表示归一化操作。

我们可以在条件中组合上任意一个随机变量\(Z=z\),此时条件贝叶斯公式的形式如下: $$ \begin{equation}\label{f16} p(x|y,z) = \frac{p(y|x, z)p(x|z)}{p(y|z)} \end{equation} $$ 其中,\(p(y|z) > 0\)。类似的,在以\(z\)为条件的情况下,如果变量\(x,y\)相互独立,有联合概率密度: $$ \begin{equation}\label{f17} p(x,y|z) = p(x|z)p(y|z) \end{equation} $$ 这种关系称为条件独立性(conditional independence)。我们也可以很容易证明公式(\(\ref{f17}\))和下式等价: $$ \begin{equation}\label{f18} \begin{matrix} p(x|z) & = p(x|z, y) \\ p(y|z) & = p(y|z, x) \end{matrix} \end{equation} $$ 在概率机器人学中,条件独立性扮演者一个很重要的角色。其物理意义在于,在已知其他变量的取值\(z\)的时候,变量\(y\)是否携带有\(x\)的信息。 条件独立性并不意味着绝对的独立,也就是说: $$ \begin{equation}\label{f20} p(x,y|z) = p(x|z)p(y|z) \not\Rightarrow p(x,y) = p(x)p(y) \end{equation} $$ 反过来也不成立:绝对的独立并不意味着条件独立: $$ \begin{equation}\label{f21} p(x,y) = p(x)p(y) \not\Rightarrow p(x,y|z) = p(x|z)p(y|z) \end{equation} $$ 当然,在有些特殊的场合两者会很巧合的一致。

很多概率学算法都需要计算概率分布的一些特征或者说是统计量。变量\(X\)的期望就是一种常见的统计量,其定义如下: $$ \begin{equation}\label{f22} E[X] = \sum_x{xp(x)} \end{equation} $$ $$ \begin{equation}\label{f23} E[X] = \int{xp(x)dx} \end{equation} $$ 并不是所有的变量都有有限的期望,但这些不在本书要讨论的范畴中。期望是随机变量的线性函数,对于任意的两个数值\(a,b\)我们有: $$ \begin{equation}\label{f24} E[aX + b] = aE[X] + b \end{equation} $$

我们还可以通过如下的形式获得变量\(X\)的协方差covariance: $$ \begin{equation}\label{f25} Cov[X] = E[X - E[X]^2] = E[X^2] - E[X]^2 \end{equation} $$ 协方差描述了数据相对于均值的二阶偏差程度。对于一个正态分布\(\mathcal{N}(x;μ,\Sigma)\),其均值为\(μ\),协方差为\(\Sigma\)。

随机变量的另一个重要特性是它的熵(entropy)。其定义为概率值的负对数的期望: $$ \begin{equation}\label{f26} H_p(x) = E[-\log_2{p(x)}] \end{equation} $$ 展开有: $$ \begin{equation}\label{f27} H_p(x) = -\sum_x{p(x)\log_2{p(x)}} \end{equation} $$ $$ \begin{equation}\label{f28} H_p(x) = -\int_x{p(x)\log_2{p(x)dx}} \end{equation} $$ 熵的概念是从信息论中引入的,描述的是\(x\)携带的信息量。对于离散形式的熵,\(p(x)\)是观测到\(x\)的概率,那么\(-\log_2{p(x)}\)说明了编码\(x\)需要多少Bit。 在本书中,熵被用作机器人的信息收集,进而表述机器人执行特定动作后可能获得信息。

2.3 机器人环境交互

下图2.1就是一个机器人与其周围环境之间交互的例子。机器人所在的环境environment或者世界world是一个动态的系统,具有内部的状态。 机器人可以通过传感器获取环境的状态。但是,传感器是有噪声的,而且通常很多信息都是不能直接获得的。 正如图2.1中左侧所示的那样,机器人根据环境的状态维护着一个内在的置信度信息(internal belief)。

图 2.1. 机器人环境交互

机器人还可以通过执行器改变它的环境。但执行后的状态通常是不确定的。因此,每个控制动作不仅会影响环境状态,也会改变机器人关于这些状态的置信度。

下面我们将更形式化的描述交互。

2.3.1 状态

环境是通过状态来描述的。在本书中为了方便,我们把状态看作是机器人和它的环境中对未来有影响的所有要素的集合。状态可能随着时间而改变,比如说机器人附近的人的位置。 有时环境是静态的,比如说建筑中的墙大多都是不能移动的。变化的状态称为动态状态dynamic state,不变的状态称为静止状态static state。 状态也用于描述一些机器人的变量,比如它的位置、速度、传感器工作状态等等。

在本书中,我们将一直用符号\(x\)表示状态,它的取值与上下文有关。在\(t\)时刻的状态记为\(x_t\)。本书中涉及的典型变量有:

如果状态可以很好的预测未来,那么我们就说状态\(x_t\)是完全的complete。状态的完整性意味着历史状态、测量值、以及控制量都不再能够提供额外的信息,让我们能够更准确的预测未来。 需要注意的是,关于完整性的定义并不要求未来是状态的一个确切的函数。未来是随机的,但除了当前的状态\(x_t\)之前的任何状态都不能对未来产生影响。 满足这一特性的过程就是人们常说的马尔可夫链Markov chains

状态的完备性对于理论分析而言是一个比较重要的概念。实际上不可能在任何机器人系统都找到一个完备的状态。 一个完备的状态不仅仅要包含环境中所有可能影响未来的因素,还要有机器人自身的状态,计算机内存中存储的数据, 周围人类嘈杂的内心活动等等。有些信息是很难获取的。实际上我们只是选用了所有状态变量的一个很小的子集,它是一个不完备状态incomplete state

在大多数机器人应用中,状态\(x_t\)都是连续的。机器人的位姿,相对于外部坐标系的坐标和方向,就是一个典型的连续状态。 有些情况下,状态是离散的。比如说传感器是否坏了,这一变量的状态空间就是二值的。既包含连续的状态也有离散状态的状态空间被称为混合hybrid状态空间。

在大多数情况下,状态都是随着时间改变的。在本书中时间都是离散的,也就是说事件总是发生在离散的时间点\(0,1,2,\dots\)上。 如果一个机器人在一个特定的时间开始动作,我们将这一时刻记为\(t = 0\)。

2.3.2 环境交互

机器人与环境之间有两种基本的交互类型:机器人可以通过它的执行器改变环境的状态,还可以通过传感器收集信息。 这两种类型的交互可能同时发生,但为了方便,在本书中我们将两者区别对待。图2.1示例了机器人与环境的交互:

理想情况下,机器人会记录过去所有的传感器测量值和控制操作。我们称这些记录为数据data(无论它们是否还在内存中)。 考虑到两种不同类型的环境交互,机器人有如下两种不同的数据流:

测量数据流和控制数据流之间存在着很大的差别,因为它们将扮演不同的角色。环境感知提供了关于环境状态的信息,因此它倾向于增加机器人的知识。 另一方面,因为机器人存在着执行误差,并且其所在环境具有一定随机性,所以即使控制能够使得机器人的状态更加稳定,运动也还意味着机器人的知识的降低。 在时间上把这两个数据流区分开是没有意义的,做测量的时候也没有要求机器人不能移动,很多时候感知和控制是同时发生的。这里将它们分开纯粹是为了方便。

2.3.3 概率生成法则

状态和测量值的发展是由概率规律决定的。一般当前状态\(x_t\)都是由状态\(x_{t-1}\)随机生成的。因此我们有必要研究生成\(x_t\)的概率分布。 乍一看,状态\(x_t\)的出现可能与过去所有的状态、测量、和控制都有关系,所以我们可以用\( p(x_t | x_{0:t-1}, z_{1:t-1}, u_{1:t})\)描述状态演变的概率密度。 在没有特别说明的情况下,我们都认为机器人是先执行动作\(u_1\),再测量\(z_1\)的。

如果状态\(x\)是完备的,那么它就足以涵盖过去所有的操作了。具体来说就是,\(x_{t-1}\)是之前所有的控制量\(u_{1:t-1}\)和测量值\(z_{1:t-1}\)的充分统计量。 在已知状态\(x_{t-1}\)的情况下,上式中所有的变量里只有控制量\(u_t\)对当前状态有影响。

上述特性可以用如下的等式来描述: $$ \begin{equation}\label{f31} p(x_t | x_{0:t-1}, z_{1:t-1}, u_{1:t}) = p(x_t | x_{t-1}, u_t) \end{equation} $$ 这个等式就是条件独立性的一个应用示例。当我们知道了第三组变量(也就是条件变量)的值,那么其他变量之间就是相对独立的。条件独立性将贯穿本书始末,它也是本书中算法都很好理解的原因。

有时,我们可能想要对生成测量值的过程建模。如果\(x_t\)是完备的,我们将有如下重要的条件独立性: $$ \begin{equation}\label{f32} p(z_t | x_{0:t-1}, z_{1:t-1}, u_{1:t}) = p(z_t | x_t) \end{equation} $$ 换句话说,状态\(x_t\)就已经足够预测测量值\(z_t\)了。如果\(x_t\)是完备的,那么其它的变量,比如说历史的测量值、控制量、甚至是历史的状态都与\(z_t\)无关。

下面,我们将讨论这两个条件概率\(p(x_t|x_{t-1},u_t), p(z_t|x_t)\)。概率\(p(x_t|x_{t-1},u_t)\)就是状态转移概率state transition probability。它说明了环境状态是如何因为控制量\(u_t\)而随时间迁移。同时概率分布\(p(x_t|x_{t-1},u_t)\)还说明环境状态是随机的,并不是确定的。 有些时候状态转移概率分布并不依赖于时间索引\(t\),此时我们就可以将之写成\(p(x'|u,x)\),其中\(x'\)是\(x\)后继时刻的状态。

概率\(p(z_t|x_t)\)称为测量概率measurement probability,它也可能与时间索引\(t\)无关,可以简写为\(p(z|x)\)。测量概率说明了在状态\(x\)下观测到\(z\)的概率。 我们可以将测量值看作是状态的一种带有噪声的映射。

状态转移概率和测量概率一起描述了机器人及其环境所构成的动态随机系统。下图2.2描述了由这些概率建模的状态与测量值的变化过程。 \(t\)时刻的状态只与\(t-1\)时刻的状态和控制量\(u_t\)有关。而测量值\(z_t\)依赖于\(t\)时刻的状态。这样一个概率生成模型(generative model)就是所谓的隐马尔科夫模型(Hidden Markov Model, HMM)或者动态贝叶斯网络(Dynamic Bayes Network, DBN)。

图 2.2. 描述控制量、状态和测量值演化的动态贝叶斯网络

2.3.4 置信度分布(Belief Distributions)

概率机器人学中的另一个核心概念就是置信度belief。置信度反映了机器人对环境状态的掌握程度。我们已经讨论过有些状态是不能够直接测量的。 例如,机器人在全局坐标系中的位置可能是\(x = \langle 14.12, 12.7, 45° \rangle\),但机器人通常不知道自己的位置, 因为位置是不能够直接测量的(即使是GPS也是不可以的!)。实际上,机器人必须通过数据来推算自己的位置。因此,我们根据机器人维护的置信度来识别真实的状态。 在一些文献中置信度也称为state of knowledgeinformation state,需要注意不要与后续的信息向量和信息矩阵的概念搞混了。

概率机器人学通过条件概率分布描述置信度。一个置信度分布根据真实的状态为每一个可能的值赋予一个概率(或者是密度值, density value)。 置信度分布是状态变量在已知数据上的后验概率。我们用\(bel(x_t)\)描述状态变量\(x_t\)的置信度: $$ \begin{equation}\label{f33} bel(x_t) = p(x_t | z_{1:t}, u_{1:t}) \end{equation} $$

读者可能注意到置信度是在进行了测量\(z_t\)之后计算的。有时在执行了控制量\(u_t\)后,进行测量\(z_t\)之前,使用上次测量值计算的置信度也是很有用的。 这样的后验概率表示为: $$ \begin{equation}\label{f34} \overline{bel}(x_t) = p(x_t | z_{1:t-1}, u_{1:t}) \end{equation} $$ 在基于概率的滤波器中,它通常被称为预测值prediction。\(\overline{bel}(x_t)\)是根据之前的数据和最新的控制量来预测\(t\)时刻的状态。 从\(\overline{bel}(x_t)\)计算得出\(bel(x_t)\)的过程被称为校正correction或者测量更新measurement update

2.4 贝叶斯滤波器

2.4.1 贝叶斯滤波器算法

贝叶斯滤波器算法是最一般的计算置信度的算法。它从测量和控制数据中计算置信度分布\(bel\)。我们将先简单陈述一下基本算法,再用一个数值的例子具体说明。 最后,我们将给出数学推导。

算法2.1以伪代码的形式描述了贝叶斯滤波器。它是一个迭代的算法,用\(t-1\)时刻的置信度\(bel(x_{t-1})\)计算\(t\)时刻的置信度\(bel(x_{t})\)。 它的输入是\(t-1\)时刻的置信度,以及最近一次的控制量\(u_t\)和测量值\(z_t\)。输出是\(t\)时刻的置信度\(bel(x_t)\)。 算法2.1中只描述了贝叶斯滤波器的更新规则update rule。这一更新规则是一个迭代的过程, 用上一次的置信度\(bel_{x_{t-1}}\)来计算下一次的置信度\(bel_{x_t}\)。

算法2.1. 贝叶斯滤波器的一般形式

贝叶斯滤波器算法有两个基本的步骤。在第三行中根据\(x_{t-1}\)和\(u_t\)预测状态\(x_t\)的置信度\(\overline{bel}(x_t)\)。其积分项是两个概率密度的乘积, 其中第一项描述的是在状态\(x_{t-1}\)下,控制量\(u_t\)的作用使得状态从\(x_{t-1}\)转移到\(x_t\)的概率。读者可能会注意到这一步与公式(\(\ref{f12}\))神似, 这一过程被称为控制更新(control update)或者是预测prediction

贝叶斯滤波器的第二步称为测量更新(measurement update)。在第4行中,贝叶斯滤波器用观测到\(z_t\)的条件概率乘上预测值\(\overline{bel}(x_t)\), 并做归一化处理,得到置信度\(bel(x_t)\)。之所以需要归一化处理,是因为直接将两项相乘后得到的结果可能不是一个概率值(对所有的\(x_t\)积分或者求和不等于1)。

为了让算法正常运行,需要有一个\(t=0\)时刻的初始置信度\(bel{x_0}\)作为边界条件。如果我们确切的知道初始状态\(x_0\), \(bel{x_0}\)就应该初始化为一个中心为\(x_0\)的点概率密度(point mass distribution)。如果我们对于\(x_0\)的初始值一无所知, 那么通常就用均匀分布或者Dirichlet类的分布来描述\(bel{x_0}\)。了解了\(x_0\)的部分信息,我们就可以用一个非均匀分布的概率模型来描述。 但更多的情况是,我们掌握了完整的信息,或者一脸懵逼。

贝叶斯滤波器算法只适用于这里所讲的简单的估计问题。我们不仅需要循环地计算第三行的积分和第四行的乘积,还需要把状态限定在一个有限的空间中, 这样第三行的积分才可以写成有限的求和形式。

2.4.2 例子

我们以图2.3中所示的场景为例,以数值的形式说明贝叶斯滤波器,该图中显示了机器人根据照相机估计门的状态的场景。 为了简化问题,我们假定门只有开着或者关着两种不同的状态,而且只有机器人可以改变门的状态。更进一步的,假设机器人在一开始并不知道门的状态。

图 2.3. 一个移动机器人估计门的状态

我们为两个状态赋予一个相同的概率值: $$ bel(X_0 = \boldsymbol{open}) = 0.5 $$ $$ bel(X_0 = \boldsymbol{close}) = 0.5 $$ 假设机器人的传感器存在噪声,我们可以通过如下的条件概率来描述这一特性,检测到门是关着的状态具有相对较高的可靠性。 $$ \begin{cases} p(Z_t = \boldsymbol{sense\_open} | X_t = \boldsymbol{is\_open}) & = 0.6 \\ p(Z_t = \boldsymbol{sense\_close} | X_t = \boldsymbol{is\_open}) & = 0.4 \end{cases} $$ $$ \begin{cases} p(Z_t = \boldsymbol{sense\_open} | X_t = \boldsymbol{is\_close}) & = 0.2 \\ p(Z_t = \boldsymbol{sense\_close} | X_t = \boldsymbol{is\_close}) & = 0.8 \end{cases} $$ 最后,我们让机器人把门推开。如果门本来就是开着的,那动作之后仍然开着。如果关着,机器人有80%的可能打开它。 $$ \begin{cases} p(X_t = \boldsymbol{is\_open} | U_t = \boldsymbol{push}, X_{t-1} = \boldsymbol{is\_open}) & = 1 \\ p(X_t = \boldsymbol{is\_closed} | U_t = \boldsymbol{push}, X_{t-1} = \boldsymbol{is\_open}) & = 0 \\ p(X_t = \boldsymbol{is\_open} | U_t = \boldsymbol{push}, X_{t-1} = \boldsymbol{is\_close}) & = 0.8 \\ p(X_t = \boldsymbol{is\_closed} | U_t = \boldsymbol{push}, X_{t-1} = \boldsymbol{is\_close}) & = 0.2 \end{cases} $$ 机器人也可能什么都不做,那么门的状态就不会有变化。因此有如下的条件概率: $$ \begin{cases} p(X_t = \boldsymbol{is\_open} | U_t = \boldsymbol{do\_nothing}, X_{t-1} = \boldsymbol{is\_open}) & = 1 \\ p(X_t = \boldsymbol{is\_closed} | U_t = \boldsymbol{do\_nothing}, X_{t-1} = \boldsymbol{is\_open}) & = 0 \\ p(X_t = \boldsymbol{is\_open} | U_t = \boldsymbol{do\_nothing}, X_{t-1} = \boldsymbol{is\_close}) & = 0 \\ p(X_t = \boldsymbol{is\_closed} | U_t = \boldsymbol{do\_nothing}, X_{t-1} = \boldsymbol{is\_close}) & = 1 \end{cases} $$ 假设在\(t\)时刻,机器人并没有动作但是检测到门打开了。将\(bel(X_0)\)和控制量\(u_1 = \boldsymbol{do\_nothing}\)代入贝叶斯滤波器算法的第三行,计算积分项。 $$ \begin{array} {lcl} \overline{bel}(X_1) & = & \int{p(X_1 | u_1, X_0)bel(x_0)dX_0} \\ & = & \sum_{x_0}p(X_1 | u_1, X_0)bel(X_0) \\ & = & p(x_1 | u_1 = \boldsymbol{do\_nothing}, X_0 = \boldsymbol{is\_open})bel(X_0 = \boldsymbol{is\_open}) \\ & + & p(x_1 | u_1 = \boldsymbol{do\_nothing}, X_0 = \boldsymbol{is\_closed})bel(X_0 = \boldsymbol{is\_closed}) \end{array} $$ 这样我们就可以计算出\(X_1\)的两种状态的置信度。对于\(X_1 = \boldsymbol{is\_open}\),有: $$ \begin{array} {lcl} \overline{bel}(X_1 = \boldsymbol{is\_open}) & = & p(X_1 = \boldsymbol{is\_open} | u_1 = \boldsymbol{do\_nothing}, x_0 = \boldsymbol{is\_open})bel(X_0 = \boldsymbol{is\_open}) \\ & + & p(X_1 = \boldsymbol{is\_open} | u_1 = \boldsymbol{do\_nothing}, x_0 = \boldsymbol{is\_closed})bel(X_0 = \boldsymbol{is\_closed}) \\ & = & 1 · 0.5 + 0 · 0.5 = 0.5 \end{array} $$ 对\(X_1 = \boldsymbol{is\_closed}\),有: $$ \begin{array} {lcl} \overline{bel}(X_1 = \boldsymbol{is\_closed}) & = & p(X_1 = \boldsymbol{is\_closed} | u_1 = \boldsymbol{do\_nothing}, x_0 = \boldsymbol{is\_open})bel(X_0 = \boldsymbol{is\_open}) \\ & + & p(X_1 = \boldsymbol{is\_closed} | u_1 = \boldsymbol{do\_nothing}, x_0 = \boldsymbol{is\_closed})bel(X_0 = \boldsymbol{is\_closed}) \\ & = & 0 · 0.5 + 1 · 0.5 = 0.5 \end{array} $$ 我们得出\(\overline{bel}(x_1)\)与\(bel(x_0)\)的值相等的结论。这是因为动作do_nothing并不会改变世界的状态。

但是进行了测量之后,置信度就会发生改变。贝叶斯滤波器的第四行意味着如下的公式: $$ bel(x_1) = \eta p(Z_1 = \boldsymbol{sense\_open} | x_1) \overline{bel}(x_1) $$ 对于可能的两个状态\(X_1 = \boldsymbol{is\_open}\)和\(X_1 = \boldsymbol{is\_closed}\),我们有: $$ \begin{array} {lcl} bel(X_1 = \boldsymbol{is\_open}) & = & \eta p(Z_1 = \boldsymbol{sense\_open} | X_1 = \boldsymbol{is\_open})\overline{bel}(X_1 = \boldsymbol{is\_open}) \\ & = & \eta 0.6 · 0.5 = \eta 0.3 \end{array} $$ 和 $$ \begin{array} {lcl} bel(X_1 = \boldsymbol{is\_closed}) & = & \eta p(Z_1 = \boldsymbol{sense\_open} | X_1 = \boldsymbol{is\_closed})\overline{bel}(X_1 = \boldsymbol{is\_closed}) \\ & = & \eta 0.2 · 0.5 = \eta 0.1 \end{array} $$ 归一化算子\(\eta = (0.3 + 0.1)^{-1} = 2.5\)因此有: $$ \begin{array} {lcl} bel(X_1 = \boldsymbol{is\_open}) & = & 0.75 \\ bel(X_1 = \boldsymbol{is\_closed}) & = & 0.25 \end{array} $$ 接下来,机器人执行的push操作,并检测到门打开了,我们有计算结果: $$ \begin{array} {lcl} \overline{bel}(X_2 = \boldsymbol{is\_open}) & = & 1 · 0.75 + 0.8 · 0.25 = 0.95 \\ \overline{bel}(X_2 = \boldsymbol{is\_closed}) & = & 0 · 0.75 + 0.2 · 0.25 = 0.05 \end{array} $$ 并且 $$ \begin{array} {lcl} bel(X_2 = \boldsymbol{is\_open}) & = & \eta 0.6 · 0.95 & \approx & 0.983 \\ bel(X_2 = \boldsymbol{is\_closed}) & = & \eta 0.2 · 0.05 & \approx & 0.017 \end{array} $$ 此刻,机器人认为门有0.983的概率是开启的。乍一看,概率值已经足够高了,我们可以接受这一假设了。 但是这样的方法可能需要付出一些不必要的代价。如果错把一个关着的门当作开着的就可能付出一些代价(比如说,机器人撞到了门上), 同时考虑两种假设并做出决策就显得很有必要了。可以想象一个有0.983的概率不坠机的自动驾驶飞行器。

2.4.3 贝叶斯滤波器的数学推导

我们可以证明贝叶斯滤波器的正确性。下面将证明从上一时刻的置信度\(p(x_{t-1} | z_{1:t-1},u_{1:t-1})\)计算后验分布\(p(x_t|z_{1:t},u{1:t})\)的正确性。 整个证明过程是建立在正确初始化初始时刻\(t=0\)的置信度\(bel(x_0)\)的基础之上的。

推导过程要求状态\(x_t\)如2.3.1节所说的那样是完备的,并且控制量的选择是随机的。首先用贝叶斯公式来计算后验概率: $$ \begin{align}\label{f35} p(x_t | z_{1:t}, u_{1:t}) & = & \frac{p(z_t | x_t, z_{1:t-1}, u_{1:t})p(x_t | z_{1:t-1}, u_{1:t})}{p(z_t | z_{1:t-1}, u_{1:t})} \\ & = & \eta p(z_t | x_t, z_{1:t-1}, u_{1:t})p(x_t | z_{1:t-1}, u_{1:t}) \end{align} $$

现在,我们来研究一下状态完备的假设。在第2.3.1中,如果除了\(x_t\)没有变量可以影响整个环境在未来的随机过程,我们说状态\(x_t\)是完备的。 也就是说,如果我们知道状态\(x_t\)并据此预测可能的测量值\(z_t\),那么过去的测量和控制量都不能为我们提供任何附加的信息。数学上,可以用如下的条件独立性来表示这一特性: $$ \begin{equation}\label{f36} p(z_t | x_t, z_{1:t-1}, u_{1:t}) = p(z_t | x_t) \end{equation} $$ 这又是一个条件独立性conditional independence的例子。我们可以将公式(\(\ref{f35}\))化简为: $$ \begin{equation}\label{f37} p(x_t | z_{1:t}, u_{1:t}) = \eta p(z_t | x_t)p(x_t | z_{1:t-1}, u_{1:t}) \end{equation} $$ 因此有: $$ \begin{equation}\label{f38} bel(x_t) = \eta p(z_t | x_t)\overline{bel}(x_t) \end{equation} $$ 这个公式就是我们在贝叶斯滤波器中第四行提到的伪代码。接下来我们用公式(\(\ref{f12}\))展开\(\overline{bel}(x_t)\): $$ \begin{equation}\label{f39} \begin{array} ?\overline{bel}(x_t) & = & p(x_t | z_{1:t-1}, u_{1:t}) \\ & = & \int{p(x_t| x_{t-1}, z_{1:t-1}, u_{1:t})p(x_{t-1} | z_{1:t-1},u_{1:t})dx_{t-1}} \end{array} \end{equation} $$ 状态完备假设意味着,如果我们知道了\(x_{t-1}\),过去的测量和控制量将不携带关于状态\(x_t\)的信息。因此,有: $$ \begin{equation}\label{f40} p(x_t | x_{t-1}, z_{1:t-1}, u_{1:t}) = p(x_t | x_{t-1}, u_t) \end{equation} $$ 这里我们保留了控制量\(u_t\),因为它并不用于预测状态\(x_{t-1}\)。实际上\(p(x_t | x_{t-1}, u_t) \neq p(x_t | x_{t - 1})\)。 我们注意到通过随机选择控制,就可以把控制量\(u_t\)从\(p(x_{t-1}|z_{1:t-1}, u_{1:t})\)的条件中移除,得到迭代更新公式: $$ \begin{equation}\label{f41} \overline{bel}(x_t) = \int{p(x_t | x_{t-1}, u_t)p(x_{t-1} | z_{1:t-1}, u_{1:t-1})dx_{t-1}} \end{equation} $$ 读者可以很容易验证,这就是算法2.1中第三行提到的伪代码。总之,贝叶斯滤波器算法根据\(t\)时刻的测量值和控制量来计算状态\(x_t\)的后验概率。 这个推导过程中的假设被称为马尔可夫(Markov)特性,也就是说状态是完备的。

任何该算法的具体实现都需要三个概率分布:初始置信度\(p(x_0)\),测量概率分布\(p(z_t|x_t)\),和状态转移概率\(p(x_t|u_t, x_{t-1})\)。 我们将在第五章中关注\(p(x_t | u_t, x_{t-1})\), 在第六章中考察\(p(z_t | x_t)\)。 此外,我们也需要一个置信度\(bel(x_t)\)的表达形式,这将是第三章第四章要讨论的内容。

2.4.4 马尔可夫假设

马尔可夫假设或者说是完备状态假设是本书的基石。马尔可夫假设中,如果我们知道了当前状态\(x_t\)那么过去和未来的数据就是相互独立的。 至于说这个假设到底有多强呢?让我们再重新考虑一下移动机器人定位的例子。在移动机器人定位问题中,\(x_t\)是机器人的位置, 并使用贝叶斯滤波器来估计机器人在一个固定地图中的位置。下面的这些因素都可能对传感器的读数有影响,因此它们都会打破马尔可夫假设。

理论上,这些变量都可以包含在状态中。但是为了降低贝叶斯滤波器算法的计算复杂度,通常用不完备的状态替代之。 虽然有这些不利的因素,但是实际的贝叶斯滤波器也具有很强的鲁棒性。根据经验来说,我们在设计状态\(x_t\)的时候应当谨慎考虑,这样才能够使未建模的状态变量表现出近似随机的效果。

2.5 表达和计算

在概率机器人学中,贝叶斯滤波器有几种不同的实现方式。我们将在后续的两章中会发现,还有很多从贝叶斯滤波器衍生出来的算法和技术。 这些技术对于测量概率、状态转移概率和初始置信度都有着各种不同的假设。这些假设带来了不同的后验概率分布和具有不同特性的算法。 根据一般经验, 计算置信度的技术都是针对高度特质化的案例的,在一般的机器人问题中,置信度一定是近似计算的。 近似计算对于算法复杂度有重要的影响。寻找一个合适的近似通常是一个有挑战的问题,并不存在一个唯一的最优方案适用于所有的机器人问题。

当选择一个近似,我们必须在如下的特性中做出妥协:

  1. 计算效率。有些近似,比如后面要讨论线性高斯近似,可以在关于状态空间维度的多项式时间复杂度内计算出置信度。 而其他的算法的复杂度确实指数级的。后续我们还要讨论基于粒子的技术,它有一个any-time的特性,可以牺牲精度来换取速度。
  2. 近似计算的准确度。有些近似可以在更宽的区域内比其他近似方法更贴近真值。比如说,线性高斯近似都只适用于单峰分布, 而直方图表达方式就可以近似多峰分布,但是准确度有限。粒子表达方式可以近似更广的分布,但是为了获得需要的准确度,通常需要很大的粒子的数量。
  3. 容易实现。概率算法实现的难度与很多因素有关,比如说测量概率\(p(z_t | x_t)\)和状态转移概率\(p(x_t | u_t, x_{t-1}\)的形式。 粒子的表达方法对于复杂的非线性系统来书通常实现起来很简单,这也是它们进来很流行的原因。

接下来的两章将介绍具体的算法实现,它们在上述的特性中做出了不同的取舍。

2.6 小结

在本节中,我们介绍了机器人学中的贝叶斯滤波器的基本思想。它是一种估计环境状态(也可能包含机器人自身的状态)的方法。

在接下来的两章中讨论两种流行的迭代状态估计算法,它们都是从贝叶斯滤波器中衍生出来的。

2.7 参考文献

本章中的基础统计学知识在很多概率和统计学的入门教材中都有涉及。一些早期的经典教材DeGroot(1975), Subrahmaniam (1979)和Thorp (1966)提供了高度精炼的介绍。 更多的内容可以参考Feller 1968; Casella and Berger 1990; Tanner 1996; Devroye et al. 1996; Duda et al. 2000。机器人环境交互凡是是机器人学中广泛研究的主题, 在Russell and Norvig (2002)中提供了AI角度的解读。

2.8 练习

暂略




Copyright @ 高乙超. All Rights Reserved. 京ICP备16033081号-1