机械臂
五个串联关节
舵机模式一次将一个关节驱动到绝对角度,由学习者推算角度。认证 Cutter Grid 练习是例外:固定世界坐标移动会在执行前通过确定性逆向运动学编译。
| Joint | Axis | Range | Initial | Speed |
|---|---|---|---|---|
| 底座偏航baseYaw | X | 30° … 150° | 90° | 60°/s |
| 肩部滚转(仅模拟)shoulderRoll | — | -45° … 45° | 0° | 45°/s |
| 肩关节shoulder | Y | 30° … 150° | 90° | 45°/s |
| 肘关节elbow | Z | 17.5° … 162.5° | 90° | 60°/s |
| 腕关节wrist | B | 0° … 180° | 90° | 75°/s |
X、Y、Z、B 轴和停放的刀具轴 E 都从固件的 Home 值 90° 开始。Shoulder Roll 仅存在于模拟器中,初始值为 0°。几何偏移会把该硬件状态映射为一个安全的渲染姿态,不存在隐藏的第二个初始姿态。
积木块
三种舵机积木,加上认证 Cutter Grid 移动
舵机模式使用角度、等待与重复积木。Cutter Grid 练习增加六个固定世界方向与整数距离。Blockly 输出经验证的 Program IR,而非 JavaScript;规划器会在重放前冻结确定性关节轨迹。
set <joint> to <angle>°
将一个关节移动到绝对角度。可用关节由挑战定义,超出范围的角度会在运行前被拒绝。
wait <ms>
保持当前姿态,可设置 0 至 5000 毫秒。
repeat <n> times
将内部积木重复 1 至 20 次。循环只计一个积木,而不是 n 个,因此能显著提高效率分数。
头部安全间距
拒绝危险动作,而不是等待碰撞
头部并非由体素构成,也不能被切割。模拟器执行命令前,会连续扫掠工具路径并与头部几何体检测。该约束基于几何计算,因此快速移动也无法穿透容差。
如果扫掠检测到接触,运行会停在最后一个安全姿态,并高亮触发问题的积木;模拟器随后进入可恢复的错误状态。渲染器不会掩盖修正:机械臂一旦停止,界面会明确指出责任积木。
日志显示内容
12:04:31 开始运行 · 挑战 neat-short-haircut
12:04:31 shoulderRoll → 15°
12:04:32 shoulder → 72°
12:04:33 肘关节 → 10° 被拒绝 · 头部净空不足 · 保持最后的安全姿态
12:04:33 状态 → 错误(可恢复)· 积木 3
评分
分数的组成
三个子分数均限制在 0–100,再按固定权重合并。界面显示一位小数,内部计算保留完整精度。
完成度
×0.60|Target ∩ Result| / |Target ∪ Result| × 100
以目标发型计算体素 IoU。剪多和剪少的扣分完全相同。
效率
×0.25min(100, ReferenceProgramCost / ProgramCost × 100)
程序成本等于源积木数,再加上每条已执行命令 0.25。使用循环比逐条写出相同动作更省。
时间
×0.15min(100, ReferenceTimeMs / EstimatedDurationMs × 100)
时间根据关节行程和速度估算,不取自浏览器实测。电脑较慢不会让你失分。
最终分数
0.60 × Completion + 0.25 × Efficiency + 0.15 × Time
如果提供方给出的权重之和不等于 1,模拟器会明确报错,而不会暗中将其归一化。
校准基准:利落短发
起始程序完成任务可得至少 80 分,同时刻意留有优化空间。达到它的水平并不是上限。
控制
运行程序
- 运行
- 从挑战的初始状态开始运行。
- 暂停/继续
- 暂停并重新启动计时,机械臂姿态保持不变。
- 单步
- 在空闲或暂停状态下,只执行一条原子命令。
- 停止
- 结束运行但不记录分数。面板只显示临时完成度。
- 重置
- 恢复模拟初始状态,同时保留程序。
- 测试
- 使用同一引擎在后台评估程序,几毫秒内得到相同结果。
如实说明
尚未实现的功能
现在明确列出这些限制,总比课堂上才发现更好。
- 账号与工作区保存
- 认证 Cutter Grid 规划器以外的通用运行时逆向运动学
- 剪刀驱动或物理引擎
- 真实发丝(模拟器使用体素)
- 机器人自碰撞
- 专用移动版
- 应用内 MQTT 传输(已有规范,尚未接入)
- 登录与经验证的玩家身份
问题
常见问题
- 需要购买机器人吗?
- 不需要。模拟器本身就是产品,可直接在浏览器运行。实体机械臂确实存在,固件也已开源,但教学过程不依赖实体设备。
- 支持哪些设备?
- 请在桌面电脑上使用 Chrome 或 Edge,建议分辨率不低于 1280×720。3D 工作台需要键盘和指针设备,目前没有专用移动版。
- 学生能篡改分数吗?
- 对战回合会在服务器上重放程序,并以服务器评分为准。浏览器上报的结果不会被直接信任;执行时间根据关节行程计算,而不是实测,因此设备性能不会影响分数。
- 机器人会撞到头部吗?
- 不会。头部安全间距由连续扫掠几何检测保证,不依赖带容差的物理模拟。检测到接触时,机械臂会停在最后的安全姿态并进入可恢复错误状态。
- 需要账号吗?
- 单人练习无需账号。账号和工作区保存尚未实现;下方列出了其他待完成功能。
- 项目完成了吗?
- 公开网页客户端与 Rust API 已部署。舵机流程、Cutter Grid 练习与课程、单人及对战模式均可使用,并通过 Chrome 与 Edge 验收。账号、保存工作区、应用端 MQTT 与专用移动端支持尚未实现。