前言

自运动估计(Ego-Motion Estimation)是机器人领域和机器视觉领域基础问题,是解决后续GNC问题的基础。其核心的计算问题是,通过视觉传感器获取的一系列视觉特征的约束关系,解算出某个时刻处的传感器速度与位移等物理量,这里的视觉传感器包括但不限于普通光学相机、激光雷达、事件相机、声呐、超声雷达、毫米波雷达以及红外成像传感器等。

数学基础

自运动估计需要用到的预备数学知识有坐标系变换、科氏方程、旋转矩阵。

概念声明

由于坐标系变换与科氏方程有概念非常容易被混淆,首先声明以下两个概念:

  • 表示:针对空间矢量而言,其使用某套坐标系基底,或是其在某个坐标系下的投影,称为该矢量在某个坐标系下表示。
  • 观测:针对矢量端点而言,该端点在某个坐标系下的向量值,或称从不同坐标系的原点出发到达相同端点的视线向量,称为该矢量(端点)在某个坐标系下的观测。

为了便于区别概念,表示使用上标,在坐标系mm下表示的矢量X\mathbf{X}记为Xm\mathbf{X}^m;观测使用竖线分隔的下标,在坐标系mm下观测的矢量端点X\mathbf{X}记为Xm\mathbf{X}_{|m}。如图所示,其中任意一个矢量如Ri,Rc,Ric\mathbf{R}_i,\mathbf{R}_c,\mathbf{R}_{ic}都可以投影至不同坐标系下,如将矢量Ri\mathbf{R}_i投影至iiRii\mathbf{R}_i^i,投影至ccRic\mathbf{R}_i^c等;矢量端点PPii系下的观测为Rii\mathbf{R}_{i|i},在cc系下的观测为Rcc\mathbf{R}_{c|c},同理,矢量端点OcO_cii系下的观测为Rici\mathbf{R}_{ic|i},在不引起混淆的前提下,可以忽略竖线分隔右侧的下标。

观测与表示的区别

因此,表示是针对同一个矢量说明的,而观测则是针对同一个端点在不同坐标系下说明的,注意区分这两个概念。

坐标系变换

低速运动下,某个质点的位移在不同坐标系下服从伽利略变换,如上图,某个质点PP在坐标系i,ci,c下的不同观测位移值满足线性叠加关系:

Rii=Rcc+RiciRi=Rc+Ric\mathbf{R}_{i|i} = \mathbf{R}_{c|c} + \mathbf{R}_{ic|i} \Leftrightarrow \mathbf{R}_{i} = \mathbf{R}_{c} + \mathbf{R}_{ic}

同理,速度、加速度、角速度等物理量也满足伽利略变换(前提是各个矢量构成矢量三角形)。

注意角位置并不是矢量

科氏方程

科氏方程是描述同一矢量的变化量在不同坐标系观测值关系,其形式为:

X˙i=X˙c+ωic×X\dot{\mathbf{X}}_{|i}=\dot{\mathbf{X}}_{|c} + \bm{\omega}_{ic}\times{\mathbf{X}}

其中X˙i\dot{\mathbf{X}}_{|i}是矢量X\mathbf{X}ii系下的观测变化率,X˙c\dot{\mathbf{X}}_{|c}是矢量X\mathbf{X}cc系下的观测变化率,ωic\bm{\omega}_{ic}ii系相对于cc系的角速度。例如在上图中,点PP位移的变化量R˙\dot{\mathbf{R}}i,ci,c两个坐标系下的观测值关系为:

R˙i=R˙c+ωic×R\dot{\mathbf{R}}_{|i}=\dot{\mathbf{R}}_{|c} + \bm{\omega}_{ic}\times{\mathbf{R}}

需要注意的是:R˙cR˙c\dot{\mathbf{R}}_{|c}\ne\dot{\mathbf{R}}_c

旋转矩阵

旋转矩阵是描述同一矢量不同坐标系下的表示值关系,其形式为:

Xic=CciXii\mathbf{X}_i^c = \mathbf{C}^{ci}\mathbf{X}_i^i

其中,Cci\mathbf{C}^{ci}表示从ii坐标系向cc坐标系的旋转矩阵,旋转矩阵的概念比较通俗,此处不再赘述。

相机自运动数学基础

仍以表示的情形为例,假设OiO_i坐标系为惯性参考系,OcO_c坐标系与相机固连,相机在空间中作6自由度运动,质点PP在空间中作3轴平移,根据伽利略变换公式,在惯性坐标系ii下对时间求导可得:

dRidti=dRcdti+dRicdti\left.\frac{d\mathbf{R}_i}{dt}\right|_i =\left. \frac{d\mathbf{R}_c}{dt}\right|_i + \left.\frac{d\mathbf{R}_{ic}}{dt}\right|_i

此时,由于Ri\mathbf{R}_iRic\mathbf{R}_ic均为惯性坐标系下的观测值,与求导的观测坐标系保持一致,它们可以直接计算出速度值:

