Blogに戻る

ロボット操作 RL: 何が機能し 何が機能しない

ロボット操作のための報酬エンジニアリングの実践的なガイド 密集型対稀な報酬,潜在力ベースの形作,カリキュラム報酬進行,シムからリアルへのギャップ,報酬ハッキングを避ける方法

部分: [ロボット兵器ガイド]

[←ブログ]

報酬デザインはRLの部分で 教科書では説明が不足し 実践者は苦痛の経験を通して 学習します

密集型対稀な報酬: 核心トレードオフ

短縮報酬 任務完了のみ,中間信号はありません 理論的には清潔でハッキングできません. しかし,信用割り当てにより10段階以上の操作作業で稀な報酬は,惨事に失敗します. ポリシーはエピソード完了時に報酬を見るだけで,前200のアクションのうちどれが成功に貢献したか説明する信号がありません. 試験効率は 稀な報酬下で 作業の視野が上昇すると 劇的に低下します

密集した報酬 ステップごとに進行信号を基に,作業の進捗のためのプロキシをいくつか提供する 作業の進捗を図る 作業の効率を劇的に向上させる.密集した距離から目標への報酬を持つオブジェクトを配置するための政策学習は,稀な相当よりも1050x少ない環境ステップで収束する.コストは報酬ハッキングです.エージェントは実際の課題を解決せずにプロキシを最大限に活用する方法を見つけます.

計算するために,私たちのアイザックラボのベンチマークでは,シミュレーションされた [OpenArm] (T10) でピックアンドプレイスタスクの実行に,稀な報酬は,約200Mの環境ステップ (RTX 4090 で約8時間,並行環境で4,096回) を必要とし,70%の成功を達成しました.距離の形状の密集な報酬は12Mのステップ (~30分) で同じ成功率に達しました. しかし,密集報酬代理店は,この過程で3つの異なる報酬ハックも発見し,繰り返し報酬再設計が必要となった.RL操作の実践的なスキルとは,漏洞を開くことなく,タスクを捕捉する密集報酬を構築することです.

指令: 作業の視界が50ステップ未満で目標設定が明確である場合にのみ稀有な報酬を使用します.他のすべての場合,訓練開始前に25つの報酬再設計のイテレーションを予算する必要があります.

潜在力 に 基づく 形作: 理論上 は 安全 な 厚い 報奨

潜在的報酬形成に関するNg,Daswani,Russell (1999) 定理は,最適政策を変更せずに密集な報酬を追加するための数学的なアプローチを提供します.構造は: T2,Fは,状態に対する任意の実值的潜在関数である.Fをベース報酬rに追加すると,rのみと同じ最適政策を共有する形状の報酬r +Fが生じる.

操作では,最も自然な潜在関数は目標への負距離である: T3. これは,エージェントが対象に向かって物体を移動すると,ポジティブな報酬と,移動すると負の報酬を与える 形作りの用語を生成します 対象に近づいてそれを把握せずに (潜在力に基づく密集な報酬であり,最適な行動を変える) ためにエージェントを報酬を与えることなく.

潜在力 に 基づく 形づくりを 実用 に 実施 する

理論は清潔である.実装はそうではない.主な細かいところは,潜在力に基づく形づくりは,割引されていないまたは適切に割引されていない無限の地平線ケースのみに最適性を保持する.実際では,理論的保証を破った早期終了で果てなエピソードを実行します. 形づくりの用語は,作業を早く完了するよりも,エピソードを長く (よりポジティブな形づくりを蓄積する) 動機を生み出すことができます.

修正は,潜在的ベース・シェーピングをステップごとにタイムペナルティと支配的なターミナル報酬と組み合わせることです.タイムペナルティはエピソードが引き延ばされないことを保証し,ターミナル報酬は,タスクの完成が常に蓄積されたシェーピング信号を支配することを保証します.

