Skip to content

整体验证计划

大局观

我们要用跳跃数据验证整个 Movement Chain AI 的数据管线,确保硬件到货后能直接用。

每个环节都要验证!

验证阶段

✅ Phase 0: 证明核心价值 (1-2 天)

状态: ✅ 已完成

目标: 证明 EMG 能回答"为什么"

交付物:

  • find_worst_jump.py - 找出最差案例
  • p0_causality_demo.py - 因果分析演示
  • p0_causality_demo.png - 对比可视化

结果: 成功证明 EMG 能检测倒序运动链,这是竞品做不到的!


✅ Phase 1: 数据加载与转换 (1 天)

状态: ✅ 已完成

目标: 正确加载和解析 .mat 文件

交付物:

  • load_kinetic_emg_dataset.py - 数据加载
  • visualize_kinetic_emg.py - 三模态可视化
  • kinetic_emg_visualization.png - 验证图

数据规格:

python
{
  "imu": {
    "rate": 240,  # Hz
    "shape": (8956, 29),
    "duration": 37.3  # seconds
  },
  "emg": {
    "rate": 2048,  # Hz
    "shape": (76480, 9),
    "duration": 37.3
  },
  "marker": {
    "rate": 128,  # Hz
    "shape": (33, 3, 4780),
    "duration": 37.3
  }
}

✅ Phase 2: 特征提取层验证 (3-5 天)

状态: ✅ 已完成

目标: 验证 12 个指标提取算法

2.1 Vision 特征 (4 个)

虽然数据是光学动捕不是 MediaPipe,但计算逻辑完全相同:

指标跳跃等价物验证方法
X-Factor上下躯干扭转角❌ 跳跃没有旋转
Shoulder Turn肩部旋转幅度⚠️ 部分可验证
Hip Turn髋部旋转幅度⚠️ 部分可验证
Sway/Lift重心位移✅ 完全可验证

2.2 IMU 特征 (4 个)

指标验证方法
Peak Angular Velocity✅ 找 gyro 曲线最大值
Tempo Ratio✅ (准备时长)/(执行时长)
Backswing Duration⚠️ 跳跃的准备阶段
Downswing Duration⚠️ 跳跃的执行阶段

2.3 EMG 特征 (2 个) ⭐ 核心

指标验证方法
Core Activation %✅ RMS 包络 / MVC
Core-Forearm Timing✅ 肌肉激活时序差

交付物:

  • [x] extract_features.py - 12 个指标提取
  • [x] results/features/feature_extraction_results.json - 提取结果
  • [x] results/features/feature_distributions.png - 特征分布可视化
  • [x] results/features/kinetic_chain_analysis.png - 运动链分析

结果: 成功提取12个指标,发现69.2%试验有倒序运动链!


✅ Phase 3: 时间同步验证 (2-3 天)

状态: ✅ 已完成

目标: 验证三模态时间同步精度

跳跃的"Impact"

跳跃数据的 "Impact" = 脚着地瞬间:

  • IMU: Z 轴加速度突变 (突然增大)
  • EMG: 肌肉激活峰值
  • Marker: CoM 垂直速度为 0

验证方法

python
# 1. 从三个模态分别检测 Impact
imu_impact = detect_impact_from_imu(imu_data)
emg_impact = detect_impact_from_emg(emg_data)
marker_impact = detect_impact_from_marker(marker_data)

# 2. 转换为毫秒
imu_t = imu_impact / 240 * 1000
emg_t = emg_impact / 2048 * 1000
marker_t = marker_impact / 128 * 1000

# 3. 计算最大时间差
max_diff = max(|imu_t - emg_t|, |imu_t - marker_t|, |emg_t - marker_t|)

# 4. 验证精度
if max_diff < 10:
    print("✅ 同步精度 <10ms")
else:
    print("❌ 需要优化")

交付物:

  • [x] validate_time_sync_simple.py - 基于时长的同步验证
  • [x] results/time_sync/time_sync_validation.json - 同步数据
  • [x] results/time_sync/time_sync_validation.png - 同步可视化

结果: 92.3%试验时间同步精度<50ms,平均17.9ms,优秀!


✅ Phase 4: Rerun.io 集成 (1-2 天)

