0. 简介
Super Odometry 2.0 面向机器人在黑暗、重复走廊、浓烟和恶劣天气中的运动估计问题,把特征筛选、方向补偿、估计引擎选择和学习式惯性里程计组织成分层自适应系统。它在外部观测可靠时利用因子图提供的位姿训练IMU模型,在观测退化时让模型提供运动先验。论文报告了跨平台、累计200公里与800小时的验证,其中校园单次路线长2966米、端点漂移20厘米。理解这套系统,需要同时看退化如何被识别、IMU如何学习,以及可靠观测怎样恢复后重新参与融合。
1. 里程计首先要回答:机器人刚才如何移动
1.1 位姿、里程计与SLAM的区别
机器人控制器需要知道当前位置、朝向和速度,才能决定下一刻怎样转弯、避障或保持平衡。位姿(Pose) 描述位置与姿态,里程计则把连续观测转化为相邻时刻的运动,再累积成轨迹。SLAM通常进一步维护地图、识别曾经到过的位置,并用回环约束修正历史轨迹;里程计关注局部、连续的运动估计。里程计也可以把点云拼成地图,因此"展示了地图"并不自动说明系统执行了回环。论文中的因子优化仍然存在,作者所强调的是没有使用回环等全局轨迹修正。
为了把问题写清楚,可以用下面的状态描述机器人。这里 R t \mathbf{R}_t Rt 是机体到世界的旋转, p t \mathbf{p}t pt 和 v t \mathbf{v}t vt 是世界坐标系中的位置、速度, b a , t \mathbf{b}{a,t} ba,t 和 b g , t \mathbf{b}{g,t} bg,t 是加速度计与陀螺仪偏置。这是讲解所用的常见状态表示,并非断言每一个论文模块都优化完全相同的变量。相机提供图像对应关系,LiDAR提供几何对应关系,IMU提供高频运动测量;它们需要在同一时间和坐标约定下解释,才能共同约束这个状态。
x t = ( R t , p t , v t , b a , t , b g , t ) , T t = R t p t 0 ⊤ 1 ∈ S E ( 3 ) . \mathbf{x}_t=\left(\mathbf{R}_t,\mathbf{p}t,\mathbf{v}t,\mathbf{b}{a,t},\mathbf{b}{g,t}\right),\qquad \mathbf{T}_t=\begin{bmatrix}\mathbf{R}_t&\mathbf{p}_t\\\mathbf{0}^{\top}&1\end{bmatrix}\in\mathrm{SE}(3). xt=(Rt,pt,vt,ba,t,bg,t),Tt=Rt0⊤pt1∈SE(3).
1.2 传感器失效常常先表现为"只错一个方向"
相机在白墙前可能找不到稳定角点,在暗处可能出现噪声和拖影;LiDAR在长走廊里依然能看见两侧墙壁,却无法判断沿走廊究竟前进了多少。这两种退化有不同的结构,不能只看传感器是否还在发送数据。几何退化(Geometric degeneracy) 尤其容易被误判:点云可以很密集,配准残差可以很小,但某个运动方向依然缺乏约束。这里的关键是,融合系统要知道每个测量能说明什么,而不仅是知道它来自哪一种传感器。
浓烟又把问题推向了另一层。相机的视线被遮蔽,激光也可能在烟尘上产生散射和近距离回波,两个外部传感器同时变差。惯性传感器仍然能测量机体的加速度与角速度,但这些测量也有偏置、噪声和饱和风险。Super Odometry希望在这段缺乏外部参照的时间里维持可用的运动估计。完全退化指视觉与LiDAR失去可用外部约束,不意味着机器人获得了无限期无漂移的纯惯性定位能力。 这一边界贯穿后面的训练、融合和实验解释。
2. 四层自适应如何组成一个系统
2.1 从单个特征一直判断到整个估计引擎
论文把干预粒度分成四层。第一层检查单个视觉或几何特征是否可靠,第二层判断六自由度中哪些方向缺乏观测,第三层判断一个估计引擎是否已持续低效或失效,第四层在外部感知都无法提供有效约束时使用学习式IMU里程计。换句话说,系统先尝试保留仍然有用的信息,再决定是否需要替换主要估计来源。这个层级描述的是应对退化的尺度,并不必然意味着软件里有四个严格依次运行、互斥启动的状态。
| 层级 | 判断对象 | 典型触发条件 | 采取的动作 |
|---|---|---|---|
| 特征层 | 图像特征、点云对应 | 模糊、低纹理、错误匹配 | 剔除或降低不可靠测量的权重 |
| 方向层 | 平移与旋转方向 | 长走廊、开阔平地、楼梯 | 用其他先验补充弱约束方向 |
| 引擎层 | 视觉、LiDAR等因子来源 | 长时间遮挡、信号中断 | 动态调整参与优化的因子 |
| 惯性兜底层 | 学习式运动模型 | 外部传感器同时退化 | 用IMU网络提供速度及运动先验 |

