シミュレーター
Blocklyで動かす無料の3Dロボットアームシミュレーター
ブラウザーのデジタルツインでロボットプログラミングを学べます。左でBlocklyプログラムを組み、中央で5関節アームを動かし、右で衝突確認と得点を確認します。
ロボットアーム
直列につながる5つの関節
サーボモードでは学習者が角度を考え、関節を一つずつ絶対角度へ動かします。認証済み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°です。幾何オフセットによりハードウェア状態を1つの安全な表示姿勢に対応させており、別の隠れた初期姿勢はありません。
ブロック
3つのサーボブロックと認証済みCutter Grid移動
サーボモードは角度、待機、繰り返しブロックを使います。Cutter Gridは6つの固定世界方向と整数距離を追加します。Blocklyは検証済みProgram IRを出力し、プランナーが再生前に決定論的軌道を固定します。
set <joint> to <angle>°
1つの関節を絶対角度まで動かします。使用できる関節は課題が定め、範囲外の角度は実行前に拒否されます。
wait <ms>
現在の姿勢を保ちます。0〜5000ミリ秒を指定できます。
repeat <n> times
内側のブロックを1〜20回実行します。ループはn個ではなく1ブロックとして数えるため、効率スコアを大きく改善できます。
頭部との安全距離
衝突ではなく、動作を拒否する
頭部はボクセルではなく、切断できません。命令を確定する前に工具経路を頭部形状に対して連続検査します。幾何制約なので、高速移動によるすり抜けも起きません。
走査で接触を検出すると、実行は最後の安全姿勢で停止します。原因となったブロックを強調表示し、シミュレーションは復旧可能なエラー状態に入ります。表示上の補正で隠すことはなく、アーム停止時には原因のブロックを明示します。
ログの表示
12:04:31 実行開始・課題 neat-short-haircut
12:04:31 shoulderRoll → 15°
12:04:32 shoulder → 72°
12:04:33 elbow → 10°を拒否・頭部との間隔不足・最後の安全姿勢を維持
12:04:33 状態 → エラー(復旧可能)・ブロック3
スコア
スコアの内訳
3つのサブスコアを0〜100に収め、固定の重みで合成します。表示は小数第1位までですが、内部では完全な精度を保持します。
完成度
×0.60|Target ∩ Result| / |Target ∪ Result| × 100
目標髪型に対するボクセルIoUです。切りすぎも切り残しも同じだけ減点されます。
効率
×0.25min(100, ReferenceProgramCost / ProgramCost × 100)
プログラムコストはソースブロック数に、実行命令1件あたり0.25を加えた値です。同じ動作を並べるより、ループの方が低コストです。
時間
×0.15min(100, ReferenceTimeMs / EstimatedDurationMs × 100)
時間は関節の移動量と速度から推定し、ブラウザーでは計測しません。端末が遅くても減点されません。
最終スコア
0.60 × Completion + 0.25 × Efficiency + 0.15 × Time
提供された重みの合計が1でない場合、シミュレーターは黙って正規化せず、明確なエラーを表示します。
校正済み基準:Neat Short Haircut
初期プログラムは完了点として80点以上を取れますが、改善の余地を意図的に残しています。同じ得点が上限ではありません。
操作
プログラムの実行
- 実行
- 課題の初期状態から実行します。
- 一時停止/再開
- 姿勢を保ったまま時計を停止・再開します。
- ステップ
- 待機中または一時停止中に、アトミック命令を1つだけ完了します。
- 停止
- スコアを記録せずに終了し、パネルには暫定の完成度だけを表示します。
- リセット
- シミュレーションを初期状態に戻し、プログラムは残します。
- テスト
- 同じエンジンで画面表示なしに評価し、数ミリ秒で同じ結果を得ます。
現状
未実装の機能
授業中に初めて気づくより、今ここで明記します。
- アカウントとワークスペース保存
- 認証済みCutter Gridプランナー以外の汎用実行時逆運動学
- はさみの駆動または物理エンジン
- 写実的な毛髪(シミュレーターはボクセルを使用)
- ロボットの自己衝突
- 専用モバイル版
- アプリ内MQTT通信(仕様済み、未接続)
- サインインと確認済みプレイヤーID
質問
よくある質問
- ロボットを購入する必要はありますか?
- 不要です。製品はブラウザーで動くシミュレーターです。実機と公開ファームウェアもありますが、授業に実機は必要ありません。
- どの環境で動作しますか?
- デスクトップ版ChromeまたはEdgeを、1280×720以上で使用してください。3Dワークベンチにはキーボードとポインティングデバイスが必要で、専用モバイル版はありません。
- スコアをごまかせますか?
- 対戦ではサーバーがプログラムを再生し、サーバー側の得点を正式結果とします。ブラウザーからの報告は信用せず、実行時間も実測ではなく関節移動量から算出するため、端末性能は得点に影響しません。
- ロボットが頭部に当たることはありますか?
- ありません。頭部との距離は許容誤差のある物理演算ではなく、連続スイープ幾何検査で守ります。接触を検出すると最後の安全姿勢で停止し、回復可能なエラー状態になります。
- アカウントは必要ですか?
- 一人練習にアカウントは不要です。アカウントとワークスペース保存は未実装で、ほかの未対応項目も下に示します。
- 完成していますか?
- 公開WebクライアントとRust APIはデプロイ済みです。サーボループ、Cutter Grid練習とレッスン、ソロ、対戦は利用可能でChrome・Edgeの受入試験済みです。アカウント、保存、アプリ側MQTT、モバイル専用対応は未実装です。