def compute_reward(self, obs, action, next_obs, done, info):
    # Potential-based shaping (preserves optimal policy)
    phi_current = -torch.norm(obs["object_pos"] - obs["target_pos"], dim=-1)
    phi_next = -torch.norm(next_obs["object_pos"] - next_obs["target_pos"], dim=-1)
    shaping = self.gamma * phi_next - phi_current

    # Grasp bonus: activated only on first contact
    grasp_reward = 0.0
    if info["contact_force"] > self.contact_threshold and not info["has_grasped"]:
        grasp_reward = 0.5

    # Sparse task completion (dominates all dense signals)
    success = next_obs["object_at_target"].float()
    task_reward = 10.0 * success

    # Time penalty (discourages episode prolongation)
    time_penalty = -0.01

    # Action smoothness penalty
    jerk = torch.norm(action - 2 * obs["prev_action"] + obs["prev_prev_action"], dim=-1)
    smooth_penalty = -0.02 * jerk

    total = task_reward + 0.3 * shaping + grasp_reward + time_penalty + smooth_penalty
    return total

重要な比分:タスク完了報酬 (10.0) は,エピソードにおける最大累積形状の少なくとも10倍であるべきです.作業空間の横角が 1.0mとエピソードが 200ステップである場合,最大累積形状は,ステップあたり約0.3 × 1.0 =0.3 またはエピソードあたり60です. 生産では適正にスケールします

多段階の可能性のある機能

多くの操作作業には,アプローチ,把握,輸送,場所など複数の連続段階があります.単一の潜在機能 (最終目標までの距離) は,アプローチと把握段階の形成信号を提供しません.解決策は,作業進捗に基づいて切り替える段階意識の潜在機能です.

  • フェーズ 1 方法: Φ(s) = −d(end_effector,オブジェクト).
  • 第2段階 把握: Φ(s) = −d(終了_効果,オブジェクト) +把握_品質(s). 安定な接触を報いる.
  • フェーズ 3 輸送: Φ(s) = −d(対象) 握り後のみ活性が検出されます.
  • フェーズ 4 場所: Φ(s) = −d(対象,ターゲット) −方向_エラー(対象,目標_方向).対象から5cm以内にあるときにアクティブです.

段階移行は,時間段階ではなく,物理的な信号 (接触力しきい値,物体の高度の変化) によって検出されるべきである.時間ベースの段階は,エージェントが段階移行を早期に誘発することを学ぶ利用機会を生み出します.

操縦特有の報酬要素

Component Normalization Weight Activate When Purpose
EE-to-Object Distance ワークスペース diagonal (0.8–1.2m) 0.1–0.3× Before first contact Encourage approach
Object-to-Target Distance ワークスペース diagonal 0.4–0.6× After grasp detected Primary transport signal
Grasp Quality [0, 1] continuous 0.1–0.2× During contact Prevent dragging
Orientation Alignment 四元数 error [0, π] 0.1–0.2× Last 20% of transport Correct placement angle
Action Smoothness (jerk) Max expected jerk −0.05–0.1× Always Hardware-safe motions
Joint Limit Penalty Binary per joint −0.1× per violation Always Stay within workspace
Collision Penalty Binary −1.0 terminal Self-collision or table Physical safety
Time Penalty Constant per step −0.01× Always Discourage stalling

** 対象の距離のエンドエフェクター:** 構成要素を [0, 1) に保持するために作業空間の横角 (通常 0.81.2m) によって正常化します. 重量: 0.10.3×総報酬スケール.目的:対象に近づくことを奨励します.物体の近くをハッキングするのを避けるために最初の接触後に無効化します. 完全体重は接触がないとき 連続的にゼロに分解して 最初の接触から10歩後に永久に消えます

対象の距離: 握手が検出された後のみ起動する (接触力 > 限界).作業空間によって正常化する.重量:0.40.6×.これは輸送段階の主要な密度信号です. 狭い配置許容量 (<2mm) の作業では,最後の5cmに指数値ボーナスを追加してください. これは,より広い輸送行動に影響を及ぼさないように,精度配置段階のための強い梯度を作り出します.