直觉理解:可以把它看成开车时对导航信息的分级处理。一个路标模糊,就参考附近的其他路标;某条道路缺少纵向参照,就借助另一种定位依据;整套外部导航暂时不可用,才依靠车辆自身运动信息渡过这一段。恢复参照以后,还要重新校正累积误差。
2.2 因子图与学习模型之间存在双向反馈
因子图(Factor graph) 将待估计状态作为变量,将传感器测量与运动先验作为约束。正常环境下,图优化能够给出相对可靠的位姿,学习式IMU模块从这些位姿提取速度监督,适配当前机器人的动力学。退化环境下,训练过的IMU模块反过来提供运动先验,帮助图优化或承担主要估计任务。论文称这种关系为互惠融合(Reciprocal fusion)。它的价值在于把运行过程中已经获得的有效观测用于学习,提前准备下一次感知失效时需要的备用运动模型。
论文还用双层优化(Bilevel optimization) 描述这套关系:下层在当前测量与先验约束下优化机器人状态,上层根据下层提供的运动标签更新网络参数。两层优化的对象不同,下层追求这一段轨迹与观测一致,上层追求从IMU波形预测运动的能力。网络更新后又改变下次状态估计所用的先验,形成闭环。理解这一点,不必先掌握优化器的全部推导;先分清"谁在估计状态、谁在学习参数、监督何时可信",就能抓住训练与部署相接的机制。

图2左侧的闭环比网络名称更值得关注:下层优化器产生监督,上层网络产生运动先验。这里要区分在线适配与纯IMU推理。在线适配需要可靠的外部监督,完全退化期间则主要依靠已有模型进行推理。如果不加筛选地用退化后的位姿继续训练,错误监督就可能被模型吸收,再反馈给同一个估计器。论文提供了这种互相帮助的结构;标签质量控制、信息相关性和恢复策略,仍然是部署时需要认真设计的部分。
这张补充概念图把双向反馈拆成两条可以逐根追踪的箭头:实线表示运行时的状态估计,虚线表示有条件的在线训练。读者从左侧传感器一路看到右侧位姿,再沿质量门控回到网络,就能分清监督与推理各自改变什么。小蝾螈只承担一句提醒,可靠性条件、因子图与运动先验仍是画面的主体;图中不放实验误差,避免让机制示意承担定量证据的作用。

3. 第一层:哪些特征值得进入优化
3.1 视觉特征的误差具有方向性
角点和直线边缘的跟踪难度不同。一个清晰角点在水平和竖直方向都比较容易定位,一条长直边缘则通常只在法向上定位准确,沿边缘方向可以滑动而不显著改变图像误差。这就是孔径问题(Aperture problem)。论文先进行光度校准,并使用源自ThermalPoint工作的特征检测方法;随后利用KLT跟踪局部强度残差的Hessian分析特征不确定性。ThermalPoint的名称并不表示这些实验必须使用热相机,论文明确描述了RGB图像上的应用。
这里的关键是,特征的位置误差不能总用一个标量描述。论文将局部估计的协方差旋转到相应图像坐标表示,写成下式。其中 R θ \mathbf{R}\theta Rθ 是二维旋转, Σ S E ( 2 ) \mathbf{\Sigma}{\mathrm{SE}(2)} ΣSE(2) 表示原文使用的局部不确定性记号, Σ 2 D , θ \mathbf{\Sigma}_{2\mathrm{D},\theta} Σ2D,θ 对应特征位置的不确定性表达。更大的椭圆表示更不确定,椭圆的长轴表示更容易发生跟踪歧义的方向。理解图中的椭圆,比把"检测到多少特征"当成唯一质量指标更接近这层机制的本意。
Σ 2 D , θ = R θ Σ S E ( 2 ) R θ ⊤ . \mathbf{\Sigma}{2\mathrm{D},\theta} =\mathbf{R}{\theta}\mathbf{\Sigma}{\mathrm{SE}(2)}\mathbf{R}{\theta}^{\top}. Σ2D,θ=RθΣSE(2)Rθ⊤.

