返回专辑
·Johan·21 分钟阅读

IMU 加速度计尺度因子可观性:匀速段为何估不出来

从匀速与匀加速激励及可观性矩阵出发,说明尺度因子与重力、偏置如何耦合;对比间歇激励、视觉尺度锚与分段固定,用激励充分性指标与尺度收敛曲线验收。

IMU 加速度计尺度因子可观性:匀速段为何估不出来

1. ATE 很稳,尺度状态却一直在找落脚点

一台室内配送底盘沿走廊做匀速循迹,单目 VIO 与激光真值对齐后的 ATE 很小,闭环位置也没有明显跳变。只看轨迹,这次测试似乎已经通过。但把后端里的加速度计尺度因子放出来,问题立刻暴露:同一段数据从不同初值优化,尺度能停在不同位置;滑窗边缘化后,它又缓慢移向加速度偏置的反方向。尺度的边缘标准差没有随样本增加而稳定下降,短窗口内甚至比初始化时更大。

这不是“优化器还差几轮”那么简单。走廊段大部分时间速度不变、机身姿态不变,IMU 看到的比力几乎就是一个固定的重力投影。固定向量既可以解释成尺度误差,也可以解释成常值偏置,还能通过微调重力方向消掉一部分。视觉因子把轨迹形状约束得很好,却没有提供足够的米制动态变化来裁决这几种解释。若 ATE 又采用 Sim(3) 对齐,全局尺度误差会被评测过程主动拿掉,“轨迹好看”与“尺度可估”就完全成了两件事。

这里讨论的是加速度计本身的尺度因子,而不只是单目地图的全局尺度。两者都会改变米制运动,但进入残差的位置不同:前者改变每个 IMU 样本的比力,后者整体缩放视觉重建。把它们都叫 scale,很容易在日志里制造一个看似收敛、实际由两个参数互相补偿的结果。工程实现至少要分别命名为 accel_scalevisual_metric_scale,协方差和验收曲线也要分开画。

2. 先把“匀速不可观”说准确

“匀速时加速度计尺度一定不可观”是一句过度简化的话。若加速度偏置已知、重力模长与方向已知,而且只估一个各向同性尺度,那么静止的一次重力测量就能给出尺度。经典六面静态标定更是利用已知重力模长,在多个姿态下联合求三轴尺度和偏置。可观性从来不只由“速度是否恒定”决定,还取决于哪些状态同时开放、有什么先验、姿态是否变化以及外部传感器是否提供米制约束。

真机在线 VIO 的典型条件更苛刻:加速度偏置未知,重力方向在初始化阶段也要估,单目视觉只有相对尺度,尺度因子还可能按三轴建模。对这组联合状态,匀速、姿态近似固定的直线段确实没有足够独立信息。即使底盘匀速转弯,向心加速度也可能提供一些变化;即使位置不动,持续改变俯仰和横滚也会让重力在机体系的投影变化,从而帮助分离三轴尺度与偏置。因此真正应写进设计文档的条件不是笼统的“匀速”,而是“窗口内校正前比力缺少幅值和方向变化”。

另一个容易误判的场景是匀加速。恒定的非零加速度比匀速多了一条动态信息,但若整个窗口里加速度方向和大小都不变,它仍然只是另一个常向量。没有米制速度或位置锚时,单目视觉的整体尺度、初速度、重力和偏置仍可沿高度相关的方向移动。匀加速通常比匀速好,却不等于充分激励;加速、减速以及不同方向的变化,才会产生偏置无法用一个常数持续抵消的时间结构。

3. 测量模型里尺度因子站在哪里

把机体系向量变到世界系,世界系速度为 ,重力为 。不含重力的真实比力在机体系写成

采用“传感器读数由真实比力经过尺度和偏置得到”的约定,加速度计模型为

