可观性分析:为什么零空间就是不可观方向
可观性分析的核心问题是:系统状态里哪些变化会真实改变观测,哪些变化虽然改变了状态表示,却不会改变任何观测。在线性化之后,这个问题就变成了研究雅可比矩阵的零空间。
在 SLAM、VIO、滤波器一致性、边缘化和 FEJ(First Estimate Jacobian)这些问题里,经常会遇到一个说法:
不可观方向对应 Jacobian 的 Null Space。
这句话看起来很抽象,但它其实表达的是一个很朴素的事实:如果沿着某个状态方向扰动,所有残差或观测都不变,那么观测数据就无法区分扰动前后的状态。这个方向就是不可观方向。
本文从控制理论里的可观性定义开始,逐步过渡到非线性 SLAM/VINS 中的雅可比、Hessian、Gauge Freedom,以及 FEJ 为什么要维护正确的零空间。
1. 什么是可观性
先考虑一个离散时间系统:
xk+1=f(xk,uk) x_{k+1}=f(x_k,u_k) xk+1=f(xk,uk)
其中,xkx_kxk 表示第 kkk 时刻的系统状态,uku_kuk 表示输入,f(⋅)f(\cdot)f(⋅) 表示状态转移函数。
系统的观测模型为:
zk=h(xk) z_k=h(x_k) zk=h(xk)
其中,zkz_kzk 表示第 kkk 时刻的观测,h(⋅)h(\cdot)h(⋅) 表示状态到观测的映射。
所谓"可观",直观地说就是:我们能不能仅通过一段时间内的观测,区分不同的系统状态。如果两个不同状态 x1x_1x1 和 x2x_2x2 会产生不同观测:
x1≠x2,h(x1)≠h(x2) x_1 \neq x_2,\quad h(x_1) \neq h(x_2) x1=x2,h(x1)=h(x2)
那么观测对这两个状态是有区分能力的。
反过来,如果存在一个非零扰动方向 δx\delta xδx,使得状态从 xxx 变成 x+δxx+\delta xx+δx 之后,观测完全不变:
h(x+δx)=h(x) h(x+\delta x)=h(x) h(x+δx)=h(x)
那么观测无法判断系统到底处在 xxx 还是 x+δxx+\delta xx+δx。这个方向 δx\delta xδx 就是不可观方向。
2. 线性系统里的可观矩阵
对于线性系统,状态转移和观测可以写成:
xk+1=Fxk x_{k+1}=Fx_k xk+1=Fxk
zk=Hxk z_k=Hx_k zk=Hxk
其中,FFF 是状态转移矩阵,HHH 是观测矩阵。
如果从初始状态 x0x_0x0 出发,那么连续几帧观测可以写成:
z0=Hx0 z_0=Hx_0 z0=Hx0
z1=Hx1=HFx0 z_1=Hx_1=HFx_0 z1=Hx1=HFx0
z2=Hx2=HF2x0 z_2=Hx_2=HF^2x_0 z2=Hx2=HF2x0
把这些观测堆叠起来,就得到经典的可观矩阵:
O=HHFHF2⋮ \mathcal{O}= \begin{bmatrix} H\\ HF\\ HF^2\\ \vdots \end{bmatrix} O= HHFHF2⋮
如果系统状态维度为 nnn,并且:
rank(O)=n \operatorname{rank}(\mathcal{O})=n rank(O)=n
那么所有状态方向都能通过观测区分出来,系统完全可观。
如果:
rank(O)<n \operatorname{rank}(\mathcal{O})<n rank(O)<n
那么 O\mathcal{O}O 存在非零零空间。也就是说,存在非零向量 n\mathbf{n}n 满足:
On=0 \mathcal{O}\mathbf{n}=0 On=0
这个向量 n\mathbf{n}n 就对应一个不可观方向。
3. 为什么零空间就是不可观方向
假设我们沿着向量 n\mathbf{n}n 对状态施加一个很小的扰动:
x′=x+ϵn x'=x+\epsilon\mathbf{n} x′=x+ϵn
其中,ϵ\epsilonϵ 是一个很小的标量,表示扰动幅度。
线性系统中,堆叠观测的变化量为:
δz=Oδx \delta z=\mathcal{O}\delta x δz=Oδx
由于 δx=ϵn\delta x=\epsilon\mathbf{n}δx=ϵn,所以:
δz=O(ϵn)=ϵOn \delta z=\mathcal{O}(\epsilon\mathbf{n})=\epsilon\mathcal{O}\mathbf{n} δz=O(ϵn)=ϵOn
如果 n\mathbf{n}n 位于 O\mathcal{O}O 的零空间中,即:
On=0 \mathcal{O}\mathbf{n}=0 On=0
那么:
δz=0 \delta z=0 δz=0
这说明沿着 n\mathbf{n}n 改变状态时,观测完全不变。既然观测不变,系统当然无法根据观测判断这个方向上的状态变化。因此:
n∈Null(O) \mathbf{n}\in\operatorname{Null}(\mathcal{O}) n∈Null(O)
就表示 n\mathbf{n}n 是不可观方向。
这就是"可观性分析本质上是在研究零空间"的原因。
4. 非线性 SLAM 中的可观性
SLAM 和 VINS 通常是非线性问题。我们不再直接研究 z=Hxz=Hxz=Hx,而是研究残差函数:
r(x) r(x) r(x)
其中,xxx 是系统状态,r(x)r(x)r(x) 是由观测和预测值构造出来的残差。
在优化或者滤波中,会对当前估计 xˉ\bar{x}xˉ 附近的状态增量 δx\delta xδx 做一阶线性化:
r(xˉ⊞δx)≈r(xˉ)+Jδx r(\bar{x}\boxplus\delta x)\approx r(\bar{x})+J\delta x r(xˉ⊞δx)≈r(xˉ)+Jδx
其中,⊞\boxplus⊞ 表示在状态流形上的增量操作,JJJ 是残差对状态增量的雅可比矩阵:
J=∂r∂δx J=\frac{\partial r}{\partial \delta x} J=∂δx∂r
如果存在非零方向 n\mathbf{n}n 满足:
Jn=0 J\mathbf{n}=0 Jn=0
那么沿着 n\mathbf{n}n 扰动状态时,一阶近似下残差不发生变化:
δr=Jn=0 \delta r=J\mathbf{n}=0 δr=Jn=0
因此,n\mathbf{n}n 就是当前线性化系统中的不可观方向。
5. Hessian 奇异与 Gauge Freedom
高斯牛顿方法通常最小化平方残差:
minδx∥r+Jδx∥2 \min_{\delta x}\|r+J\delta x\|^2 δxmin∥r+Jδx∥2
它对应的正规方程为:
JTJδx=−JTr J^TJ\delta x=-J^Tr JTJδx=−JTr
其中:
H=JTJ H=J^TJ H=JTJ
通常被称为 Gauss-Newton Hessian 或近似 Hessian。
如果存在方向 n\mathbf{n}n 满足:
Jn=0 J\mathbf{n}=0 Jn=0
那么:
Hn=JTJn=JT0=0 H\mathbf{n}=J^TJ\mathbf{n}=J^T0=0 Hn=JTJn=JT0=0
这说明 HHH 也存在零空间,所以 HHH 是奇异的,不能直接求逆。
在 SLAM 中,这种由坐标系任意选取带来的不可观自由度,常被称为 Gauge Freedom。它并不是传感器坏了,而是问题本身没有绝对参考。例如只通过相对观测建立地图时,整个地图一起平移或旋转,观测仍然可以完全一样。
6. 一个最简单的例子:二维相机观测路标
考虑一个二维问题。状态由相机位置和路标位置组成:
x=pxpylxly x= \begin{bmatrix} p_x\\ p_y\\ l_x\\ l_y \end{bmatrix} x= pxpylxly
其中,px,pyp_x,p_ypx,py 表示相机在二维平面中的位置,lx,lyl_x,l_ylx,ly 表示路标在二维平面中的位置。
假设观测是路标相对相机的位置:
z=l−p z=l-p z=l−p
写成分量形式就是:
z=lx−pxly−py z= \begin{bmatrix} l_x-p_x\\ l_y-p_y \end{bmatrix} z=lx−pxly−py
对状态 xxx 求雅可比,可以得到:
J=−10100−101 J= \begin{bmatrix} -1&0&1&0\\ 0&-1&0&1 \end{bmatrix} J=−100−11001
现在寻找零空间,也就是求解:
Jn=0 J\mathbf{n}=0 Jn=0
设:
n=abcd \mathbf{n}= \begin{bmatrix} a\\ b\\ c\\ d \end{bmatrix} n= abcd
代入后得到:
{−a+c=0−b+d=0 \begin{cases} -a+c=0\\ -b+d=0 \end{cases} {−a+c=0−b+d=0
因此:
c=a,d=b c=a,\quad d=b c=a,d=b
所以零空间中的向量可以写成:
n=abab \mathbf{n}= \begin{bmatrix} a\\ b\\ a\\ b \end{bmatrix} n= abab
取两个基向量:
n1=1010,n2=0101 \mathbf{n}_1= \begin{bmatrix} 1\\ 0\\ 1\\ 0 \end{bmatrix}, \quad \mathbf{n}_2= \begin{bmatrix} 0\\ 1\\ 0\\ 1 \end{bmatrix} n1= 1010 ,n2= 0101
n1\mathbf{n}_1n1 表示相机和路标一起沿 xxx 方向平移,n2\mathbf{n}_2n2 表示相机和路标一起沿 yyy 方向平移。
在这两个方向上,相对位置 l−pl-pl−p 不变,所以观测不变。这说明全局 xxx 平移和全局 yyy 平移不可观。
7. SLAM 中的全局平移不可观
在视觉 SLAM 中,一个典型的重投影残差可以抽象为:
r=z−π(T−1P) r=z-\pi(T^{-1}P) r=z−π(T−1P)
其中,zzz 是图像观测,π(⋅)\pi(\cdot)π(⋅) 是相机投影函数,TTT 表示相机位姿,PPP 表示世界坐标系下的三维地图点。
投影真正依赖的是点在相机坐标系下的坐标:
Pc=T−1P P_c=T^{-1}P Pc=T−1P
如果把所有相机位姿和所有地图点同时做同一个全局平移 Δ\DeltaΔ,相机和地图点之间的相对几何关系不变。因此 PcP_cPc 不变,投影 π(Pc)\pi(P_c)π(Pc) 也不变。
这意味着视觉 SLAM 天然存在全局平移不可观:
Jntrans=0 J\mathbf{n}_{\text{trans}}=0 Jntrans=0
在三维空间中,这通常对应 xxx、yyy、zzz 三个全局平移自由度。
8. 实际项目中如何做可观性分析
实际工程中,常见做法是构建当前系统的完整雅可比矩阵:
J=∂r∂δx J=\frac{\partial r}{\partial \delta x} J=∂δx∂r
然后计算近似 Hessian:
H=JTJ H=J^TJ H=JTJ
接着对 HHH 做特征值分解:
H=VΛVT H=V\Lambda V^T H=VΛVT
其中,VVV 是特征向量矩阵,Λ\LambdaΛ 是特征值对角矩阵。
如果存在接近零的特征值:
λi≈0 \lambda_i\approx0 λi≈0
那么对应的特征向量 viv_ivi 就表示一个弱约束方向或不可观方向:
Hvi≈0 Hv_i\approx0 Hvi≈0
对于标准 VINS,在没有外部绝对位置和绝对航向观测时,理论上通常会出现 4 个接近零的自由度:
- 全局 xxx 平移
- 全局 yyy 平移
- 全局 zzz 平移
- 全局 yaw 旋转
如果实际计算中出现 5 个、6 个甚至更多接近零的特征值,往往说明系统发生了退化。例如:
- 纯旋转运动导致平移尺度或深度约束不足;
- 长时间匀速运动导致 IMU 激励不充分;
- 特征点太少或空间分布太差;
- 视觉跟踪质量差,导致有效约束不足;
- 传感器时间同步或外参误差让约束变弱。
因此,可观性分析不仅能解释理论自由度,也能帮助诊断实际系统是否退化。
9. FEJ、边缘化与可观性保持
在 VINS、滑窗优化和 EKF 中,一个经典问题是:理论上系统应该有 4 维不可观空间,但由于反复线性化、边缘化和先验更新,算法可能错误地破坏这些零空间。
理论上应该满足:
dim(Null(J))=4 \dim\left(\operatorname{Null}(J)\right)=4 dim(Null(J))=4
但是实际计算中,可能变成:
dim(Null(J))=2 \dim\left(\operatorname{Null}(J)\right)=2 dim(Null(J))=2
甚至:
dim(Null(J))=1 \dim\left(\operatorname{Null}(J)\right)=1 dim(Null(J))=1
这意味着原本不可观的方向被系统错误地"观测"到了。用公式表示,就是本该满足:
Jn=0 J\mathbf{n}=0 Jn=0
但由于不一致的线性化点,变成了:
Jn≠0 J\mathbf{n}\neq0 Jn=0
结果是系统向 Hessian 中注入了虚假的信息。它会错误地认为全局位置或全局 yaw 被约束住了,从而导致估计过度自信、协方差不一致,甚至引发轨迹漂移和优化偏差。
FEJ、OC-EKF(Observability Constrained EKF)以及一些边缘化策略的核心目的,就是让线性化后的系统仍然保留理论上应有的不可观方向。换句话说,它们希望维护正确的零空间结构:
Jnunobs=0 J\mathbf{n}_{\text{unobs}}=0 Jnunobs=0
这就是"可观性保持"的本质。
10. 总结
可观性分析可以浓缩成一句话:
如果一个状态扰动方向不会改变任何观测或残差,那么这个方向就是不可观方向;在线性化系统中,它就是雅可比矩阵的零空间。
对应关系如下:
- 线性系统中,不可观方向满足 On=0\mathcal{O}\mathbf{n}=0On=0;
- 非线性优化中,不可观方向满足 Jn=0J\mathbf{n}=0Jn=0;
- 如果 Jn=0J\mathbf{n}=0Jn=0,则 JTJn=0J^TJ\mathbf{n}=0JTJn=0,Hessian 会出现零空间;
- SLAM 中的全局平移、VINS 中的全局 yaw,都是典型不可观方向;
- FEJ 和可观性约束方法的目标,是防止线性化和边缘化破坏这些本应存在的零空间。
所以,当我们说"可观性分析是在分析 Jacobian 的 Null Space"时,本质上是在问:
哪些状态变化不会造成残差变化? \text{哪些状态变化不会造成残差变化?} 哪些状态变化不会造成残差变化?
答案就是系统无法从当前观测中辨认出来的自由度。