在自动驾驶中ESKF实现GINS时,是否将重力g作为变量考虑进去的目的是什么?
在自动驾驶的ESKF中,是否将重力 g
作为估计变量,可以从多个维度来比较这两种方法的差异。
对比维度 | 不将重力 g 作为变量 | 将重力 g 作为变量 |
---|---|---|
核心假设 | 重力矢量 g 是已知且恒定的完美参考量。 | 重力矢量 g 是需要被估计或校准的量,其值可能存在不确定性。 |
状态向量 | δx = [δθ, δv, δp, δb_g, δb_a] | δx = [δθ, δv, δp, δb_g, δb_a, δg ] |
姿态初始化 (Pitch/Roll) | 依赖初始静止时段计算,一旦计算完成即固定。无法在运动中修正因误差导致的初始对准偏差。 | 持续估计。在运动过程中仍可利用重力方向作为参考,不断修正俯仰和滚转角的误差。 |
加速度计Bias估计 | 与姿态误差耦合严重。容易将姿态误差误判为Bias,或将Bias误判为姿态误差,导致估计不准。 | 通过引入重力误差状态,更好地解耦了姿态误差和加速度计Bias,能更准确地估计出Bias。 |
鲁棒性 | 较低。对IMU的初始对准精度要求高。在非水平路面、重力异常区域或车辆长时间动态运动时,性能下降明显。 | 极高。能适应坡道、不同地理经纬度(重力细微变化)、以及初始对准不完美的情况,系统更自适应。 |
处理运动加速度 | “黑盒”处理。通常需依赖车辆动力学模型或机器学习方法来判断当前加速度是运动导致还是姿态导致,设计复杂。 | “白盒”优化。滤波器通过状态估计自动学习和区分。它将测量到的加速度分解为:运动加速度 + 重力加速度分量 + bias ,并通过观测(如GNSS速度)来约束运动加速度,从而反向优化重力和姿态的估计。 |
计算复杂度 | 稍低。状态向量维度更小,计算量略小。 | 稍高。增加了状态维度,计算量略有增加,但对于现代处理器而言可忽略不计。 |
个人理解:(如果觉得理解有不到位地方,欢迎批评指正!!!)
1. 不估计重力(重力恒定)的情况
- 初始对准必需:系统必须通过初始静止时段(或其它方法)确定R0。加速度计测量重力矢量在b系中的投影,可得到R0。
- 参考系固定:一旦R0确定,整个导航坐标系(n系)就被固定了,其Z轴与初始重力方向对齐(即水平面)。后续所有姿态更新(通过积分陀螺仪数据)都是相对于这个固定的n系。因此,IMU的姿态是相对于初始时刻建立的水平面描述的。
- 如果初始对准准确,姿态估计正确。但如果初始对准有误差(例如,由于坡道导致计算R0时假设错误),误差会持续影响后续估计。但关键是,n系本身是水平的,与坡道无关。
2. 估计重力(重力作为状态变量)的情况
- 初始姿态可设为单元阵:即设R0 = I(单位阵)。
- 重力作为状态变量:重力矢量g被纳入状态估计,初始值可设为[0, 0, -9.8]^T,允许滤波器后续优化其值。
- 动态估计水平面:通过融合IMU测量和GNSS等观测数据,滤波器会持续估计重力矢量的方向。这个估计的重力方向实际上定义了当前的真实水平面(因为重力方向垂直向下)。因此,重力矢量的估计值充当了一个动态参考,允许计算IMU当前姿态相对于水平面的偏移,而无需精确的初始对准。
- 鲁棒性:这种方法能自动校正初始对准误差、IMU bias以及重力模型误差(如不同地区的重力变化),更适合复杂场景(如坡道、运动中的初始化)。
未完待续。。。