其中 是加速度偏置, 是测量噪声。数据手册中的 ppm 误差、标定矩阵对角项和代码里的乘法修正可能使用相反符号;有些实现保存 ,传播时计算 。可观性结论不依赖这个记号,但解析雅可比和注入测试必须与代码约定一致,否则“成功恢复反号参数”会被误当成估计发散。

把单个样本的残差定义为

在当前线性化点附近,尺度与偏置对应的雅可比为

这两个小矩阵已经说明了大半问题:尺度不是被“速度值”直接观测,而是通过比力 被观测。若某一轴上的 始终接近零,该轴尺度几乎没有进入残差;若 始终是同一个值,尺度列与常值偏置列会线性相关。样本数量增加只会重复同一行方向,不会凭空增加秩。

实际预积分因子不会为每个 IMU 样本单独建残差,但信息没有因此改变。预积分把区间内的尺度雅可比一并递推到

尺度、偏置和姿态雅可比必须在同一个积分器、同一个线性化点维护。只给 增加尺度雅可比而漏掉 ,或更新尺度后仍复用旧预积分,都会改变数值上的信息矩阵,让本来弱可观的参数表现出虚假的确定性。

4. 常比力下存在一条明确的抵消方向

先忽略视觉和传播,只看一段姿态固定、速度恒定的数据。此时 ,所以

对任意很小的三轴尺度改变量 ,取

便有

而且这个等式对窗口内每个样本都成立。这就是一个局部不可观方向:尺度增大造成的预测变化,可由偏置作一次常值调整完全抵消。三百个相同姿态的静止样本只会让“尺度与偏置的某个组合”更精确,不会把组合里的两个参数拆开。若优化器报告两者各自方差都很小,优先检查强先验、边缘化先验或错误固定的交叉协方差,而不是庆祝数据量足够。

把重力也放开,线性化残差还会出现

已知重力模长只把 限制在重力球面的切平面,并没有把重力方向完全固定。在单一姿态下,尺度、偏置与重力方向的列仍高度相关。多姿态静态标定之所以有效,是因为 随姿态改变:一个固定偏置无法同时冒充所有姿态下的重力投影,三轴尺度也受到已知模长的共同约束。

匀加速但姿态固定时, 仍为常量,上面的抵消方向原样存在。若相机能提供可信的米制 ,且偏置或重力有独立约束,恒定加速度当然可以贡献信息;但在单目初始化里,视觉只给出带未知尺度的位移, 本身也跟着视觉尺度变化。把一段长而平滑的恒加速轨迹当作充分激励,常见结果是 Hessian 不再精确奇异,却有一个极小特征值,参数对噪声和初值异常敏感。这是“数值上能求逆”而不是“工程上估得住”。

5. 从可观性矩阵看“重复样本不增加新方向”

对线性时变误差系统

状态转移矩阵记为 ,有限窗口的可观性矩阵可写成

\mathcal O=\begin{bmatrix}H_0\H_1\Phi_{1,0}\\vdots\H_N\Phi_{N,0}\end{bmatrix}

存在非零零空间向量,那么沿该方向改变状态不会改变一阶观测。对于非线性滑窗优化,直接检查白化后因子雅可比 通常比手工展开 更实用,因为预积分、视觉重投影、鲁棒权重和先验都已经落在 中。二者表达的是同一件事:观测是否对某个局部扰动产生独立响应。

不能直接把 的最小特征值当成尺度可观性。VIO 天生包含全局位置与全局偏航等规范自由度,它们会贡献合理的零特征值;米、弧度、秒和无量纲尺度混在同一状态里,未经缩放的特征值也没有可比意义。正确做法是先固定规范或投影掉已知规范方向,再对白化、按物理量合理缩放的雅可比做分析。鲁棒核的当前权重也应包含在白化里,因为大量被降权的视觉因子不能算作有效尺度锚。

更有针对性的办法是把尺度列与其余干扰状态分开。令 包含 、速度、姿态和视觉尺度,白化雅可比分成 。把干扰列空间投影出去后,

