IMU在slam系统中的应用(三)

        在IMU在slam系统中的应用(二)中给出了IMU预积分计算推导以及代码,这里给出IMU误差递推方程的推导。 

(一)一段时间多个IMU数据预积分量协方差

        单个IMU数据作为测量值,其噪声方差我们可以标定,但是一段时间内多个IMU数据积分形成的预积分量的方差应该怎么求解呢?

  • 协方差传递公式

        当y=Ax,并且x服从分布x\in N(0,\Sigma_x ),那么y的协方差为:

\Sigma_y=A \Sigma_x A^T

  • 相邻时刻误差线性传递方程

        误差包括两部分,上一时刻的误差传递给当前时刻,上一时刻的噪声传递给当前时刻

        假设上一时刻的状态量误差为\eta_{ik-1}=[\delta \theta_{ik-1}, \delta v_{ik-1}, \delta p_{ik-1}],上一时刻得测量噪声为n_{k-1}=[n^g_{k-1},n^a_{k-1}],那么,传递给当前时刻误差线性传递方程为:

\eta_{ik}=F_{k-1}\eta_{k-1}+G_{k-1}n_{k-1}

  • 协方差传递公式

        所以,协方差传递方程为:

\Sigma_{ik}=F_{k-1}\Sigma_{ik-1}F^T_{k-1}+G_{k-1}\Sigma_{k-1}G^T_{k-1}

(二)非线性方程的误差递推方程推导

        通常,状态量之间的递推关系是非线性的方程,如x_{k+1}=f(x_k,u_k),其中x为状态量,u为观测量。可以用两种方式来推导状态误差传递的线性递推关系。

  • 基于一阶泰勒展开的误差传递方程

        令状态量为\hat{x}=x+\delta x,其中\hat{x}为计算得到的预测状态量,x为实际真值,\delta x为误差,观测量的噪声为n,所以,对非线性状态方程进行一阶泰勒展开

\hat{x}_{k+1}=f(\hat{x}_k,\hat{u}_k)

        代入误差和噪声得:

\hat{x}_{k+1}=f({x}_k+\delta x_k,{u}_k+n_k)

        所以展开后:

{x}_{k+1}+\delta x_{k+1}=f({x}_k,{u}_k)+F\delta x_k+G n_k

        其中F为状态量x_{k+1}对状态量x_k的雅可比矩阵,G为状态量x_{k+1}对观测量u_{k}的雅可比矩阵。

        因此状态误差的递推方程为:

\delta x_{k+1}= F\delta x_k+G n_k

  • 基于误差随时间变化的递推方程(论文中的推导)

        如果可以推导状态误差随时间变化的导数关系,如:

\dot{\delta}x=A\delta x + Bn

        那么误差状态的传递方程为:

\delta x_{k+1}=\delta x_k+ \dot{\delta}x_k\Delta t

\Rightarrow \delta x_{k+1}=(I+A\Delta t)\delta x_k+B \delta n_k

        代入到一阶泰勒展开的误差递推方程中,可以推导:

F=I+A\Delta tG=B\Delta t

  • 基于泰勒展开和基于误差随时间变化方法对比

        为什么要用误差随时间的变化来进行误差递推方程的构建呢?

        在应用(一)(二)的推导中,我们已经知道状态的导数和状态之间的关系,比如已经知道速度和状态量之间的关系:

\dot{v}^w=R_b^wa^b+g^w

        因此可以推导速度的误差导数和状态误差之间的关系,在上式中加上各自误差则有

\dot{v}^w+\dot{\delta}v^w=R^w_b exp([\delta \theta]_{\times})(a^b+\delta a^b)+g+\delta g\dot{v}^w+\dot{\delta}v^w=R^w_b (I + [\delta \theta]_{\times})(a^b+\delta a^b)+g+\delta g

\dot{v}^w+\dot{\delta}v^w=R^w_b a^b+g+R^w_b \delta a^b +R^w_b [\delta \theta]_{\times}(a^b+\delta a^b)+\delta g

\dot{\delta}v^w= R^w_b \delta a^b +R^w_b [\delta \theta]_{\times}(a^b+\delta a^b)+\delta g

\dot{\delta}v^w= R^w_b \delta a^b -R^w_b [a^b]_{\times}\delta \theta+\delta g

        由此,就可以推导写出整个AB和其他方程了。

