5. 标定¶
5.1 为什么要单独标定¶
tracker 的读数同时取决于两件事:它装在肢体上的什么位置、什么朝向(安装参数),以及肢体本身怎么动(关节姿态)。如果两者一起拟合,安装上的误差会被当成姿态误差吸收掉。因此每次佩戴后,先用一段规定动作单独解出体型、尺度和五个 tracker 的安装参数,之后的任务录制都沿用这份结果。
标定结果保存为 subject_profile.json,包括:
- SMPL-X 体型参数
betas(10 维)和尺度scale; - 五个 tracker 相对各自关节的安装平移和旋转;
- 身体尺寸、转身和步态的个人参考(来自第 16–17 段),以及各 tracker 的残差。
5.2 什么时候要重新标定¶
- 换了采集者;
- 任意一个 tracker 拆下重装,或绑带明显滑动;
- 换了手套或手背底座。
只要安装没变,同一份标定可以跨天、跨任务使用。换人或重新佩戴都不需要重新训练网络,网络的输入已经去掉了安装参数的影响。
5.3 标定动作¶
整套动作共 17 段,约 144 秒。静态姿势每个至少保持 3 秒;动态动作要慢、连贯、幅度适中。采集者跟着下面的三视角参考视频做(工具包中的 assets/calibration_protocol_reference.mp4)。

参考动作由 SMPL-X 生成,图中数字是该姿势在参考动作中的时刻。左右均指佩戴者自己的左右,画面没有镜像。
| 段 | 时长 | 动作 | 用于求解 |
|---|---|---|---|
| 01 | 7 s | 自然站立,脚尖朝前,双臂下垂,目视前方 | 地面、身高、初始朝向 |
| 02 | 9 s | 身体不动,头缓慢左转、右转、低头、抬头,每个方向停 1 秒 | 头部安装旋转 |
| 03 | 7 s | A 字姿势:双臂向下外展约 45°,手心向下 | 肩宽、上臂 |
| 04 | 7 s | T 字姿势:双臂水平侧举,伸直肘,手心向下 | 臂展、肩到腕的长度 |
| 05 | 7 s | 双臂向前平举,伸直肘,手心向下 | 手背 tracker 的位置和朝向 |
| 06 | 8 s | 双臂侧举并翻掌向上,按右、左、右、左依次屈肘 | 上臂、前臂长度,手背安装参数 |
| 07 | 8 s | 保持前平举,手腕依次掌心朝下、翻转、内旋、外旋 | 手背 tracker 的安装旋转 |
| 08 | 8 s | 浅蹲两次,上身尽量直,脚不动 | 髋、膝、踝的长度,地面 |
| 09 | 7 s | 抬左腿再放下,做两次,身体不侧倾 | 左踝安装参数 |
| 10 | 7 s | 抬右腿再放下,做两次 | 右踝安装参数 |
| 11 | 7 s | 原地先踮脚,再翘脚尖 | 踝部 tracker 的安装旋转 |
| 12 | 7 s | 双手前举,五指张开、并拢 | 手掌尺度、手套零位 |
| 13 | 7 s | 慢慢握拳再完全张开,做两次 | 手指弯曲的尺度和零位 |
| 14 | 9 s | 拇指依次碰食指、中指、无名指、小指,再张开 | 对掌、捏合 |
| 15 | 9 s | 食指、中指、无名指、小指依次完全弯曲、伸直 | 每根手指的映射 |
| 16 | 16 s | 小碎步原地转身:先左转 180° 再转回,然后右转 180° 再转回,头和身体一起转 | 朝向、转身连续性、左右与前后检查 |
| 17 | 14 s | 面朝前方,向前走两步,再后退两步回到原位 | 步态、骨盆平移、地面接触检查 |
录制要求:
- 地面平整坚硬,用胶带标出两只脚的站位,脚尖朝同一方向。开头的站位决定了世界坐标里的"左"和"前"(第 11.1 节)。
- 开机后静置片刻,确认五个 tracker 在同一个坐标系里,没有跳变。
- 开始动作前先站立 3 秒。
- 标定和之后的任务录制过程中,tracker 都不能拆装或挪动。
第 16–17 段用来检查整段重建并提取个人的转身和步态参考,不参与体型和安装参数的求解:转身和走路时骨盆一直在动,当成静态姿势会把这些参数解偏。
5.4 运行标定¶
在工具包根目录下运行,CPU 即可:
PYTHONPATH=src python -m five_tracker_smplx.cli calibrate-subject \
--data <同一人、同一次佩戴的标定录制目录> \
--height <身高(米)> --armspan <臂展(米)> \
--output-dir $WORK/profiles/<名称> \
--body-model-path models/smplx \
--vposer-path models/vposer/V02_05 \
--motion-cache assets/calibration_motion_vposer_mano.npz \
--iterations 1100 --optimized-betas 5 --device cpu
- 动作对齐是自动的。 第 01–11 段靠五个 tracker 的位置和旋转识别,第 12–15 段再结合手套的关节运动,第 16–17 段靠头和双踝的转动和位移。每条录制会输出
protocol_alignment.json,记录各段边界和置信度。自动对齐失败时,可以手工标注段边界(*_manual_alignment.json)。 - 体型先验(可选)。
--smplx-prior <npz>用视频估计出的 SMPL-X 体型(例如 GVHMR 的结果)作为先验,权重默认 0.18。不加先验时,安装参数基本不变(相差几毫米),体型和尺度会有差别。 - 求解方式。 每个 tracker 的安装平移和旋转整段只解一份。体型只放开前几个分量,并以身高和臂展作为强约束:只靠五个 tracker 自由求全部 10 个分量是解不出来的。骨盆到颈部相对重力的倾斜只作软约束。
输出目录里是 subject_profile.json 和验收页面 subject_calibration.html。验收通过后,把 subject_profile.json 复制为 $WORK/profiles/<batch>.json,第 7 章的处理会用到它。
5.5 验收¶
打开 subject_calibration.html,逐项检查:
- 01–17 段的顺序和边界正确;
- 转头时躯干不跟着转;屈肘、手腕、浅蹲、抬腿和踝部动作自然,左右没有对调;
- 静态段双脚平放、不滑;转身由交替的小步完成;行走是前进两步、后退两步,共 4 次落脚;
- 骨盆没有异常摆动,相邻帧之间没有跳变;
- 静态段各 tracker 的残差平稳,不随动作逐渐变大。
某个 tracker 的残差长时间超过 3–4 cm 时,先检查绑带是否滑动、角色是否分配正确,再检查坐标系。
5.6 每条录制用哪份标定¶
标定跟着"人 + 这次佩戴"走,和设备、任务无关。处理时把录制分组(第 7.3 节):一组只包含同一个人、同一次佩戴的录制,整组使用这次佩戴的标定。
- 同一套设备换人佩戴,就是新的一组,需要新标定;
- 每条录制由谁、在哪次佩戴下完成,要在采集记录里写清楚;
- 记录缺失时,可以看站立时头部 tracker 比脚踝 tracker 高出多少。这个高度因人而异,差几厘米就能区分,和各份标定录制里的值比较即可。
用错标定的代价很明显:同一条录制,换成别人的标定后残差从 62 mm 升到 80 mm。