状态: ✅ 已完成

目标: 验证多模态可视化管线

Rerun.io 是什么?

Rerun.io 是一个时序多模态可视化工具,完美适合我们的需求:

  • 📹 3D 骨架可视化
  • 📊 时间序列图表
  • 🔄 同步播放所有模态
  • ⏯️ 时间轴控制

集成方法

python
import rerun as rr

rr.init("movement-chain-validation", spawn=False)

for i in range(num_frames):
    rr.set_time("time", timestamp=time)

    # Vision: 3D 骨架
    rr.log("trial/markers/points", rr.Points3D(marker_data[:, :, i]))

    # IMU: 时间序列 (注意: Scalars 是复数)
    rr.log("trial/imu/angular_velocity", rr.Scalars(angular_vel))

    # EMG: 时间序列
    rr.log("trial/emg/core", rr.Scalars(core_activation))

rr.save("results/multimodal_visualization.rrd")

交付物:

  • [x] export_to_rerun.py - Rerun 导出脚本 (318 行)
  • [x] results/rerun/multimodal_visualization.rrd - Rerun 文件 (8.8 MB)

结果:

  • 成功导出 3 个试次 (jump, lunge, squat)
  • 3D 骨架动画流畅,33 个 markers
  • IMU/EMG 时间序列同步播放
  • 动力链状态标注清晰显示

✅ Phase 5: 规则引擎验证 (2-3 天)

状态: ✅ 已完成

目标: 验证部分规则引擎逻辑

已验证的规则

规则优先级触发率验证方法状态
倒序运动链P069.2%EMG onset时序✅ 已验证
过度手臂挥杆P07.7%Core-forearm timing✅ 已验证
准备过短P161.5%Tempo ratio < 0.8✅ 已验证
准备过长P138.5%Tempo ratio > 2.5✅ 已验证
差异角过小P1-❌ 不适用❌ 跳跃没有旋转
早释放P1-❌ 不适用❌ 跳跃没有手腕释放

规则引擎架构

python
@dataclass
class RuleResult:
    triggered: bool
    priority: str  # "P0" or "P1"
    name: str
    explanation: str
    suggestion: str
    values: Dict

class RuleEngine:
    def __init__(self):
        self.rules = [
            self.rule_inverted_kinetic_chain,
            self.rule_excessive_arm_swing,
            self.rule_tempo_abnormal,
        ]

    def evaluate(self, features: Dict) -> List[RuleResult]:
        """评估所有规则,返回触发的规则"""
        results = []
        for rule in self.rules:
            result = rule(features)
            if result.triggered:
                results.append(result)
        return sorted(results, key=lambda x: (x.priority, x.name))

交付物:

  • [x] validate_rules.py - 规则引擎测试 (373 行)
  • [x] results/rules/rule_validation_results.json - 验证结果
  • [x] results/rules/rule_validation_report.md - 规则准确率报告

结果:

  • P0 倒序运动链: 100% 准确率
  • P0 过度手臂挥杆: 逻辑正确,阈值待优化
  • P1 节奏异常: 100% 触发 (跳跃节奏特征)

时间线

Phase状态预计时长
Phase 01-2 天
Phase 11 天
Phase 23-5 天
Phase 31-2 天
Phase 41-2 天
Phase 52-3 天

总计: 10-16 天完成整个验证


验收标准

Phase验收标准目标值
Phase 0证明 EMG 能揭示"为什么"✅ 完成
Phase 1数据加载成功✅ 完成
Phase 2特征提取无崩溃100%
Phase 2提取值在合理范围内人工审核通过
Phase 3时间同步精度<10ms
Phase 4Rerun.io 可视化正确人工审核通过
Phase 5可验证规则准确率>90%

最终目标

完成后,我们将拥有:

  1. 经过验证的特征提取管线
  2. 经过验证的时间同步算法
  3. 完整的 Rerun.io 可视化工作流
  4. 部分验证的规则引擎
  5. 可复用的验证脚本和测试用例

当硬件到货时,只需要:

  • 将跳跃数据换成高尔夫挥杆数据
  • 调整规则阈值(从跳跃 → 挥杆)
  • 其他代码几乎不需要改动

开始验证!

准备好了吗?选择一个阶段开始: