FabForward Cobot Studio FR5 RL ドキュメント
教師データ生成

教師データ(実演)はどう作られているか

教師データは人手で集めたものではありません。特権スクリプト・エキスパート(手書きの状態機械)がIsaacで実演し、 成功したエピソードだけ.npz に記録したものです。

エキスパート→大量並列→成功フィルタ→データセット→生徒方策

全体像教師データ → 生徒方策

scripted_*_expert.py → collect_*_demos.py → demos/fr5_*_demos.npz → bc_pretrain.py → checkpoints/*_bc.pt → train.py (BCRegPPO) → ppo_final.pt → export_onnx.py

左から:手書きエキスパートが実演 → Isaacで数百並列に走らせる → 成功(✓)だけ漏斗で残し失敗(✗)は捨てる.npzに蓄積 → 生徒方策が模倣・強化学習。

① 特権スクリプト・エキスパート

教師データの源は、RLでも学習でもなく手書きの状態機械ScriptedExpert)。真の物体姿勢を見て動き(特権)、記録する観測はノイズ入り(YOLO相当σ=3mm/5mm)——だから生徒は知覚ノイズに強くなる。

1 APPROACH
パック上空へ
2 DESCEND
把持高へ下降
3 GRASP
閉じる
4 LIFT
持上げ
5 CARRY
ビンへ搬送
6 PLACE
設置
7 RELEASE
開く
8 DONE
完了

各フェーズの目標TCP姿勢を微分IK(FR5DiffIK)で関節目標に変換し、相対Δqの7次元アクションに落とす。コンベアは把持前にライブのパックを追従し、搬送脚で bin−(puck−tcp) のオフセット補正(84.8→92.2%のレバー)。

② 収録(成功フィルタ)と ③ 保存形式

収録collect_*_demos.py がエキスパートをIsaacで並列に走らせ、成功終了したエピソードだけを保存。既定400 →「≥85%レシピ」で2,000–2,400件にスケール。

形式:圧縮NumPy .npzdemos/)。キー=observations(N,obs)・actions(N,7)・episode_startssuccessepisode_lengths(Sortはclass追加)。obs=Pick 29 / Sort・Conveyor 34。報酬・doneは保存しない。

④ 学習での使われ方

bc_pretrain.py.npz をMSE回帰して暖機 → train.pyBCRegPPO)が学習中のアンカーとしてデモを消費(BC-MSE か reverse-KL)。詳細は ① RLアプローチ

docstring とコードは一致(2026-06-28 修正済み)

以前の「32次元」コメントと「ambush」docstringの食い違いはソース側を実装に合わせて修正済み(収録/env=34次元、conveyor=reactive-track+offset-correct)。sort_smoke_test.py== 32 アサートも34へ(34次元envで失敗していた潜在バグ)。docstringを信頼して構いません。