接触安定の二次または連続測定法 接触正常が正力閉塞を形成するか,またはGQ-CNNスコアがある場合.重量:0.10.2×.これなしでは,エージェントは物体を引っ張ることを学んで,それらを握るよりも学んでます.シミュレーションでは,物理エンジンによって提供された接触点と正常から反極の握りの質を計算することができます. MuJoCoでは,通常角度が150度以上異なる物体の反対側には少なくとも2つの接触点が存在することを確認します.

アクションスムーズさ: 硬件を損傷する硬件を阻害する硬件動きを阻害するために,ジークを罰する. T5. 負の罰として体重:0.050.1×. モデル化されていない関節弾力性のために,ジークのsimのポリシーが実際の硬件で失敗しているため,シムからリアルへの転送にとって重要です. 腕の関節のサーボが 15分以内に 熱い状態になるように 指示された

報酬 ハッキング: フィールドガイド

操作報酬デザインでは以下のハックは繰り返し登場します. 警告としてリストされています. 発見ではなく. 代理人は独立して見つけます.

Hack Name Mechanism Frequency Fix
Hover Exploitation EE hovers near object, accumulating proximity reward without grasping Very common Disable EE-proximity after first contact; add time penalty for non-contact phases
Table Push for Termination Pushes object off table to trigger early episode end (less accumulated negative reward) Common Large negative terminal reward (−10×) for out-of-bounds; verify termination conditions
Success Oscillation Rapidly oscillates object through target zone to trigger success on rolling window check Common Require success maintained for 10+ consecutive steps
Gravity Exploitation Drops object near target from height, scoring placement reward during free-fall Moderate Check that EE is within 5cm of object at success time; require low object velocity (<0.05 m/s)
Contact Cycling Repeatedly touches and releases object to accumulate first-contact bonus Moderate Make grasp bonus one-time per episode using a boolean flag
Joint Limit Surfing Jams joints against limits to achieve workspace positions unreachable with smooth motion Occasional Add continuous joint-limit proximity penalty, not just at-limit penalty
Sim Physics Exploitation Exploits penetration or tunneling bugs to teleport objects Rare but catastrophic Validate object positions between steps; flag teleports >5cm as invalid

ハッキング防止設計原則

  • 終結報酬支配力: 任務完了終結報酬は,エピソードにおける最大可能な累積密集報酬の10倍以上であるべきである.これは,政策は密集な報酬蓄積を利用するよりも,常に実際に任務を完了することを好むことを保証する.最大値を計算する: (ステップごとに最大型形状) × (最大型エピソード長さ) × (形状重量). 終末的な報酬は 大きさの順序を上回る
  • コンポーネントの正常化: すべての密集な報酬コンポーネントを [-1, 1] に保持し,明示的な重量設定する.異なるスケールで非正常化された報酬コンポーネントは予測不能な相互作用し,報酬機能を実装詳細に非常に敏感にする.トレーニング中に各コンポーネントの実行統計を記録する.
  • 逆のテスト: 完全なトレーニングの実行前に,任務を完了せずに報酬を最大限に上げようと意図的に試みるスクリプト付きの逆の政策で報酬機能をテストします.もし逆の者が任務を完了しない高報酬の経路を見つけると, GPU時間を無駄にする前に再設計してください.RCSVでは,一般的な操作作業のために20回ほどの逆のスクリプトのライブラリを保持します. 5分で日々の節約です
  • 報酬コンポーネントログ: 訓練中に報酬コンポーネントを個別に記録する.合計だけでなく.報酬曲線が健康に見えますが成功率が止まるとき,コンポーネント分解はエージェントがどの用語を利用しているかを明らかにします. 各コンポーネントを別々のスケラーとして追跡するために TensorBoard または Weights & Biases を使用します.