3.2 LiDAR特征先检查几何质量
点云处理中,系统对局部邻域做主成分分析(PCA),判断这些点更接近一条线、一个平面,还是散乱分布。论文正文使用特征值的和进行归一化;公开轻量版中的具体实现存在不同约定,下面这段真实代码先对Eigen返回的特征值开方,再构造几何比例。读代码时不能把这几个数未经检查就代回正文公式。进一步看,公式描述设计思想,仓库描述某个版本的工程实现,两者在归一化、特征排序和质量门槛上需要逐项对齐。
cpp
// SuperOdom ros2: super_odometry/src/LidarProcess/LidarSlam.cpp
// computeEigenProperties,节选;固定源码版本见文末。
feature.values.lamada1 = std::sqrt(eigenvalues(2));
feature.values.lamada2 = std::sqrt(eigenvalues(1));
feature.values.lamada3 = std::sqrt(eigenvalues(0));
double sum_lamada = feature.values.lamada1
+ feature.values.lamada2
+ feature.values.lamada3;
if (sum_lamada == 0) {
feature.curvature = 0;
} else {
feature.curvature = feature.values.lamada3 / sum_lamada;
}
feature.linear_2 = (feature.values.lamada1 - feature.values.lamada2)
/ feature.values.lamada1;
feature.planar_2 = (feature.values.lamada2 - feature.values.lamada3)
/ feature.values.lamada1;
feature.spherical_2 = feature.values.lamada3 / feature.values.lamada1;
当最大主轴远大于其他两轴时,线性度较高;当两个主轴明显大于最小主轴时,平面度较高。良好的平面特征可以构造点到面残差,良好的线特征可以构造点到线残差,但散乱烟尘不应被赋予与稳定墙面相同的信任。上面代码只给部分量处理了零分母,不能当成可以独立复制到生产系统的完整函数。实际调用还依赖邻域数量、距离、PCA质量与数值检查,复现时应沿调用链阅读这些前置条件,而不是只搬运最后几个比值。
4. 第二层:沿哪个方向运动最容易失去约束
4.1 从点到面残差看长走廊退化
假设点云配准把源点 p i \mathbf{p}_i pi 变换到地图中的对应平面, q i \mathbf{q}_i qi 是平面参考点, n i \mathbf{n}_i ni 是单位法向。点到面残差与其局部雅可比如下,采用先旋转、后平移的六维增量顺序。这里的线性化是在已变换点 s i \mathbf{s}_i si 附近采用左扰动的解释形式;不同代码中的扰动方向和符号可能不同,但几何结论一致。沿一个与法向正交的方向平移,不改变点到面的距离,因此这项测量几乎无法区分该方向上的运动。
r i = n i ⊤ ( R p i + t − q i ) , J i = ( s i × n i ) ⊤ n i ⊤ , s i = R p i + t . r_i=\mathbf{n}_i^{\top}(\mathbf{R}\mathbf{p}_i+\mathbf{t}-\mathbf{q}_i),\qquad \mathbf{J}_i=\begin{bmatrix}(\mathbf{s}_i\times\mathbf{n}_i)^{\top}&\mathbf{n}_i^{\top}\end{bmatrix},\quad \mathbf{s}_i=\mathbf{R}\mathbf{p}_i+\mathbf{t}. ri=ni⊤(Rpi+t−qi),Ji=(si×ni)⊤ni⊤,si=Rpi+t.
在走廊中,两侧墙壁的法向主要指向左右,地面的法向指向上下,这些平面约束能够说明横向位置与高度,却很难说明沿走廊前进了多少。即使配准得到很小的残差,也可能沿前向滑移。论文因此在前端分析对应关系的几何约束,再决定哪些方向需要其他里程计补充。低残差不等于高可观测性。 这一判断也解释了为什么仅增加ICP迭代次数,无法从几何结构本身缺失的方向中恢复信息。
难点提示:站在一条没有门窗的直走廊里,向前挪动半米,两边墙壁的距离几乎不变;向左挪动半米,左右距离马上改变。激光雷达测到的墙面很准确,但前一种运动仍缺少参照。退化分析要识别这种几何盲区,而不只是寻找测量噪声大的点。
这张补充概念图先画走廊几何,再画逐方向融合,让读者看到"什么结构约束什么运动"的因果关系。两侧墙面的法向指向左右,地面法向指向上下,前向箭头则沿着几乎不变的墙面距离延伸。右侧保留可靠的激光约束,只给弱方向补充其他可用先验。图中展示的是平移直觉,完整系统还分析旋转;不同场景的弱方向可能不同,不能把前向退化理解成固定的坐标轴规则。

