Isaac LabとPPOで始めるUnitree G1のボトル把持・持ち上げ強化学習プロジェクト:MVPを作り始めました

Isaac LabとPPOで始めるUnitree G1のボトル把持・持ち上げ強化学習プロジェクト:MVPを作り始めました

Week 1 progress of the G1 Bottle Pick-and-Lift Reinforcement Learning project!
2026.08.05

はじめに

前回までのインターンでは、Unitree Go2とG1のカメラ画像を活用した、operator advisory向けのロボット目視検査エージェントを開発しました。

今回からは新しいPhysical AIプロジェクトとして、Unitree G1 Inspire Handを対象にした、ボトル把持・持ち上げの強化学習に取り組んでいます。

今回のシリーズは、以下のタイトルで進める予定です。

Isaac LabとPPOで始めるUnitree G1のボトル把持・持ち上げ強化学習プロジェクト (G1 Bottle Pick-and-Lift Reinforcement Learning project)

本プロジェクトでは、Isaac Lab上の固定立位G1を対象に、テーブル上のボトル形状オブジェクトに対して、PPOによる強化学習を適用します。

ボトルの近くへ手を出す
  ↓
Inspire Handで把持姿勢を作る
  ↓
テーブルから持ち上げる
  ↓
保持する

最終的にはsim-to-realも視野に入れていますが、現在はsimulation-firstの段階です。

最初から歩行、自律移動、人への受け渡し、実機での強化学習を扱うのではなく、まずはIsaac Lab上で物理的に成立する把持・持ち上げ条件を確認し、その周辺で強化学習ポリシーを構築・評価する方針です。

この記事では、プロジェクト最初の一週間で実装・検証した内容をまとめます。

  • Unitree G1 Inspire Handを使ったIsaac LabのRL環境
  • ボトル把持タスクを段階的に分けた理由
  • scripted arm trajectoryと12D hand residual PPO
  • wrist / thumb / fingerの接触姿勢の調整
  • AIを補助に使った接触・物理パラメータの診断
  • scripted grasp / lift baseline
  • 固定初期状態でのPPO lift / hold showcase
  • 次週に進めるランダム配置カリキュラム

なお、このプロジェクトは前回のGo2 inspection projectとは独立しています。

Go2のcamera、detector、dashboard、VLM / LLMの出力を、G1の移動、腕、手、grasp controlには接続していません。


目標:G1によるStationary Bottle Pick-and-Lift Reinforcement Learning

今回のv1で扱うタスクは、固定立位のG1がテーブル上の軽量なボトル形状オブジェクトを把持し、持ち上げ、保持することです。

fixed standing G1
  ↓
bottle-like objectへapproach
  ↓
grasp formation
  ↓
lift
  ↓
retention above the table

初期scopeは以下に限定しています。

  • fixed-base / fixed standing G1
  • Inspire five-finger hand
  • camera-freeのstate-based observation
  • DDS-freeのsimulation environment
  • teleoperation-free
  • lightweight bottle-like rigid object
  • armの大きな軌道はscripted
  • PPOは右手12関節のresidual controlを担当

実機でのonline RL explorationは行いません。

また、simulation上の成功は、そのまま実機性能や安全性を意味するものではありません。


なぜ最初から19D End-to-End PPOにしなかったか

最初は、右腕7自由度と右手12自由度を同時に扱うBottlePickLift taskも用意しました。

right arm:
  7D

right Inspire Hand:
  12D

total:
  19D

ただし、ボトル把持には以下の課題が同時に含まれます。

arm approach
  + wrist orientation
  + thumb opposition
  + finger contact
  + object retention
  + lift trajectory

これらを最初からPPOだけで探索させると、失敗したときに原因を切り分けにくくなります。

例えば、ボトルを落とした場合でも、

  • arm positionがずれていたのか
  • wrist rollが合っていなかったのか
  • thumbが早く閉じすぎたのか
  • finger contactが弱かったのか
  • lift trajectoryが急すぎたのか

