Improving Global Motion Estimation in Sparse IMU-based Motion Capture with Physics
Tsinghua University
Improving Global Motion Estimation in Sparse IMU-based Motion Capture with Physics
一句话总结
只用 6 个 IMU,就通过”重力先验 + 3D 接触物理优化”把稀疏惯性动捕从被绑死在平地上的 2D 平移、且全局朝向长期漂移的困境中解放出来,实现了不受地面约束的真正 3D 全局运动重建,同时顺带估计出 3D 接触、接触力、关节力矩和交互代理面。
研究背景
基于稀疏惯性测量单元(IMU)的动作捕捉近年借助深度学习取得进展:仅在前臂、小腿、头、骨盆佩戴 6 个传感器,靠学到的人体姿态先验就能从稀疏、含噪的信号里恢复全身姿态。相比视觉方法,它不受遮挡与固定拍摄空间限制,也比 Xsens 这类密集阵列便宜、少侵入。
但真正的痛点在”全局 6 自由度运动”(全局平移 + 全局朝向)。局部姿态先验能对局部姿态去噪,却几乎帮不上全局运动:
- 全局平移:以往方法(如 PIP、PNP)用地面接触把人约束在一个 2D 地平面上,因此无法捕捉上楼、躺床这类真正的 3D 空间移动,尤其是竖直(z 方向)运动。
- 全局朝向:大多数方法直接依赖根关节 IMU 的朝向测量,长时间跟踪会累积漂移。
作者的判断是:数据驱动(学局部先验)无法有效对全局运动去噪,应该引入物理来解决。由此提出一个从物理视角设计的稀疏 IMU 动捕框架,既能做无约束 3D 空间平移估计、又能提升全局朝向精度,还顺带产出 3D 接触、接触力、关节力矩、代理面等物理量。
两个核心观察支撑整套方法:
- 接触可从运动反推:看到一个人向上走,我们自然假定脚下有台阶——因为支撑力必须存在以防跌倒,且支撑力更可能作用在静止的脚上。据此可以设计算法反推 3D 接触。
- 重力与局部姿态强相关:在重力对齐坐标系里,人绕重力轴的朝向(heading \(\theta\))与局部姿态无关,但反映身体倾斜的那部分朝向(\(\phi\))被局部姿态强约束。一个平躺的人不可能摆出走路的姿态。因此”根坐标系下的重力方向”是这部分朝向的可靠指示量。
方法
系统由三个模块串联:姿态估计器(估局部姿态与全局朝向)、平移估计器(估根速度与静止关节)、物理优化器(识别 3D 接触并做物理优化)。此外还有一套走步标定方法。
flowchart TD
IMU["6 IMU 测量<br/>加速度 / 角速度 / 朝向"] --> PE
subgraph PE["姿态估计器 (三级 LSTM)"]
direction TB
PL["P_L: 叶子关节位置<br/>+ 重力细化 g' "]
PA["P_A: 全关节位置<br/>+ 重力细化 g"]
RA["R_A: 身体姿态 θ (6D 旋转)"]
PL --> PA --> RA
end
PE -->|"姿态 θ, 去噪重力 g, 去噪 IMU x"| TE
subgraph TE["平移估计器 (LSTM O_V)"]
direction TB
VEL["根速度 v = v∥ + v⊥<br/>(沿/垂直重力分解)"]
STA["5 关节静止概率 s<br/>(双手/双脚/骨盆)"]
end
TE -->|"静止约束优化根速度 (Eq.4)"| PO
subgraph PO["物理优化器 (double-tracking)"]
direction TB
PRE["预跟踪: 允许根关节残余力<br/>(无接触, 空场景 + 火箭)"]
CON["接触估计: 选最小静止关节集<br/>用接触力解释残余力 (Eq.12)"]
RET["重跟踪: 用接触关节 + 接触力<br/>物理优化输出 (Eq.14)"]
PRE --> CON --> RET
end
PO --> OUT["世界坐标 3D 运动<br/>+ 3D 接触 / 接触力 / 关节力矩 / 代理面"]
关键设计一:重力感知的姿态估计
姿态估计器基于 PNP,核心改进是把重力信息织进网络。输入除了根相对 IMU 测量 \(\boldsymbol{x}''\),还加入根坐标系下的重力方向 \(\boldsymbol{g}''\),它由根 IMU 测得的全局朝向算出:
\[\boldsymbol{g}'' = (\boldsymbol{R}''_{root})^T \boldsymbol{g}_M\]
其中 \(\boldsymbol{g}_M\) 是世界坐标下的重力方向,上标撇号越多表示噪声越大。三级 LSTM(\(P_L\) 叶子关节位置、\(P_A\) 全关节位置、\(R_A\) 姿态)在每一级都额外输入重力方向、并让网络同时输出细化后的重力作为副产物,从而学到局部姿态与全局朝向的联合先验分布。
去噪的巧妙之处:重力在世界坐标下恒定,但换到不同的根坐标系里表现不同。通过对齐重力方向来反推、修正根坐标系朝向。每级根据细化后的重力更新全局朝向:
\[\boldsymbol{R}'_{root} = \boldsymbol{R}''_{root}\,\mathcal{R}\{\boldsymbol{g}' \to \boldsymbol{g}''\}\]
即用把 \(\boldsymbol{g}'\) 以最小角度旋到 \(\boldsymbol{g}''\) 的旋转矩阵去修正朝向,逐级把根朝向越修越准。消融显示:只输入不细化重力反而更差(原始重力太噪,网络用不好),细化后才拿到最佳结果。
关键设计二:重力感知的平移估计
平移估计器(一个 LSTM \(O_V\))输入去噪后的 IMU、重力、姿态 \(\boldsymbol{\theta}\) 及其前向运动学关节位置,输出:根速度沿重力方向与垂直重力方向的两个正交分量 \(\boldsymbol{v} = \boldsymbol{v}_{\parallel} + \boldsymbol{v}_{\perp}\)(沿重力分量只预测大小,方向已由重力给出),以及双手、双脚、骨盆 5 个关节的静止概率 \(\boldsymbol{s}\)。这种分解符合直觉:躺下的人即便姿态相同也不会像站着那样自由移动,而竖直方向的移动通常比水平移动受限更多。
随后沿用 TransPose 的静止约束优化根速度:
\[\min_{\tilde{\boldsymbol{v}}^t} \|\tilde{\boldsymbol{v}}^t - \boldsymbol{v}^t\|^2 + \sum_i s_i \frac{1}{\Delta t^2}\|\mathrm{FK}_i(\boldsymbol{\theta}^t, \tilde{\boldsymbol{v}}^t \Delta t) - \mathrm{FK}_i(\boldsymbol{\theta}^{t-1})\|^2\]
即在”尽量让静止关节保持不动”和”尽量贴近估计速度”之间求折中。
关键设计三:3D 接触与 double-tracking 物理优化
以往物理优化假设平地,无法处理上楼,也无法处理坐下这类髋部接触(只能给根关节施加不物理的巨大残余力来维持平衡)。作者用 double-tracking 把它扩展到 3D 空间。
物理模型是力矩控制的浮动基座角色,骨架与自由度和 SMPL 一致,质量/质心/惯量按密度 1000 kg/m³ 从 SMPL 平均体型提取。不含接触力时遵循运动方程:
\[\boldsymbol{\tau} = \boldsymbol{M}(\boldsymbol{q})\ddot{\boldsymbol{q}} + \boldsymbol{h}(\boldsymbol{q}, \dot{\boldsymbol{q}})\]
考虑接触力 \(\boldsymbol{\lambda}\) 时:
\[\boldsymbol{\tau} + \boldsymbol{J}^T\boldsymbol{\lambda} = \boldsymbol{M}(\boldsymbol{q})\ddot{\boldsymbol{q}} + \boldsymbol{h}(\boldsymbol{q}, \dot{\boldsymbol{q}})\]
三个阶段:
-
预跟踪:让物理角色在”空场景”里无接触地跟踪参考运动,允许根关节施加任意残余力(形象地说,给角色根部装了一个能提供任意外力的火箭)。用双 PD 控制器算出期望加速度,再解一个带正则的最小二乘求所需力矩 \(\boldsymbol{\tau}\)。真正关心的是力矩前 6 维 \(\boldsymbol{\tau}_{:6}\),即本该由物理接触解释的根关节残余力/力矩。
-
接触估计:先按规则(被判静止 + 上一帧接触或当前触地)标出接触关节,其余静止关节为候选。然后求解最小接触力去解释残余力:
\[\min_{\boldsymbol{\lambda}} \|(\boldsymbol{J}^T\boldsymbol{\lambda})_{:6} - \boldsymbol{\tau}_{:6}\|^2 + \beta_{\lambda}\|\boldsymbol{\lambda}\|^2, \quad \text{s.t. } \boldsymbol{\lambda} \in \text{friction cone}\]
脚和骨盆施加库仑摩擦锥约束(假设接触面法向朝重力反方向),手则一般不加(可抓握物体、允许任意外力)。若残余误差 \(\boldsymbol{e} = \boldsymbol{\tau}_{:6} - (\boldsymbol{J}^T\boldsymbol{\lambda})_{:6}\) 超过阈值,就按离地由近到远逐个加入候选接触关节重解——加入某关节使残余力下降过半才接受。这一步等价于”卸掉火箭,换成作用在被选接触关节上的力”。它按力来判接触:只是轻轻搭在台阶上、重心仍在另一只脚,则不算接触;一旦重心压上去,才被识别为维持平衡所必需的接触。
- 重跟踪:用估出的接触关节与接触力,把接触点向地面轻拉以防浮空/穿透,再解一个带接触力运动方程约束的优化(更大的力矩正则 \(\beta^*_{\tau} = 3\beta_{\tau}\)),得到驱动角色的力矩 \(\boldsymbol{\tau}^*\) 与加速度,最终积分更新并输出物理优化后的平移与姿态。
关键设计四:走步标定
传统标定要先脱下所有 IMU 摆同一朝向校相对漂移、再穿上摆 T-pose 定传感器到骨骼的旋转,两步繁琐易错。本方法只需向前迈一标准步:对每个 IMU 的全局加速度双重积分得到位移,配合零速更新(ZUPT)在结束站定时用零速观测修正积分误差;再借助”位移应水平(与重力正交)”的约束进一步校正。若各 IMU 因磁干扰产生朝向漂移,其轨迹会发散,通过把前五个 IMU 的轨迹对齐到第六个即可算出相对朝向误差 \(\boldsymbol{R}_i = \mathcal{R}\{\bar{\boldsymbol{p}}_i \to \bar{\boldsymbol{p}}_6\}\),同时定出全局外参旋转与传感器到骨骼旋转。一步走完,同时完成去漂移与定旋转。
实验结果
训练用合成 IMU 的 AMASS + 真实 IMU 的 DIP-IMU(先在 AMASS 训、再在 DIP-IMU 微调)。测试集包括 TotalCapture(两套标定:官方标定 IMU 朝向误差约 12.1°,DIP 标定约 8.6°)、DIP-IMU、Xsens 系列(AnDy/CIP/UNIPD)、以及大规模长时序 Nymeria。系统在 i9-13900KF + RTX 4090 上实时 120 fps 运行,实机 demo 用 Noitom Lab 传感器以 60 fps 跑。对比方法有 DIP、TransPose、TIP、PIP、PNP、DynaIP(三个版本)。
姿态精度上,方法在 TotalCapture 与 DIP-IMU 上总体领先。以 TotalCapture 官方标定为例(局部 / 全局 SIP 误差、角度误差、位置误差 cm、Mesh 误差):
| 方法 | 局部 SIP | 局部 Pos | 全局 SIP | 全局 Pos | Root Jitter | Joint Jitter |
|---|---|---|---|---|---|---|
| TransPose | 18.12 | 7.10 | 17.72 | 7.27 | 1.77 | 1.95 |
| TIP | 15.62 | 6.76 | 17.26 | 9.06 | 1.24 | 1.74 |
| PIP | 14.52 | 6.22 | 14.11 | 6.61 | 0.12 | 0.21 |
| PNP | 11.35 | 4.89 | 13.95 | 7.37 | 0.16 | 0.27 |
| DynaIP-AD | 26.12 | 7.60 | 25.43 | 7.72 | - | - |
| Ours | 10.17 | 4.31 | 10.87 | 4.31 | 0.21 | 0.37 |
全局指标提升尤为显著(官方标定下全局 SIP 从 PNP 的 13.95 降到 10.87,全局位置误差从 7.37 降到 4.31 cm),说明重力细化对削减全局朝向误差很有效。DIP-IMU 上 DynaIP 的角度误差略优,但其跨数据集泛化明显更差。Jitter 与 PIP、PNP 相当,远好于不含物理的 TransPose、TIP。
平移方面,TotalCapture 是平地录制、TransPose/PIP/PNP 都吃平地假设,而本方法不依赖平面假设却仍取得更低漂移,官方标定下噪声更大时优势更明显。Xsens 数据(Tab.2)上,AnDy 平移漂移从 PNP 的 4.04% 降到 3.30%,CIP 从 5.63% 降到 4.80%,全局位置误差全面更低。Nymeria(Tab.3)长时序上全局位置误差从 PNP 的 8.03 cm 降到 7.01 cm。
消融(Tab.5,TotalCapture 平移漂移,OC 官方标定 / DC DIP 标定):
| 配置 | OC 漂移 | DC 漂移 |
|---|---|---|
| w/o Physics | 7.51% | 4.35% |
| w/o Contact | 6.09% | 4.36% |
| Ours | 4.68% | 3.74% |
去掉物理优化或接触估计都会让漂移变大,官方标定(噪声大)下受益最明显。姿态消融(Tab.4)显示:只输入不细化重力(w/o Grav Recon)反而比完全不用重力(w/o Grav Input)更差,原始重力太噪,细化后才最优。
长时序抗漂移(Tab.6,Nymeria 20 分钟户外羽毛球序列,全局关节位置误差 cm):三段(Period 1/2/3)本方法为 6.18 / 6.52 / 6.38,PNP 为 7.30 / 7.41 / 8.23——PNP 随时间增大而本方法无明显漂移。走步标定用户研究:100 次评测中走步标定被偏好 72%,T-pose 12%,16% 相当。
亮点与局限
亮点:
- 把”数据驱动局部先验”与”物理驱动全局约束”深度融合,抓住了稀疏 IMU 动捕最难啃的全局 6DOF 运动问题,思路清晰且对症。
- 重力先验的双向利用很巧:既用重力方向辅助局部姿态回归,又用局部姿态反过来对根 IMU 的全局朝向去噪,把长期朝向漂移压下去。
- double-tracking 用”残余力必须由接触力解释”来反推最小接触集,摆脱了平地假设,能处理上楼、坐下等真 3D 场景,还免费产出接触力、关节力矩、代理面等物理量,拓宽了 IMU 动捕的应用边界(机器人、HCI)。
- 走步标定把繁琐两步压成一步,工程实用性强。
局限(作者自陈):
- 缺 3D 空间运动数据:AMASS、DIP-IMU 里带高度变化的运动(如上楼)有限,影响竖直平移精度。
- 接触关节受限:只估双手、双脚、骨盆的静止概率,像头靠墙这类接触无法识别。
- 代理面与接触假设:基于力识别接触,滑动接触或极轻接触建模不准;假设代理面水平,倾斜面估不了;很小的高度变化(踩薄块)也难以捕捉。
- 多接触受力歧义:多接触时力分配本质多解,靠正则(最小力矩/接触力)软约束求”最省力”解,不总唯一。
延伸思考
- 全局朝向去噪的关键假设是”局部姿态与重力方向存在联合分布”,本质是把姿态先验从局部扩展到”局部姿态 + 倾斜朝向”的联合先验。这一思路是否可迁移到单目视觉动捕、或 VR 头手三点跟踪的下肢补全?GVHMR 已在视觉侧用重力感知世界坐标,本文反向把重力搬进根坐标系以获得 heading 不变性,两条路线的融合值得探索。
- 接触”按力判定”是个漂亮抽象,但也解释了它对轻接触/滑动接触的盲区。若把接触概率的数据先验与物理残余力反推做成端到端可微,是否能缓解阈值化规则带来的脆弱性?
- 竖直平移精度受限根源在训练数据缺乏高度变化运动,说明该方法目前更多靠物理约束”过滤”而非”生成”竖直运动。引入更多含台阶/攀爬的合成或真实 IMU 数据,或用可控运动生成补数据,可能是下一步高性价比的提升点。