課程 報酬 進歩

複雑な多段階の作業では 装置を組み立て,クリアレスの<1mm) のペーグを挿入し,混合物を分類する 単一の静的報酬機能はほとんど機能しません.一貫して成功したアプローチは,カリキュラム報酬進行です.作業を学習可能にする簡素化された報酬から始め,徐々に困難と精度要件を高めます.

ステージ1: 粗末な到達 (ステップ0~5M)

対象に近距離を評価する. 把握品質の要求も,配置精度もありません. 目的は,基本的な腕制御と作業空間ナビゲーションを学ぶことです. 成功の限界: EE 対象から5cm以内に.

ステージ2: 修士号取得 (5M~20Mステップ)

握りの質の報酬を追加する.近距離の限界を絞る.エージェントは物体周りに実際に指を閉じ,安定した接触を確立する必要があります.成功の限界:テーブル表面から10cm上昇した物体.

ステージ3: 輸送 (ステップ20M50M)

対象から目標までの距離報酬を起動します.エージェントは対象を掴んで,上げ,目標に向かって移動する必要があります.成功の限界:対象から5cm以内に.

ステージ4: 精度配置 (ステップ50M~100M)

目標から2mm以内にある物体で,方向性誤差が <5度である.ここでは最も忍耐力と最も注意深く報酬調整が必要.

class CurriculumRewardManager:
    """Manages reward curriculum progression based on training progress."""

    def __init__(self, env_cfg):
        self.stages = [
            {"name": "reach",     "threshold": 0.70, "min_steps": 2_000_000},
            {"name": "grasp",     "threshold": 0.60, "min_steps": 5_000_000},
            {"name": "transport", "threshold": 0.50, "min_steps": 10_000_000},
            {"name": "precise",   "threshold": None, "min_steps": 0},
        ]
        self.current_stage = 0
        self.total_steps = 0

    def maybe_advance(self, success_rate, steps_in_stage):
        stage = self.stages[self.current_stage]
        if (stage["threshold"] is not None
            and success_rate >= stage["threshold"]
            and steps_in_stage >= stage["min_steps"]
            and self.current_stage < len(self.stages) - 1):
            self.current_stage += 1
            print(f"Advancing to stage: {self.stages[self.current_stage]['name']}")

    def get_reward_weights(self):
        """Returns reward component weights for current curriculum stage."""
        if self.current_stage == 0:   # reach
            return {"ee_dist": 1.0, "grasp": 0.0, "obj_dist": 0.0, "orient": 0.0}
        elif self.current_stage == 1: # grasp
            return {"ee_dist": 0.5, "grasp": 0.5, "obj_dist": 0.0, "orient": 0.0}
        elif self.current_stage == 2: # transport
            return {"ee_dist": 0.2, "grasp": 0.3, "obj_dist": 0.5, "orient": 0.0}
        else:                          # precise
            return {"ee_dist": 0.1, "grasp": 0.2, "obj_dist": 0.4, "orient": 0.3}

ステップ進捗の限界値 (70%, 60%, 50%) は意図的に100%以下に設定されます. ステップごとに基本的な行動を学んだ後に政策が進むことを希望します. 簡単なバージョンに超え合わせた後にではありません. ステップ進める前に95%の成功を待つと,ポリシーは簡単な報酬のために最適化された習慣を開発します. 精度要求が増加するときに学ぶのが難しい.

リアル・リウアワードの差

リアルハードウェアで完全に異なる行動を生み出すことができる報酬機能は,ドメインのランダム化さえもできます.報酬ギャップは3つの主要な源があります:

1. 連絡力学不一致

Simコンタクトモデル (MuJoCoのソフトコンタクト,Isaac SimのGPU加速した硬いボディ) は摩擦系数,接触硬度,変形行動で現実とは異なる.細粒子の接触状態 (グリップ品質,滑らかな摩擦) に依存する報酬は sim vs.リアルで異なる梯度を生成します. 緩和:訓練中にランダムな摩擦系数 (0.31.2×名義),接触硬度 (±50%),オブジェクト質量 (±30%) をランダム化する.RCSVの [RL環境]T11) では,これらのランダム化範囲をデフォルトとして含む.

2 観測遅延

リアルロボット観測は変数遅延 (115msの共同エンコーダー,3080msのカメラフレーム) となります.異なる量で時代遅れの観測から計算された報酬コンポーネントは不一致な信号を生成します.Simでは,すべての観測が同期されます.緩和:訓練中にシミュレーションされたセンサーにランダムな観測遅延 (02制御ステップ) を追加します. 観測遅延による リアルハードウェアでは 90%の成功が 減少して 30%に減少しています

3.アクチュエーターモデル不一致

模擬モーターは命令に即時かつ正確に反応する.実際のサーボには帯域幅制限 (通常位置制御サーボには515 Hz),反射 (0.10.5度) とトークの波動がある. sim ポリシーが期待する位置を達成できないため,正確なエンドエフェクター位置に依存する報酬が影響を受ける. 緩和: 1 順位低パスフィルターとして,周波数が520 Hz の間をランダム化し,関節ごとに ±0.3 度の均等な反射騒音を追加する. [OpenArm]T12) では,腕関節が最も反射 (~0.4 度) をしており,このランダム化により最も利益を得ます.

実用テスト: シム訓練のポリシーを導入する前に,すべてのランダム化が同時に極端に設定されたシミュレーションで評価してください (最悪の場合の摩擦,最大遅延,最小アクチュエーター帯域幅).成功率が50%以上にとどまれば,ポリシーは実際の展開に十分な強度がある可能性があります. 30%未満に低下した場合,トレーニング中にランダム化を加えましょう.

特定の任務に対する報酬機能

以下は,RCSVで複数の設計イテレーションによって調整された一般的な操作作業のためのフィールドテストの報酬仕様です.

選択と場所 (シンプル)

2段階:接近 +輸送.接触までEE距離形 (重量0.3) 接し,接し後オブジェクト距離形 (重量0.5) 接し.ターミナル:10ステップで目標から3cm以内のオブジェクトに対して+100.時間罰: −0.01/ステップ.合計訓練: ~15Mステップ・アイザックラボ (4096 envs), RTX 4090で ~45分.

ペン挿入 (厳容度 < 1mm)

4段階のカリキュラムが必要.アプローチ,把握,粗い配列 (穴軸10度以内のペグ軸),細い挿入.重要な洞察:位置に基づくのではなく最終挿入段階で力に基づく報酬を使用する.原因は,サブミリメートル位置の精度が視界から信頼性がないが,成功した挿入中に力プロフィールが特徴的で一貫している. 位置ではなく特徴的な力サイン (Z力増加とXY力制限) を報いる.総訓練: ~100Mステップ, ~5時間.

対象のリオーリентаーション (手動)

単相型が動作するものの,手指の制御が巧妙である.報酬:電流と標的の方向間の方向性誤差,SO (SO) で地質距離として測定する3).重要な追加:オブジェクトの線形速度を罰する (オブジェクトは作業空間を横断して飛行しないように位置に回転する).また,接触力における突然の減少によって検出される指-オブジェクト滑り事件を罰する. このタスクは, 200M以上のステップを期待し,慎重な報酬設計でも40~60%の成功率を期待する.シムでアレグロの手で最もうまく動作する.実際のハードウェアでは,シャドーの手の触覚フィードバックが助けますがセンサーノイズを導入します.

双手会議