を判断しにくくなります。

そのため、今回のプロジェクトではタスクを段階的に分けました。

Stage 1:
  safe pre-grasp poseを作る

Stage 2:
  scripted arm trajectoryの周辺で、
  hand contactとretentionを検証する

Stage 3:
  broader approach + grasp + liftへ広げる

Stage 4:
  bounded object-position randomizationを導入する

現在は、armの大きな軌道をscriptedに固定し、PPOには右手Inspire Handの12D residual actionを担当させています。

PPOの役割は、ゼロから腕全体の動きを探索することではなく、既知の接触姿勢の周辺でfinger contact、anti-slip、retentionを調整することです。


今週できたこと

プロジェクト最初の一週間では、主に以下を実装・検証しました。

  • Unitree G1 Inspire Hand assetを使ったfixed-base RL taskを構築
  • dynamic object physicsとcontact sensorを使うsceneを構築
  • PPO training、checkpoint、deterministic playback、MP4 recordingを確認
  • self-collisionを考慮したsafe pre-grasp taskを構築
  • safe → ingress → grasp → liftのscripted arm phase controllerを実装
  • 右手12D residual actionを使うPPO taskを構築
  • thumbが早く閉じてボトルを押し出すfailureを確認
  • delayed hand activationとminimum pre-shapeを導入
  • wrist roll、thumb yaw、thumb pitchの接触姿勢を診断
  • 600 ml-classの外形を参考にしたbottle-like rigid objectを作成
  • slow contact / squeeze / lift trajectoryを実装
  • scripted baselineでformal retention-and-lift successを確認
  • scripted baselineを中心にしたBottleSlowPPO taskを構築
  • 128 parallel environments、300 iterationsでfresh PPO trainingを実行
  • deterministic PPO playbackで、固定初期状態のボトルlift / hold showcaseを記録

単にPPOを実行するだけではなく、接触が成立する前の姿勢、hand geometry、actual joint position、物理的なfailureを確認しながら、学習対象を段階的に整理できたことが最初の一週間の大きな進捗です。


Stage 1:BottlePreGrasp curriculumでsafe final-approachを作る

最初のStage 1では、ボトルを把持する前段階として、G1の右腕をボトル近傍まで安全に近づけるBottlePreGrasp curriculumを構築しました。

ここでの目的は、単にtarget markerへ到達することではありません。

後続のgraspにつながる手の向きと腕の姿勢を保ちながら、robot torsoを不自然にすり抜けない、物理的に実現可能なfinal-approach trajectoryを作ることです。

最初に、green target markerの位置をボトルの中下部に近い位置まで下げました。

これにより、ボトル上部へ手を伸ばすだけではなく、将来のthumb-to-finger oppositionにつながるpre-grasp geometryを目指す設定に変更しました。

最初の7D arm-only PPO

最初のbaselineでは、右腕7自由度をPPOで制御する7D arm-only policyを使用しました。

right arm action:
  7D

wrist:
  PPOで制御

このpolicyでは、target markerに向かって滑らかに接近し、近傍で停止する挙動を確認できました。

しかし、grasp aperture geometryの確認とdeterministic playbackを行うと、wrist actionが自由であるため、虎口側から不自然にapproachする姿勢が許されてしまうことが分かりました。

つまり、targetに近づくというrewardだけでは、後続のgraspに適した手首姿勢が必ずしも得られないことが分かりました。

Failure case 1:free wrist policyによる不自然な虎口側approach

https://youtu.be/-XFHvZw87P4

この結果を受け、wrist yaw・roll・pitchをPPO actionから外し、shoulderとelbowのみを制御する4D FixedWrist curriculumを実装しました。

PPO action:
  shoulder / elbowの4D

wrist:
  fixed

FixedWrist taskでは、手首の姿勢を固定したまま、ボトル方向へ接近するbehaviorを確認できました。

