智涌飞轮

具身数据 · 采集 × 效用计量 × 独立验证合作洽谈工作台登录

EGO 数据 301 维语义破译(映射层第一步 · 完成)

2026-09-05 · 结论改变映射层设计前提:301 维不是"神秘混合向量", 而是头部 + 双手共 43 个刚体的完整六维位姿,语义干净且有几何结构。 证据:本仓转换器源码 + 转换产物数值验证。

一、破译结论

来源链:scripts/mcap2lerobot_convert.py:15head(7)+lhand(147)+rhand(147)) → scripts/mcap2lerobot.py:34 _flatten[pos(xyz), quat(wxyz)] × N → 7N) → mcap 原始 schema pose.HeadFrame / pose.LeftHandFrame / pose.RightHandFrame

维度 语义
head = [0:7] 7 头部 1 组位姿:pos(x,y,z) + quat(w,x,y,z)
lhand = [7:154] 147 左手 21 组刚体位姿(关节/骨架点),各组 [pos+quat]×7 维
rhand = [154:301] 147 右手同上 21 组

21 组/手与业界手部模型(如 MediaPipe/MANO 21 关节)数量一致; 组间骨架点序对应关系未逐一考证(哪组是腕、哪组是指尖)。

二、数值验证(shard2/0953ab4d,4979 帧)

三、坐标系定轴(2026-09-5 晚补充:已完成)

结论:world 系为 z-up——z 竖直、y 水平主移动轴、x 水平次轴;z=0 过初始头部高度。

证据链(样本 shard2/0953ab4d,4980 帧;另一条 000623c1 佐证):

  1. 位置统计:头部 pos 三轴 span = x 1.12 / y 2.39 / z 0.89 米。y 波动 2.4m 排除 y 竖直(头不可能升降 2.4m);z 波动 0.89m 与采集员弯腰/蹲起幅度吻合;
  2. 姿态统计(判据最硬):全帧计算头局部 up 向量在 world 三轴分量, up·z 中位 +0.755(≈低头 41°,采集员看手/桌面的常态俯角), 显著高于 up·x(0.46)/up·y(-0.47)——头 up 常驻对齐 world z,z 竖直成立;
  3. 原点佐证:两条轨迹头首帧 z 均 ≈0(-0.001 / +0.01)——z=0 平面过 初始头部高度,为场景标定锚点;
  4. 附带验证:states.npy 第 0 帧 head 段与 raw 首帧 HeadFrame 逐位一致 (1.007, 2.027, 0.01)——转换无损再证。

三b、诚实边界(更新后余项)

  1. ~~坐标系轴向未定~~ → 已定(z-up,见上);原点在场景中的物理锚定 方式(初始头位?标定板?)未考证——映射层只需轴向,不需原点语义;
  2. ~~21 组点序 ↔ 解剖学关节名映射未考证~~ → 已考证(见三c)
  3. 验证样本 n=1 条定轴 + n=1 条佐证;200 条批次完成后应跨线抽验 (body/head/EgoPro 三线 schema 与轴向一致性)。

三c、21 点序考证(2026-09-05 深夜:完成)

结论:每手 21 组 = 拇指链 {0,1,2,3} + 四指平行链 + 腕 pt20, 与 MediaPipe 惯例(pt0=腕+每指[根→尖]连续 4 点)完全不同—— 幸未套用,用数据定案。

点序映射表(考证结果)

手指 关节索引(每组内顺序 = [TIP, DIP, PIP, MCP],尖→根)
拇指 0, 1, 2, 3
食指 4, 8, 12, 16
中指 5, 9, 13, 17
无名指 6, 10, 14, 18
小指 7, 11, 15, 19
腕/掌根 20

(即四指按"层 × 4 + 指序"跨步排列,拇指独占连续 4 点,腕在最末。)