4.2 真实代码怎样计算逐轴贡献
公开代码中的平移可观测性计算直接体现了这一直觉。normalDirection 是平面法向,axes.x/y/z 是经过当前姿态旋转的参考轴,planar_squared 用平面质量调节贡献。法向在某个轴上的投影越小,这个点对该轴平移的约束就越弱。这里要确认法向与参考轴处在同一坐标表示,旋转与平移的排列也必须与优化器一致。补充材料公式的前半段是旋转贡献、后半段是平移贡献,不能把状态名称的排列直接当成矩阵排列。
cpp
float planar_squared = feature.planar_2 * feature.planar_2;
feature.tx_dot = planar_squared *
std::abs(feature.vectors.normalDirection.dot(axes.x));
feature.ty_dot = planar_squared *
std::abs(feature.vectors.normalDirection.dot(axes.y));
feature.tz_dot = planar_squared *
std::abs(feature.vectors.normalDirection.dot(axes.z));
旋转贡献则来自点的位置与平面法向的叉积。对于同一法向,离旋转中心更远的点可能提供更强的力臂,因此旋转约束不能仅由法向决定。下面的真实代码分别计算正向与反向旋转贡献,随后在另一个函数中排序、分配可观测性标签。这意味着公开版本并不是简单地对每个点取六个绝对值后结束,它还保留旋转贡献的符号,并把对应关系分配到多个候选方向。细节会影响最终统计,复现时需要保持这一调用链的完整性。
cpp
Eigen::Vector3f point(feature.pt.x, feature.pt.y, feature.pt.z);
Eigen::Vector3f cross = point.cross(feature.vectors.normalDirection);
feature.rx_cross = cross.dot(axes.x);
feature.neg_rx_cross = -feature.rx_cross;
feature.ry_cross = cross.dot(axes.y);
feature.neg_ry_cross = -feature.ry_cross;
feature.rz_cross = cross.dot(axes.z);
feature.neg_rz_cross = -feature.rz_cross;
4.3 置信度与协方差必须分开解释
论文用方向标签数量 N i N_i Ni 占总标签数量的比例构造指标 γ i = 6 N i / ∑ j N j \gamma_i=6N_i/\sum_jN_j γi=6Ni/∑jNj。这个指标适合描述方向之间的相对信息分布,但按公式字面,取值范围是 0 , 6 0,6 0,6,均匀分布时等于1,并不天然限制在 0 , 1 0,1 0,1。原文把其对角矩阵称作协方差,并在补充材料中写出互补矩阵,这与标准概率协方差语义不能直接等同。高置信度通常意味着更大信息权重、更小测量方差;实现时需要明确映射与截断规则,避免把低置信度误当成小协方差而增加错误测量的影响。