真正属于尺度的条件信息为

它等价于正规方程对干扰变量作 Schur 补。三轴尺度时,关注 的最小特征值和条件数;一个大特征值只说明某个尺度组合可估,不能证明三个轴都可估。若当前窗口的最小特征值很小,但加入历史边缘化先验后突然变大,要把两张谱都记录下来:前者描述当前激励,后者描述系统已经积累并承诺保留的信息。只看后者会让过期或不一致的先验掩盖退化。

6. 单目尺度、重力与偏置怎样一起耦合

单目视觉重建给出相对位移 ,需要一个米制尺度 才能与 IMU 对接。位置预积分残差可概念化为

匀速直线段里,视觉位置的一阶差分近似常量,二阶差分接近零。改变 后,可以同时改变初速度来解释大部分一阶位移;改变加速度计尺度后,又可以通过 保持预积分残差。这个联合补偿方向贯穿视觉和惯性因子,所以“视觉特征很多”并不能解决问题。走廊两侧成百上千个角点主要增加重投影精度,它们没有新增米制加速度方向。

匀加速会让视觉二阶差分非零,因而比匀速多一项约束。但如果加速度始终同向,、重力投影和某一轴加速度尺度在短窗口里仍可能高度相关。先加速再减速的价值不只是“动作更大”,而是符号发生变化:偏置对两段残差施加同号影响,运动加速度却反号,优化器因此能把二者拆开。再加入不同姿态,重力投影也随之变化,三类参数才获得不同的时间指纹。

平面底盘还有一个结构性边界。前后启停主要激励机体系 轴,弧线运动增加 轴向心分量,但 轴长期只承受近似固定的重力。若底盘几乎没有俯仰与横滚,在线联合估计三轴尺度时, 仍会很弱。不能因为 已收敛就宣称“加速度计尺度已收敛”;更合理的产品策略是只开放有充分信息的轴, 轴保留离线标定值及温度模型。

重力模长约束也不是视觉尺度锚的替代品。它确实提供 这一物理量,但在姿态和偏置尚未分离时,系统可以用错误偏置得到看似正确的重力模长。反过来,双目基线、RGB-D 深度、已知尺寸标记或可靠轮速给出的米制位移,会直接限制 ,缩短联合补偿方向。它们能改善加速度尺度估计,却不会自动修复 IMU 时间偏移、外参或饱和问题。

7. 为什么 ATE 会给出过早的安全感

ATE 衡量估计轨迹与真值对齐后的位姿误差,不直接衡量参数是否可辨识。使用 Sim(3) 对齐时,评测会求一个最优全局尺度;只要错误尺度在整段内近似恒定,位置曲线仍可能非常漂亮。使用 SE(3) 对齐虽然保留米制尺度差异,但在短距离、低动态轨迹上,尺度误差产生的绝对位置差也可能小于视觉噪声或真值对齐误差。

更隐蔽的是,优化器可以在一条轨迹上用错误的 与错误的 相互补偿,轨迹残差和 ATE 都不坏。换到包含启停、坡道或快速转向的轨迹,原先的补偿关系不再成立,尺度才突然漂移。这说明训练轨迹上的状态拟合不是标定参数的外推能力。加速度尺度必须跨运动类型验收,至少把低动态段与有独立激励的段分开报告。

每次回归应同时画四类量:未作尺度修正的 SE(3) ATE、作 Sim(3) 对齐的 ATE、分窗视觉米制尺度 、加速度尺度 及其边缘标准差。若 Sim(3) ATE 好而 SE(3) ATE 差,是全局米制尺度问题;若两种 ATE 都好但 方差大,是参数仍由其他状态代偿;若 方差小但不同初值收敛到不同值,则线性化、先验或协方差计算很可能过度自信。

还应检查相关系数,而不是只看单变量方差。尺度与偏置的后验相关系数接近正负一,表示信息主要落在某个组合上;尺度与视觉 强相关,则说明米制锚不足;尺度与时间偏移强相关,则要先解决同步。单一的 scale_variance < threshold 无法区分这些失败模式。

