佛山网站代运营/网上营销推广
多传感器融合定位十二-基于图优化的建图方法其一
- 1. 基于预积分的融合方案流程
- 1.1 优化问题分析
- 1.2 预积分的作用
- 1.3 基于预积分的建图方案流程
- 2. 预积分模型设计
- 3. 预积分在优化中的使用
- 3.1 使用方法
- 3.2 残差设计
- 3.3 残差雅可比的推导
- 3.3.1 姿态残差的雅可比
- 3.3.2 速度残差的雅可比
- 3.3.3 位置残差的雅可比
Reference:
- 深蓝学院-多传感器融合
- 多传感器融合定位理论基础
文章跳转:
- 多传感器融合定位一-3D激光里程计其一:ICP
- 多传感器融合定位二-3D激光里程计其二:NDT
- 多传感器融合定位三-3D激光里程计其三:点云畸变补偿
- 多传感器融合定位四-3D激光里程计其四:点云线面特征提取
- 多传感器融合定位五-点云地图构建及定位
- 多传感器融合定位六-惯性导航原理及误差分析
- 多传感器融合定位七-惯性导航解算及误差分析其一
- 多传感器融合定位八-惯性导航解算及误差分析其二
- 多传感器融合定位九-基于滤波的融合方法Ⅰ其一
- 多传感器融合定位十-基于滤波的融合方法Ⅰ其二
- 多传感器融合定位十一-基于滤波的融合方法Ⅱ
- 多传感器融合定位十二-基于图优化的建图方法其一
- 多传感器融合定位十三-基于图优化的建图方法其二
- 多传感器融合定位十四-基于图优化的定位方法
- 多传感器融合定位十五-多传感器时空标定(综述)
1. 基于预积分的融合方案流程
1.1 优化问题分析
优化问题可以等效为如下形式:
三种约束分别通过以下方式获得:
- 激光里程计约束:使用激光里程计,计算每个关键帧位姿,进而得到相对位姿;
- IMU约束:在上一个关键帧位姿基础上,进行惯性积分,从而得到两关键帧相对位姿;
- RTK约束:直接测量得到。
1.2 预积分的作用
问题:位姿每次优化后会发生变化,其后的IMU惯性积分就要重新进行,运算量过大。
解决思路:直接计算两帧之间的相对位姿,而不依赖初始值影响,即所谓的预积分
。
预积分不是为了提高精度(与粗暴方法比,而非不融合方法),而是为了提高效率。关于预积分的文章,这一篇从理解上讲的非常清晰明了:imu预积分原理的个人理解
1.3 基于预积分的建图方案流程
由于此处讨论的优化方案包含组合导航系统,且认为外参已标定,因此会和常见的lio/vio中的方案有所不同,它不包含以下内容:
- 初始化lidar和IMU之间的外参(有外参的配置文件,已经标定好了,有了这个配置文件,外参的估计就没有意义了);
- 初始化速度、陀螺仪bias等(因为这里有组合导航,组合导航解决了大部分的问题,组合导航完成后有初始速度、初始速度和初始姿态,同时一般的组合导航会告诉初始的bias是多少,所以在这种情况下这两项也变成了已知的问题了,不需要做初始化来估计了);
- 初始化重力(如果知道经纬度就知道了精确的重力,只有在不知道经纬度的情况下才需要初始化去优化重力,因为组合导航经纬度都有了,经纬度是可以通过直接计算得到的而不需要通过优化得到);
- 世界坐标系对齐(组合导航已经对齐)(组合导航有了姿态,这个姿态就是在世界坐标系下的一个姿态)。
2. 预积分模型设计
在第8讲中,已知导航的微分方程如下:
p˙wbt=vtwv˙tw=atwq˙wbt=qwbt⊗[012ωbt]\begin{aligned} & \dot{\mathbf{p}}_{w b_t}=\mathbf{v}_t^w \\ & \dot{\mathbf{v}}_t^w=\mathbf{a}_t^w \\ & \dot{\mathbf{q}}_{w b_t}=\mathbf{q}_{w b_t} \otimes\left[\begin{array}{c} 0 \\ \frac{1}{2} \boldsymbol{\omega}^{b_t} \end{array}\right] \end{aligned} p˙wbt=vtwv˙tw=atwq˙wbt=qwbt⊗[021ωbt]根据该微分方程,可知从 iii 时刻到 jjj 时刻 IMU的积分结果为
pwbj=pwbi+viwΔt+∬t∈[i,j](qwbtabt−gw)δt2vjw=viw+∫t∈[i,j](qwbtabt−gw)δtqwbj=∫t∈[i,j]qwbt⊗[012ωbt]δt\begin{gathered} \mathbf{p}_{w b_j}=\mathbf{p}_{w b_i}+\mathbf{v}_i^w \Delta t+\iint_{t \in[i, j]}\left(\mathbf{q}_{w b_t} \mathbf{a}^{b_t}-\mathbf{g}^w\right) \delta t^2 \\ \mathbf{v}_j^w=\mathbf{v}_i^w+\int_{t \in[i, j]}\left(\mathbf{q}_{w b_t} \mathbf{a}^{b_t}-\mathbf{g}^w\right) \delta t \\ \mathbf{q}_{w b_j}=\int_{t \in[i, j]} \mathbf{q}_{w b_t} \otimes\left[\begin{array}{c} 0 \\ \frac{1}{2} \boldsymbol{\omega}^{b_t} \end{array}\right] \delta t \end{gathered} pwbj=pwbi+viwΔt+∬t∈[i,j](qwbtabt−gw)δt2vjw=viw+∫t∈[i,j](qwbtabt−gw)δtqwbj=∫t∈[i,j]qwbt⊗[021ωbt]δt根据预积分的要求,需要求相对结果,而且不依赖于上一时刻位姿,因此需要对上式做转换。
由于 qwbt=qwbi⊗qbibt\mathbf{q}_{w b_t}=\mathbf{q}_{w b_i} \otimes \mathbf{q}_{b_i b_t}qwbt=qwbi⊗qbibt,把它带入(4)-(6)式可得
pwbj=pwbi+viwΔt−12gwΔt2+qwbi[∬t∈[i,j](qbibtabt)δt2vjw=viw−gwΔt+qwbi∫t∈[i,j](qbibtabt)δt]qwbj=qwbi∫t∈[i,j]qbibt⊗[012ωbt]δt\begin{gathered} \mathbf{p}_{w b_j}=\mathbf{p}_{w b_i}+\mathbf{v}_i^w \Delta t-\frac{1}{2} \mathbf{g}^w \Delta t^2+\mathbf{q}_{w b_i}\left[\iint_{t \in[i, j]}\left(\mathbf{q}_{b_i b_t} \mathbf{a}^{b_t}\right) \delta t^2\right. \\ \left.\mathbf{v}_j^w=\mathbf{v}_i^w-\mathbf{g}^w \Delta t+\mathbf{q}_{w b_i} \int_{t \in[i, j]}\left(\mathbf{q}_{b_i b_t} \mathbf{a}^{b_t}\right) \delta t\right] \\ \mathbf{q}_{w b_j}=\mathbf{q}_{w b_i} \int_{t \in[i, j]} \mathbf{q}_{b_i b_t} \otimes\left[\begin{array}{c} 0 \\ \frac{1}{2} \boldsymbol{\omega}^{b_t} \end{array}\right] \delta t \end{gathered} pwbj=pwbi+viwΔt−21gwΔt2+qwbi[∬t∈[i,j](qbibtabt)δt2vjw=viw−gwΔt+qwbi∫t∈[i,j](qbibtabt)δt]qwbj=qwbi∫t∈[i,j]qbibt⊗[021ωbt]δt可见,此时需要积分的项,就完全和 iii 时刻的状态无关了。
为了整理公式,把积分相关的项用下面的式子代替:
αbibj=∬t∈[i,j](qbibtabt)δt2βbibj=∫t∈[i,j](qbibtabt)δtqbibj=∫t∈[i,j]qbibt⊗[012ωbt]δt\begin{aligned} & \boldsymbol{\alpha}_{b_i b_j}=\iint_{t \in[i, j]}\left(\mathbf{q}_{b_i b_t} \mathbf{a}^{b_t}\right) \delta t^2 \\ & \boldsymbol{\beta}_{b_i b_j}=\int_{t \in[i, j]}\left(\mathbf{q}_{b_i b_t} \mathbf{a}^{b_t}\right) \delta t \\ & \mathbf{q}_{b_i b_j}=\int_{t \in[i, j]} \mathbf{q}_{b_i b_t} \otimes\left[\begin{array}{c} 0 \\ \frac{1}{2} \boldsymbol{\omega}^{b_t} \end{array}\right] \delta t \end{aligned} αbibj=∬t∈[i,j](qbibtabt)δt2βbibj=∫t∈[i,j](qbibtabt)δtqbibj=∫t∈[i,j]qbibt⊗[021ωbt]δt实际使用中使用离散形式,而非连续形式,由于在解算中,一般采用中值积分方法,即:
ω=12[(ωbk−bkg)+(ωbk+1−bkg)]a=12[qbibk(abk−bka)+qbibk+1(abk+1−bka)]\begin{aligned} & \boldsymbol{\omega}=\frac{1}{2}\left[\left(\boldsymbol{\omega}^{b_k}-\mathbf{b}_k^g\right)+\left(\boldsymbol{\omega}^{b_{k+1}}-\mathbf{b}_k^g\right)\right] \\ & \mathbf{a}=\frac{1}{2}\left[\mathbf{q}_{b_i b_k}\left(\mathbf{a}^{b_k}-\mathbf{b}_k^a\right)+\mathbf{q}_{b_i b_{k+1}}\left(\mathbf{a}^{b_{k+1}}-\mathbf{b}_k^a\right)\right] \end{aligned} ω=21[(ωbk−bkg)+(ωbk+1−bkg)]a=21[qbibk(abk−bka)+qbibk+1(abk+1−bka)]那么预积分的离散形式可以表示为:
αbibk+1=αbibk+βbibkδt+12aδt2βbibk+1=βbibk+aδtqbibk+1=qbibk⊗[112ωδt]\begin{aligned} & \boldsymbol{\alpha}_{b_i b_{k+1}}=\boldsymbol{\alpha}_{b_i b_k}+\boldsymbol{\beta}_{b_i b_k} \delta t+\frac{1}{2} \mathbf{a} \delta t^2 \\ & \boldsymbol{\beta}_{b_i b_{k+1}}=\boldsymbol{\beta}_{b_i b_k}+\mathbf{a} \delta t \\ & \mathbf{q}_{b_i b_{k+1}}=\mathbf{q}_{b_i b_k} \otimes\left[\begin{array}{c} 1 \\ \frac{1}{2} \boldsymbol{\omega} \delta t \end{array}\right] \end{aligned} αbibk+1=αbibk+βbibkδt+21aδt2βbibk+1=βbibk+aδtqbibk+1=qbibk⊗[121ωδt]经过以上的推导,此时状态更新的公式可以整理为:
[pwbjvjwqwbjbjabjg]=[pwbi+viwΔt−12gwΔt2+qwbiαbibjviw−gwΔt+qwbiβbibjqwbiqbibjbiabig]\left[\begin{array}{c} \mathbf{p}_{w b_j} \\ \mathbf{v}_j^w \\ \mathbf{q}_{w b_j} \\ \mathbf{b}_j^a \\ \mathbf{b}_j^g \end{array}\right]=\left[\begin{array}{c} \mathbf{p}_{w b_i}+\mathbf{v}_i^w \Delta t-\frac{1}{2} \mathbf{g}^w \Delta t^2+\mathbf{q}_{w b_i} \boldsymbol{\alpha}_{b_i b_j} \\ \mathbf{v}_i^w-\mathbf{g}^w \Delta t+\mathbf{q}_{w b_i} \boldsymbol{\beta}_{b_i b_j} \\ \mathbf{q}_{w b_i} \mathbf{q}_{b_i b_j} \\ \mathbf{b}_i^a \\ \mathbf{b}_i^g \end{array}\right] pwbjvjwqwbjbjabjg=pwbi+viwΔt−21gwΔt2+qwbiαbibjviw−gwΔt+qwbiβbibjqwbiqbibjbiabig需要注意的是,陀螺仪和加速度计的模型为:
bk+1a=bka+nbkaδtbk+1g=bkg+nbkgδt\begin{array}{r} \mathbf{b}_{k+1}^a=\mathbf{b}_k^a+\mathbf{n}_{\mathbf{b}_k^a} \delta t \\ \mathbf{b}_{k+1}^g=\mathbf{b}_k^g+\mathbf{n}_{\mathbf{b}_k^g} \delta t \end{array} bk+1a=bka+nbkaδtbk+1g=bkg+nbkgδt即认为bias是在变化的,这样便于估计不同时刻的bias值,而不是整个系统运行时间内都当做常值对待。这更符合低精度mems的实际情况。但在预积分时,由于两个关键帧之间的时间较短,因此认为 iii 和 jjj 时刻的bias相等。
需要注意的一点是,预积分的结果中包含了bias,在优化过程中,bias作为状态量也会发生变化,从而引起预积分结果变化。
为了避免bias变化后,重新做预积分,可以把预积分结果在bias处泰勒展开,表达成下面的形式,这样就可以根据bias的变化量直接算出新的预积分结果。
αbibj=α‾bibj+Jbiaαδbia+Jbigαδbigβbibj=β‾bibj+Jbiaβδbia+Jbigβδbigqbibj=q‾bibj⊗[112Jbiqqδbig]\begin{aligned} & \boldsymbol{\alpha}_{b_i b_j}=\overline{\boldsymbol{\alpha}}_{b_i b_j}+\mathbf{J}_{b_i^a}^\alpha \delta \mathbf{b}_i^a+\mathbf{J}_{b_i^g}^\alpha \delta \mathbf{b}_i^g \\ & \boldsymbol{\beta}_{b_i b_j}=\overline{\boldsymbol{\beta}}_{b_i b_j}+\mathbf{J}_{b_i^a}^\beta \delta \mathbf{b}_i^a+\mathbf{J}_{b_i^g}^\beta \delta \mathbf{b}_i^g \\ & \mathbf{q}_{b_i b_j}=\overline{\mathbf{q}}_{b_i b_j} \otimes\left[\begin{array}{c} 1 \\ \frac{1}{2} \mathbf{J}_{b_i^q}^q \delta \mathbf{b}_i^g \end{array}\right] \end{aligned} αbibj=αbibj+Jbiaαδbia+Jbigαδbigβbibj=βbibj+Jbiaβδbia+Jbigβδbigqbibj=qbibj⊗[121Jbiqqδbig]其中:
Jbiaα=∂αbibj∂δbiaJbigα=∂αbibj∂δbijJbiaβ=∂βbibj∂δbiaJbigβ=∂βbibj∂δbiaJbigq=qbibj∂biq\begin{aligned} \mathbf{J}_{b_i^a}^\alpha & =\frac{\partial \alpha_{b_i b_j}}{\partial \delta \mathbf{b}_i^a} \\ \mathbf{J}_{b_i^g}^\alpha & =\frac{\partial \boldsymbol{\alpha}_{b_i b_j}}{\partial \delta \mathbf{b}_i^j} \\ \mathbf{J}_{b_i^a}^\beta & =\frac{\partial \beta_{b_i b_j}}{\partial \delta \mathbf{b}_i^a} \\ \mathbf{J}_{b_i^g}^\beta & =\frac{\partial \beta_{b_i b_j}}{\partial \delta \mathbf{b}_i^a} \\ \mathbf{J}_{b_i^g}^q & =\frac{\mathbf{q}_{b_i b_j}}{\partial \mathbf{b}_i^q} \end{aligned} JbiaαJbigαJbiaβJbigβJbigq=∂δbia∂αbibj=∂δbij∂αbibj=∂δbia∂βbibj=∂δbia∂βbibj=∂biqqbibj注: 此处暂时不直接给出以上各雅可比的结果,它的推导放在后面进行。
3. 预积分在优化中的使用
3.1 使用方法
- 凸优化回顾
损失函数由残差函数组成:
minxF(x)=12∥f(x)∥22\min _x F(x)=\frac{1}{2}\|f(x)\|_2^2 xminF(x)=21∥f(x)∥22当考虑方差时,可以写为:
minxF(x)=f(x)TΩf(x)\min _x F(x)=f(x)^T \Omega f(x) xminF(x)=f(x)TΩf(x)利用高斯牛顿方法,求解该优化问题,需要解下面的方程:
JTΩJ⏟HΔx=−JTΩf(x)⏟g\underbrace{J^T \Omega J}_H \Delta x=\underbrace{-J^T \Omega f(x)}_g HJTΩJΔx=g−JTΩf(x)即,在优化中使用一项信息,需要设计残差, 并推导它的雅可比和方差。 - 预积分的使用
按照优化的套路,在优化中使用预积分,需要:
a. 设计残差
b. 推导残差关于待优化变量的雅可比
c. 计算残差的方差
除此以外,预积分中还多一项计算,即推导bias变化时,预积分量重新计算的方法。
3.2 残差设计
在优化时,需要知道残差关于状态量的雅可比。由于已知姿态位姿更新的方法如下:
[pwbjqwbjvjwbjabjg]=[pwbi+viwΔt−12gwΔt2+qwbiαbibjqwbiqbibjviw−gwΔt+qwbiβbibjbiabig]\left[\begin{array}{c} \mathbf{p}_{w b_j} \\ \mathbf{q}_{w b_j} \\ \mathbf{v}_j^w \\ \mathbf{b}_j^a \\ \mathbf{b}_j^g \end{array}\right]=\left[\begin{array}{c} \mathbf{p}_{w b_i}+\mathbf{v}_i^w \Delta t-\frac{1}{2} \mathbf{g}^w \Delta t^2+\mathbf{q}_{w b_i} \boldsymbol{\alpha}_{b_i b_j} \\ \mathbf{q}_{w b_i} \mathbf{q}_{b_i b_j} \\ \mathbf{v}_i^w-\mathbf{g}^w \Delta t+\mathbf{q}_{w b_i} \boldsymbol{\beta}_{b_i b_j} \\ \mathbf{b}_i^a \\ \mathbf{b}_i^g \end{array}\right] pwbjqwbjvjwbjabjg=pwbi+viwΔt−21gwΔt2+qwbiαbibjqwbiqbibjviw−gwΔt+qwbiβbibjbiabig因此,可以很容易写出一种残差形式如下:
[rprqrvrbarbg]=[pwbj−pwbi−viwΔt+12gwΔt2−qwbiαbibj2[qbibj∗⊗(qwbi∗⊗qwbj)]xyzvjw−viw+gwΔt−qwbiβbibjbja−biabjg−big]\left[\begin{array}{c} \mathbf{r}_p \\ \mathbf{r}_q \\ \mathbf{r}_v \\ \mathbf{r}_{b a} \\ \mathbf{r}_{b g} \end{array}\right]=\left[\begin{array}{c} \mathbf{p}_{w b_j}-\mathbf{p}_{w b_i}-\mathbf{v}_i^w \Delta t+\frac{1}{2} \mathbf{g}^w \Delta t^2-\mathbf{q}_{w b_i} \boldsymbol{\alpha}_{b_i b_j} \\ 2\left[\mathbf{q}_{b_i b_j}^* \otimes\left(\mathbf{q}_{w b_i}^* \otimes \mathbf{q}_{w b_j}\right)\right]_{x y z} \\ \mathbf{v}_j^w-\mathbf{v}_i^w+\mathbf{g}^w \Delta t-\mathbf{q}_{w b_i} \boldsymbol{\beta}_{b_i b_j} \\ \mathbf{b}_j^a-\mathbf{b}_i^a \\ \mathbf{b}_j^g-\mathbf{b}_i^g \end{array}\right] rprqrvrbarbg=pwbj−pwbi−viwΔt+21gwΔt2−qwbiαbibj2[qbibj∗⊗(qwbi∗⊗qwbj)]xyzvjw−viw+gwΔt−qwbiβbibjbja−biabjg−big但是和预积分相关的量,仍然与上一时刻的姿态有关,无法直接加减,因此,把残差修正为以下形式:
[rprqrvrbarbg]=[qwbi∗(pwbj−pwbi−viwΔt+12gwΔt2)−αbibj2[qqbj∗⊗(qwi∗⊗qwbj)]xyzqwbi∗(vjw−viw+gwΔt)−βbibjbja−biabjg−big]\left[\begin{array}{c} \mathbf{r}_p \\ \mathbf{r}_q \\ \mathbf{r}_v \\ \mathbf{r}_{b a} \\ \mathbf{r}_{b g} \end{array}\right]=\left[\begin{array}{c} \mathbf{q}_{w b_i}^*\left(\mathbf{p}_{w b_j}-\mathbf{p}_{w b_i}-\mathbf{v}_i^w \Delta t+\frac{1}{2} \mathbf{g}^w \Delta t^2\right)-\boldsymbol{\alpha}_{b_i b_j} \\ 2\left[\mathbf{q}_{\mathbf{q}_{b_j}^*} \otimes\left(\mathbf{q}_{w_i}^* \otimes \mathbf{q}_{w b_j}\right)\right]_{x y z} \\ \mathbf{q}_{w b_i}^*\left(\mathbf{v}_j^w-\mathbf{v}_i^w+\mathbf{g}^w \Delta t\right)-\boldsymbol{\beta}_{b_i b_j} \\ \mathbf{b}_j^a-\mathbf{b}_i^a \\ \mathbf{b}_j^g-\mathbf{b}_i^g \end{array}\right] rprqrvrbarbg=qwbi∗(pwbj−pwbi−viwΔt+21gwΔt2)−αbibj2[qqbj∗⊗(qwi∗⊗qwbj)]xyzqwbi∗(vjw−viw+gwΔt)−βbibjbja−biabjg−big待优化的变量是 [pwbiqwbiviwbiabig][pwbjqwbjvjwbjabjg]\left[\begin{array}{lllll}\mathbf{p}_{w b_i} & \mathbf{q}_{w b_i} & \mathbf{v}_i^w & \mathbf{b}_i^a & \mathbf{b}_i^g\end{array}\right]\left[\begin{array}{lllll}\mathbf{p}_{w b_j} & \mathbf{q}_{w b_j} & \mathbf{v}_j^w & \mathbf{b}_j^a & \mathbf{b}_j^g\end{array}\right][pwbiqwbiviwbiabig][pwbjqwbjvjwbjabjg]
但在实际使用中,往往都是使用扰动量,因此实际是对以下变量求雅可比
[δpwbiδθwbiδviwδbiaδbig][δpwbjδθwbjδvjwδbjaδbjg]\begin{aligned} & {\left[\begin{array}{lllll} \delta \mathbf{p}_{w b_i} & \delta \theta_{w b_i} & \delta \mathbf{v}_i^w & \delta \mathbf{b}_i^a & \delta \mathbf{b}_i^g \end{array}\right]} \\ & {\left[\begin{array}{lllll} \delta \mathbf{p}_{w b_j} & \delta \theta_{w b_j} & \delta \mathbf{v}_j^w & \delta \mathbf{b}_j^a & \delta \mathbf{b}_j^g \end{array}\right]} \end{aligned} [δpwbiδθwbiδviwδbiaδbig][δpwbjδθwbjδvjwδbjaδbjg]此处只对几个比较复杂的雅可比进行推导,其余比较简单,感兴趣的可自行完成。
3.3 残差雅可比的推导
3.3.1 姿态残差的雅可比
-
对 iii 时刻姿态误差的雅可比:
∂rq∂δθbibi′=∂2[qbjbi⊗(qbiw⊗qwbj)]xyz∂δθbibi′=∂2[qbi,bj∗⊗(qwbi⊗[112δθbibi′])∗⊗qwbj]xyz∂δθbibi′=∂−2[(qbibj∗⊗(qwbi⊗[112δθbibi′])∗⊗qwbj)∗]xyz∂δθbibi=∂−2[qwbj∗⊗(qwbi⊗[112δθbibi′])⊗qbibj]xyz∂δθbibi′\begin{aligned} \frac{\partial \mathbf{r}_q}{\partial \delta \boldsymbol{\theta}_{b_i b_i^{\prime}}} & =\frac{\partial 2\left[\mathbf{q}_{b_j b_i} \otimes\left(\mathbf{q}_{b_i w} \otimes \mathbf{q}_{w b_j}\right)\right]_{x y z}}{\partial \delta \boldsymbol{\theta}_{b_i b_i^{\prime}}} \\ & =\frac{\partial 2\left[\mathbf{q}_{b_i, b_j}^* \otimes\left(\mathbf{q}_{w b_i} \otimes\left[\begin{array}{c} 1 \\ \frac{1}{2} \delta \boldsymbol{\theta}_{b_i b_i^{\prime}} \end{array}\right]\right)^* \otimes \mathbf{q}_{w b_j}\right]_{x y z}}{\partial \delta \boldsymbol{\theta}_{b_i b_i^{\prime}}} \\ & =\frac{\partial-2\left[\left(\mathbf{q}_{b_i b_j}^* \otimes\left(\mathbf{q}_{w b_i} \otimes\left[\begin{array}{c} 1 \\ \frac{1}{2} \delta \boldsymbol{\theta}_{b_i} b_i^{\prime} \end{array}\right]\right)^* \otimes \mathbf{q}_{w b_j}\right)^*\right]_{x y z}}{\partial \delta \boldsymbol{\theta}_{b_i b_i}} \\ & =\frac{\partial-2\left[\mathbf{q}_{w b_j}^* \otimes\left(\mathbf{q}_{w b_i} \otimes\left[\begin{array}{c} 1 \\ \frac{1}{2} \delta \boldsymbol{\theta}_{b_i b_i^{\prime}} \end{array}\right]\right) \otimes \mathbf{q}_{b_i b_j}\right]_{x y z}}{\partial \delta \boldsymbol{\theta}_{b_i b_i^{\prime}}} \end{aligned} ∂δθbibi′∂rq=∂δθbibi′∂2[qbjbi⊗(qbiw⊗qwbj)]xyz=∂δθbibi′∂2[qbi,bj∗⊗(qwbi⊗[121δθbibi′])∗⊗qwbj]xyz=∂δθbibi∂−2[(qbibj∗⊗(qwbi⊗[121δθbibi′])∗⊗qwbj)∗]xyz=∂δθbibi′∂−2[qwbj∗⊗(qwbi⊗[121δθbibi′])⊗qbibj]xyz上式可以化简为:
∂rq∂δθbibi′=−2[0I]∂qwbj∗⊗(qwbi⊗[112δθbibi′])⊗qbibj∂δθbibi′=−2[0I]∂[qwbj∗⊗qwbi]L[qbibj]R[112δθbibi′]∂δθbibi′=−2[0I][qwbj∗⊗qwbi]L[qbibj]R[012I]\begin{aligned} \frac{\partial \mathbf{r}_q}{\partial \delta \boldsymbol{\theta}_{b_i b_i^{\prime}}} & =-2\left[\begin{array}{ll} \mathbf{0} & \mathbf{I} \end{array}\right] \frac{\partial \mathbf{q}_{w b_j}^* \otimes\left(\mathbf{q}_{w b_i} \otimes\left[\begin{array}{c} 1 \\ \frac{1}{2} \delta \boldsymbol{\theta}_{b_i b_i^{\prime}} \end{array}\right]\right) \otimes \mathbf{q}_{b_i b_j}}{\partial \delta \boldsymbol{\theta}_{b_i b_i^{\prime}}} \\ & =-2\left[\begin{array}{ll} \mathbf{0} & \mathbf{I} \end{array}\right] \frac{\partial\left[\mathbf{q}_{w b_j}^* \otimes \mathbf{q}_{w b_i}\right]_L\left[\mathbf{q}_{b_i b_j}\right]_R\left[\begin{array}{c} 1 \\ \frac{1}{2} \delta \boldsymbol{\theta}_{b_i b_i^{\prime}} \end{array}\right]}{\partial \delta \boldsymbol{\theta}_{b_i b_i^{\prime}}} \\ & =-2\left[\begin{array}{ll} \mathbf{0} & \mathbf{I} \end{array}\right]\left[\mathbf{q}_{w b_j}^* \otimes \mathbf{q}_{w b_i}\right]_L\left[\mathbf{q}_{b_i b_j}\right]_R\left[\begin{array}{c} \mathbf{0} \\ \frac{1}{2} \mathbf{I} \end{array}\right] \end{aligned} ∂δθbibi′∂rq=−2[0I]∂δθbibi′∂qwbj∗⊗(qwbi⊗[121δθbibi′])⊗qbibj=−2[0I]∂δθbibi′∂[qwbj∗⊗qwbi]L[qbibj]R[121δθbibi′]=−2[0I][qwbj∗⊗qwbi]L[qbibj]R[021I] -
对 jjj 时刻姿态误差的雅可比:
∂rq∂δθbjbj′=∂2[qbibj∗⊗qwbi∗⊗qwbj⊗[112δθbjbj′]]xyz∂δθbjbj′=∂2[[qbibj∗⊗qwbi∗⊗qwbj]L[112δθbjbj′]]xyz∂δθbjbj′=2[0I][qbibj∗⊗qwbi∗⊗qwbj]L[012I]\begin{aligned} \frac{\partial \mathbf{r}_q}{\partial \delta \boldsymbol{\theta}_{b_j b_j^{\prime}}} & =\frac{\partial 2\left[\mathbf{q}_{b_i b_j}^* \otimes \mathbf{q}_{w b_i}^* \otimes \mathbf{q}_{w b_j} \otimes\left[\begin{array}{c} 1 \\ \frac{1}{2} \delta \boldsymbol{\theta}_{b_j b_j^{\prime}} \end{array}\right]\right]_{x y z}}{\partial \delta \boldsymbol{\theta}_{b_j b_j^{\prime}}} \\ & =\frac{\partial 2\left[\left[\mathbf{q}_{b_i b_j}^* \otimes \mathbf{q}_{w b_i}^* \otimes \mathbf{q}_{w b_j}\right]_L\left[\begin{array}{c} 1 \\ \frac{1}{2} \delta \boldsymbol{\theta}_{b_j b_j^{\prime}} \end{array}\right]\right]_{x y z}}{\partial \delta \boldsymbol{\theta}_{b_j b_j^{\prime}}} \\ & =2\left[\begin{array}{ll} \mathbf{0} & \mathbf{I} \end{array}\right]\left[\mathbf{q}_{b_i b_j}^* \otimes \mathbf{q}_{w b_i}^* \otimes \mathbf{q}_{w b_j}\right]_L\left[\begin{array}{c} \mathbf{0} \\ \frac{1}{2} \mathbf{I} \end{array}\right] \end{aligned} ∂δθbjbj′∂rq=∂δθbjbj′∂2[qbibj∗⊗qwbi∗⊗qwbj⊗[121δθbjbj′]]xyz=∂δθbjbj′∂2[[qbibj∗⊗qwbi∗⊗qwbj]L[121δθbjbj′]]xyz=2[0I][qbibj∗⊗qwbi∗⊗qwbj]L[021I] -
对 iii 时刻陀螺仪bias误差的雅可比:
∂rq∂δbig=∂2[(qbibj⊗[112Jbiqδbigq])∗⊗qwbi∗⊗qwbj]xyz∂δbig=∂−2[((qbibj⊗[112Jbiqqδbig])∗⊗qwbi∗⊗qwbj)∗]xyz∂δbig=∂−2[qwbj∗⊗qwbi⊗(qbibj⊗[112Jbioδbig])]xyz∂δbig=−2[0I][qwbj∗⊗qwbi⊗qbibj]L[012Jbiqq]\begin{aligned} & \frac{\partial \mathbf{r}_q}{\partial \delta \mathbf{b}_i^g}=\frac{\partial 2\left[\left(\mathbf{q}_{b_i b_j} \otimes\left[\begin{array}{c} 1 \\ \frac{1}{2} \mathbf{J}_{b_i^q \delta \mathbf{b}_i^g}^q \end{array}\right]\right)^* \otimes \mathbf{q}_{w b_i}^* \otimes \mathbf{q}_{w b_j}\right]_{x y z}}{\partial \delta \mathbf{b}_i^g} \\ & =\frac{\partial-2\left[\left(\left(\mathbf{q}_{b_i b_j} \otimes\left[\begin{array}{c} 1 \\ \frac{1}{2} \mathbf{J}_{b_i^q}^q \delta \mathbf{b}_i^g \end{array}\right]\right)^* \otimes \mathbf{q}_{w b_i}^* \otimes \mathbf{q}_{w b_j}\right)^*\right]_{x y z}}{\partial \delta \mathbf{b}_i^g} \\ & =\frac{\partial-2\left[\mathbf{q}_{w b_j}^* \otimes \mathbf{q}_{w b_i} \otimes\left(\mathbf{q}_{b_i b_j} \otimes\left[\begin{array}{c} 1 \\ \frac{1}{2} \mathbf{J}_{b_i^o} \delta \mathbf{b}_i^g \end{array}\right]\right)\right]_{x y z}}{\partial \delta \mathbf{b}_i^g} \\ & =-2\left[\begin{array}{ll} \mathbf{0} & \mathbf{I} \end{array}\right]\left[\mathbf{q}_{w b_j}^* \otimes \mathbf{q}_{w b_i} \otimes \mathbf{q}_{b_i b_j}\right]_L\left[\begin{array}{c} 0 \\ \frac{1}{2} \mathbf{J}_{b_i^q}^q \end{array}\right] \\ & \end{aligned} ∂δbig∂rq=∂δbig∂2[(qbibj⊗[121Jbiqδbigq])∗⊗qwbi∗⊗qwbj]xyz=∂δbig∂−2[((qbibj⊗[121Jbiqqδbig])∗⊗qwbi∗⊗qwbj)∗]xyz=∂δbig∂−2[qwbj∗⊗qwbi⊗(qbibj⊗[121Jbioδbig])]xyz=−2[0I][qwbj∗⊗qwbi⊗qbibj]L[021Jbiqq]
3.3.2 速度残差的雅可比
- 对 iii 时刻姿态误差的雅可比:
∂rv∂δθbibi=∂(qwbi⊗[112δθbibi])−1(vjw−viw+gwΔt)∂δθbibi′=∂(Rwbiexp([δθbibi′]×))−1(vjw−viw+gwΔt)∂δθbibi′=∂exp([−δθbibi]×)Rbiw(vjw−viw+gwΔt)∂δθbibi′=∂(I−[δθbibi]×)Rbiw(vjw−viw+gwΔt)∂δθbibi′=∂−[δθbibi]×Rbiw(vjw−viw+gwΔt)∂δθbibi′=[Rbiw(vjw−viw+gwΔt)]×\begin{aligned} \frac{\partial \mathbf{r}_v}{\partial \delta \boldsymbol{\theta}_{b_i b_i}} & =\frac{\partial\left(\mathbf{q}_{w b_i} \otimes\left[\begin{array}{c} 1 \\ \frac{1}{2} \delta \boldsymbol{\theta}_{b_i b_i} \end{array}\right]\right)^{-1}\left(\mathbf{v}_j^w-\mathbf{v}_i^w+\mathbf{g}^w \Delta t\right)}{\partial \delta \boldsymbol{\theta}_{b_i b_i^{\prime}}} \\ & =\frac{\partial\left(\mathbf{R}_{w b_i} \exp \left(\left[\delta \boldsymbol{\theta}_{b_i b_i^{\prime}}\right]_{\times}\right)\right)^{-1}\left(\mathbf{v}_j^w-\mathbf{v}_i^w+\mathbf{g}^w \Delta t\right)}{\partial \delta \boldsymbol{\theta}_{b_i b_i^{\prime}}} \\ & =\frac{\partial \exp \left(\left[-\delta \boldsymbol{\theta}_{b_i b_i}\right]_{\times}\right) \mathbf{R}_{b_i w}\left(\mathbf{v}_j^w-\mathbf{v}_i^w+\mathbf{g}^w \Delta t\right)}{\partial \delta \boldsymbol{\theta}_{b_i} b_i^{\prime}} \\ & =\frac{\partial\left(\mathbf{I}-\left[\delta \boldsymbol{\theta}_{b_i b_i}\right]_{\times}\right) \mathbf{R}_{b_i w}\left(\mathbf{v}_j^w-\mathbf{v}_i^w+\mathbf{g}^w \Delta t\right)}{\partial \delta \boldsymbol{\theta}_{b_i b_i^{\prime}}} \\ & =\frac{\partial-\left[\delta \boldsymbol{\theta}_{b_i b_i}\right]_{\times} \mathbf{R}_{b_i w}\left(\mathbf{v}_j^w-\mathbf{v}_i^w+\mathbf{g}^w \Delta t\right)}{\partial \delta \boldsymbol{\theta}_{b_i b_i^{\prime}}} \\ & =\left[\mathbf{R}_{b_i w}\left(\mathbf{v}_j^w-\mathbf{v}_i^w+\mathbf{g}^w \Delta t\right)\right]_{\times} \end{aligned} ∂δθbibi∂rv=∂δθbibi′∂(qwbi⊗[121δθbibi])−1(vjw−viw+gwΔt)=∂δθbibi′∂(Rwbiexp([δθbibi′]×))−1(vjw−viw+gwΔt)=∂δθbibi′∂exp([−δθbibi]×)Rbiw(vjw−viw+gwΔt)=∂δθbibi′∂(I−[δθbibi]×)Rbiw(vjw−viw+gwΔt)=∂δθbibi′∂−[δθbibi]×Rbiw(vjw−viw+gwΔt)=[Rbiw(vjw−viw+gwΔt)]× - 对 iii 时刻速度误差的雅可比:
∂rv∂δviw=−Rbiw\frac{\partial \mathbf{r}_v}{\partial \delta \mathbf{v}_i^w}=-\mathbf{R}_{b_i w} ∂δviw∂rv=−Rbiw - 对 iii 时刻加速度biasi吴差的雅可比:
∂rv∂δbia=−∂βbibj∂δbia=−Jbiaβ\frac{\partial \mathbf{r}_v}{\partial \delta \mathbf{b}_i^a}=-\frac{\partial \boldsymbol{\beta}_{b_i b_j}}{\partial \delta \mathbf{b}_i^a}=-\mathbf{J}_{b_i^a}^\beta ∂δbia∂rv=−∂δbia∂βbibj=−Jbiaβ
3.3.3 位置残差的雅可比
由于位置残差的形式与速度残差极其相似,因此不再重复推导。
相关文章:

多传感器融合定位十二-基于图优化的建图方法其一
多传感器融合定位十二-基于图优化的建图方法其一1. 基于预积分的融合方案流程1.1 优化问题分析1.2 预积分的作用1.3 基于预积分的建图方案流程2. 预积分模型设计3. 预积分在优化中的使用3.1 使用方法3.2 残差设计3.3 残差雅可比的推导3.3.1 姿态残差的雅可比3.3.2 速度残差的雅…...

RockChip MPP编码
概述瑞芯微提供的媒体处理软件平台(Media Process Platform,简称 MPP)是适用于瑞芯微芯片系列的通用媒体处理软件平台。该平台对应用软件屏蔽了芯片相关的复杂底层处理,其目的是为了屏蔽不同芯片的差异,为使用者提供统…...

【学习笔记】NOIP暴零赛2
细思极恐,我的能力已经退步到这个地步了吗? 数据结构 这题的修改是强行加进去迷惑你的。 考虑怎么求树的带权重心。 完了我只会树形dp 完了完了 结论:设uuu的子树和为szusz_uszu,所有点权值和为sss,那么树的带…...

linux基本功系列之hostname实战
文章目录前言一. hostname命令介绍二. 语法格式及常用选项三. 参考案例3.1 显示本机的主机名3.2 临时修改主机名3.3 显示短格式的主机名3.4 显示主机的ip地址四. 永久修改主机名4.1 centos6 修改主机名的方式4.2 centos7中修改主机名永久生效总结前言 大家好,又见面…...

