目录
0 引言
在此前的文章《从贝叶斯滤波到扩展卡尔曼滤波》中,我们讲述了扩展卡尔曼滤波通过一阶泰勒级数展开将非线性高斯系统的状态转移函数 f ( x ) f(x) f(x) 和(或)观测函数 h ( x ) h(x) h(x) 线性化,然后采用标准卡尔曼滤波框架实现状态量的滤波过程。扩展卡尔曼滤波存在两方面的明显缺点:
- 一阶泰勒级数展开忽略了二阶及以上的高阶项,因此精度一般(通常称为一阶精度),对于高度非线性问题效果较差;
- 雅可比矩阵的计算较为繁琐,容易出错。
为解决强非线性条件下的状态估计问题,1995 年,S. J. Julier 和 J. K. Uhlmann 等人提出了无迹卡尔曼滤波(Unscented Kalman Filter,UKF)算法,并由 E. A. Wan 和 R. Vander Merwe 等人进一步完善。
无迹卡尔曼滤波基于无迹变换(Unscented Transform,UT),无迹变换研究的是如何通过确定的采样点捕获经非线性变换的高斯随机变量的后验分布的问题。通过无迹变换得到相应的统计特性后,再结合标准卡尔曼滤波框架,便得到无迹卡尔曼滤波。标准无迹卡尔曼滤波的计算量与扩展卡尔曼滤波相当,但滤波精度要优于扩展卡尔曼滤波。
1 无迹变换
1.1 什么是无迹变换
无迹变换的核心理念:
近似概率分布比近似任意的非线性函数或变换要相对容易。
无迹变换要解决的问题是:已知某随机变量(多维情形下是随机向量)的概率分布(均值和方差),求其经过某非线性函数 g ( ⋅ ) g(·) g(⋅) 变换后的概率分布。基于上述思想,无迹变换的主要步骤为:
(1) 根据某种规则对随机变量的概率分布进行确定性采样,并为采样点分配权重(均值权重和方差权重),采样点我们通常称之为 sigma 点;
(2) 将每一个 sigma 点进行非线性变换,得到新的 sigma 点;
(3) 对非线性变换后的新的 sigma 点进行加权求和,分别计算加权均值和加权方差,用加权均值和加权方差近似表征随机变量经非线性变换后的概率分布。
如下图所示(《概率机器人》第 3.4 节 P49):
无迹卡尔曼滤波中使用的确定性采样方法是 sigma 点采样方法的一种具体实现,中心差分卡尔曼滤波(Central Difference Kalman Filter,CDKF)使用了 sigma 点采样方法的另一种具体实现,这类滤波算法我们统称为 sigma 点卡尔曼滤波(Sigma-Point Kalman Filter,SPKF)算法。
按照历史发展脉络来讲,无迹变换主要包括两种形式:一般形式的无迹变换和比例无迹变换(Scaled Unscented Transform,SUT)。两种无迹变换的区别主要体现在采样规则和权重计算上,下面将分别进行阐述。
1.2 一般形式的无迹变换
假设存在 n n n 维随机向量 X X X,其服从均值 μ x \mu_x μx 和协方差 Σ x \Sigma_x Σx 的正态分布:
X ∼ N ( μ x , Σ x ) X \sim \mathcal{N}(\mu_x, \Sigma_x) X∼N(μx,Σx)
将 X X X 经过非线性函数 g ( ⋅ ) g(·) g(⋅) 进行变换,得到随机向量 Y Y Y,我们使用一般形式的无迹变换估计 Y Y Y 的概率分布。一般形式的无迹变换最早由 Julier 等人提出,其主要操作流程如下所述:
步骤一:参数选择与权重计算
一般形式的无迹变换只涉及一个外部引入参数 κ \kappa κ,各 sigma 点( 2 n + 1 2n+1 2n+1 个)的权重分配如下:
W ( i ) = { κ n + κ i = 0 1 2 ( n + κ ) i = 1 , ⋅ ⋅ ⋅ , 2 n W^{(i)} = \begin{cases} \frac{\kappa}{n+\kappa} & i = 0 \\ \frac{1}{2(n+\kappa)} & i = 1, ··· , 2n \end{cases} W(i)={ n+κκ2(n+κ)1i=0i=1,⋅⋅⋅,2n
其中, κ ∈ R \kappa \in \mathbb{R} κ∈R,表征了 sigma 点相对均值的散布程度, κ \kappa κ 越大,非均值处的 sigma 点距离均值越远(参考步骤二),且所占权重越小,而均值处 sigma 点所占权重则相对越大。对于高斯问题, n + κ = 3 n+\kappa = 3 n+κ=3 是一个比较好的选择,对于非高斯问题(是的,无迹变换也适用于非高斯问题), κ \kappa κ 应该选择其它更恰当的值。
步骤二:确定性采样
通常情况下,siama 点位于均值处及对称分布于主轴的协方差处(每维两个)。按照如下方法采样得到 2 n + 1 2n + 1 2n+1 个 sigma 点,构成 n × ( 2 n + 1 ) n \times (2n + 1) n×(2n+1) 的点集矩阵 X \mathcal{X} X:
X ( i ) = { μ x i = 0 μ x + ( ( n + κ ) Σ x ) ( i − 1 ) i = 1 , ⋅ ⋅ ⋅ , n μ x − ( ( n + κ ) Σ x ) ( i − n − 1 ) i = n + 1 , ⋅ ⋅ ⋅ , 2 n \mathcal{X}^{(i)} = \begin{cases} \mu_x & i = 0 \\ \mu_x + (\sqrt{(n + \kappa)\Sigma_x})^{(i-1)} & i = 1, ··· , n \\ \mu_x - (\sqrt{(n + \kappa)\Sigma_x})^{(i-n-1)} & i = n + 1, ··· , 2n \end{cases} X(i)=⎩⎪⎨⎪⎧μxμx+((n+κ)Σx)(i−1)μx−((n+κ)Σx)(i−n−1)i=0i=1,⋅⋅⋅,ni=n+1,⋅⋅⋅,2n
其中, ( ( n + κ ) Σ x ) ( i − 1 ) (\sqrt{(n + \kappa)\Sigma_x})^{(i-1)} ((n+κ)Σx)(i−1) 表示矩阵 ( n + κ ) Σ x (n + \kappa)\Sigma_x (n+κ)Σx 作 Cholesky 分解后下三角矩阵的第 i − 1 i-1 i−1 列, ( ( n + κ ) Σ x ) ( i − n − 1 ) (\sqrt{(n + \kappa)\Sigma_x})^{(i-n-1)} ((n+κ)Σx)(i−n−1) 同理。
步骤三:sigma 点非线性变换
将每个 sigma 点(即 X \mathcal{X} X 的每一列)进行 g ( ⋅ ) g(·) g(⋅) 的非线性变换,得到变换后的新的点集矩阵 Y \mathcal{Y} Y:
Y ( i ) = g ( X ( i ) ) i = 0 , ⋅ ⋅ ⋅ , 2 n \mathcal{Y}^{(i)} = g(\mathcal{X}^{(i)}) \quad i = 0, ··· , 2n Y(i)=g(X(i))i=0,⋅⋅⋅,2n
步骤四:加权计算近似均值与近似协方差
μ y = ∑ i = 0 i = 2 n W ( i ) Y ( i ) \mu_y = \sum_{i=0}^{i=2n}W^{(i)}\mathcal{Y}^{(i)} μy=i=0∑i=2nW(i)Y(i)
Σ y = ∑ i = 0 i = 2 n W ( i ) [ Y ( i ) − μ y ] [ Y ( i ) − μ y ] T \Sigma_y = \sum_{i=0}^{i=2n}W^{(i)}[\mathcal{Y}^{(i)}-\mu_y][\mathcal{Y}^{(i)}-\mu_y]^T Σy=i=0∑i=2nW(i)[Y(i)−μy][Y(i)−μy]T
1.3 比例无迹变换
从 1.2 节的内容中我们可以发现,当参数 κ < 0 \kappa < 0 κ<0 时,权重 W ( 0 ) = κ n + κ < 0 W^{(0)} = \frac{\kappa}{n+\kappa} < 0 W(0)=n+κκ<0,加权算得的近似协方差可能存在非半正定的情况。为应对该问题,Julier 等人后来提出无迹变换的改进形式——比例无迹变换,并由 Merwe 等人对其进行了简化。比例无迹变换与一般形式的无迹变换的主要区别体现在参数选取与 sigma 点权重计算上,其主要操作流程如下所述:
步骤一:参数选择与权重计算
比例无迹变换引入了四个外部参数: α \alpha α、 β \beta β、 κ \kappa κ 和 λ \lambda λ,各 sigma 点( 2 n + 1 2n+1 2n+1 个)的权重分配如下:
W m ( i ) = { λ n + λ i = 0 1 2 ( n + λ ) i = 1 , ⋅ ⋅ ⋅ , 2 n W_m^{(i)} = \begin{cases} \frac{\lambda}{n+\lambda} & i = 0 \\ \frac{1}{2(n+\lambda)} & i = 1, ··· , 2n \end{cases} Wm(i)={ n+λλ2(n+λ)1i=0i=1,⋅⋅⋅,2n
W c ( i ) = { λ n + λ + 1 − α 2 + β i = 0 1 2 ( n + λ ) i = 1 , ⋅ ⋅ ⋅ , 2 n W_c^{(i)} = \begin{cases} \frac{\lambda}{n+\lambda} + 1 -\alpha^2 + \beta & i = 0 \\ \frac{1}{2(n+\lambda)} & i = 1, ··· , 2n \end{cases} Wc(i)={ n+λλ+1−α2+β2(n+λ)1i=0i=1,⋅⋅⋅,2n
其中, W m ( i ) W_m^{(i)} Wm(i) 表示计算近似均值时 sigma 点的权重, W c ( i ) W_c^{(i)} Wc(i) 表示计算近似协方差时 sigma 点的权重。参数 λ \lambda λ 满足:
λ = α 2 ( n + κ ) − n \lambda = \alpha^2(n+\kappa)-n λ=α2(n+κ)−n
参数 α \alpha α 和 κ \kappa κ 为确定 sigma 点分布在均值多远的范围内的比例参数。 α \alpha α 满足 1 0 − 4 ≤ α ≤ 1 10^{-4} \le \alpha \le 1 10−4≤α≤1,为避免强非线性系统中的非局部效应问题, α \alpha α 通常取一个较小值; κ \kappa κ 满足 κ ≥ 0 \kappa \ge 0 κ≥0,通常取 κ = 3 − n \kappa = 3-n κ=3−n 或 κ = 0 \kappa = 0 κ=0。
下图呈现了当 α \alpha α 取值分别为 0.3 0.3 0.3 和 1 1 1 时,sigma 点的分布情况,从图中可以发现, α \alpha α 取值越大,非均值处的 sigma 点距离均值越远。
参数 β \beta β 用于引入随机变量概率分布的高阶矩信息,如果分布是精确的高斯分布,则 β = 2 \beta = 2 β=2 是最优选择。
步骤二:确定性采样
通常情况下,siama 点位于均值处及对称分布于主轴的协方差处(每维两个)。按照如下方法采样得到 2 n + 1 2n + 1 2n+1 个 sigma 点,构成 n × ( 2 n + 1 ) n \times (2n + 1) n×(2n+1) 的点集矩阵 X \mathcal{X} X:
X ( i ) = { μ x i = 0 μ x + ( ( n + λ ) Σ x ) ( i − 1 ) i = 1 , ⋅ ⋅ ⋅ , n μ x − ( ( n + λ ) Σ x ) ( i − n − 1 ) i = n + 1 , ⋅ ⋅ ⋅ , 2 n \mathcal{X}^{(i)} = \begin{cases} \mu_x & i = 0 \\ \mu_x + (\sqrt{(n + \lambda)\Sigma_x})^{(i-1)} & i = 1, ··· , n \\ \mu_x - (\sqrt{(n + \lambda)\Sigma_x})^{(i-n-1)} & i = n + 1, ··· , 2n \end{cases} X(i)=⎩⎪⎨⎪⎧μxμx+((n+λ)Σx)(i−1)μx−((n+λ)Σx)(i−n−1)i=0i=1,⋅⋅⋅,ni=n+1,⋅⋅⋅,2n
其中, ( ( n + λ ) Σ x ) ( i − 1 ) (\sqrt{(n + \lambda)\Sigma_x})^{(i-1)} ((n+λ)Σx)(i−1) 表示矩阵 ( n + λ ) Σ x (n + \lambda)\Sigma_x (n+λ)Σx 作 Cholesky 分解后下三角矩阵的第 i − 1 i-1 i−1 列, ( ( n + λ ) Σ x ) ( i − n − 1 ) (\sqrt{(n + \lambda)\Sigma_x})^{(i-n-1)} ((n+λ)Σx)(i−n−1) 同理。
步骤三:sigma 点非线性变换
将每个 sigma 点(即 X \mathcal{X} X 的每一列)进行 g ( ⋅ ) g(·) g(⋅) 的非线性变换,得到变换后的新的点集矩阵 Y \mathcal{Y} Y:
Y ( i ) = g ( X ( i ) ) i = 0 , ⋅ ⋅ ⋅ , 2 n \mathcal{Y}^{(i)} = g(\mathcal{X}^{(i)}) \quad i = 0, ··· , 2n Y(i)=g(X(i))i=0,⋅⋅⋅,2n
步骤四:加权计算近似均值与近似协方差
μ y = ∑ i = 0 i = 2 n W m ( i ) Y ( i ) \mu_y = \sum_{i=0}^{i=2n}W_m^{(i)}\mathcal{Y}^{(i)} μy=i=0∑i=2nWm(i)Y(i)
Σ y = ∑ i = 0 i = 2 n W c ( i ) [ Y ( i ) − μ y ] [ Y ( i ) − μ y ] T \Sigma_y = \sum_{i=0}^{i=2n}W_c^{(i)}[\mathcal{Y}^{(i)}-\mu_y][\mathcal{Y}^{(i)}-\mu_y]^T Σy=i=0∑i=2nWc(i)[Y(i)−μy][Y(i)−μy]T
2 无迹卡尔曼滤波的假设
无迹卡尔曼滤波与扩展卡尔曼滤波具有相同的前提假设。
2.1 与卡尔曼滤波相同的假设
(1) 假设一:状态量服从正态分布
X ∼ N ( μ X , σ X 2 ) X \sim \mathcal{N}(\mu_X, \ \sigma_X^2) X∼N(μX, σX2)
(2) 假设二:观测量服从正态分布
Y ∼ N ( μ Y , σ Y 2 ) Y \sim \mathcal{N}(\mu_Y, \ \sigma_Y^2) Y∼N(μY, σY2)
(3) 假设三:过程噪声服从均值为 0 的正态分布
Q ∼ N ( 0 , σ Q 2 ) Q \sim \mathcal{N}(0, \ \sigma_Q^2) Q∼N(0, σQ2)
(4) 假设四:观测噪声服从均值为 0 的正态分布
R ∼ N ( 0 , σ R 2 ) R \sim \mathcal{N}(0, \ \sigma_R^2) R∼N(0, σR2)
2.2 与卡尔曼滤波不同的假设
(5) 假设五:状态转移函数和(或)观测函数为非线性函数
在卡尔曼滤波的前提假设中,认为状态方程中的状态转移函数 f ( x ) f(x) f(x) 以及观测方程中的观测函数 h ( x ) h(x) h(x) 均为线性函数。基于这种线性假设,存在常数或常矩阵 F F F,使得 f ( x ) f(x) f(x) 可以写成卡尔曼滤波中的线性形式,存在常数或常矩阵 H H H,使得 h ( x ) h(x) h(x) 也可以写成卡尔曼滤波中的线性形式。
不同于标准卡尔曼滤波,无迹卡尔曼滤波处理的是非线性高斯系统,假设系统的状态转移函数和(或)观测函数为非线性函数。
3 无迹卡尔曼滤波算法框架
根据噪声对系统的状态转移过程和观测过程的影响是线性可加的还是非线性不可加的,无迹卡尔曼滤波算法有两种形式:可加性噪声条件下的无迹卡尔曼滤波算法和非可加性噪声条件下的无迹卡尔曼滤波算法。
3.1 可加性噪声条件下的无迹卡尔曼滤波
在此前的文章《从概率到贝叶斯滤波》中,我们曾经这样描述系统的状态方程和观测方程:
{ X k = f ( X k − 1 ) + Q k ⇒ 状 态 方 程 Y k = h ( X k ) + R k ⇒ 观 测 方 程 \begin{cases} X_k=f(X_{k-1})+Q_k & \Rightarrow \color{red}{状态方程} \\ Y_k=h(X_k)+R_k & \Rightarrow \color{red}{观测方程} \end{cases} { Xk=f(Xk−1)+QkYk=h(Xk)+Rk⇒状态方程⇒观测方程
从上式中我们可以发现,过程噪声 Q k Q_k Qk 和观测噪声 R k R_k Rk 是以线性可加项的形式存在于系统状态方程和观测方程中的,这种形式的表述基于这样的前提假设:过程噪声 Q k Q_k Qk 对系统状态转移过程的影响是线性的,观测噪声 R k R_k Rk 对系统观测过程的影响也是线性的。很明显,此种情况下, Q k Q_k Qk 与 X k X_k Xk 是同维的, R k R_k Rk 与 Y k Y_k Yk 是同维的。
由此引申出可加性噪声条件下的无迹卡尔曼滤波算法,《概率机器人》第 3.4 节 P53 对算法流程有着很好的描述。假设有如下已知条件:
- 高斯的状态量随机向量 X X X, n X n_X nX 维,记 n X = n n_X = n nX=n
- k − 1 k - 1 k−1 时刻 X X X 的后验均值与后验协方差: μ X k − 1 + \mu_{X_{k-1}}^+ μXk−1+, Σ X k − 1 + \Sigma_{X_{k-1}}^+ ΣXk−1+
- k k k 时刻的外部控制量输入 u k u_k uk
- 高斯的过程噪声随机向量: Q ∼ N ( 0 , Σ Q ) Q\sim\mathcal{N}(0, \Sigma_Q) Q∼N(0,ΣQ)
- 状态转移函数: f ( X k − 1 , u k ) f(X_{k-1}, u_k) f(Xk−1,uk)
- 高斯的观测量随机向量 Z Z Z, n Z n_Z n