8. 哪些误差会冒充尺度激励

时间偏移最容易制造假的加速度尺度。相机与 IMU 相差 时,视觉约束对应的姿态和位置被取在错误时刻,一阶误差与角速度、线速度和加速度成正比。动态越强,这种残差越明显;若后端只开放 ,尺度会主动吸收同步误差。结果是在一条特定速度曲线上拟合得很好,换速度后立即失效。应先通过硬同步或独立时延标定把 收进可信范围,再讨论在线尺度。

相机到 IMU 的杆臂误差也会在转动中生成线加速度样残差。传感器点相对机体参考点的加速度包含

快速转向时,错误的 会被误认为横向尺度或偏置。只靠原地转向“激励加速度计尺度”因此风险很高:它可能主要激励外参平移。应把带平移的启停和姿态变化组合起来,并在验收中固定外参与开放外参各跑一次,确认尺度不是替外参背锅。

振动、削顶和温度也不能被白噪声模型掩盖。电机振动经过采样与低通后可能产生与转速相关的整流偏差;量程饱和会把峰值截平,看起来像尺度偏小;温漂则使偏置在长窗口内不再是常数。对这些数据强行估一个常值尺度,只是在寻找平均补偿。验收前应统计每轴最大值、饱和计数、温度分箱残差和功率谱,并确认驱动器输出变化没有与尺度更新完全同步。

9. 固定、开放与分段保持的取舍

高质量离线标定已经覆盖工作温度和装配状态,而线上运动长期平缓时,固定尺度通常比持续在线估计更可靠。不可观参数不是“估得慢”,而是可以被噪声和模型误差推向任意补偿位置。给它很小的随机游走只会让漂移变慢;给它很强的零均值先验则相当于固定,却会让输出协方差看起来比事实更乐观。产品配置应明确说明尺度来自离线标定,而不是把强先验包装成在线收敛。

在线估计适合两类情况:一是装配应力、量程配置或长期老化确实会改变增益;二是运行过程能够周期性提供可识别的多方向激励和独立米制锚。即便如此,也不宜一开始就开放完整的 加速度计内参矩阵。对角三轴尺度已经需要丰富激励;再加入非正交项后,每一轴读数都可由其他轴真值解释,与姿态外参的耦合更强。常见做法是离线求完整内参,在线最多更新一个公共尺度或少数已知易变的对角项。

分段保持是一种实用折中。系统在低动态巡航时将 accel_scale 参数块固定,只传播位姿、速度和偏置;检测到连续多个窗口具有足够激励且米制锚健康后,再开放尺度。信息跌落时重新固定当前估计,而不是把它重置到一或清空协方差。这样可以防止退化窗口用噪声改写标定值,也保留之前有效段获得的信息。

这里的“固定”必须和“假装观测到了”区分。固定参数意味着本段不对它做统计更新;若还要发布不确定度,应保留上一次可信后验并按温度模型或长期漂移模型适当膨胀。不能每次固定时把方差设为零,也不能在重新开放时带着零方差进入优化,否则后续再强的激励也无法推动参数。

10. 激励设计:变化方向比动作幅度更重要

对室内底盘,一套可执行的采集动作可以由短启停、反向制动、左右弧线和小角度坡面组成。直线段先向前加速再减速,让 轴运动比力变号;左右弧线提供不同符号的横向分量;安全条件允许时经过缓坡或在标定工装上改变俯仰,使重力投影覆盖 轴。每类动作都要有重复,但重复不应只是同方向、同速度的复制。

动作持续时间要同时照顾传感器带宽与状态模型。极短冲击可能落在抗混叠滤波器过渡带,或被相机低帧率漏掉;过长恒加速又会退化为一个常向量,并可能超出场地。设计目标是让校正前比力 在多个独立方向上经历可测的变化,且每次变化由足够多的相机帧和 IMU 样本共同覆盖。具体幅值不能脱离 IMU 噪声密度、相机帧率和平台安全限制给出一个通用数字。