Easy-Es框架实践测试整理 基于ElasticSearch的ORM框架
文章目录介绍(1)Elasticsearch java 客户端种类(2)优势和特性分析(3)性能、安全、拓展、社区(2)ES版本及SpringBoot版本说明索引处理(一)索引别名策略&#x…...

【数据结构】双向链表的模拟实现(无头)
目录 前言: 1、认识双向链表中的结点 2、认识并创建无头双向链表 3、实现双向链表当中的一些方法 3.1、遍历输出方法(display) 3.2、得到链表的长度(size) 3.3、查找关键字key是否包含在双链表中(contains) 3.…...

vue自定义指令---处理加载图片失败时出现的碎图,onerror事件
目录 一、自定义指令 1、局部注册和使用 2、全局注册和使用 二、自定义指令处理图片加载失败(碎图) 一、自定义指令 vue中除v-model、v-show等内置指令之外,还允许注册自定义指令,获取DOM元素,扩展额外的功能。 1、局…...

加盟管理系统挑选法则,看完不怕被坑!
经营服装连锁店铺究竟有多难?小编已经不止一次听到身边的老板,抱怨加盟连锁店铺难以管理了,但同时呢,也听到了很多作为加盟商的老板,抱怨总部给的支持和管理不到位。服装加盟店铺管理,到底有哪些难点呢&…...