(三)IMU的PVQ增量误差、协方差以及雅可比矩阵的递推方程

        我们已经建立起IMU预积分测量值的推导,在前置知识下,需要将IMU预积分运用到非线性优化中,需要建立线性高斯误差状态递推方程,由线性高斯系统的协方差,推导协方差矩阵,并求解对应的雅可比矩阵。

        首先,由于四元数\gamma_t^{b_k}被参数化过,所以将其误差定义为围绕其均值的扰动:

\gamma_t^{b_k}\approx \hat{\gamma}_t^{b_k}\bigotimes \left[\begin{array}{c} 1 \\ \frac{1}{2}{ \delta \theta_t^{b_k}} \end{array}\right]

        由预积分的连续形式建立的运动模型,以一段时间内IMU构建的预积分量作为测量值,对两时刻之间的状态量进行约束,可以得到k时刻和k+1时刻下的误差项。

        之前已经推导过世界坐标系中的预积分和PVQ状态的关系,从世界坐标系转换到本体坐标系,该关系可以写成:

\mathbf{R}_{w}^{b_{k}} \mathbf{p}_{b_{k+1}}^{w}=\mathbf{R}_{w}^{b_{k}}\left(\mathbf{p}_{b_{k}}^{w}+\mathbf{v}_{b_{k}}^{w} \Delta t_{k}-\frac{1}{2} \mathbf{g}^{w} \Delta t_{k}^{2}\right)+\boldsymbol{\alpha}_{b_{k+1}}^{b_{k}}

\mathbf{R}_{w}^{b_{k}} \mathbf{v}_{b_{k+1}}^{w}=\mathbf{R}_{w}^{b_{k}}\left(\mathbf{v}_{b_{k}}^{w}-\mathbf{g}^{w} \Delta t_{k}\right)+\boldsymbol{\beta}_{b_{k+1}}^{b_{k}}

\mathbf{q}_{w}^{b_{k}} \otimes \mathbf{q}_{b_{k+1}}^{w}=\gamma_{b_{k+1}}^{b_{k}}

        以预积分作为测量量,可以得到误差项为:

\left[\begin{array}{c} \delta \boldsymbol{\alpha}_{b_{k+1}}^{b_{k}} \\ \delta \boldsymbol{\beta}_{b_{k+1}}^{b_{k}} \\ \delta \boldsymbol{\theta}_{b_{k+1}}^{b_{k}} \\ \delta \mathbf{b}_{a} \\ \delta \mathbf{b}_{g} \end{array}\right] =\left[\begin{array}{c} \mathbf{R}_{w}^{b_{k}}\left(\mathbf{p}_{b_{k+1}}^{w}-\mathbf{p}_{b_{k}}^{w}+\frac{1}{2} \mathbf{g}^{w} \Delta t_{k}^{2}-\mathbf{v}_{b_{k}}^{w} \Delta t_{k}\right)-\hat{\boldsymbol{\alpha}}_{b_{k+1}}^{b_{k}} \\ \mathbf{R}_{w}^{b_{k}}\left(\mathbf{v}_{b_{k+1}}^{w}+\mathbf{g}^{w} \Delta t_{k}-\mathbf{v}_{b_{k}}^{w}\right)-\hat{\boldsymbol{\beta}}_{b_{k+1}}^{b_{k}} \\ 2\left[\mathbf{q}_{b_{k}}^{w^{-1}} \otimes \mathbf{q}_{b_{k+1}}^{w} \otimes\left(\hat{\gamma}_{b_{k+1}}^{b_{k}}\right)^{-1}\right]_{x y z} \\ \mathbf{b}_{a b_{k+1}}-\mathbf{b}_{a b_{k}} \\ \mathbf{b}_{w b_{k+1}}-\mathbf{b}_{w b_{k}} \end{array}\right]

        因此根据误差递推方程的推导,可以给出t时刻误差项的线性化递推方程:

\begin{gathered} {\left[\begin{array}{l} \delta \dot{\alpha}_{t}^{b k} \\ \delta \dot{\beta}_{t}^{b k} \\ \delta \dot{\theta}_{t}^{b k} \\ \delta \dot{b}_{a t} \\ \delta \dot{b}_{w t} \end{array}\right]=\left[\begin{array}{ccccc} 0 & I & 0 & 0 & 0 \\ 0 & 0 & -R_{t}^{b k}\left[\hat{a}_{t}-b_{a t}\right]_{\times} & -R_{t}^{b k} & 0 \\ 0 & 0 & -\left[\hat{w}-b_{w t}\right]_{\times} & 0 & -I \\ 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 \end{array}\right]\left[\begin{array}{c} \delta \alpha_{t}^{b k} \\ \delta \beta_{t}^{b k} \\ \delta \theta_{t}^{b k} \\ \delta b_{a t} \\ \delta b_{w t} \end{array}\right]+\left[\begin{array}{cccc} 0 & 0 & 0 & 0 \\ -R_{t}^{b k} & 0 & 0 & 0 \\ 0 & -I & 0 & 0 \\ 0 & 0 & I & 0 \\ 0 & 0 & 0 & I \end{array}\right]\left[\begin{array}{c} n_{a} \\ n_{w} \\ n_{b a} \\ n_{b w} \end{array}\right]} \\ \\ =F_{t} \delta z_{t}^{b k}+G_{t} n_{t} \end{gathered}

        简写为:

\delta \dot{z}_{t}^{b k}=F_{t} \delta z_{t}^{b k}+G_{t} n_{t}

        进一步的,根据导数的定义,

\delta \dot{z}_{t}^{b k}=\lim _{\delta t \rightarrow 0} \frac{\delta z_{t+\delta t}^{b k}-\delta z_{t}^{b k}}{\delta t}

        即可得到:

\delta z_{t+\delta t}^{b k}=\delta z_{t}^{b k}+\delta \dot{z}_{t}^{b k} \delta t=\delta z_{t}^{b k}+\left(F_{t} \delta z_{t}^{b k}+G_{t} n_{t}\right) \delta t

=\left(I+F_{t} \delta t\right) \delta z_{t}^{b k}+G_{t} \delta t n_{t}

        得到与误差随时间的变化来进行误差递推方程类似的方程,令F=\left(I+F_{t} \delta t\right)V=G_{t} \delta t可以得到非线性系统的线性化递推误差方程

\delta z_{t+\delta t}^{b_{k}}=F \delta z_{t}^{b_{k}}+V n_{t}

        再,对于下一时刻的协方差,根据协方差递推公式,由高斯分布线性变换协方差的传递规律,可以预测下一时刻的协方差:

P_{t+\delta t}^{b_{k}}=\left(I+F_{t} \delta t\right) P_{t}^{b k}\left(I+F_{t} \delta t\right)^{T}+(G \delta t) Q\left(G_{t} \delta t\right)^{T}

        其中P^{b_k}_{t}表示t时刻的协方差,Q表示噪声项的对角协方差矩阵,初始协方差为0

Q^{12 \times 12}=\left[\begin{array}{cccc}\sigma_{a}^{2} & 0 & 0 & 0 \\ 0 & \sigma_{w}^{2} & 0 & 0 \\ 0 & 0 & \sigma_{b a}^{2} & 0 \\ 0 & 0 & 0 & \sigma_{b w}^{2}\end{array}\right]

        同时也可以根据递推方程得到对应的雅可比矩阵迭代公式

J_{t+\delta t}=\left(I+F_{t} \delta t\right) J_{t}

其中初始化雅可比矩阵为单位阵I

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IMU (Inertial Measurement Unit) 是一种用于测量物体的加速度和角速度的传感器。在 SLAM (Simultaneous Localization and Mapping) IMU 可以用于帮助估计机器人的姿态和运动状态。 要让 IMUSLAM 学习,通常需要进行以下步骤: 1. 数据采集:首先,需要收集 IMU 的原始数据,包括加速度和角速度的测量值。这些数据可以通过连接到机器人的 IMU 传感器来获取。 2. 数据预处理:对采集到的原始数据进行预处理是很重要的。这包括对数据进行滤波、去噪和校准等处理,以提高数据质量。 3. 特征提取:从预处理后的数据提取有用的特征。在 SLAM ,常用的特征包括重力向量、线性加速度和角速度等。 4. 姿态估计:利用特征提取的结果,使用合适的算法进行姿态估计。常见的算法包括卡尔曼滤波、扩展卡尔曼滤波等。 5. 运动估计:通过姿态估计的结果,结合其他传感器(如视觉、激光等),可以进一步估计机器人的运动状态,如位姿、速度等。 6. 系统优化:将姿态估计和运动估计的结果纳入到整个 SLAM 系统,进行优化和校正,以获得更准确的地图和定位结果。 需要注意的是,IMU 的学习不是指它可以自主学习新的知识,而是指在 SLAM 使用 IMU 数据进行建模和估计。以上是一个简要的概述,具体的学习方法和算法会因不同的 SLAM 系统应用而有所差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值