可先用比力去均值矩阵做廉价筛查。以下代码计算窗口内机体系比力变化的奇异值,并用单样本加速度噪声标准差白化。它不是完整 VIO 可观性证明,因为没有投影视觉、重力和外参列,但很适合在前端快速拒绝“样本很多、方向没变”的窗口。

cpp
#include <Eigen/Core>
#include <Eigen/SVD>
#include <cmath>
#include <limits>
#include <vector>

struct ExcitationScore {
  Eigen::Vector3d normalized_singular_values;
  double condition_number;
};

ExcitationScore scoreSpecificForce(
    const std::vector<Eigen::Vector3d>& specific_force_body,
    double accel_noise_std) {
  if (specific_force_body.size() < 3 || accel_noise_std <= 0.0) {
    return {Eigen::Vector3d::Zero(),
            std::numeric_limits<double>::infinity()};
  }

  Eigen::Vector3d mean = Eigen::Vector3d::Zero();
  for (const auto& f : specific_force_body) mean += f;
  mean /= static_cast<double>(specific_force_body.size());

  Eigen::MatrixXd A(specific_force_body.size(), 3);
  for (Eigen::Index i = 0; i < A.rows(); ++i) {
    A.row(i) =
        ((specific_force_body[i] - mean) / accel_noise_std).transpose();
  }

  Eigen::JacobiSVD<Eigen::MatrixXd> svd(A, Eigen::ComputeThinV);
  const Eigen::Vector3d sigma =
      svd.singularValues() / std::sqrt(static_cast<double>(A.rows()));
  const double condition =
      sigma.z() > 0.0
          ? sigma.x() / sigma.z()
          : std::numeric_limits<double>::infinity();
  return {sigma, condition};
}

对平面底盘,最小奇异值长期接近零往往是物理事实,不应通过降低门限掩盖。可以改成按轴开放:只在 轴去均值能量和完整 Schur 信息都达标时更新 ,其余轴固定。若业务必须在线估 ,就要改变采集运动或增加外部约束,而不是继续堆走廊数据。

11. 从廉价指标到后端更新门控

门控最好分三层。第一层检查数据健康:时间戳单调、相机与 IMU 时差受控、无饱和、温度位于标定范围、视觉跟踪内点足够。数据模型已经失效时,激励再强也不应开放尺度。第二层用去均值比力奇异值、姿态覆盖和视觉二阶位移作快速筛查,避免每帧都构造昂贵的信息矩阵。

第三层在后端使用 做最终决定。先用当前鲁棒权重白化雅可比,再投影偏置、重力、速度、外参、时延与视觉尺度。记录三轴条件信息、条件数以及尺度和偏置的后验相关系数。启用阈值应来自传感器噪声仿真与有真值数据的标定,而不是照抄其他平台;归一化后仍要通过恢复误差和置信区间覆盖率校准。

不要让一次急刹触发参数开关。更稳妥的状态机要求连续多个窗口通过启用门限才开放尺度,连续多个窗口低于保持门限才固定,并让两个门限形成迟滞。尺度更新步长还应受物理边界约束:消费级 MEMS 的合理增益误差范围可以由数据手册和离线标定分布给出,超界时标记本段模型不可信,而不是把参数硬截到边界后继续宣称收敛。

边缘化是实现里的关键细节。尺度开放时,历史因子对它形成的交叉信息会进入先验;随后把尺度设为常量,必须明确先验中相关块如何处理。简单删除尺度列却保留对其他状态的条件化先验,可能把某个尺度值永久烘焙进速度和偏置。可行方案包括始终保留参数块但在求解器中设为常量,或在模式切换时重新构造只含可信段的先验。无论选择哪种,都要用小型线性系统单测验证 Schur 补前后的条件分布。