alertmanager笔记
1 prometheus的思想 所有告警都应该立刻处理掉,不应该存在长时间未解决的告警。所以具体的表现就是高频的数据采集,和告警的自动恢复(默认5分钟) 2 alertmanager API调用 使用如下命令即可手工制造告警,注意startsA…...

Android Jetpack组件之WorkManager后台任务管理的介绍与使用(二)
一、介绍 通过上一篇文,Android Jetpack组件之WorkManager后台任务管理的介绍与使用(一)_蜗牛、Z的博客-CSDN博客 我们可以弄清楚workmanager从接入到使用的基本流程。基本可以满足我们日常。那只是简单的入门。如果遇到更复杂的功能,那简单的就无法满…...

【MySQL】第十七部分 约束
【MySQL】第十七部分 约束 文章目录【MySQL】第十七部分 约束17. 约束17.1 约束的分类17.2 非空约束17.3 唯一性约束17.4 主键约束17.5 自增列约束17.6 外键约束17.7 默认约束17.8 check约束总结17. 约束 约束: 可以在创建表的时候规定约束,也可以在表创建之后添加,约束顾名思…...

java ssm集装箱码头TOS系统调度模块的设计与实现
由于历史和经济体制的原因,国内码头物流企业依然保持大而全的经营模式。企业自己建码头、场地、经营集装箱运输车辆。不过近几年来随着经济改革的进一步深入和竞争的激烈,一些大型的码头物流企业逐步打破以前的经营模式,其中最明显的特征就是…...