图4对应668米的走廊实验,论文报告车辆约90%的路段以4米每秒运行,最高达到5米每秒。前向LiDAR约束较弱时,系统增加其他位姿先验在该方向的贡献,而保留侧向与竖直方向仍可靠的激光信息。换句话说,传感器融合可以按方向分配信任。不过,辅助视觉也必须确实包含可用信息;如果相机与LiDAR在同一方向都缺乏观测,单纯交换权重无法创造不存在的约束,此时就需要更高层的退化处理。
5. 第三层:持续退化时怎样重配因子图
5.1 软融合与引擎禁用解决不同时间尺度的问题
方向层解决的是这一帧里哪个分量需要补偿,引擎层解决的是一个测量来源是否已长时间无法提供有效约束。论文采用软融合(Soft fusion) 调整不同来源、不同方向的权重;当某个模态对联合状态的贡献低于10%,并持续约2至4秒,则停用这一模态对应的因子。这个时间窗用于过滤瞬时波动,属于经验设置,可以调整。这里的关键是,停用一组因子可以减少错误数据和无效计算,但恢复阈值、重新初始化和切换迟滞也要明确,否则系统可能在边界条件附近频繁启停。
为了避免原文协方差记号带来的歧义,下面用标准信息矩阵 写出等价思想的解释性目标。 Λ L \mathbf{\Lambda}_L ΛL、 Λ V \mathbf{\Lambda}_V ΛV 与 Λ I \mathbf{\Lambda}_I ΛI 分别决定LiDAR、视觉及学习式惯性先验的贡献, ρ \rho ρ 是鲁棒损失, A V \mathcal{A}_V AV 和 A I \mathcal{A}_I AI 表示当前启用的先验集合。该式用于解释动态选因子,并非逐符号重印论文目标;不同残差的坐标系、量纲及相关性还需在具体优化器中处理。
min X ∑ i ∈ A L ρ ( r L , i ⊤ Λ L , i r L , i ) + ∑ j ∈ A V r V , j ⊤ Λ V , j r V , j + ∑ k ∈ A I r I , k ⊤ Λ I , k r I , k . \min_{\mathcal{X}}\left \\sum_{i\\in\\mathcal{A}_L}\\rho\\!\\left(\\mathbf{r}_{L,i}\^{\\top}\\mathbf{\\Lambda}_{L,i}\\mathbf{r}_{L,i}\\right) +\\sum_{j\\in\\mathcal{A}_V}\\mathbf{r}_{V,j}\^{\\top}\\mathbf{\\Lambda}_{V,j}\\mathbf{r}_{V,j} +\\sum_{k\\in\\mathcal{A}_I}\\mathbf{r}_{I,k}\^{\\top}\\mathbf{\\Lambda}_{I,k}\\mathbf{r}_{I,k} \\right. Xmin i∈AL∑ρ(rL,i⊤ΛL,irL,i)+j∈AV∑rV,j⊤ΛV,jrV,j+k∈AI∑rI,k⊤ΛI,krI,k .
工程价值:这相当于给导航信息设置两种处理:短时模糊先降低信任,持续失灵再暂停使用。像汽车倒车雷达偶尔报错时可以观察下一次回波,探头持续被泥巴堵住时则应停止把它当成可靠距离来源。两个尺度配合,才能兼顾连续性与计算成本。
5.2 残差质量与鲁棒核在代码中怎样协作
公开轻量版为几何残差使用Tukey鲁棒损失,并通过 ScaledLoss 按对应关系质量缩放。下面节选的是平面特征分支:SurfNormAnalyticCostFunction 构造点到面约束,residualCoefficient 调节这条对应关系的影响。几何质量筛选与鲁棒核作用不同:前者判断测量是否有可靠结构,后者限制较大残差的贡献。进一步看,即使所有残差都很小,沿走廊方向仍然可能不可观;因此鲁棒核不能替代上一节的方向退化分析。
cpp
// SuperOdom ros2: super_odometry/src/LidarProcess/LidarSlam.cpp
// addFeatureConstraints 中的平面特征分支,节选。
ceres::CostFunction* cost_function = new SurfNormAnalyticCostFunction(
constraint.Xvalue, constraint.NormDir, constraint.negative_OA_dot_norm);
auto* loss_function = new ceres::TukeyLoss(std::sqrt(3 * localMap.planeRes_));
auto* weight_function = new ceres::ScaledLoss(
loss_function, constraint.residualCoefficient, ceres::TAKE_OWNERSHIP);
problem.AddResidualBlock(cost_function, weight_function, pose_parameters);
论文的遮挡实验依次减少LiDAR侧向、前后向及整体视野,展示了逐轴权重变化和模态停用机制。侧向遮挡时,相关方向约由LiDAR占60%、视觉占40%;LiDAR完全遮挡时,视觉贡献升至约90%。600秒运行中,作者报告最大轨迹位置误差为0.184米。这些比例是该实验中的观测结果,不是所有场景的固定配方。 600秒是整段遮挡实验时长,也不能据此写成相机与LiDAR同时完全失效600秒仍保持同等精度。
6. 第四层:学习式IMU里程计如何渡过外部感知失效
6.1 学习速度能够减轻双积分误差,但不会消除物理限制
惯性测量单元直接测量角速度和比力,不直接测量位置或速度。使用传统积分得到位置时,加速度偏置会被积分两次:一个恒定的加速度误差 δ a \delta a δa 可产生约 1 2 δ a t 2 \frac{1}{2}\delta a t^2 21δat2 的位置误差。更麻烦的是姿态误差会让重力投影到错误方向,把很小的倾角误差变成持续的虚假加速度。学习式方法通过训练数据中的运动规律直接预测局部速度,给积分过程加入更强的运动先验;这会减轻典型轨迹的漂移,却不等于恢复了缺失的绝对位置观测。
从物理上说,如果不提供初始条件或运动先验,两段只差一个恒定速度的直线匀速运动可以产生相同的理想IMU测量。这说明学习模型的速度判断依赖训练经验、历史状态及初始化条件。烟雾不直接遮挡IMU,是它适合兜底的原因;碰撞饱和、振动、温漂、安装变化和未见过的运动模式,仍然会影响它。论文补充材料描述了外部感知完全失效时最长达到几分钟的持续运行能力,应理解成有限时段的退化容忍,而非长期纯惯性定位保证。
难点提示:坐在平稳行驶的列车里,不看窗外,仅凭身体感觉,很难判断列车是静止还是正在匀速前进。IMU也有类似限制。学习网络可以根据过去的启动、刹车与振动推测速度,但这种经验不能替代外部绝对参照,更不能保证任何未知运动都能被正确识别。
6.2 异构共享骨干与多头速度预测
论文使用超过100小时、覆盖八种平台的IMU数据,来源包括SubT-MRS、TartanDrive、IDOL、Blackbird与UZH无人机竞速数据集。预处理统一为机体前、左、上坐标轴,并重采样至200赫兹;网络使用1D ResNet、LSTM与多头输出,分别处理局部波形、时间依赖和不同平台的速度及不确定性。多头结构减少了不同运动模式直接竞争同一输出映射的问题,共享骨干则让轮式、腿式、空中和手持数据能够互相补充运动表征。
( v ^ t B , u ^ t , h t ) = f θ , k ( a t − N : t B , ω t − N : t B , h t − N ) , Σ ^ t = diag ( exp ( u ^ t ) ) . \left(\hat{\mathbf{v}}t^{B},\hat{\mathbf{u}}t,\mathbf{h}t\right) =f{\theta,k}\!\left(\mathbf{a}{t-N:t}^{B},\boldsymbol{\omega}{t-N:t}^{B},\mathbf{h}_{t-N}\right),\qquad \hat{\mathbf{\Sigma}}_t=\operatorname{diag}\!\left(\exp(\hat{\mathbf{u}}_t)\right). (v^tB,u^t,ht)=fθ,k(at−N:tB,ωt−N:tB,ht−N),Σ^t=diag(exp(u^t)).
其中 B B B 表示机体坐标系, k k k 表示平台相关输出头, h \mathbf{h} h 是循环状态, u ^ \hat{\mathbf{u}} u^ 表示对角方差的对数。这是按正文含义整理的符号表达。网络直接回归的是机体系速度及其不确定性,系统还需要姿态传播、速度到世界系的转换、积分和因子构造,才能形成位姿。多头模型面对全新平台时如何选择输出头,公开材料没有给出足够完整的通用部署规则,因此不能把"跨平台测试有效"解释成任意未知机器人无需设置即可工作。
6.3 体坐标系输入仍然需要重力与姿态处理
使用机体坐标系有助于避免网络过度依赖训练轨迹的世界朝向:同一辆车向东与向北加速,可以有相近的机体系波形。但"在体坐标系中学习"不意味着无需姿态。论文写出了偏置去除和重力补偿表达,同时在文字中使用了"raw acceleration"说法;理解实现时要明确到底输入原始比力还是去重力后的运动加速度。下面按论文的减重力约定整理公式, R W B \mathbf{R}_{WB} RWB 将机体转到世界, g W \mathbf{g}^{W} gW 是同约定下的重力项,姿态估计质量会影响输入质量。
a m o t i o n B = R W B ⊤ R W B ( a m B − b a ) − g W , ω c o r r B = ω m B − b g . \mathbf{a}^{B}{\mathrm{motion}} =\mathbf{R}{WB}^{\top}\!\left\\mathbf{R}_{WB}(\\mathbf{a}_{m}\^{B}-\\mathbf{b}_{a})-\\mathbf{g}\^{W}\\right,\qquad \boldsymbol{\omega}{\mathrm{corr}}^{B}=\boldsymbol{\omega}{m}^{B}-\mathbf{b}_{g}. amotionB=RWB⊤RWB(amB−ba)−gW,ωcorrB=ωmB−bg.
机体速度变成位置的一个简单离散解释是 p t + 1 W = p t W + R W B , t v ^ t B Δ t \mathbf{p}{t+1}^{W}=\mathbf{p}{t}^{W}+\mathbf{R}_{WB,t}\hat{\mathbf{v}}_t^{B}\Delta t pt+1W=ptW+RWB,tv^tBΔt。这意味着方向误差仍会进入位置积分,尤其是缺乏外部约束的航向漂移。补充材料的窗口描述也存在口径差异:正文实施细节明确写10秒数据、每秒200个样本、输入为 10 × 200 × 6 10\times200\times6 10×200×6,表S1则混列了10个样本、1秒窗口和20赫兹。讲解可按前者理解为10个一秒片段,但准确推理步长、延迟和隐藏状态策略仍应以完整训练代码为准。
6.4 数据增强与预训练的具体步骤
预训练的准备工作先从时间戳、轴向和单位一致性开始,再生成滑动窗口与对应运动标签,最后按平台把样本送入共享骨干及相关输出头。正文描述了绕不同轴旋转IMU数据、同步旋转真值的增强;补充实现进一步列出随机航向旋转、加速度计与陀螺仪的高斯白噪声,以及从均匀分布采样的偏置。旋转增强必须同时保持向量、姿态、重力约定与标签一致,噪声和偏置增强则模拟测量变化,帮助网络减少对单台设备波形的依赖。
补充材料给出的训练配置是PyTorch、Adam优化器、初始学习率0.0001,共训练50轮,在NVIDIA Tesla V100上约耗时20小时,按验证损失选择模型。训练先用MSE学习运动,再用NLL学习误差与方差的关系。这些设置让读者知道作者怎样组织实验,但仍不足以独立复现:噪声幅值、偏置范围、窗口重叠、各平台采样比例及训练验证划分同样影响结果。验证集还应按独立轨迹或采集任务划分,避免相邻重叠窗口泄漏;这一点属于复现时应检查的数据边界。
7. 训练目标:既学运动,也学何时不该自信
7.1 相对运动损失需要明确时间与坐标
论文先使用均方误差训练速度,再引入概率损失估计不确定性。其网页中的相对MSE公式缺少明确平方或范数,索引也不足以直接实现。这里要把"窗口内累计运动误差"理解成训练意图,不能逐字符照抄。下式是用于解释的窗口位移损失: Δ p s ∗ \Delta\mathbf{p}s^{\ast} Δps∗ 是标签位移, R B s B j \mathbf{R}{B_sB_j} RBsBj 把第 j j j 时刻的机体速度转到窗口起点坐标, Δ t j \Delta t_j Δtj 是采样间隔。这个版本补足了坐标与量纲,不是声称找到了作者未公开的原始损失实现。
L r e l = 1 S ∑ s = 1 S ∥ ∑ j ∈ W s R B s B j v ^ j B j Δ t j − Δ p s ∗ ∥ 2 2 . \mathcal{L}{\mathrm{rel}}= \frac{1}{S}\sum{s=1}^{S}\left\| \sum_{j\in\mathcal{W}s}\mathbf{R}{B_sB_j}\hat{\mathbf{v}}_j^{B_j}\Delta t_j -\Delta\mathbf{p}_s^{\ast}\right\|_2^2. Lrel=S1s=1∑S j∈Ws∑RBsBjv^jBjΔtj−Δps∗ 22.
不能在机体持续转弯时直接相加不同时间的机体系速度,除非损失明确采用另一种局部速度定义与监督方式。举例说,机器人前半段朝北前进、后半段朝东前进,两次"机体向前"的速度在世界中并不同向;先转到共同参考系再累计,才对应真实位移。核心问题在于,模型输入、标签、损失和融合先验必须使用兼容的坐标与时间约定。对机器人学习任务而言,这些约定错误往往比换网络骨干产生更大的影响。