还应把“当前窗口可更新”和“全局参数已标定”分开。当前窗口退化只意味着本段不应改参数,不意味着历史标定作废;当前窗口有激励也只意味着存在更新机会,不保证当前残差来自尺度。只有数据健康、外部锚一致、信息充分且创新通过统计检验,更新才有物理含义。

12. 可核对的验收协议

第一组是可辨识性测试。选取一段低动态匀速数据和一段包含多方向启停、姿态变化的数据,使用完全相同的噪声、先验和视觉特征。分别从多个尺度与偏置初值启动优化,记录最终参数、代价和 的谱。低动态段允许拒绝更新或保持大方差,不应要求它“必须收敛”;激励段则应从合理初值范围收敛到一致邻域,而且最弱尺度方向的信息明显高于低动态段。

第二组是已知扰动注入。在原始加速度某一轴乘以 ,按代码采用的测量约定计算期望尺度变化;先固定偏置跑一次,再联合开放偏置、重力和尺度。若只有固定偏置时能恢复,说明联合可观性仍不足。注入应覆盖正负扰动、不同轴和不同运动段,并确认恢复量随 近似线性。这个测试还能抓出校正矩阵放在测量侧还是逆矩阵侧造成的符号错误。

第三组是轮廓代价。把待测尺度轴固定在一系列候选值,每个候选值下重新优化偏置、重力、速度和视觉尺度,得到

匀速退化段的 往往很平,激励充分且有米制锚的段应在真值附近形成稳定曲率。轮廓代价比只读求解器输出的 Hessian 更能暴露非线性、多峰和边界效应;若曲线平而边缘方差很小,协方差计算或先验处理存在问题。

第四组是尺度收敛曲线。横轴不能只用时间,还要标出激励区间、锚点可用区间和模式状态;纵轴同时画 、置信带、 与视觉 。合格曲线应在无激励段保持而非随机游走,在有效激励进入后逐步缩小置信带,在锚点丢失时停止激进更新。尺度与偏置若始终镜像变化,即使终值碰巧正确,也不能通过。

第五组是跨轨迹与消融。至少比较四种配置:全程固定离线尺度、全程在线估计、按信息门控估计、加入视觉米制锚后门控估计。分别报告 SE(3) ATE、Sim(3) ATE、分段尺度比、IMU 预积分归一化残差和参数误差。若在线方案只改善训练轨迹的 ATE,却让独立动态轨迹的参数误差变大,应保留固定方案。若加入尺度锚后参数方差下降但残差显著变差,锚点尺寸、外参或同步可能不一致。

最后检查统计一致性。有标定真值时,真实尺度应以预定覆盖率落在估计置信区间内;没有真值时,可用多次独立采集的重复性、不同激励子集的留一验证以及创新与比力幅值的相关性代替。置信区间窄不等于正确,只有覆盖、重复性和外推轨迹同时成立,才说明信息矩阵没有把模型误差当成观测。

13. 收束:让参数只在数据能回答时开口

加速度计尺度因子不是靠更长的匀速日志估出来的。决定信息量的是比力和姿态是否产生了偏置、重力及视觉尺度无法共同复制的变化。匀速且姿态固定时,尺度雅可比可以被常值偏置精确抵消;同向匀加速虽然增加动态,却常只把精确奇异变成严重病态。间歇的正反向加速度、多姿态重力投影和独立米制锚,分别打破不同的耦合。

工程上最可靠的做法不是强迫每个窗口输出一个新尺度,而是把可观性变成显式契约:前端记录比力方向覆盖,后端计算投影后的尺度信息,状态机在弱信息段保持参数,评测同时看参数曲线、相关性、轮廓代价与未修正尺度的轨迹指标。这样,低动态段“估不出来”会成为系统诚实拒绝更新的证据,而不是被一条好看的 ATE 曲线遮住的隐患。

← 全部文章

johan's blog