一、已确认的 10 条需求
| # | 项 | 定稿 |
| 1 | 跑在哪 | 网站 3D 演示 + 真实样机 |
| 2 | 谁在跳 | 全部 15 滑车 / 30 叶片 |
| 3 | 自由度 | 叶面角 ±360° + 叶轴角 ±45° |
| 4 | 段数 | 5 段 |
| 5 | 配乐 | 配,音乐与时长我定(100 BPM) |
| 6 | 播放 | 自动连播 + 手动点选 |
| 7 | 安全约束 | 保留(真机风速 <0.1 m/s 才允许 DANCE) |
| 8 | 动作来源 | 先写死 5 段预设(编舞编辑器二期) |
| 9 | 交付 | 网页 + 下位机 danc 指令集 |
| 10 | 性能 | 手机 ≥30 fps,用简模 |
二、5 段舞蹈动作表
记号:i = 叶片序号 0–29,t = 段内时间(s),az = 叶面角,el = 叶轴角。全部为**开环正弦/线性**,下位机可分帧插值。
| 段 | 名称 | 时长 | az 函数 | el 函数 | 视觉 |
| 1 | 波浪 | 24 s | 25°·sin(2πt/8 − i·24°) | 0° | 沿轨道传播的波峰 |
| 2 | 开花 | 20 s | 0→90→0°(梯形,5s/5s/10s) | 45°·sin(πt/10) | 整体展开后收拢 |
| 3 | 交叉 | 24 s | (i 偶 ? +) 45°·sin(2πt/12) | ±30° 交替 | 奇偶反向摆动 |
| 4 | 旋涡 | 30 s | i·12° + 60°·t/30 | 20°·sin(2πt/15) | 相位沿圆周旋转 |
| 5 | 收尾 | 18 s | 依次归零,每片延迟 0.3 s | 45°→0 缓落 | 逐个回到顺风位 |
| 合计 | 116 s | 100 BPM | 1 拍 = 0.6 s | 段落切换对齐到 4 拍 |
角度边界(硬约束)
所有函数输出必须经钳位:az ∈ [−360, 360]、el ∈ [−45, 45]。超界直接截断并记一条告警,不允许"软着陆"到别的段。
三、网页端结构
| 模块 | 内容 |
| 场景 | Three.js 简模:轨道圆环(Φ3 m)+ 15 滑车(盒)+ 30 叶片(1.01×0.54 平面) |
| 驱动 | 单个 requestAnimationFrame 循环,按 dance(t) 求 (az, el) 赋给实例矩阵 |
| 控制条 | ▶ 播放/暂停 | 1–5 段按钮 | 进度条(可拖动)| 当前段名 + 时间码 |
| HUD | FPS 计数 | 角度读数(选一片)| "演示模式" 徽标 |
| 音频 | <audio> 可选加载;无音频/静音时按时间轴照常跳 |
| 性能 | 实例化渲染(InstancedMesh);叶片用 2 面片;不开阴影;目标手机 ≥30 fps |
四、下位机指令协议(扩展)
在现有 danc 指令上扩展为「舞蹈号 + 起始相位 + 时长」,帧内 3 个参数字节:
| 字节 | 含义 | 取值 |
| 0 | 帧头 | 0xAA |
| 1 | 长度 | 固定 9 |
| 2 | 命令 | 0x35 DANCE |
| 3 | 序号 | 0–255 |
| 4 | 舞蹈号 | 1–5 |
| 5 | 起始相位 | 0–29(叶片序号偏移) |
| 6–7 | 段时长 | u16,单位 0.1 s |
| 8 | CRC8 | 前 8 字节 |
下位机执行:收到 DANCE 后启动一个 10 ms 定时器,按「舞蹈表」算 (az, el) 目标值 → 走现有脉冲映射表 → 输出到 T0/T1。任一叶片算出的角度越界即整段中止并回 SAFE 位置。
五、安全约束(保留)
| 约束 | 真机 | 网页 |
| 进入 DANCE 前提 | 风速 < 0.1 m/s 且主轴停转 | 不检查(显示"演示模式") |
| 角度越界 | 钳位 + 告警 + 中止 | 钳位 |
| 通信超时 | 200 ms 无帧 → 全部回 SAFE | 不适用 |
| 急停 | 硬件急停优先,立即断使能 | 空格键暂停 |
六、验收标准
| # | 项 | 判据 |
| 1 | 5 段可独立播放 | 点第 N 段立刻从该段 0 秒开始 |
| 2 | 自动连播 | 1→5 自动衔接,段间无黑屏 |
| 3 | 手机帧率 | iPhone/安卓微信内置浏览器 ≥30 fps |
| 4 | 角度范围 | 全程 az∈[−360,360]、el∈[−45,45],无越界告警 |
| 5 | 真机联锁 | 风速 ≥0.1 m/s 时拒绝进 DANCE |
| 6 | 可恢复 | 任一段中止后能回 SAFE 位 |
七、交付物
- 网页:
trackgen.top/reports/dance/(3D 演示 + 控制条)
- 下位机:
dance.h(5 段动作表)+ blade_control.c 增补 DANCE 分支
- 文档:本计划 + 动作表 CSV(可直接改参数重算)
- 短视频:可选,录 5 段各 10 s 拼成 50 s 宣传片