各腕にはそれぞれ異なる報酬流が必要であり,調整ボーナスも必要です.各腕は独自のアプローチ/グリップ/輸送段階を得ます.調整ボーナスでは,両腕が組み立てステップの正しい相対配置にあることを報酬とします. 報酬設計が本当に難しいのはここです:調整の重量すぎると,両腕が正しい相対姿勢で凍結し,作業を実際に完了することなく,重量すぎると両腕が衝突します.調整の重量は0.15×で,調整の可能性は,両握った部分の交配表面の間の負距離として定義されます.

賞与 デザイン の 常識 的 な 誤り

  1. 観測の報酬,記述しない: 特殊なSim状態 (正確な) の代わりにカメラの観測から計算報酬 (騒音がある) について. simのトレーニング中に,常に真相状態から報酬を計算する.ポリシーでは騒音センサーを観測する,しかし報酬はきれいなものでなければならない.
  2. エピソード境界を忘れること: 潜在基の形づくりは,エピソードリセットを正しく処理する必要がある.エピソード開始時に潜在力をゼロにしない場合,各エピソードの最初のステップは,末期状態の可能性と初期状態の可能性間の違いから偽りの大きな形づくり信号を受け取ります.
  3. 報酬遅延不一致: もし報酬が連絡先検出に依存し,連絡先検出が2段階遅延した場合,報酬信号が2段階遅延で届きます.ポリシーは"すべき"時より2ステップ前に行動することを学び,振動を引き起こす.報酬計算と観測時間が一致していることを確認します.
  4. 境界線でのテストではありません: 報酬は作業場の中心にある物体に対して動作するかもしれませんが,境界線 (距離正常化が異なる動作をする場所) またはロボットの関節限界 (アクセス可能性の制限が報酬梯度と相互作用する場所) 近くにある物体に対して割れ目があります.作業場の四角の物体を使ってテストします.
  5. 単種評価: RLは種子に対して非常に敏感です.一つの種子で90%の成功をもたらす報酬は,別の種子で20%を生産する可能性があります.報酬作業を完了する前に,常に少なくとも3種を評価します.RCSVでは,5種を標準的に使用し,平均 ± stdを報告します.

ツールとフレームワーク

次の枠組みは,RL操作のための報酬機能インフラストラクチャを提供します.

  • Isaac Lab (NVIDIA): GPU並行式エンヴァーと内蔵された報酬機能クラス.スケール (4,09616,384並行エンヴァー) に最適. T6クラスでは,各コンポーネントのログアウトで重量化された多コンポーネント報酬をサポートします.生産訓練のために推奨されています.
  • MuJoCo + Gymnasium: より正確な接触物理,並行環境の少ない (164 CPU). 詳細に個々のエピソードを詳細に検査する必要がある報酬プロトタイプに最適. T7は報酬ハックを診断するのに貴重なものです. 代理人の 0.1×速度で行動を見ることで報酬曲線が隠していることが明らかになります.
  • robosuite (スタンフォード): 標準的な報酬機能を持つプリビルド操作タスク. 報酬設計の良い出発点. 自身の書き込み前にその実装を研究する. リフト,スタック,ナッツアセンブリの報酬はよくテストされています.
  • RCSV RL環境: オープンアームおよび他のRCSVハードウェアモデル,検証された報酬機能,ドメインランダム化プレセットを含む,Isak Lab環境を事前に設定した. [ドキュメント](T13参照).

関連 読書

模倣学習における一般的な誤り · ACTポリシー説明 · ロボットスタートアップ技術スタック · ロボット用語集 · RCSV RL環境

RCSVのシミュレーション環境には,標準操作作業のための参照報酬実装が組み込まれているハッキング対策が含まれています.利用可能な作業と報酬仕様については [RL環境ドキュメント]T19を参照してください.

操作 RLのためのシミュレーション環境

RCSVは,一般的な操作作業のために,検証された報酬機能を持つ,プリコンフィギュレーション環境を提供します.ゼロから構築する代わりに,証明された報酬デザインから始めましょう.

RL環境を探求する ソリューションエンジニアと話をする