跳到主要内容

免费在线机器人模拟器 · Blockly · 数字孪生

编程控制机器人完成理发任务。安全验证每一步。

HCR 是一项 Hair Cutting Robot 学术研究。参与者通过积木程序控制五关节 Service Robot,在体素发型上完成任务;数字孪生会先检查每个动作,并拒绝会触及头部的运动。

客户端在浏览器中运行,Rust 服务负责重放并评分提交的程序。无需实体机器人,关卡会根据参与者的表现自适应调整。

或者 下载桌面应用 ,支持 macOS、Windows 和 Linux。适合没有 Wi-Fi 的教室使用。

利落短发运行中
  1. shoulderRoll15°
  2. shoulder72°
  3. elbow10°
  4. elbow−48°
  5. baseYaw−30°
  6. baseYaw
  7. baseYaw30°
  8. wrist−20°
完成度57.6
剪除保留

为什么

机器人教学难以扩展

一台机械臂,一名学生

实体机械臂价格高昂,一次只能供一名学生使用,还需要教师在旁监督。

同一课程,同一进度

全班只能按同一套课程推进。进度快的学生觉得无聊,跟不上的学生则容易放弃。

错误代价高昂

在实体硬件上,角度错误就可能造成碰撞。为了安全,初学者往往根本没有操作机会。

学习循环

编写、检查、评分。修改一个数值,再试一次

三个步骤,第三步会带你回到第一步。整个学习过程就在这个循环中完成。

  1. 1编程

    拖放积木,无需输入语法

    舵机模式有三类积木:设置关节绝对角度、等待或重复。认证 Cutter Grid 练习增加六个固定世界方向与整数距离,并在运行前编译为确定性关节计划。

    舵机角度 · Cutter Grid 移动 · 等待(0–5000 毫秒)· 重复(1–20 次)

  2. 2检查

    数字孪生先行运行

    机械臂移动前,同一程序会先在头部几何模型中进行扫掠检测。可能进入头部的动作会被拒绝;机械臂保持最后的安全姿态,并高亮导致问题的积木。

    连续扫掠接触检测 · 确定性计算,无物理引擎

  3. 3评分

    这是分数,不是成绩等级

    出错只意味着再试一次。评分依据是发型与目标的吻合度、程序精简程度以及预计执行时间。

    0.60 completion + 0.25 efficiency + 0.15 time

可解性保证

每项挑战都保证可以完成。

先画出目标发型,再寄望机械臂能够到达,并不可行。早期有一道挑战要求剪除 91 块头发,但机械臂只能触及 20 块。任务根本无法完成,关卡却没有给出任何提示。

现在先运行求解器。候选目标会先在无碰撞关节空间中扫掠,再交给参考求解器;无法完成的目标会在生成阶段淘汰,绝不会发给学习者。求得的解同时作为关卡的参考成本和参考时间。

早期的一项手工挑战

关卡要求剪除的头发91
机械臂能够触及的头发20

挑战本身无法完成,界面却没有说明。学生很容易把设计缺陷误以为是自己的失败。

自适应

每名学生都有合适的难度,而不是全班同一难度

每次尝试后,平台都会重新估计学习表现并匹配下一项挑战。轻松完成便提高难度;遇到困难则降低一步。每名学生都有自己的学习级别。

能力值 θ
以 logit 标度表示机器人编程能力,并根据每次程序重放更新。
采用 2PL,而非 3PL
正确发型无法靠猜测得到,因此猜测参数固定为零,不从噪声中估计第三个参数。
题目选择
挑战先按当前 θ 下的 Fisher 信息量排序,再限制曝光率,避免同一批题目反复分配给能力相近的学生。
部分得分
分数是连续值。更新能力估计前,服务会围绕题目的掌握阈值重新映射原始分数,同时保留原值。
校准
新挑战最初处于暂定状态:限制曝光率,且不计入正式能力更新,直到收集到足够作答以重新拟合难度。
现阶段使用单一 θ
当前版本只使用一个综合能力值,同时为每次作答记录维度标签以供报告。真正的多维模型属于后续工作,并非当前系统的能力。

研究参与

研究开始前,请主动选择是否参与

只有在参与者主动同意加入这项学术研究后,客户端才会创建模拟器会话或玩家标识。

必要研究资料

用于重放、评分及分析的 Blockly 程序 IR、挑战版本、分数,以及必要的技术会话或提交标识。

可选背景资料

主语言仅记录为 zh、en 等粗粒度代码;UTC 偏移仅记录当前分钟数。“参与学术研究”默认开启两项,也可在“更多设置”中分别关闭。

不会主动收集

不收集浏览器指纹、精确 IANA 时区名称、推断位置、广告标识或跨网站跟踪档案。

数据匿名程度

研究记录可能留有会话标识,服务器也会保存常规安全日志。因此,这些数据虽经过去标识化处理,但并非完全匿名。

模式

独自练习,或与全场对战

单人练习

不限时。使用工作台完成一项挑战,尝试次数不限。

  • 可以运行、暂停、继续、逐条执行命令、停止或重置。重置后,程序仍会保留。
  • “测试”会在几毫秒内无界面评估程序,无需等待动画播放。
  • 操作时可随时显示或隐藏目标发型预览。

对战回合

房间内所有玩家会同时收到同一项挑战。

  • 回合采用固定的现实时间窗口,并以服务器时钟为准。
  • 回合结束前,任何人都看不到分数,包括自己的分数。
  • 可以不限次数重新提交,最终只计最佳成绩。
  • 程序在服务端重放,电脑更快不会带来优势。

未配置后端时,浏览器会为与脚本机器人的对战回合评分。菜单、大厅和计分板都会清楚标明这是练习。离线仍可游玩,但本地分数绝不会显示为正式成绩。

使用 Rust 构建

从服务端重放到嵌入式机器人固件,全程使用 Rust

Rust 在 HCR 中并非装饰性标签,而是用于实现评分服务、自适应引擎、协议处理与 no_std 嵌入式网关。

服务端重放协议Rust 固件(目标方案)
了解 HCR 中的 Rust

技术架构

四个部分,一套协议

Simulator

HCR_Simulator_Frontend

React · TypeScript · Vite · React Three Fiber · Blockly

整个演示流程都在客户端运行。未配置后端时,完全不会发出网络请求。

Service

hcr-backend

Rust · MQTT over WebSocket · HTTP binding

在服务器端重放程序、运行自适应题库,并负责回合截止时间和排名。

协议

hcr-backend/schema

hcr.v1 · JSON and CBOR

每条消息都使用一个信封,并通过 ULID 关联。次要版本只允许新增字段;接收方会忽略无法识别的内容,而不会因此失败。

硬件

hcr-fw

Rust (no_std) · ESP8266 · Arduino C++ as a hardware library

实体五舵机机械臂由 Rust 管理启动策略、路由、HTTP/JSON 和舵机状态;C++ 仅限于字节型 C ABI 之后。网关尚未实现 MQTT。

开始体验

一个平台,结合自适应编程、游戏、仿真与教学。

无需购买机器人。全班可以同时学习,每名学生都有合适的难度。阅读研究说明,决定是否参与,然后开始第一项挑战。