dRidti=vidRicdti=vic\begin{aligned} \left.\frac{d\mathbf{R}_i}{dt}\right|_i &= \mathbf{v}_i \\ \left.\frac{d\mathbf{R}_{ic}}{dt}\right|_i &= \mathbf{v}_{ic} \end{aligned}

其中,vi\mathbf{v}_i表示点PP的惯性速度,vic\mathbf{v}_{ic}表示坐标系OcO_c的惯性平动速度。对于右式第一项,由于在cc系下观测的点PP位置对ii系求导,观测坐标系与求导坐标系并不一致,此时需要使用科氏方程公式进行转换:

dRcdti=dRcdtc+ωic×Rc=vc+ωic×Rc\left.\frac{d\mathbf{R}_c}{dt}\right|_i = \left.\frac{d\mathbf{R}_c}{dt}\right|_c + \bm{\omega}_{ic}\times{\mathbf{R}}_c= \mathbf{v}_c + \bm{\omega}_{ic}\times{\mathbf{R}}_c

这里,vc\mathbf{v}_c表示点PPcc系下的观测线速度,即相对cc系的速度,后一项表示由于cc系角运动产生的牵连转动线速度。将以上两式代入公式可得:

vi=vc+ωic×Rc+vic\mathbf{v}_i = \mathbf{v}_c + \bm{\omega}_{ic}\times{\mathbf{R}}_c + \mathbf{v}_{ic}

即求得了点PPii坐标系下的惯性速度,该公式是相机自运动估计的数学基础。通常讨论的是以相机坐标系cc作为投影坐标系的相机自运动估计,将以上各个矢量投影至相机坐标系下,可进一步写为:

vic=vcc+ωicc×Rcc+vicc\mathbf{v}_i^c = \mathbf{v}_c^c + \bm{\omega}_{ic}^c\times{\mathbf{R}}_c^c + \mathbf{v}_{ic}^c

这里用到了向量积的双线性公式(Ra)×b=(Ma)×(Mb)\mathbf{(Ra)\times b}=(\mathbf{Ma})\times(\mathbf{Mb}),其中M\mathbf{M}为旋转矩阵

相机自运动情形

根据点PPOcO_c坐标系的运动情况,可以将相机自运动分为以下几种情形:

相机纯平移,点静止

相机纯平移即ωic=0\bm{\omega}_{ic}=\mathbf{0},由于点静止,则vi=0\mathbf{v}_i=\mathbf{0},由此可得:

vicc=vcc\mathbf{v}_{ic}^c = -\mathbf{v}_c^c

即相机中观测到的点运动速度的相反数就是相机自运动速度。

相机纯平移,点运动

此时仍然有ωic=0\bm{\omega}_{ic}=\mathbf{0},则有:

vicc=vicvcc\mathbf{v}_{ic}^c = \mathbf{v}_i^c - \mathbf{v}_c^c

即求解相机自运动的速度需要在已知当前点的惯性运动条件下,减去相机坐标系下的的点运动相对速度。

相机纯旋转,点静止

此时有vi=0\mathbf{v}_i=\mathbf{0}vic=0\mathbf{v}_{ic}=\mathbf{0},则有:

ωicc×Rcc=vcc\bm{\omega}_{ic}^c\times{\mathbf{R}}_c^c = -\mathbf{v}_c^c

相机自运动的速度,可由点在相机坐标系下的观测速度与点的位置矢量的建立最小二乘方程求解。

相机纯旋转,点运动

此时仅有vic=0\mathbf{v}_{ic}=\mathbf{0},则有:

ωicc×Rcc=vicvcc\bm{\omega}_{ic}^c\times{\mathbf{R}}_c^c = \mathbf{v}_i^c - \mathbf{v}_c^c

具体情况与相机纯旋转,点静止类似,需要额外已知点的运动场后才能求解相机自运动的速度。

相机平移+旋转,点静止

这种情况适用于相机在静止的场景内六轴自由运动,此时有vi=0\mathbf{v}_i=\mathbf{0},则有:

vicc+ωicc×Rcc=vcc\mathbf{v}_{ic}^c + \bm{\omega}_{ic}^c\times{\mathbf{R}}_c^c = -\mathbf{v}_c^c

此时相机的线速度和角速度都需要通过点的观测速度与位置矢量建立方程求解。

相机平移+旋转,点运动

这是最一般的运动情况,通常适用于航空航天领域的导航与控制,此时的质点大多取为运载体本身,而相机坐标系则通常取为地球坐标系或其他星球的坐标系,有:

vicc+ωicc×Rcc=vicvcc\mathbf{v}_{ic}^c + \bm{\omega}_{ic}^c\times{\mathbf{R}}_c^c = \mathbf{v}_i^c - \mathbf{v}_c^c

此时需要已知星球的运动场,才能求解载体自运动的速度,通常该情况在相机自运动领域应用较少。