ただし、より長いtraining後のdeterministic playbackでは、別の問題が見つかりました。

armがtorsoに不自然に重なるself-intersection shortcutを使い、target近傍へ到達するtrajectoryです。

target rewardだけを見ると接近に成功しているように見えますが、実際には後続のmanipulationにつながらない不自然な姿勢です。

Failure case 2:torsoを通過するself-intersection shortcut

https://youtu.be/d84uXTVQWWw

この問題に対して、articulation self-collisionを有効化しました。

self-collisionを有効にすると、以前のようなtorsoを横切るtrajectoryは実行できなくなりました。

一方で、default poseからPPOに探索させるだけでは、self-collisionを避けながらボトルへ近づく合法的なtrajectoryを見つけることが難しいことも分かりました。

そこで、self-collision有効状態でもscripted actionでボトルへ自然にapproachできることを先に確認しました。

そのtrajectoryからsafe early arm poseを抽出し、新しいself-collision curriculum taskのreset / default poseとして設定しました。

最終的に、以下のようなStage 1 taskへ整理しました。

task:
  BottlePreGraspFixedWristSelfCollision

PPO action:
  shoulder / elbowの4D

wrist:
  fixed open pose

self-collision:
  enabled

reset pose:
  scripted diagnosticから抽出したsafe early arm pose

このtaskでは、armがtorso外側からボトルへapproachすることを重視しています。

最良runの最終stochastic rolloutでは、以下の値を確認しました。

pregrasp_success:
  0.5625

この結果は、graspやliftの成功を意味するものではありません。

ただし、rewardだけを高くするのではなく、self-collisionを含む物理的に実現可能なtrajectoryを維持したRL curriculumへ改善できたことが、Stage 1の成果です。

Stage 1:self-collision enabled safe pre-grasp demo

https://youtu.be/dDVuxXmI3E8


Stage 2:scripted arm trajectoryと12D hand residual PPO

Stage 2では、armの大きな移動をPPOに任せず、phase controllerとしてscriptedに与えています。

Phase 0:
  safe pose

Phase 1:
  ingress pose

Phase 2:
  grasp pose

Phase 3:
  lift / hold pose

PPOが出力するのは、右手Inspire Handの12D residual actionです。

state observation:
  53D

PPO action:
  right hand residual 12D

residual scale:
  0.08 rad

概念的には、以下の構成です。

scripted arm trajectory
  + scripted hand target
  + PPO hand residual
  ↓
contact adaptation / anti-slip correction

この構成により、policyは広いarm approachを再発見するのではなく、既知の把持trajectory周辺で、接触時の手指の小さな調整を学びます。


最初に見えたfailure:親指が早く閉じてボトルを押し出す

初期のhand-only PPOでは、親指がingress完了前に閉じ始め、ボトルを横方向へ押してしまうfailureが見られました。

thumb closes too early
  ↓
object is pushed away
  ↓
unstable contact / object-out-of-workspace

この問題に対して、hand actionをphase-gateしました。

before grasp phase:
  default / open hand target

from grasp phase:
  scripted pre-shape + PPO residual

さらに、PPO residualがfinger pre-shapeを打ち消して、指を再び開いてしまわないように、grasp / lift phaseではminimum pre-shapeを下回らないclampも入れました。

target:
  max(scripted pre-shape, scripted pre-shape + PPO residual)

この変更により、早期のthumb pushによるobject-out-of-workspaceは大きく減りました。

Failure demo:親指が早く閉じてボトルを押してしまう

https://youtu.be/-zFxEnWNDJk


AIを補助に使った接触・物理パラメータの診断

ロボットハンドの物理接触、joint limit、thumb opposition、hand stiffness、trajectory timingの調整は、自分の専門領域ではありません。

そのため今回は、AIを補助的な技術パートナーとして使いながら、物理的な仮説を立て、Isaac Lab上のdiagnostic scriptで確認する形で進めました。

