VIO:(Visual-Inertial Odometry)以视觉与 IMU 融合实现里程计
IMU(Inertial Measurement Unit),惯性测量单元
视觉 Visual Odometry
整体上,视觉和 IMU 定位方案存在一定互补性质:
粒子在坐标系中 z = h z = h z=h中的平面做圆周运动,其中 a a a为运动半径,则坐标为: r = ( a c o s θ , a s i n θ , h ) T r = (a cos θ, a sin θ, h)^T r=(acosθ,asinθ,h)T对坐标求导得:
r ˊ = ( − a θ ˊ s i n θ , a θ ˊ c o s θ , 0 ) T \acute{r}=(-a\acute{\theta} sin\theta,a\acute{\theta} cos\theta,0)^T rˊ=(−aθˊsinθ,aθˊcosθ,0)T = [ 0 − θ ˊ 0 θ ˊ 0 0 0 0 0 ] [ a c o s θ a s i n θ h ] = ω × r = \begin{bmatrix} 0 & -\acute{\theta} & 0 \\ \acute{\theta} & 0 & 0\\ 0&0&0 \\ \end{bmatrix} \begin{bmatrix} acos\theta \\ asin\theta\\ h \\ \end{bmatrix} =\omega \times r =⎣⎡0θˊ0−θˊ00000⎦⎤⎣⎡acosθasinθh⎦⎤=ω×r
ω \omega ω为反对称矩阵,因此 ω \omega ω矢量为 [ 0 , 0 , θ ˊ ] T [0,0,\acute{\theta}]^T [0,0,θˊ]T,其中, ω = θ ˊ z \omega=\acute{\theta}z ω=θˊz, ∣ θ ˊ ∣ |\acute{\theta}| ∣θˊ∣是角速度大小。对上式取模,得: ∣ r ˊ ∣ = ∣ ω ∣ ∣ r ∣ s i n ϕ = ∣ ω ∣ a = a ∣ θ ˊ ∣ |\acute{r}|=|\omega||r|sin\phi=|\omega|a=a|\acute{\theta}| ∣rˊ∣=∣ω∣∣r∣sinϕ=∣ω∣a=a∣θˊ∣
质量块在 body 坐标系下的坐标为: r B = ( x 1 , x 2 , x 3 ) T r_B = (x1, x2, x3)^T rB=(x1,x2,x3)T,旋转到惯性系下有:
r I ( t ) = x 1 ( t ) i + x 2 ( t ) j + x 3 ( t ) k = R I B r B r_I (t) = x_1(t)i + x_2(t)j + x_3(t)k = R_{IB}r_B rI(t)=x1(t)i+x2(t)j+x3(t)k=RIBrB其中,body frame在惯性坐标系下的表示为 ( i , j , k ) (i,j,k) (i,j,k)
对时间求导有:
r ˊ I = R I B r ˊ B + R ˊ I B r B \acute{r}_I = R_{IB}\acute{r}_B + \acute{R}_{IB}r{B} rˊI=RIBrˊB+RˊIBrB = R I B r ˊ B + [ R I B ω b ] × r I = R_{IB} \acute{r}_B + [R_{IB}ω_b]×r_I =RIBrˊB+[RIBωb]×rI = R I B v B + ω × r I = R_{IB}v_B + ω × r_I =RIBvB+ω×rI v I ≡ R I B v B + ω × r I ⇔ R I B v B ≡ v I − ω × r I v_I ≡ R_{IB}v_B + ω × r_I ⇔ R_{IB}v_B ≡ v_I - ω × r_I vI≡RIBvB+ω×rI⇔RIBvB≡vI−ω×rI其中 ω = R I B ω B ω=R_{IB}ω_B ω=RIBωB表示body坐标系的角速度在惯性坐标系下的表示。
理论上,当没有外部作用时,IMU 传感器的输出应该为 0。但是,实际数据存在一个偏置 b。加速度计 bias 对位姿估计的影响: v e r r = b a t , p e r r ( 平 移 ) = 1 2 b a t 2 v_{err} = b_at, p_{err}(平移) = {1 \over 2}b_at^2 verr=bat,perr(平移)=21bat2
scale 可以看成是实际数值和传感器输出值之间的比值。
Nonorthogonality/Misalignment Errors
多轴 IMU 传感器制作的时候,由于制作工艺的问题,会使得 xyz 轴可能不垂直,如下图所示:
六面法是指将加速度计的 3 个轴分别朝上或者朝下水平放置一段时间,采集 6 个面的数据完成标定。如果各个轴都是正交的,那很容易得到 bias 和 scale: l = S a + b l=Sa+b l=Sa+b
b = l f u p + l f d o w n 2 , S = l f u p − l f d o w n 2 g b={l_f^{up}+l_f^{down}\over 2} , S={l_f^{up}-l_f^{down} \over 2g} b=2lfup+lfdown,S=2glfup−lfdown其中,l 为加速度计某个轴的测量值,g 为当地的重力加速度。
当各个轴不正交时,即考虑轴间误差的时候,实际加速度和测量值之间的关系为:
同理水平静止放置 6 面,利用最小二乘就能够把 12 个变量求出来。
bias 和 scale factor,和加速度计六面法不同的是,陀螺仪的真实值由高精度转台提供,这里的 6 面是指各个轴顺时针和逆时针旋转。
目的:这个标定的主要目的是对传感器估计的 bias 和 scale 进行温度补偿,获取不同温度时 bias 和 scale 的值,绘制成曲线。
两种标定方法:
已知:
解决方式:
构建误差函数,利用最小二乘得到状态量的最优估计