跳至主要內容

免費線上機器人模擬器 · 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。

開始體驗

一個平台,結合自適應編程、遊戲、模擬與教學。

無需購買機器人。全班可以同時學習,每名學生都有合適的難度。閱讀研究說明,決定是否參與,然後開始第一項挑戰。