ただし、AIの提案をそのまま採用するのではなく、以下を必ず確認しています。

AI-assisted hypothesis
  ↓
scripted diagnosticを作る
  ↓
action targetを確認する
  ↓
actual joint positionを確認する
  ↓
videoで接触形状を見る
  ↓
termination resultを確認する

特に重要だったのは、joint targetが設定されていることと、実際にそのjointが期待通りに動くことは別だと分かった点です。

接触時には、一部のfinger intermediate jointやthumb jointがtargetまで到達せず、contact geometryやcollisionの影響を受けていました。

そのため、target angleだけを大きくし続けるのではなく、手首、親指、四指の相対位置と、接触までのtrajectoryを見直しました。


wrist rollとthumb oppositionの調整

接触を確認した結果、親指が上方向からボトルを押す姿勢よりも、finger bankに対して横から向かい合うside-oppositionに近い形の方が有望でした。

scripted diagnosticで使用した代表的な設定は以下です。

wrist roll:
  -0.25 rad

thumb yaw:
  +0.50 rad

thumb pitch:
  approximately +0.025 rad

contact close:
  four fingers: +0.42 rad
  thumb intermediate: +0.32 rad
  thumb distal: +0.40 rad

deeper squeeze:
  four fingers: +0.70 rad
  thumb intermediate: +0.38 rad
  thumb distal: +0.46 rad

hand stiffness:
  50

この値は実機向けの最適値ではなく、現在のsimulation asset、bottle geometry、固定初期状態に対して確認した値です。

また、thumb pitchはsoft joint limitの近くにあるため、diagnosticではrequested targetだけでなく、clamp後のeffective targetも確認しました。


600 ml-class bottle-like objectを作成

初期にはsmooth cylinder proxyも使っていましたが、ボトルらしい肩、neck、capを持つ形状との接触も確認したくなりました。

そのため、single rigid bodyとして動くbottle-like objectを用意しました。

type:
  single rigid-body bottle-like object

approximate total height:
  0.225 m

main body diameter:
  0.068 m

mass:
  0.08 kg

外形は、一般的な600 ml-classのround PET bottleを参考にしています。

ただし、これは外形を近づけたsimulation proxyです。

実際に飲料が入った市販ペットボトルの質量分布、柔軟性、表面摩擦、内容液の揺れなどを完全に再現したものではありません。

image (1)


abrupt closeのfailureとslow contact trajectory

手のtargetを急にclose側へ切り替えると、ボトルが最初の接触で倒れてしまうことがありました。

abrupt close
  ↓
first contact shock
  ↓
bottle topples / slips

このfailureから、最終的なclose targetだけではなく、そこに到達する時間的な過程が重要だと分かりました。

そこで、scripted grasp sequenceを以下のように変更しました。

step 80:
  thumb side preposition

step 120–200:
  slow contact ramp

step 201–270:
  slow squeeze ramp

step 270–300:
  squeeze hold

step 300–360:
  slow arm lift ramp

step 360 onward:
  lift hold

このslow trajectoryは、AIを補助に立てた「接触衝撃を減らし、最初に安定したcontactを作る」という仮説を、simulation diagnosticで検証したものです。

Failure demo:abrupt closeでボトルが倒れる

https://youtu.be/hlQgO7-655w

Slow contact / squeeze / lift demo

https://youtu.be/Z8O8eDzKrfw


scripted baselineでformal retention-and-lift successを確認

slow contact / slow squeeze / slow lift sequenceを使い、固定初期状態のbottle taskでscripted baselineを実行しました。

このtaskでは、objectが少し動いたことや、fingerが触れたことだけでは成功にしていません。

success判定には、以下のような条件を入れています。

lift phase

+ bottle center height exceeds the resting reference by at least 1 cm
+ hand-to-object distance < 0.09 m
+ object uprightness >= 0.85
+ object speed < 0.15 m/s
+ 24 consecutive valid steps

scripted diagnosticでは、以下を確認できました。

