Skip to content

Phase -1: 项目启动与数据探索

状态: ✅ 已完成 完成时间: 2025-12-26 之前 目标: 理解数据集结构,评估可行性,制定验证计划


🎯 项目背景

为什么要做这个项目?

问题: 高尔夫教练系统(如 Sportsbox AI)只能告诉用户"你做错了",但无法解释"为什么错了"。

原因: 现有系统只使用:

  • 📹 Vision (3D 骨架追踪)
  • 📱 IMU (加速度/角速度)

缺失: 肌肉激活数据 (EMG)

我们的方案: Movement Chain AI = Vision + IMU + EMG

  • 能检测因果关系: "你挥杆无力是因为核心肌肉未激活"
  • 能检测运动链倒置: "你的手臂比核心先发力,违反了动力链原理"

📊 数据集选择

为什么选择 Jump Data?

在没有硬件的情况下,我们需要找到:

  1. ✅ 包含 Vision + IMU + EMG 三模态数据
  2. ✅ 公开可下载
  3. ✅ 数据质量高,有标注
  4. ✅ 动作简单,容易验证

最终选择: Comprehensive Kinetic-EMG Dataset

包含:

  • 33 个 Marker 点 (128 Hz)
  • 29 维 IMU 特征 (240 Hz)
  • 9 个 EMG 通道 (2048 Hz)
  • 13 个动作类型: 跳跃、行走、跑步、深蹲等

🔍 初期探索阶段

Step 1: 数据可访问性验证

问题: 能否下载并加载数据?

bash
# 下载数据集
wget https://springernature.figshare.com/.../Subj04.zip
unzip Subj04.zip

结果: ✅ 数据集大小 ~500 MB,包含 13 个 .mat 文件

Step 2: 数据结构探索

问题: .mat 文件内部结构是什么?

创建了 scripts/explore_mat_structure.py:

python
import scipy.io

mat_data = scipy.io.loadmat('Subj04_jump.mat')
# 发现: Datastr[0,0]['field'][0,0]['data']

发现:

  • MATLAB 嵌套结构非常深
  • 需要递归访问: Datastr[0,0]['IMU'][0,0]['IMUData']
  • 每个模态有独立的采样率字段

详见: Phase 1: 数据加载层验证

Step 3: 数据完整性检查

问题: 数据是否完整?有缺失吗?

python
# 检查 Marker 数据
marker_data = datastr['Marker'][0,0]['MarkerData']  # (33, 3, N)
nan_count = np.isnan(marker_data).sum()
print(f"NaN markers: {nan_count / marker_data.size * 100:.1f}%")

结果:

  • Marker: ~5-10% NaN (遮挡导致)
  • IMU: 0% NaN
  • EMG: 0% NaN

处理方案: 使用 np.nanmean() 和插值处理缺失值

Step 4: 时间同步验证

问题: 三个模态的时间是否对齐?

方法: 检测同一事件 (Impact/着陆) 在三个模态中的时间戳

python
# IMU: 加速度峰值
imu_impact_time = detect_impact_from_imu(imu_data, imu_rate)

# EMG: 肌肉激活峰值
emg_impact_time = detect_impact_from_emg(emg_data, emg_rate)

# Marker: 质心最低点
marker_impact_time = detect_impact_from_marker(marker_data, marker_rate)

# 计算时间差
time_diff = abs(imu_impact_time - marker_impact_time)

结果: 92.3% 的试次时间差 <50ms,数据集时间同步良好

详见: Phase 3: 时间同步验证


🎓 关键发现

1. 数据集高质量

优点:

  • ✅ 三模态数据完整,采样率高
  • ✅ 时间同步精度高 (<50ms)
  • ✅ 包含多种动作类型,可验证通用性
  • ✅ 有标注信息 (虽然我们没有使用)

缺点:

  • ⚠️ 只有一个受试者 (Subj04)
  • ⚠️ 动作类型不包括高尔夫挥杆 (但原理通用)

2. 运动链理论可验证

通过 EMG 数据,我们可以检测:

  • 肌肉激活顺序: Lower → Core → Upper
  • 激活时间差: 正常应为 50-200ms
  • 倒置运动链: 如果 Upper 先于 Core 激活

Phase 0 验证: 在最差案例 (Subj04_lunge) 中,成功检测到运动链倒置

详见: Phase 0: 证明核心价值

3. 可扩展性强

虽然验证使用的是跳跃数据,但架构设计支持:

  • 高尔夫挥杆
  • 棒球投球
  • 网球发球
  • 任何需要动力链分析的运动

原因: 动力链理论是通用的生物力学原理


📋 制定验证计划

基于初期探索,我们制定了 6 个阶段的验证计划:

阶段目标关键问题
Phase 0证明核心价值EMG 能否检测运动链倒置?
Phase 1数据加载能否正确加载三模态数据?
Phase 2特征提取能否提取 12 个关键指标?
Phase 3时间同步三模态数据是否对齐?
Phase 4可视化能否同步展示三模态?
Phase 5规则引擎规则逻辑是否正确?

验证原则:

  1. 由简到繁: 先验证核心价值,再完善细节
  2. 快速失败: 如果核心假设错误,尽早发现
  3. 文档优先: 每个阶段都有完整文档
  4. 可复现: 所有代码可独立运行

🛠️ 技术栈选择

数据处理

  • Python 3.11: 主力语言
  • NumPy: 数组操作
  • SciPy: .mat 文件加载,信号处理
  • Matplotlib: 静态可视化

可视化

  • Rerun.io: 多模态时间序列可视化
    • 为什么不用 matplotlib? 需要同步播放三模态
    • 为什么不用 Plotly? 3D 骨架动画性能不好

文档

  • VitePress: 静态文档网站
    • Markdown 友好
    • 支持代码高亮
    • 可嵌入图表

📦 交付物

文件描述
scripts/explore_mat_structure.py数据结构探索脚本
scripts/load_kinetic_emg_dataset.py核心数据加载器
data/comprehensive-kinetic-emg/数据集存储位置 (gitignored)

🚀 后续工作

Phase -1 完成后,我们进入:

  1. Phase 0: 证明 EMG 能检测运动链倒置 (核心价值验证)
  2. Phase 1-5: 完整数据管线验证

查看 整体验证计划 了解详细路线图。


Phase -1 完成

下一步: Phase 0: 证明核心价值