MS14-064(OLE远程代码执行漏洞复现)
✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :内网安全-漏洞复现 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台…...

【C++深陷】之shared_ptr
0. 什么是智能指针 使用new 和delete 手动进行动态内存管理很容易出现内存泄漏等问题。C11为了更安全、更方便的管理动态内存,新的标准库提供了两种智能指针(smart pointer):shared_ptr和unique_ptr,以及一个伴随类we…...

SpringMVC中遇到的错误
SpringMVC中遇到的错误1.web.xml中配置SpringMVC核心类: DispatcherServlet 报错解决方案:添加Tomcat包2. not declaration can be found for element--------‘mvc:annotation-driven‘通配符的匹配很全面, 但无法找到元素 mvc:annotation-driven 的声明解决方案&a…...

姿态估计端到端新方案 | DirectMHP:用于全范围角度2D多人头部姿势估计
前言 现有的头部姿势估计主要集中在具有预先检测到的正面头部的单个人,这依赖于单独训练的面部检测器,不能很好地泛化到完整的视点。在本文中,作者关注全范围 MPHPE 问题,并提出了一个名为 DirectMHP 的直接端到端简单基线&#x…...

jvm学习的核心(五)---垃圾回收算法和常见垃圾回收器
文章目录1.垃圾回收算法**1.1. 标记阶段****1.2. 清除阶段**1.2.1.标记清除算法1.2.2.标记复制算法1.2.3.标记整理算法1.3.引用2.常见的垃圾回收器2.1.Serial回收器2.2.ParNew回收器2.3.Parallel回收器2.4.CMS回收器<font color red>2.5.G1垃圾回收器ZGC回收器ÿ…...

亿级高并发电商项目-- 实战篇 --万达商城项目 二(Zookeeper、Docker、Dubbo-Admin等搭建工作
👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 Ǵ…...

【C#基础】 C# 数据类型总结
序号系列文章0【C#基础】初识编程语言C#1【C#基础】C# 程序通用结构总结2【C#基础】C# 程序基础语法解析文章目录前言数据类型一. 值类型(Value types)二. 引用类型(Reference types)三. 指针类型(Pointer types&#…...

格子玻尔兹曼法介绍
1 LBM简介格子玻尔兹曼法(Lattice Boltzmann Method)简称LBM,是一种CFD算法,可求解流动、传热等常见CFD问题。LBM基于格子玻尔兹曼方程(LBE),从介观尺度(mesoscope)描述了…...

活动星投票在时间的河流上造园分组怎么设置如何进行分组报名
“在时间的河流上造园”网络评选投票_免费小程序运行系统_企业有关的投票_微信投票的应用小程序投票活动如何做?很多企业在运营当中,都会通过投票活动来进行推广,从而达到吸粉、增加用户粘度等效果。而此类投票活动,通过小程序就可…...

c#小笔记本-基础
c#基本知识一.基础操作1.打印-writeline,write2.输入-readline,readkey二.变量1.折叠代码-#region,#endregion2.变量类型(在c语言变量类型上新增的)三.常量-const四.转义字符五.显示转换1.括号强转-低精度装高精度2.parse法-作用于字符串3.co…...

DamiCMS SQL注入分析
2023年将会持续于B站、CSDN等各大平台更新,可加入粉丝群与博主交流:838681355,为了老板大G共同努力。 一、入口文件(单入口文件模式) 看一下Index.php文件代码:引入了php_safe.php文件 查看一下php_safe.php防御文件: 对变量e…...

图傅里叶变换的推导和理解
把传统的傅里叶变换以及卷积迁移到Graph上来,核心工作其实就是把拉普拉斯算子的特征函数 e − i ω t e^{-i\omega t} e−iω...

Java八股文(Java面试题)
JDK、JRE、JVM 三者之间的关系?JDK(Java Development Kit):是Java开发工具包,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。它能够创建和编译程序。JRE(Java Runtime Envi…...

java ssm idea高校图书借阅管理系统设计2z87z
本论文是以构建高校图书管理系统设计为目标,使用 jsp制作,由前台用户图书借阅、后台管理员图书分类两大部分组成。着重论述了系统设计分析,系统的实现(用户注册模块,用户登录,用户图书借阅模块,…...

电脑重装系统注册表恢复方法
今天讲关于大家的电脑在遇到一些故障的时候,以及电脑用久了之后会卡顿,那么这时候大家一般都会给电脑重装系统。重装系统之后却发现自己电脑里的注册表不见了,重装系统后怎么恢复注册表?小编就带着大家一起学习重装系统注册表恢复到底是怎…...
信道建模(大尺度、小尺度、莱斯衰落、瑞利衰落、莱斯信道、瑞利信道)
一、大尺度衰落与小尺度衰落 大尺度衰落由收发两端的距离决定,功率上建模为: 小尺度衰落由收发两端的环境决定,比如是否有遮挡,场景有室内、室外、平原、山村、城镇等,这些环境影响到收发两端是否有直达链路࿰…...

2022年12月电子学会Python等级考试试卷(四级)答案解析
青少年软件编程(Python)等级考试试卷(四级) 一、单选题(共25题,共50分) 1. 有n个按名称排序的商品,使用对分查找法搜索任何一商品, 最多查找次数为5次,则n的值可能为?&…...

通过实例告诉你lua中ipairs到底是怎么遍历的!
这个的文章挺多的,但是有好几种说法并且不全。有人说是忽略手动设定值,有人说是从1开始数,直到序号断开,还有人给出结果,但是和我实机测试的效果不一样, 所以我自己总结一篇。经过我的测试和总结得到以下结…...