CONTACT_TARGET_VERIFICATION:
  PASS

SQUEEZE_TARGET_VERIFICATION:
  PASS

LIFT_TARGET_VERIFICATION:
  PASS

retention_lift_success:
  True

object_out_of_workspace:
  False

maximum bottle-center lift delta:
  +0.019683 m

最大のbottle center lift deltaは約1.97 cmでした。

つまり、固定初期状態・単一のsimulator configurationではありますが、現在の手首・親指姿勢とslow trajectoryで、ボトルをテーブルから持ち上げて保持するscripted simulation baselineを確認できました。

ここで確認できたのは、後続RLのための物理的に成立するbaselineです。

Scripted bottle grasp / lift baseline demo

https://youtu.be/b5Gxa0UoIMA


scripted baselineを中心にしたBottleSlowPPO

scripted baselineが成立した後、そのtrajectory周辺で12D residual hand policyを学習するtaskを作りました。

task:
  BottleGraspRetentionUnderLiftBottleSlowPPO

arm:
  scripted safe / ingress / slow lift

hand:
  side-open → contact ramp → squeeze ramp
  + 12D PPO residual

object:
  same bottle-like rigid object

hand stiffness:
  50

PPOは、ボトルを見つけて腕を大きく動かすpolicyではありません。

現在の目的は、scripted baselineの周辺で以下のような作用を学習できるか確認することです。

contact adaptation
anti-slip correction
small finger adjustments
retention support during lift

学習は以下の条件で実行しました。

parallel environments:
  128

iterations:
  300

total timesteps:
  921,600

action:
  12D right-hand residual

PPO trainingとdeterministic showcase

300 iterationsのfresh PPO trainingでは、training、checkpoint保存、deterministic playback、MP4 recordingまで一連のworkflowを確認できました。

最終stochastic rolloutでは、以下の値でした。

mean reward:
  +1.69

lift_phase_retention:
  +0.0586

object_out_of_workspace:
  0.0547

retention_lift_success:
  0.0000

stochastic rolloutでのformal retention successは、まだ確認できていません。

一方で、固定初期状態でmodel_299をdeterministic playbackしたところ、ボトルが持ち上がる挙動を確認できました。

さらに、success時の即時resetだけをdemo用に無効化したshowcase taskで録画した結果、dynamic physicsとPPO inferenceを維持したまま、ボトルを把持・持ち上げ・保持する約10秒のclipを記録できました。

現在のprimary demoは、以下のように表現しています。

G1 Inspire-Hand Bottle Lift with PPO Residual Control
Isaac Lab Simulation — Fixed Initial Bottle State


Showcaseの評価条件

今回のPPO showcaseは、以下の固定条件で実行しています。

robot:
  fixed-base G1

object:
  fixed initial bottle state

arm:
  scripted bounded trajectory

policy:
  deterministic PPO checkpoint playback

hand control:
  12D Inspire Hand residual action

observation:
  camera-free state-based observation

この動画は、ランダム配置、camera input、実機評価を含むものではありません。


Current PPO showcase:fixed initial bottle stateでのlift / hold

https://youtu.be/JvaytpEHYVU

この動画で確認している内容は以下です。

deterministic PPO inference
+ scripted arm trajectory
+ dynamic bottle physics
+ visible grasp
+ tabletop lift
+ visible hold

一方で、現時点では以下を示すものではありません。

stochastic formal success
random-placement robustness
arbitrary bottle generalization
real robot performance
sim-to-real transfer

現時点での構成

現在のpipelineは、概念的には以下のようになっています。

G1 Inspire Hand asset
  ↓
fixed-base Isaac Lab scene
  ↓
scripted safe / ingress / grasp / lift phases
  ↓
bottle-like dynamic rigid object
  ↓
state observation (53D)
  ↓
12D right-hand PPO residual
  ↓
retention-and-lift termination
  ↓
checkpoint / deterministic playback / MP4

前回のGo2 inspection projectでは、camera input、object detection、ROI geometry、operator advisoryを扱いました。

今回のprojectでは、cameraやLLMでrobotを直接制御するのではなく、simulation上で以下の要素を中心に扱っています。

robot hand kinematics
contact geometry
rigid-body dynamics
reward / termination design
PPO training
deterministic evaluation

今週の成果と現時点の限界

プロジェクト最初の一週間の進捗として、以下は確認できました。

  • G1 Inspire Handを使ったIsaac Lab RL environment
  • self-collisionを考慮したpre-grasp task
  • scripted arm phase controller
  • 12D hand residual PPO
  • wrist / thumb / fingerの接触姿勢のdiagnostic
  • slow contact / squeeze / lift trajectory
  • bottle-like objectでのscripted retention-and-lift baseline
  • PPO training / checkpoint / playback / video workflow
  • fixed initial stateでのdeterministic PPO lift-and-hold showcase

一方で、以下は今後の課題です。

  • stochastic rolloutでのformal retention success
  • zero-residual scripted baselineに対するPPO residualの定量比較
  • bottle initial positionを変えた場合の成功率
  • held-out offsetでのevaluation
  • mass / friction variation
  • perception integration
  • sim-to-real transfer
  • real G1 evaluation

今回の成果は、「任意の位置にあるボトルをG1が自律的に把持できる」という段階ではありません。

より正確には、以下の段階まで来ています。

固定位置のbottle-like objectに対して、物理的に成立するscripted grasp / lift baselineを作り、その周辺で12D hand residual PPOを学習・再生・可視化できる環境を構築した。


次週:random-placement curriculumへ

次週は、固定初期位置だけでなく、テーブル上のボトル位置を小さく変化させるrandom-placement curriculumに進む予定です。

最初から大きなrandomizationを入れるのではなく、現在のscripted arm trajectoryで到達可能な範囲から始めます。

初期案は以下です。

bottle x:
  nominal position ± 0.015 m

bottle y:
  nominal position ± 0.015 m

yaw:
  fixed initially

mass / friction:
  fixed initially

現在のpolicyはhand residualのみを制御し、armはscriptedです。

そのため、次の段階で検証したいのは「任意位置のボトルを取れるか」ではなく、nominal grasp geometryの近傍にある小さな位置ずれに対して、hand contactがどこまで対応できるかです。

また、fixed-stateのzero-residual scripted baselineとdeterministic PPO policyを比較し、PPO residualがscripted priorに対してどのような影響を持つかも確認していく予定です。

その後、held-out offsetを使いながら、成功率、termination distribution、videoを分けて評価できる環境へ進めていきます。


まとめ

今回は、Unitree G1 Inspire Handを対象に、Isaac Labでボトル把持・持ち上げを扱う強化学習プロジェクトを開始しました。

プロジェクト最初の一週間で、以下のworkflowを構築できました。

safe pre-grasp
  ↓
scripted arm phases
  ↓
AI-assisted contact geometry diagnosis
  ↓
slow contact / squeeze / lift baseline
  ↓
formal retention-and-lift validation
  ↓
12D hand residual PPO
  ↓
deterministic playback / showcase video

特に、接触を含むロボットhand taskでは、PPOをすぐに長時間回すだけではなく、AIを補助として使いながら、wrist roll、thumb opposition、finger target、stiffness、trajectory timingをdiagnosticで一つずつ確認する重要性を実感しました。

現時点では、固定初期状態におけるscripted baselineと、PPOを組み込んだdeterministic lift / hold showcaseを確認できた段階です。

次週は、small bounded random-placement curriculumを導入し、固定位置だけではない条件へ少しずつ広げていく予定です。

simulation上の成功をそのまま実機性能や安全性とみなさず、taskの範囲、評価条件、failure caseを分けながら、段階的にG1のボトル把持・持ち上げ強化学習プロジェクトを進めていきます。

この記事をシェアする

関連記事