离散积分传播的几种方式
主要的应用场景一般是类似imu的积分传播中,为了更清楚的表达各种积分方式的主要思路,下面都会以简化的速度的传播进行举例。测量的到n时刻的加速度为\(a_1\),n+1时刻的加速度为\(a_2\),已知n时刻的速度\(v_1\),目标是通过积分传播得到n+1时刻的速度\(v_2\)。(以下不考虑姿态重力等因素对加速度的影响)
欧拉积分
欧拉积分一般假设导数恒定,使用初始时刻的导数来进行积分传播,此处速度的,积分为:
\[ v_2 = v_1 + a_1 * \Delta t \]
中值积分
中值积分一般也是假设导数恒定,但是为了使得导数的值更加精确,使用中值处的导数积分,公式为:
\[ v_2 = v_1 + \frac{a_1 + a_2}{2} \Delta t \]
龙格库塔积分
一般常用的是4阶龙格库塔积分,也叫rk4积分。上面的速度传播太简单,不能很好说明。下面\(t_0\)为初始时刻,\(y_0\)为初始时刻的状态,\(f\)为导数函数(确定某一时刻,某个状态后,可以确定其导数。类比在imu传播中,获得加速度后,是需要将其转换到全局坐标系下,然后再减去重力向量才得到最终的加速度,也就是速度的导数是与系统状态--姿态相关的),主要思路如下:
\[ {k_1} = f({t_0}, y_0) \Delta t \]
\[ {k_2} = f( {t_0}+{\Delta t \over 2}, y_0 + {1 \over 2}{k_1} ) \Delta t \]
\[ {k_3} = f( {t_0}+{\Delta t \over 2}, y_0 + {1 \over 2}{k_2} ) \Delta t \]
\[ {k_4} = f( {t_0} + {\Delta t}, y_0 + {k_3} ) \Delta t \\ y_{0+\Delta t} = y_0 + \left( {\frac{1}{6} {k_1} + {1 \over 3}{k_2} + {1 \over 3}{k_3} + \frac{1}{6} {k_4}} \right) \]
其中:
- \(k_1\)为以时间段开始时刻\(t_0\)下的导数进行积分得到的状态改变量;
- \(k_2\): 按照\(k_1\)计算中值时刻\({t_0}+{\Delta t \over 2}\)时的系统状态为\(y_0 + {1 \over 2}{k_1}\),则在此中值时刻与状态下的导数进行积分得到的状态改变量为\(k_2\);
- \(k_3\): 按照\(k_2\)计算中值时刻\({t_0}+{\Delta t \over 2}\)时的系统状态为\(y_0 + {1 \over 2}{k_2}\),则在此中值时刻与状态下的导数进行积分得到的状态改变量为\(k_3\);
- \(k_4\): 按照\(k_3\)计算的终值时刻\({t_0}+{\Delta t }\)时的系统状态为\(y_0 + {k_3}\),则以此状态下积分终点时刻的导数进行积分得到的状态改变量为\(k_4\);
- 最终的积分结果为上述的加权叠加,其中中点处的导数权重更大,两端处的导数权重更小。
参考文献
[1]
openvins源码:Propagtor.h
文件中的predict_mean_rk4
函数。