证据链(shard2/0953ab4d,4979 帧;左右手同构互证)

  1. 原始消息无名字pose.LeftHandFrame 的 transforms 每条仅 pos+quat, 无 child_frame_id 字段(探针 runtime/probe_hand_seq.py 实测)——名字 路径不通,转纯数据考证;
  2. 中位距离矩阵(运动不变量,核心证据):逐帧成对距离取中位, 右手矩阵呈现四条平行链(食 {4,8,12,16}=1.5/1.8/1.5cm、中 {5,9,13,17}、 无名 {6,10,14,18}、小 {7,11,15,19})+拇指链 {0,1,2,3}=3.4/2.8/2.5cm; 链内间距均匀(视觉估计平滑特征),跨指同层间距 1.6-3.1cm=横弓;
  3. 链端方向判定:pt16/17/18/19(四指链的"16"端)与 pt3 离 pt20 仅 1.9-5.4cm、而 pt0/4/5/6/7 离 pt20 达 5.0-9.5cm——离腕近端=MCP, 即每组内顺序为尖→根 [TIP,DIP,PIP,MCP];pt0(拇指尖)离 pt4(食指尖) 11.5cm=全矩阵最大值(两指尖最远对),互证;
  4. 指长排序:中指 6.7cm > 无名指 5.9 > 小指 5.3 > 食指 4.8—— 中>无>小 符合解剖;拇指链总长 8.7cm(含掌骨段)合理;
  5. MST 分支结构runtime/probe_hand_geom.py):右手三主链全部 解剖学自洽(腕→MCP 弓→DIP 弓、握持态 TIP 弓、拇指链挂食指 MCP), 且左右手公共子序列一致。

诚实边界(点序部分)

对映射层 v0 的直接落点 → ego2libero.py v0 已实现并跑通

scripts/ego2libero.py(映射层④,独立成段不动转换器)在 shard2/0953ab4d (4979 帧)实测通过:state=[掌心pos3, 掌系轴角3, 开度1],action=[dpos3, 相对旋转3, d开度]。实测:位移 p50=3.8mm/帧(无超限)、rot delta p50=0.083rad (主体健康,>0.5rad 尾部 4.9% 集中在坏帧邻域)、坏帧 106 帧插值修复。

实现中发现的两条数据级发现(比脚本本身更有价值)

  1. 拇指自由度冻结(估计器病):拇指尖与食指尖全轨迹最近 8.4cm / 最远 11.9cm(带宽 ±15%),TIP-MCP 恒定 7.5-8.7cm——拇指关节在估计 输出中近乎刚性。拇-食尖距作夹爪开度无信号,v0 改用四指 TIP-MCP 平均距离(手张开度代理,span 1.2cm 有信号)。任何下游应用设计拇指 精细动作相关特征前必须先验此限制。
  2. 掌形系统性压扁:腕→MCP 质心 2.2cm(真实掌长 ~9cm)、横弓 3.5cm (真实 ~8cm)、两者夹角中位 26°(真实近 90°)——估计器把手"压扁"了。 后果:掌系法向(绕掌轴旋转分量)噪声大,action 角增量维可信度受限。 QC 新维度候选:掌形保真度(z/横弓/夹角 sin 三元组)可作 C 层 判据候选,下次 QC 修订时吸收进判据库口径。

诚实标注(映射层全局):LIBERO 夹爪极性/量纲最终对齐需 GPU 窗口实测; 语义损失大(五指→1 维),首测 Δpp 可能不显著——不显著也是读数。

四、对映射层设计的三点影响

  1. 路径从"学降维"变"算几何":原假设"301 维→7 维需学习式降维"作废。 实际取单手关键点组(掌心或食指根)的 pos+quat → 末端位姿 pos(3)+rot(3), 指尖组与掌心组距离 → 夹爪开合(1),纯几何运算即可构造 LIBERO 7 维。
  2. 动作空间天然可得:转换产物 action(t)=state(t+1),相邻帧掌心位姿差分 即 7 维末端增量动作——无需额外标注。
  3. 保留升级空间:43 组完整位姿可支持双臂环境映射与头部视线推理 (头 quat→相机朝向),Isaac Lab 候选路线(ADR-0008)启用时语义零损失。

五、下一步(映射层 v0,无 GPU 顺序)

  1. ~~读 mcap TF 树定坐标系轴向~~ ✅(z-up,第三节);
  2. ~~考证 21 组点序 ↔ 关节名~~ ✅(映射表见三c);
  3. ~~写 ego2libero.py 跑通~~ ✅(v0 实测通过,见三c 落点段);
  4. 跨线 schema 抽验 + 全批次批量映射(200 条批次完成后);
  5. GPU 窗口:映射产物喂 π0.5 LIBERO 首测 Δpp(协议 v1 T 口径)。