跳到主要内容

模拟器

由 Blockly 驱动的免费 3D 机械臂模拟器

在浏览器数字孪生中在线学习机器人编程。左侧编写 Blockly 程序,中间模拟五关节机械臂,右侧查看碰撞检测与评分。

机械臂

五个串联关节

舵机模式一次将一个关节驱动到绝对角度,由学习者推算角度。认证 Cutter Grid 练习是例外:固定世界坐标移动会在执行前通过确定性逆向运动学编译。

关节链顺序、旋转轴、角度范围、初始角度和速度
JointAxisRangeInitialSpeed
底座偏航baseYawX30° … 150°90°60°/s
肩部滚转(仅模拟)shoulderRoll-45° … 45°0°45°/s
肩关节shoulderY30° … 150°90°45°/s
肘关节elbowZ17.5° … 162.5°90°60°/s
腕关节wristB0° … 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.25

min(100, ReferenceProgramCost / ProgramCost × 100)

程序成本等于源积木数,再加上每条已执行命令 0.25。使用循环比逐条写出相同动作更省。

时间

×0.15

min(100, ReferenceTimeMs / EstimatedDurationMs × 100)

时间根据关节行程和速度估算,不取自浏览器实测。电脑较慢不会让你失分。

最终分数

0.60 × Completion + 0.25 × Efficiency + 0.15 × Time

如果提供方给出的权重之和不等于 1,模拟器会明确报错,而不会暗中将其归一化。

校准基准:利落短发

Reference blocks5
Reference program cost6.25
Reference time5645 ms

起始程序完成任务可得至少 80 分,同时刻意留有优化空间。达到它的水平并不是上限。

控制

运行程序

运行
从挑战的初始状态开始运行。
暂停/继续
暂停并重新启动计时,机械臂姿态保持不变。
单步
在空闲或暂停状态下,只执行一条原子命令。
停止
结束运行但不记录分数。面板只显示临时完成度。
重置
恢复模拟初始状态,同时保留程序。
测试
使用同一引擎在后台评估程序,几毫秒内得到相同结果。

如实说明

尚未实现的功能

现在明确列出这些限制,总比课堂上才发现更好。

  • 账号与工作区保存
  • 认证 Cutter Grid 规划器以外的通用运行时逆向运动学
  • 剪刀驱动或物理引擎
  • 真实发丝(模拟器使用体素)
  • 机器人自碰撞
  • 专用移动版
  • 应用内 MQTT 传输(已有规范,尚未接入)
  • 登录与经验证的玩家身份

问题

常见问题

需要购买机器人吗?
不需要。模拟器本身就是产品,可直接在浏览器运行。实体机械臂确实存在,固件也已开源,但教学过程不依赖实体设备。
支持哪些设备?
请在桌面电脑上使用 Chrome 或 Edge,建议分辨率不低于 1280×720。3D 工作台需要键盘和指针设备,目前没有专用移动版。
学生能篡改分数吗?
对战回合会在服务器上重放程序,并以服务器评分为准。浏览器上报的结果不会被直接信任;执行时间根据关节行程计算,而不是实测,因此设备性能不会影响分数。
机器人会撞到头部吗?
不会。头部安全间距由连续扫掠几何检测保证,不依赖带容差的物理模拟。检测到接触时,机械臂会停在最后的安全姿态并进入可恢复错误状态。
需要账号吗?
单人练习无需账号。账号和工作区保存尚未实现;下方列出了其他待完成功能。
项目完成了吗?
公开网页客户端与 Rust API 已部署。舵机流程、Cutter Grid 练习与课程、单人及对战模式均可使用,并通过 Chrome 与 Edge 验收。账号、保存工作区、应用端 MQTT 与专用移动端支持尚未实现。