Add files using upload-large-folder tool
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +364 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5/data/chunk-000/episode_000000.parquet +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5/data/chunk-000/episode_000001.parquet +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5/data/chunk-000/episode_000002.parquet +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5/data/chunk-000/episode_000003.parquet +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.front/episode_000000.mp4 +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.front/episode_000001.mp4 +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.front/episode_000002.mp4 +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.front/episode_000003.mp4 +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.front/episode_000004.mp4 +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.wrist/episode_000000.mp4 +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.wrist/episode_000001.mp4 +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.wrist/episode_000002.mp4 +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.wrist/episode_000003.mp4 +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.wrist/episode_000004.mp4 +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5_with_mask/data/chunk-000/episode_000000.parquet +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5_with_mask/masks/chunk-000/observation.images.front/episode_000000_masks.npz +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5_with_mask/masks/chunk-000/observation.images.wrist/episode_000000_masks.npz +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5_with_mask/videos/chunk-000/observation.images.front/episode_000000.mp4 +3 -0
- Isaac-GR00T/demo_data/cube_to_bowl_5_with_mask/videos/chunk-000/observation.images.wrist/episode_000000.mp4 +3 -0
- Isaac-GR00T/demo_data/droid_sample/data/chunk-000/episode_000000.parquet +3 -0
- Isaac-GR00T/demo_data/droid_sample/data/chunk-000/episode_000001.parquet +3 -0
- Isaac-GR00T/demo_data/droid_sample/data/chunk-000/episode_000002.parquet +3 -0
- Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.exterior_1_left/episode_000000.mp4 +3 -0
- Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.exterior_1_left/episode_000001.mp4 +3 -0
- Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.exterior_1_left/episode_000002.mp4 +3 -0
- Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.wrist_left/episode_000000.mp4 +3 -0
- Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.wrist_left/episode_000001.mp4 +3 -0
- Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.wrist_left/episode_000002.mp4 +3 -0
- Isaac-GR00T/demo_data/simplerenv_bridge_sample/data/chunk-000/episode_000000.parquet +3 -0
- Isaac-GR00T/demo_data/simplerenv_bridge_sample/data/chunk-000/episode_000001.parquet +3 -0
- Isaac-GR00T/demo_data/simplerenv_bridge_sample/data/chunk-000/episode_000002.parquet +3 -0
- Isaac-GR00T/demo_data/simplerenv_bridge_sample/videos/chunk-000/observation.images.image_0/episode_000000.mp4 +3 -0
- Isaac-GR00T/demo_data/simplerenv_bridge_sample/videos/chunk-000/observation.images.image_0/episode_000001.mp4 +3 -0
- Isaac-GR00T/demo_data/simplerenv_bridge_sample/videos/chunk-000/observation.images.image_0/episode_000002.mp4 +3 -0
- Isaac-GR00T/examples/DROID/README.md +110 -0
- Isaac-GR00T/examples/DROID/main_gr00t.py +503 -0
- Isaac-GR00T/examples/DROID/server_client.py +395 -0
- Isaac-GR00T/examples/DROID/utils.py +81 -0
- Isaac-GR00T/examples/GR00TWholeBodyControl/README.md +115 -0
- Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_apple_01_retry_success.jpg +0 -0
- Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_apple_02_adjust_success.jpg +0 -0
- Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_flashlight_01_smooth_success.jpg +0 -0
- Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_flashlight_02_pickup_success.jpg +0 -0
- Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_fruit_01_pickup_success.jpg +0 -0
- Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_fruit_02_regrasp_success.jpg +0 -0
- Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_lamp_01_pickup_success.jpg +0 -0
- Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_lamp_02_base_grasp_success.jpg +0 -0
- Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_scoop_01_pickup_success.jpg +0 -0
- Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_scoop_02_noisy_success.jpg +0 -0
.gitattributes
CHANGED
|
@@ -791,3 +791,367 @@ GR00T-WholeBodyControl/decoupled_wbc/dexmg/gr00trobocasa/robocasa/models/assets/
|
|
| 791 |
GR00T-WholeBodyControl/decoupled_wbc/dexmg/gr00trobocasa/robocasa/models/assets/robots/unitree_g1/meshes/logo_link.STL filter=lfs diff=lfs merge=lfs -text
|
| 792 |
GR00T-WholeBodyControl/decoupled_wbc/dexmg/gr00trobocasa/robocasa/models/assets/robots/unitree_g1/meshes/right_shoulder_yaw_link.STL filter=lfs diff=lfs merge=lfs -text
|
| 793 |
GR00T-WholeBodyControl/decoupled_wbc/dexmg/gr00trobocasa/robocasa/models/assets/robots/unitree_g1/meshes/waist_yaw_link_rev_1_0.STL filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 791 |
GR00T-WholeBodyControl/decoupled_wbc/dexmg/gr00trobocasa/robocasa/models/assets/robots/unitree_g1/meshes/logo_link.STL filter=lfs diff=lfs merge=lfs -text
|
| 792 |
GR00T-WholeBodyControl/decoupled_wbc/dexmg/gr00trobocasa/robocasa/models/assets/robots/unitree_g1/meshes/right_shoulder_yaw_link.STL filter=lfs diff=lfs merge=lfs -text
|
| 793 |
GR00T-WholeBodyControl/decoupled_wbc/dexmg/gr00trobocasa/robocasa/models/assets/robots/unitree_g1/meshes/waist_yaw_link_rev_1_0.STL filter=lfs diff=lfs merge=lfs -text
|
| 794 |
+
Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/videos/mixed_pickup_lamp_01_pickup_success.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 795 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/textures/yellow_linen_wall_texture.png filter=lfs diff=lfs merge=lfs -text
|
| 796 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/textures/smooth_light_gray_plaster.png filter=lfs diff=lfs merge=lfs -text
|
| 797 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/textures/brown_ceramic_tile.png filter=lfs diff=lfs merge=lfs -text
|
| 798 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/textures/martin_novak_wood_table.png filter=lfs diff=lfs merge=lfs -text
|
| 799 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/textures/light_floor.png filter=lfs diff=lfs merge=lfs -text
|
| 800 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/textures/white_marble_floor.png filter=lfs diff=lfs merge=lfs -text
|
| 801 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/textures/new_light_gray_plaster.png filter=lfs diff=lfs merge=lfs -text
|
| 802 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/white_storage_box/ceramic.png filter=lfs diff=lfs merge=lfs -text
|
| 803 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/black_book/black_book_texture.png filter=lfs diff=lfs merge=lfs -text
|
| 804 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/wine_rack_stand/metal.png filter=lfs diff=lfs merge=lfs -text
|
| 805 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/moka_pot/metal_diff.png filter=lfs diff=lfs merge=lfs -text
|
| 806 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/moka_pot/rubber_black.png filter=lfs diff=lfs merge=lfs -text
|
| 807 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/wine_rack/light-wood.png filter=lfs diff=lfs merge=lfs -text
|
| 808 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/wine_rack/light_yellow_metal.png filter=lfs diff=lfs merge=lfs -text
|
| 809 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/wine_rack/metal.png filter=lfs diff=lfs merge=lfs -text
|
| 810 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/bowl_drainer/ceramic.png filter=lfs diff=lfs merge=lfs -text
|
| 811 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/red_coffee_mug/red_coffee_mug_texture.png filter=lfs diff=lfs merge=lfs -text
|
| 812 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/white_yellow_mug/white_yellow_mug_texture.png filter=lfs diff=lfs merge=lfs -text
|
| 813 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/porcelain_mug/porcelain_mug_texture.png filter=lfs diff=lfs merge=lfs -text
|
| 814 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/dining_set_group/white_linen_texture.png filter=lfs diff=lfs merge=lfs -text
|
| 815 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/wooden_tray/crate_mat_BaseColor.png filter=lfs diff=lfs merge=lfs -text
|
| 816 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/dining_set_group/metal.png filter=lfs diff=lfs merge=lfs -text
|
| 817 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/wine_bottle/cork_texture.png filter=lfs diff=lfs merge=lfs -text
|
| 818 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/wine_bottle/label_wine.png filter=lfs diff=lfs merge=lfs -text
|
| 819 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/flat_stove/stove_knob_button/button_dark_texture.png filter=lfs diff=lfs merge=lfs -text
|
| 820 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/short_fridge/base/visual/base_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 821 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/basin_faucet/basin_faucet_base/visual/basin_faucet_base_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 822 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/short_cabinet/base/dark-wood.png filter=lfs diff=lfs merge=lfs -text
|
| 823 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/short_cabinet/drawer_low/visual/drawer_low_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 824 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/short_cabinet/drawer_middle/visual/drawer_middle_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 825 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/short_cabinet/drawer_high/visual/drawer_high_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 826 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_scanned_objects/chefmate_8_frypan/texture.png filter=lfs diff=lfs merge=lfs -text
|
| 827 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_scanned_objects/basket/texture.png filter=lfs diff=lfs merge=lfs -text
|
| 828 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/wine_bottle/Cork_Texture_by_faycop.jpg filter=lfs diff=lfs merge=lfs -text
|
| 829 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/desk_caddy/desk_caddy_texture.png filter=lfs diff=lfs merge=lfs -text
|
| 830 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/desk_caddy/visual/desk_caddy_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 831 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/wine_bottle/visual/wine_bottle_red_main_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 832 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/dining_set_group/visual/dining_set_utensils_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 833 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/porcelain_mug/visual/porcelain_mug_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 834 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/white_yellow_mug/visual/white_yellow_mug_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 835 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/red_coffee_mug/visual/red_coffee_mug_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 836 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/bowl_drainer/visual/bowl_drainer_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 837 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/moka_pot/visual/moka_pot_body_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 838 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/yellow_book/visual/yellow_book_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 839 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/turbosquid_objects/black_book/visual/black_book_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 840 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/short_fridge/metal.png filter=lfs diff=lfs merge=lfs -text
|
| 841 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/basin_faucet/ceramic.png filter=lfs diff=lfs merge=lfs -text
|
| 842 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/textures/metal1.png filter=lfs diff=lfs merge=lfs -text
|
| 843 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/textures/metal2.png filter=lfs diff=lfs merge=lfs -text
|
| 844 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/white_cabinet/metal.png filter=lfs diff=lfs merge=lfs -text
|
| 845 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/flat_stove/metal.png filter=lfs diff=lfs merge=lfs -text
|
| 846 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/white_cabinet/white_wood.png filter=lfs diff=lfs merge=lfs -text
|
| 847 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/flat_stove/button_dark_texture.png filter=lfs diff=lfs merge=lfs -text
|
| 848 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/flat_stove/steel-scratched.png filter=lfs diff=lfs merge=lfs -text
|
| 849 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/wooden_cabinet/metal.png filter=lfs diff=lfs merge=lfs -text
|
| 850 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/wooden_cabinet/wooden_cabinet_top_handle/metal.png filter=lfs diff=lfs merge=lfs -text
|
| 851 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/wooden_cabinet/wooden_cabinet_middle_handle/metal.png filter=lfs diff=lfs merge=lfs -text
|
| 852 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/flat_stove/stove_knob_base/steel-scratched.png filter=lfs diff=lfs merge=lfs -text
|
| 853 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/articulated_objects/flat_stove/stove_knob_button/steel-scratched.png filter=lfs diff=lfs merge=lfs -text
|
| 854 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_scanned_objects/plate/texture.png filter=lfs diff=lfs merge=lfs -text
|
| 855 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_scanned_objects/white_bowl/texture.png filter=lfs diff=lfs merge=lfs -text
|
| 856 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_scanned_objects/glazed_rim_porcelain_ramekin/texture.png filter=lfs diff=lfs merge=lfs -text
|
| 857 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_scanned_objects/akita_black_bowl/texture.png filter=lfs diff=lfs merge=lfs -text
|
| 858 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_scanned_objects/red_bowl/visual/model_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 859 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_scanned_objects/basin_faucet_base/visual/basin_faucet_base_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 860 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_scanned_objects/red_bowl/texture.png filter=lfs diff=lfs merge=lfs -text
|
| 861 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_scanned_objects/simple_rack/visual/simple_rack_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 862 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_scanned_objects/glazed_rim_porcelain_ramekin/visual/glazed_rim_porcelain_ramekin_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 863 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_scanned_objects/akita_black_bowl/visual/akita_black_bowl_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 864 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_scanned_objects/white_bowl/visual/model_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 865 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_scanned_objects/plate/visual/model_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 866 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_scanned_objects/chefmate_8_frypan/visual/chefmate_8_frypan_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 867 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_scanned_objects/basket/visual/basket_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 868 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/orange_juice/texture_map.png filter=lfs diff=lfs merge=lfs -text
|
| 869 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/ketchup/texture_map.png filter=lfs diff=lfs merge=lfs -text
|
| 870 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/macaroni_and_cheese/texture_map.png filter=lfs diff=lfs merge=lfs -text
|
| 871 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/alphabet_soup/texture_map.png filter=lfs diff=lfs merge=lfs -text
|
| 872 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/cookies/texture_map.png filter=lfs diff=lfs merge=lfs -text
|
| 873 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/chocolate_pudding/texture_map.png filter=lfs diff=lfs merge=lfs -text
|
| 874 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/cream_cheese/texture_map.png filter=lfs diff=lfs merge=lfs -text
|
| 875 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/new_salad_dressing/texture_map.png filter=lfs diff=lfs merge=lfs -text
|
| 876 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/salad_dressing/texture_map.png filter=lfs diff=lfs merge=lfs -text
|
| 877 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/butter/texture_map.png filter=lfs diff=lfs merge=lfs -text
|
| 878 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/milk/texture_map.png filter=lfs diff=lfs merge=lfs -text
|
| 879 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/tomato_sauce/texture_map.png filter=lfs diff=lfs merge=lfs -text
|
| 880 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/popcorn/texture_map.png filter=lfs diff=lfs merge=lfs -text
|
| 881 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/bbq_sauce/texture_map.png filter=lfs diff=lfs merge=lfs -text
|
| 882 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/bbq_sauce/visual/bbq_sauce_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 883 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/popcorn/visual/popcorn_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 884 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/tomato_sauce/visual/textured_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 885 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/milk/visual/textured_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 886 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/butter/visual/butter_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 887 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/salad_dressing/visual/textured_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 888 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/new_salad_dressing/visual/textured_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 889 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/chocolate_pudding/visual/textured_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 890 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/cream_cheese/visual/cream_cheese_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 891 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/cookies/visual/cookies_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 892 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/alphabet_soup/visual/textured_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 893 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/ketchup/visual/textured_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 894 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/macaroni_and_cheese/visual/textured_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 895 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/stable_hope_objects/orange_juice/visual/textured_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 896 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/short_coffee_table/Marble062_COL_4K.png filter=lfs diff=lfs merge=lfs -text
|
| 897 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/coffee_table_seats/FabricLeatherBuffaloRustic001_COL_VAR1_4K.png filter=lfs diff=lfs merge=lfs -text
|
| 898 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/desk/desk_texture.png filter=lfs diff=lfs merge=lfs -text
|
| 899 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/black_book/black_book_texture.png filter=lfs diff=lfs merge=lfs -text
|
| 900 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/study_background/study_background.png filter=lfs diff=lfs merge=lfs -text
|
| 901 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/wall_decoration/wall_decoration_texture.jpg filter=lfs diff=lfs merge=lfs -text
|
| 902 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/kitchen_background/kitchen_background.png filter=lfs diff=lfs merge=lfs -text
|
| 903 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/wall_decoration/wall_decoration_texture.png filter=lfs diff=lfs merge=lfs -text
|
| 904 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/plant/plant_texture.png filter=lfs diff=lfs merge=lfs -text
|
| 905 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/fridge/metal.png filter=lfs diff=lfs merge=lfs -text
|
| 906 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/fridge/steel-scratched.png filter=lfs diff=lfs merge=lfs -text
|
| 907 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/living_room_table/living_room_table_texture.png filter=lfs diff=lfs merge=lfs -text
|
| 908 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/study_wall_painting/study_wall_painting.png filter=lfs diff=lfs merge=lfs -text
|
| 909 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/office_book_shelf/ceramic.png filter=lfs diff=lfs merge=lfs -text
|
| 910 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/kitchen_background_hot_pot/visual/kitchen_background_hot_pot_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 911 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/living_room_table/collision/living_room_table_ch.stl filter=lfs diff=lfs merge=lfs -text
|
| 912 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/living_room_table/visual/living_room_table_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 913 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/fridge/visual/fridge_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 914 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/kitchen_background_pot/collision/kitchen_background_pot_ch.stl filter=lfs diff=lfs merge=lfs -text
|
| 915 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/plant/visual/plant_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 916 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/kitchen_background_stove/visual/kitchen_background_stove_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 917 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/kitchen_background_pot/visual/kitchen_background_pot_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 918 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/study_background/visual/study_background_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 919 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/kitchen_background/visual/kitchen_background_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 920 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/floor_lamp/collision/floor_lamp_ch.stl filter=lfs diff=lfs merge=lfs -text
|
| 921 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/floor_lamp/visual/floor_lamp_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 922 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/black_book/visual/black_book_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 923 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/living_room/visual/living_room_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 924 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/desk/visual/desk_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 925 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/coffee_table_seats/collision/coffee_table_seats_ch.stl filter=lfs diff=lfs merge=lfs -text
|
| 926 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/scenes/coffee_table_seats/visual/coffee_table_seats_vis.msh filter=lfs diff=lfs merge=lfs -text
|
| 927 |
+
Isaac-GR00T/external_dependencies/robocasa-gr1-tabletop-tasks/images/fig_task_v6.png filter=lfs diff=lfs merge=lfs -text
|
| 928 |
+
Isaac-GR00T/external_dependencies/robocasa-gr1-tabletop-tasks/images/fig_task_v6.pdf filter=lfs diff=lfs merge=lfs -text
|
| 929 |
+
Isaac-GR00T/external_dependencies/robocasa/docs/images/styles.png filter=lfs diff=lfs merge=lfs -text
|
| 930 |
+
Isaac-GR00T/external_dependencies/robocasa/docs/images/layouts.png filter=lfs diff=lfs merge=lfs -text
|
| 931 |
+
Isaac-GR00T/external_dependencies/robocasa/docs/images/robocasa-banner.jpg filter=lfs diff=lfs merge=lfs -text
|
| 932 |
+
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.wrist/episode_000002.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 933 |
+
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.wrist/episode_000000.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 934 |
+
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.wrist/episode_000004.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 935 |
+
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.wrist/episode_000003.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 936 |
+
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.wrist/episode_000001.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 937 |
+
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.front/episode_000000.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 938 |
+
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.front/episode_000002.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 939 |
+
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.front/episode_000004.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 940 |
+
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.front/episode_000001.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 941 |
+
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.front/episode_000003.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 942 |
+
Isaac-GR00T/demo_data/simplerenv_bridge_sample/videos/chunk-000/observation.images.image_0/episode_000000.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 943 |
+
Isaac-GR00T/demo_data/simplerenv_bridge_sample/videos/chunk-000/observation.images.image_0/episode_000002.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 944 |
+
Isaac-GR00T/demo_data/simplerenv_bridge_sample/videos/chunk-000/observation.images.image_0/episode_000001.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 945 |
+
Isaac-GR00T/demo_data/cube_to_bowl_5_with_mask/videos/chunk-000/observation.images.wrist/episode_000000.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 946 |
+
Isaac-GR00T/demo_data/cube_to_bowl_5_with_mask/videos/chunk-000/observation.images.front/episode_000000.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 947 |
+
Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.wrist_left/episode_000000.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 948 |
+
Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.wrist_left/episode_000001.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 949 |
+
Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.wrist_left/episode_000002.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 950 |
+
Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.exterior_1_left/episode_000000.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 951 |
+
Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.exterior_1_left/episode_000001.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 952 |
+
Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.exterior_1_left/episode_000002.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 953 |
+
Isaac-GR00T/scripts/deployment/spark/wheels/torchcodec-0.10.0a0-cp312-cp312-linux_aarch64.whl filter=lfs diff=lfs merge=lfs -text
|
| 954 |
+
Isaac-GR00T/scripts/deployment/dgpu/wheels/torchcodec-0.8.0-cp312-cp312-linux_aarch64.whl filter=lfs diff=lfs merge=lfs -text
|
| 955 |
+
Isaac-GR00T/scripts/deployment/orin/wheels/torchcodec-0.10.0a0-cp310-cp310-linux_aarch64.whl filter=lfs diff=lfs merge=lfs -text
|
| 956 |
+
Isaac-GR00T/scripts/deployment/thor/wheels/torchcodec-0.10.0a0-cp312-cp312-linux_aarch64.whl filter=lfs diff=lfs merge=lfs -text
|
| 957 |
+
Isaac-GR00T/scripts/deployment/spark/wheels/flash_attn-2.8.3-cp312-cp312-linux_aarch64.whl filter=lfs diff=lfs merge=lfs -text
|
| 958 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/images/fSpy_calibration_example.png filter=lfs diff=lfs merge=lfs -text
|
| 959 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/images/teaser.png filter=lfs diff=lfs merge=lfs -text
|
| 960 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/open_drawer_b2.png filter=lfs diff=lfs merge=lfs -text
|
| 961 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/open_drawer_c1.png filter=lfs diff=lfs merge=lfs -text
|
| 962 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/open_drawer_c0.png filter=lfs diff=lfs merge=lfs -text
|
| 963 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/open_drawer_a0.png filter=lfs diff=lfs merge=lfs -text
|
| 964 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/bridge_sink.png filter=lfs diff=lfs merge=lfs -text
|
| 965 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/open_drawer_c2.png filter=lfs diff=lfs merge=lfs -text
|
| 966 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/open_drawer_b0.png filter=lfs diff=lfs merge=lfs -text
|
| 967 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/bridge_real_eval_2.png filter=lfs diff=lfs merge=lfs -text
|
| 968 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/open_drawer_a2.png filter=lfs diff=lfs merge=lfs -text
|
| 969 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/open_drawer_b1.png filter=lfs diff=lfs merge=lfs -text
|
| 970 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/bridge_real_eval_1.png filter=lfs diff=lfs merge=lfs -text
|
| 971 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/open_drawer_a1.png filter=lfs diff=lfs merge=lfs -text
|
| 972 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/google_move_near_real_eval_1.png filter=lfs diff=lfs merge=lfs -text
|
| 973 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/debug/bridge_real_1.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 974 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/debug/bridge_real_2_cleanup.png filter=lfs diff=lfs merge=lfs -text
|
| 975 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/debug/bridge_real_2.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 976 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/debug/bridge_real_1_cleanup.png filter=lfs diff=lfs merge=lfs -text
|
| 977 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/hab2_bench_assets/stages/frl_apartment_stage_simple.glb filter=lfs diff=lfs merge=lfs -text
|
| 978 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/hab2_bench_assets/stages/Baked_sc1_staging_objaverse_cabinet2_h870.glb filter=lfs diff=lfs merge=lfs -text
|
| 979 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/hab2_bench_assets/stages/google_pick_coke_can_1_v4_alt_background_2.glb filter=lfs diff=lfs merge=lfs -text
|
| 980 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/hab2_bench_assets/stages/google_pick_coke_can_1_v4_no_roof.glb filter=lfs diff=lfs merge=lfs -text
|
| 981 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/hab2_bench_assets/stages/google_pick_coke_can_1_v4_alt_background.glb filter=lfs diff=lfs merge=lfs -text
|
| 982 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/hab2_bench_assets/stages/bridge_table_1_v2.glb filter=lfs diff=lfs merge=lfs -text
|
| 983 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/hab2_bench_assets/stages/minimalistic_modern_bedroom.glb filter=lfs diff=lfs merge=lfs -text
|
| 984 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/hab2_bench_assets/stages/google_pick_coke_can_1_v4.glb filter=lfs diff=lfs merge=lfs -text
|
| 985 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/hab2_bench_assets/stages/modern_office.glb filter=lfs diff=lfs merge=lfs -text
|
| 986 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/hab2_bench_assets/stages/Baked_sc1_staging_objaverse_cabinet1_h870.glb filter=lfs diff=lfs merge=lfs -text
|
| 987 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/hab2_bench_assets/stages/fractal_traj73_table.glb filter=lfs diff=lfs merge=lfs -text
|
| 988 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/hab2_bench_assets/stages/fractal_traj11_table.glb filter=lfs diff=lfs merge=lfs -text
|
| 989 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/hab2_bench_assets/stages/modern_bedroom_no_roof.glb filter=lfs diff=lfs merge=lfs -text
|
| 990 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/hab2_bench_assets/stages/modern_office_no_roof.glb filter=lfs diff=lfs merge=lfs -text
|
| 991 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/fractal/3289_0_cleanup.png filter=lfs diff=lfs merge=lfs -text
|
| 992 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/fractal/73_table_brighter.png filter=lfs diff=lfs merge=lfs -text
|
| 993 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/hab2_bench_assets/stages/bridge_table_1_v1.glb filter=lfs diff=lfs merge=lfs -text
|
| 994 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/fractal/805_0_cleanup_no_coke_can.png filter=lfs diff=lfs merge=lfs -text
|
| 995 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/fractal/1991_0_cleanup.png filter=lfs diff=lfs merge=lfs -text
|
| 996 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/fractal/805_0_cleanup.png filter=lfs diff=lfs merge=lfs -text
|
| 997 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/fractal/1495_0_cleanup.png filter=lfs diff=lfs merge=lfs -text
|
| 998 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/fractal/1539_0_cleanup_no_coke_can.png filter=lfs diff=lfs merge=lfs -text
|
| 999 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/fractal/another_counter_1.png filter=lfs diff=lfs merge=lfs -text
|
| 1000 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/fractal/1495_0_cleanup_no_coke_can.png filter=lfs diff=lfs merge=lfs -text
|
| 1001 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/fractal/1539_0_cleanup.png filter=lfs diff=lfs merge=lfs -text
|
| 1002 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/fractal/3289_0_cleanup_no_coke_can.png filter=lfs diff=lfs merge=lfs -text
|
| 1003 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/fractal/1257_0_cleanup.png filter=lfs diff=lfs merge=lfs -text
|
| 1004 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/fractal/1991_0_cleanup_no_coke_can.png filter=lfs diff=lfs merge=lfs -text
|
| 1005 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/bridge/bridge_sink_calibrate.png filter=lfs diff=lfs merge=lfs -text
|
| 1006 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/bridge/bridge_1_cleanup.png filter=lfs diff=lfs merge=lfs -text
|
| 1007 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/bridge/bridge_calibration.png filter=lfs diff=lfs merge=lfs -text
|
| 1008 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/bridge/stack_cube_1st_frame.png filter=lfs diff=lfs merge=lfs -text
|
| 1009 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/bridge/debug.png filter=lfs diff=lfs merge=lfs -text
|
| 1010 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/pick_coke_can_real_misc/google_standing_coke_can_c0_cleanup.png filter=lfs diff=lfs merge=lfs -text
|
| 1011 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/pick_coke_can_real_misc/google_coke_can_real_eval_1_brighter.png filter=lfs diff=lfs merge=lfs -text
|
| 1012 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/move_near_real_obj_variants/move_near_real_5_2.png filter=lfs diff=lfs merge=lfs -text
|
| 1013 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/move_near_real_obj_variants/move_near_real_1_2.png filter=lfs diff=lfs merge=lfs -text
|
| 1014 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/move_near_real_obj_variants/move_near_real_1_1.png filter=lfs diff=lfs merge=lfs -text
|
| 1015 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/move_near_real_obj_variants/move_near_real_3_1.png filter=lfs diff=lfs merge=lfs -text
|
| 1016 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/move_near_real_obj_variants/move_near_real_2_2.png filter=lfs diff=lfs merge=lfs -text
|
| 1017 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/move_near_real_obj_variants/move_near_real_4_1.png filter=lfs diff=lfs merge=lfs -text
|
| 1018 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/move_near_real_obj_variants/move_near_real_3_2.png filter=lfs diff=lfs merge=lfs -text
|
| 1019 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/move_near_real_obj_variants/move_near_real_4_2.png filter=lfs diff=lfs merge=lfs -text
|
| 1020 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/move_near_real_obj_variants/move_near_real_5_1.png filter=lfs diff=lfs merge=lfs -text
|
| 1021 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/real_inpainting/move_near_real_obj_variants/move_near_real_2_1.png filter=lfs diff=lfs merge=lfs -text
|
| 1022 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/stone_tabletop.glb filter=lfs diff=lfs merge=lfs -text
|
| 1023 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/7up_can/Pepsi1.001_baseColor.png filter=lfs diff=lfs merge=lfs -text
|
| 1024 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_orange_v2/textured.glb filter=lfs diff=lfs merge=lfs -text
|
| 1025 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_orange_v2/textured.baked.zero123plus.png filter=lfs diff=lfs merge=lfs -text
|
| 1026 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_orange_v2/textured.vis.glb filter=lfs diff=lfs merge=lfs -text
|
| 1027 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_coke_can/textured_cand1.glb filter=lfs diff=lfs merge=lfs -text
|
| 1028 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_coke_can/textured.glb filter=lfs diff=lfs merge=lfs -text
|
| 1029 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_coke_can/textured_toobright.glb filter=lfs diff=lfs merge=lfs -text
|
| 1030 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_coke_can/textured_bkup.glb filter=lfs diff=lfs merge=lfs -text
|
| 1031 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/opened_coke_can/Image_2.004.jpg filter=lfs diff=lfs merge=lfs -text
|
| 1032 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/bridge_spoon_generated_modified/Image_0.003.jpg filter=lfs diff=lfs merge=lfs -text
|
| 1033 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_redbull_can_v2_alt/textured.glb filter=lfs diff=lfs merge=lfs -text
|
| 1034 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_redbull_can_v2_alt/textured.baked.glb filter=lfs diff=lfs merge=lfs -text
|
| 1035 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_redbull_can_v2_alt/textured.baked.zero123plus.png filter=lfs diff=lfs merge=lfs -text
|
| 1036 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_apple/textured_cand1.glb filter=lfs diff=lfs merge=lfs -text
|
| 1037 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_redbull_can_v2_alt/textured.vis.glb filter=lfs diff=lfs merge=lfs -text
|
| 1038 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_apple/textured.glb filter=lfs diff=lfs merge=lfs -text
|
| 1039 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_apple/textured_toobright.glb filter=lfs diff=lfs merge=lfs -text
|
| 1040 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_apple/textured_bkup.glb filter=lfs diff=lfs merge=lfs -text
|
| 1041 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_coke_can_v2/textured.glb filter=lfs diff=lfs merge=lfs -text
|
| 1042 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_coke_can_v2/textured.baked.zero123plus.png filter=lfs diff=lfs merge=lfs -text
|
| 1043 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_coke_can_v2/textured.baked.glb filter=lfs diff=lfs merge=lfs -text
|
| 1044 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/coke_can/Image_2.004.jpg filter=lfs diff=lfs merge=lfs -text
|
| 1045 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_coke_can_v2/textured.vis.glb filter=lfs diff=lfs merge=lfs -text
|
| 1046 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_7up_can/textured_cand1.glb filter=lfs diff=lfs merge=lfs -text
|
| 1047 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_7up_can/textured.glb filter=lfs diff=lfs merge=lfs -text
|
| 1048 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_7up_can/textured_toobright.glb filter=lfs diff=lfs merge=lfs -text
|
| 1049 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_7up_can/textured_bkup.glb filter=lfs diff=lfs merge=lfs -text
|
| 1050 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_apple_v2/textured.glb filter=lfs diff=lfs merge=lfs -text
|
| 1051 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_apple_v2/textured.baked.zero123plus.png filter=lfs diff=lfs merge=lfs -text
|
| 1052 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_apple_v2/textured.vis.glb filter=lfs diff=lfs merge=lfs -text
|
| 1053 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_blue_plastic_bottle_v2/textured.glb filter=lfs diff=lfs merge=lfs -text
|
| 1054 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_blue_plastic_bottle_v2/textured.baked.glb filter=lfs diff=lfs merge=lfs -text
|
| 1055 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_blue_plastic_bottle_v2/textured.baked.zero123plus.png filter=lfs diff=lfs merge=lfs -text
|
| 1056 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_blue_plastic_bottle_v2/textured.vis.glb filter=lfs diff=lfs merge=lfs -text
|
| 1057 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_blue_plastic_bottle/textured.glb filter=lfs diff=lfs merge=lfs -text
|
| 1058 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_7up_can_v2/textured.glb filter=lfs diff=lfs merge=lfs -text
|
| 1059 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_7up_can_v2/textured.baked.zero123plus.png filter=lfs diff=lfs merge=lfs -text
|
| 1060 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/opened_redbull_can/Image_0.004.png filter=lfs diff=lfs merge=lfs -text
|
| 1061 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_7up_can_v2/textured.vis.glb filter=lfs diff=lfs merge=lfs -text
|
| 1062 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/opened_redbull_can/Image_3.002.jpg filter=lfs diff=lfs merge=lfs -text
|
| 1063 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_pepsi_can_v2/textured.glb filter=lfs diff=lfs merge=lfs -text
|
| 1064 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_pepsi_can_v2/textured.baked.zero123plus.png filter=lfs diff=lfs merge=lfs -text
|
| 1065 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_pepsi_can_v2/textured.vis.glb filter=lfs diff=lfs merge=lfs -text
|
| 1066 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/table_cloth_objaverse/Image_14.jpg filter=lfs diff=lfs merge=lfs -text
|
| 1067 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/pepsi_can/Image_0.png filter=lfs diff=lfs merge=lfs -text
|
| 1068 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_redbull_can_v2/Image_2.jpg filter=lfs diff=lfs merge=lfs -text
|
| 1069 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_redbull_can_v2/Image_0.005.png filter=lfs diff=lfs merge=lfs -text
|
| 1070 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_redbull_can/Image_2.jpg filter=lfs diff=lfs merge=lfs -text
|
| 1071 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/bridge_carrot_generated/Image_0.005.png filter=lfs diff=lfs merge=lfs -text
|
| 1072 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_redbull_can/Image_0.005.png filter=lfs diff=lfs merge=lfs -text
|
| 1073 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/apple/Image_0.001.png filter=lfs diff=lfs merge=lfs -text
|
| 1074 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/table_cloth_generated_shorter/Image_0.001.jpg filter=lfs diff=lfs merge=lfs -text
|
| 1075 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_pepsi_can/textured_cand1.glb filter=lfs diff=lfs merge=lfs -text
|
| 1076 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_pepsi_can/textured_toobright.glb filter=lfs diff=lfs merge=lfs -text
|
| 1077 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_pepsi_can/textured.glb filter=lfs diff=lfs merge=lfs -text
|
| 1078 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_pepsi_can/textured_bkup.glb filter=lfs diff=lfs merge=lfs -text
|
| 1079 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/opened_pepsi_can/Image_0.png filter=lfs diff=lfs merge=lfs -text
|
| 1080 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/table_cloth_generated/Image_0.001.jpg filter=lfs diff=lfs merge=lfs -text
|
| 1081 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_sponge_v2/textured.baked.zero123plus.png filter=lfs diff=lfs merge=lfs -text
|
| 1082 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/orange/Image_2.png filter=lfs diff=lfs merge=lfs -text
|
| 1083 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_sponge/textured_cand1.glb filter=lfs diff=lfs merge=lfs -text
|
| 1084 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_sponge/textured.glb filter=lfs diff=lfs merge=lfs -text
|
| 1085 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_sponge/textured_toobright.glb filter=lfs diff=lfs merge=lfs -text
|
| 1086 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_sponge/textured_bkup.glb filter=lfs diff=lfs merge=lfs -text
|
| 1087 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/blue_plastic_bottle/jasmine_tea_3.jpg.002.jpg filter=lfs diff=lfs merge=lfs -text
|
| 1088 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/opened_7up_can/Pepsi1.001_baseColor.png filter=lfs diff=lfs merge=lfs -text
|
| 1089 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/blue_plastic_bottle/textured.dae filter=lfs diff=lfs merge=lfs -text
|
| 1090 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/redbull_can_original/Image_0.004.png filter=lfs diff=lfs merge=lfs -text
|
| 1091 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/redbull_can_original/Image_3.002.jpg filter=lfs diff=lfs merge=lfs -text
|
| 1092 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/bridge_carrot_generated_modified/Image_0.005.png filter=lfs diff=lfs merge=lfs -text
|
| 1093 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/redbull_can/Image_0.004.png filter=lfs diff=lfs merge=lfs -text
|
| 1094 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/redbull_can/Image_3.002.jpg filter=lfs diff=lfs merge=lfs -text
|
| 1095 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_orange/textured_cand1.glb filter=lfs diff=lfs merge=lfs -text
|
| 1096 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_orange/textured_toobright.glb filter=lfs diff=lfs merge=lfs -text
|
| 1097 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_orange/textured.glb filter=lfs diff=lfs merge=lfs -text
|
| 1098 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_orange/textured_bkup.glb filter=lfs diff=lfs merge=lfs -text
|
| 1099 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_pepsi_can_v2/manual/Image_3.jpg filter=lfs diff=lfs merge=lfs -text
|
| 1100 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_pepsi_can_v2/manual/Image_0.png filter=lfs diff=lfs merge=lfs -text
|
| 1101 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_blue_plastic_bottle/old_not_very_good/textured_cand1.glb filter=lfs diff=lfs merge=lfs -text
|
| 1102 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_blue_plastic_bottle/old_not_very_good/textured.glb filter=lfs diff=lfs merge=lfs -text
|
| 1103 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_blue_plastic_bottle/old_not_very_good/textured_toobright.glb filter=lfs diff=lfs merge=lfs -text
|
| 1104 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_blue_plastic_bottle/old_not_very_good/textured_bkup.glb filter=lfs diff=lfs merge=lfs -text
|
| 1105 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_coke_can_v2/manual/Image_2.004.jpg filter=lfs diff=lfs merge=lfs -text
|
| 1106 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_redbull_can_v2_alt/manual/Image_0.004.png filter=lfs diff=lfs merge=lfs -text
|
| 1107 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/data/custom/models/baked_opened_redbull_can_v2_alt/manual/Image_3.002.jpg filter=lfs diff=lfs merge=lfs -text
|
| 1108 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/maniskill2-scene-2.glb filter=lfs diff=lfs merge=lfs -text
|
| 1109 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/3obj_recolor_cabinet_visual_matching_1/meta_ao_roughness_metalness.png filter=lfs diff=lfs merge=lfs -text
|
| 1110 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/3obj_recolor_cabinet_visual_matching_1/meta_normal.png filter=lfs diff=lfs merge=lfs -text
|
| 1111 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/3obj_recolor_cabinet_visual_matching_1/meta_diffuse.png filter=lfs diff=lfs merge=lfs -text
|
| 1112 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/3obj_recolor_tabletop_visual_matching_1/meta_ao_roughness_metalness.png filter=lfs diff=lfs merge=lfs -text
|
| 1113 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/3obj_recolor_tabletop_visual_matching_1/meta_normal.png filter=lfs diff=lfs merge=lfs -text
|
| 1114 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/3obj_recolor_sim/meta_ao_roughness_metalness.png filter=lfs diff=lfs merge=lfs -text
|
| 1115 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/3obj_recolor_sim/meta_normal.png filter=lfs diff=lfs merge=lfs -text
|
| 1116 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/3obj/meta_ao_roughness_metalness.png filter=lfs diff=lfs merge=lfs -text
|
| 1117 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/3obj/meta_normal.png filter=lfs diff=lfs merge=lfs -text
|
| 1118 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/3obj/meta_diffuse.png filter=lfs diff=lfs merge=lfs -text
|
| 1119 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/3obj/link_base.glb filter=lfs diff=lfs merge=lfs -text
|
| 1120 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/coarse_meshes/link_base_1.glb filter=lfs diff=lfs merge=lfs -text
|
| 1121 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/coarse_meshes/link_base_2.glb filter=lfs diff=lfs merge=lfs -text
|
| 1122 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/coarse_meshes/link_rear_wheel.glb filter=lfs diff=lfs merge=lfs -text
|
| 1123 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/coarse_meshes/link_base_5.glb filter=lfs diff=lfs merge=lfs -text
|
| 1124 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/coarse_meshes/link_base_4.glb filter=lfs diff=lfs merge=lfs -text
|
| 1125 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/coarse_meshes/link_base_3.glb filter=lfs diff=lfs merge=lfs -text
|
| 1126 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/3obj_recolor_tabletop_visual_matching_2/meta_ao_roughness_metalness.png filter=lfs diff=lfs merge=lfs -text
|
| 1127 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/googlerobot_description/3obj_recolor_tabletop_visual_matching_2/meta_normal.png filter=lfs diff=lfs merge=lfs -text
|
| 1128 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/ManiSkill2_real2sim/mani_skill2_real2sim/assets/descriptions/widowx_description/meshes_wx250s/WXSA-250-M-5-LF.stl filter=lfs diff=lfs merge=lfs -text
|
| 1129 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/images/example_visualization/widowx_carrot_on_plate_visual_matching.png filter=lfs diff=lfs merge=lfs -text
|
| 1130 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/images/example_visualization/widowx_put_eggplant_in_basket_visual_matching.png filter=lfs diff=lfs merge=lfs -text
|
| 1131 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/images/example_visualization/google_robot_pick_random_object.png filter=lfs diff=lfs merge=lfs -text
|
| 1132 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/images/example_visualization/google_robot_coke_can_visual_matching.png filter=lfs diff=lfs merge=lfs -text
|
| 1133 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/images/example_visualization/google_robot_open_drawer_visual_matching.png filter=lfs diff=lfs merge=lfs -text
|
| 1134 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/images/example_visualization/google_robot_put_apple_in_closed_top_drawer.png filter=lfs diff=lfs merge=lfs -text
|
| 1135 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/images/example_visualization/widowx_spoon_on_towel_visual_matching.png filter=lfs diff=lfs merge=lfs -text
|
| 1136 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/images/example_visualization/google_robot_close_drawer_visual_matching.png filter=lfs diff=lfs merge=lfs -text
|
| 1137 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/images/example_visualization/widowx_open_drawer.png filter=lfs diff=lfs merge=lfs -text
|
| 1138 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/images/example_visualization/widowx_stack_cube_visual_matching.png filter=lfs diff=lfs merge=lfs -text
|
| 1139 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/images/example_visualization/widowx_put_eggplant_in_sink_visual_matching.png filter=lfs diff=lfs merge=lfs -text
|
| 1140 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/images/example_visualization/widowx_close_drawer.png filter=lfs diff=lfs merge=lfs -text
|
| 1141 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/images/example_visualization/google_robot_move_near_visual_matching.png filter=lfs diff=lfs merge=lfs -text
|
| 1142 |
+
Isaac-GR00T/external_dependencies/SimplerEnv/simpler_env/utils/fonts/UbuntuMono-R.ttf filter=lfs diff=lfs merge=lfs -text
|
| 1143 |
+
Isaac-GR00T/external_dependencies/LIBERO/images/fig1.png filter=lfs diff=lfs merge=lfs -text
|
| 1144 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/init_files/libero_10/LIVING_ROOM_SCENE2_put_both_the_cream_cheese_box_and_the_butter_in_the_basket.init filter=lfs diff=lfs merge=lfs -text
|
| 1145 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/init_files/libero_10/LIVING_ROOM_SCENE2_put_both_the_alphabet_soup_and_the_tomato_sauce_in_the_basket.init filter=lfs diff=lfs merge=lfs -text
|
| 1146 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/init_files/libero_90/LIVING_ROOM_SCENE2_pick_up_the_tomato_sauce_and_put_it_in_the_basket.init filter=lfs diff=lfs merge=lfs -text
|
| 1147 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/init_files/libero_90/LIVING_ROOM_SCENE2_pick_up_the_orange_juice_and_put_it_in_the_basket.init filter=lfs diff=lfs merge=lfs -text
|
| 1148 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/init_files/libero_90/LIVING_ROOM_SCENE2_pick_up_the_butter_and_put_it_in_the_basket.init filter=lfs diff=lfs merge=lfs -text
|
| 1149 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/init_files/libero_90/LIVING_ROOM_SCENE2_pick_up_the_milk_and_put_it_in_the_basket.init filter=lfs diff=lfs merge=lfs -text
|
| 1150 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/init_files/libero_90/LIVING_ROOM_SCENE2_pick_up_the_alphabet_soup_and_put_it_in_the_basket.init filter=lfs diff=lfs merge=lfs -text
|
| 1151 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/textures/gray_ceramic_tile.png filter=lfs diff=lfs merge=lfs -text
|
| 1152 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/textures/light_grey_plaster.png filter=lfs diff=lfs merge=lfs -text
|
| 1153 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/textures/dark_gray_plaster.png filter=lfs diff=lfs merge=lfs -text
|
| 1154 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/textures/dark_floor_texture.png filter=lfs diff=lfs merge=lfs -text
|
| 1155 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/textures/dark_blue_wall.png filter=lfs diff=lfs merge=lfs -text
|
| 1156 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/textures/seamless_wood_planks_floor.png filter=lfs diff=lfs merge=lfs -text
|
| 1157 |
+
Isaac-GR00T/external_dependencies/LIBERO/libero/libero/assets/textures/cream-plaster.png filter=lfs diff=lfs merge=lfs -text
|
Isaac-GR00T/demo_data/cube_to_bowl_5/data/chunk-000/episode_000000.parquet
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:037ef9dacbe35d080286f7c2b7e551d4a337b206df03d2f9c88d4c46ac408082
|
| 3 |
+
size 28581
|
Isaac-GR00T/demo_data/cube_to_bowl_5/data/chunk-000/episode_000001.parquet
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:716f7fd62c64072b948a82fde9c83ff61d33caf29e1455d9816d41dc6b055d26
|
| 3 |
+
size 34031
|
Isaac-GR00T/demo_data/cube_to_bowl_5/data/chunk-000/episode_000002.parquet
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:9033b86ad77934df1193fb998a16e27b9fa7bdd6e0a522a35d6169b4c2c2d6ae
|
| 3 |
+
size 26150
|
Isaac-GR00T/demo_data/cube_to_bowl_5/data/chunk-000/episode_000003.parquet
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:4492790aec5ff414eb45f195d9639d6f58ce445289fbdb3d21038fd1fc7437c8
|
| 3 |
+
size 37131
|
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.front/episode_000000.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:3c9a00cb6e2706b8dbc573e3ac2b05402cf6e667ec61786be971e104cac81605
|
| 3 |
+
size 2414613
|
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.front/episode_000001.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:0f1c9a635d037856f8ecfb9cc8db41b34441aff15feaa81bd1492f5919f853f3
|
| 3 |
+
size 3158057
|
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.front/episode_000002.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:378605259ff8508322985d5f346b7876d07d96b79d35176dc4bf041b3a3e3214
|
| 3 |
+
size 1973577
|
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.front/episode_000003.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:fc28f6fd54be1d04a76d2b739698308bb5eacefe1ebddbc0d592674a6d78f93b
|
| 3 |
+
size 7328851
|
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.front/episode_000004.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:bf89d6dbc888277cdcd8318c46c91b35841b8dccb37d3c40c5d2c7d2a16865e2
|
| 3 |
+
size 2501708
|
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.wrist/episode_000000.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:33f42924b0e6f603fb91ffc856430b0abd2c182f1eaf2324f2a3906a60452f06
|
| 3 |
+
size 1442621
|
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.wrist/episode_000001.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:92fa46f856f4643dbdb857e8bd1344fbe2d4d5d206a164ed80cae0a768577460
|
| 3 |
+
size 2066389
|
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.wrist/episode_000002.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:fdf0618a70f633985975aeb554f39ca2588fa7be409b9642b90d668a24a29b33
|
| 3 |
+
size 1230068
|
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.wrist/episode_000003.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:1a658fbfc8601768579e2572ac08a307c7ccf7e17a6457636a5e663e34d29be5
|
| 3 |
+
size 5734830
|
Isaac-GR00T/demo_data/cube_to_bowl_5/videos/chunk-000/observation.images.wrist/episode_000004.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:7d362fd9d101fda5f3aa999e6b235d97d97f2cf42514fee6d464a39fe373d75a
|
| 3 |
+
size 1498450
|
Isaac-GR00T/demo_data/cube_to_bowl_5_with_mask/data/chunk-000/episode_000000.parquet
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:037ef9dacbe35d080286f7c2b7e551d4a337b206df03d2f9c88d4c46ac408082
|
| 3 |
+
size 28581
|
Isaac-GR00T/demo_data/cube_to_bowl_5_with_mask/masks/chunk-000/observation.images.front/episode_000000_masks.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a7d2840a15639385914803b6a2c0c7fc2f7485fcad6e9683fdb4e8bbafe6e756
|
| 3 |
+
size 1930481
|
Isaac-GR00T/demo_data/cube_to_bowl_5_with_mask/masks/chunk-000/observation.images.wrist/episode_000000_masks.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:511e00dbaaca29953ee717d76071e36c1905ac7350200173b308e48c7e434a6a
|
| 3 |
+
size 2075699
|
Isaac-GR00T/demo_data/cube_to_bowl_5_with_mask/videos/chunk-000/observation.images.front/episode_000000.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:3c9a00cb6e2706b8dbc573e3ac2b05402cf6e667ec61786be971e104cac81605
|
| 3 |
+
size 2414613
|
Isaac-GR00T/demo_data/cube_to_bowl_5_with_mask/videos/chunk-000/observation.images.wrist/episode_000000.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:33f42924b0e6f603fb91ffc856430b0abd2c182f1eaf2324f2a3906a60452f06
|
| 3 |
+
size 1442621
|
Isaac-GR00T/demo_data/droid_sample/data/chunk-000/episode_000000.parquet
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:137c8556829ffeb4cbc7c41369d0e0c3cd485c2ce4f576d0a0c9b0e83eb0314f
|
| 3 |
+
size 140159
|
Isaac-GR00T/demo_data/droid_sample/data/chunk-000/episode_000001.parquet
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:14f86cfe04380c5ba8e876cab6e0532b9231af5cd4e5ddcd8e019e458f79d709
|
| 3 |
+
size 211230
|
Isaac-GR00T/demo_data/droid_sample/data/chunk-000/episode_000002.parquet
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c22df4dca06122846d4ea0848751d734a211ed008d2bd63e29b66a8ce67222c6
|
| 3 |
+
size 308481
|
Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.exterior_1_left/episode_000000.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:6d90ec069d7cb36b47fcd5e7c18dd528235a814dfc965511833f05b5674f5fec
|
| 3 |
+
size 946024
|
Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.exterior_1_left/episode_000001.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:89f71cb8289f565fe2b6b405909b6810dc0e51166ee409e95cc8e84ed3f9199f
|
| 3 |
+
size 1329966
|
Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.exterior_1_left/episode_000002.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a6d575be937d4259dac4f3d33529d7a81ecda5b22b6c1159ae7222a5adfbd80e
|
| 3 |
+
size 2604859
|
Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.wrist_left/episode_000000.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:3ec4045dbeb4c544b8456fadca6bd0bc2392f25d9cb961942aa613fa3e7205b9
|
| 3 |
+
size 625361
|
Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.wrist_left/episode_000001.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:3b01e89c75c74ac90b518656e49a7033d249ca4a3213aeae8c388a2db3d17b91
|
| 3 |
+
size 1058453
|
Isaac-GR00T/demo_data/droid_sample/videos/chunk-000/observation.images.wrist_left/episode_000002.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:82eeeb20596dae59bd7074c7e44f4dd8c292551d5bd1b2d9948a765523a1f541
|
| 3 |
+
size 1585838
|
Isaac-GR00T/demo_data/simplerenv_bridge_sample/data/chunk-000/episode_000000.parquet
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:14ef3d742724ad34701136e1dd4709c965ae98066b2fc88a7a26e960d55520a8
|
| 3 |
+
size 5733
|
Isaac-GR00T/demo_data/simplerenv_bridge_sample/data/chunk-000/episode_000001.parquet
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:3abcb7f3f611a415afe5acd5e4b7d0d10e83726db76a1f9f24aacd3397a7c0af
|
| 3 |
+
size 7329
|
Isaac-GR00T/demo_data/simplerenv_bridge_sample/data/chunk-000/episode_000002.parquet
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:df1d7c6118a0042c9087a4670b795fe34760390fbc9f34ba2a4d422607d47b7b
|
| 3 |
+
size 7315
|
Isaac-GR00T/demo_data/simplerenv_bridge_sample/videos/chunk-000/observation.images.image_0/episode_000000.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:12b0e84423d31ff615262dc4943f56aa293cb0b4c0d193fc188916e629006ed1
|
| 3 |
+
size 254345
|
Isaac-GR00T/demo_data/simplerenv_bridge_sample/videos/chunk-000/observation.images.image_0/episode_000001.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a7f9653cb282d67d1dde50c356dd5a0fdefee0777f7767232b04c7bde1e94a4e
|
| 3 |
+
size 292606
|
Isaac-GR00T/demo_data/simplerenv_bridge_sample/videos/chunk-000/observation.images.image_0/episode_000002.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:6ac0ebe099566dae4f41a83c67d215ac2dc47baabb8c5a4728c1b82273feb416
|
| 3 |
+
size 258747
|
Isaac-GR00T/examples/DROID/README.md
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# GR00T DROID
|
| 2 |
+
|
| 3 |
+
The N1.7 base model supports DROID inference out of the box via the `OXE_DROID_RELATIVE_EEF_RELATIVE_JOINT` pretrain tag. A finetuned checkpoint is also available at [`nvidia/GR00T-N1.7-DROID`](https://huggingface.co/nvidia/GR00T-N1.7-DROID).
|
| 4 |
+
|
| 5 |
+
> **Note:** The DROID dataset contains multiple language instruction paraphrases per episode (`language_instruction`, `language_instruction_2`, `language_instruction_3`). These are used for language augmentation during training. At inference time, only the first language key is used.
|
| 6 |
+
|
| 7 |
+
## Data Format
|
| 8 |
+
|
| 9 |
+
The DROID embodiment expects the following modality structure:
|
| 10 |
+
|
| 11 |
+
| Modality | Keys | Dimensions |
|
| 12 |
+
|----------|------|------------|
|
| 13 |
+
| Video | `exterior_image_1_left`, `wrist_image_left` | 2 cameras |
|
| 14 |
+
| State | `eef_9d`, `gripper_position`, `joint_position` | 9D + 1D + 7D = 17D |
|
| 15 |
+
| Action | `eef_9d`, `gripper_position`, `joint_position` | 9D + 1D + 7D = 17D |
|
| 16 |
+
| Language | `annotation.language.language_instruction` | text |
|
| 17 |
+
|
| 18 |
+
Action representations:
|
| 19 |
+
- `eef_9d`: relative end-effector (XYZ + rotation 6D)
|
| 20 |
+
- `gripper_position`: absolute (1D)
|
| 21 |
+
- `joint_position`: relative joint positions (7D)
|
| 22 |
+
|
| 23 |
+
### Preparing DROID Demo Data
|
| 24 |
+
|
| 25 |
+
The full DROID dataset ([lerobot/droid_1.0.1](https://huggingface.co/datasets/lerobot/droid_1.0.1)) is ~358 GB with 95k+ episodes in LeRobot v3.0 format. To create a small sample for testing:
|
| 26 |
+
|
| 27 |
+
```bash
|
| 28 |
+
uv pip install jsonlines # one-time dependency
|
| 29 |
+
python scripts/download_droid_sample.py
|
| 30 |
+
```
|
| 31 |
+
|
| 32 |
+
This downloads the first data/video chunk (~170 MB) and extracts 3 episodes into `demo_data/droid_sample/` in GR00T LeRobot v2.0 format.
|
| 33 |
+
|
| 34 |
+
**Key conversion notes:**
|
| 35 |
+
- Source is LeRobot v3.0 (consolidated parquet + concatenated videos) — the script converts to v2.0 (per-episode parquet + per-episode mp4).
|
| 36 |
+
- Video keys in the raw dataset (`exterior_1_left`, `wrist_left`) differ from the model config keys (`exterior_image_1_left`, `wrist_image_left`). The data loader auto-maps by position — no manual renaming needed.
|
| 37 |
+
- Language instructions are loaded via the `task_index` column mapped through `tasks.jsonl`.
|
| 38 |
+
|
| 39 |
+
## 1. Standalone Inference (with demo data)
|
| 40 |
+
|
| 41 |
+
After preparing demo data, run inference directly (no server needed):
|
| 42 |
+
|
| 43 |
+
```bash
|
| 44 |
+
uv run python scripts/deployment/standalone_inference_script.py \
|
| 45 |
+
--model-path nvidia/GR00T-N1.7-3B \
|
| 46 |
+
--dataset-path demo_data/droid_sample \
|
| 47 |
+
--embodiment-tag OXE_DROID_RELATIVE_EEF_RELATIVE_JOINT \
|
| 48 |
+
--traj-ids 0 1 \
|
| 49 |
+
--inference-mode pytorch \
|
| 50 |
+
--execution-horizon 8
|
| 51 |
+
```
|
| 52 |
+
|
| 53 |
+
> **Note:** Episode 0 may have an empty language instruction. If inference fails on episode 0, try `--traj-ids 1 2`.
|
| 54 |
+
|
| 55 |
+
Expected zero-shot performance on the base model (not finetuned):
|
| 56 |
+
|
| 57 |
+
| Metric | Value |
|
| 58 |
+
|--------|-------|
|
| 59 |
+
| Average MSE | ~0.0149 |
|
| 60 |
+
| Average MAE | ~0.0753 |
|
| 61 |
+
| Inference per step (base) | ~262 ms (H100) |
|
| 62 |
+
| Inference per step (finetuned) | ~253 ms (H100) |
|
| 63 |
+
|
| 64 |
+
## 2. Inference Server (for real-world deployment)
|
| 65 |
+
|
| 66 |
+
### Using the base model (zero-shot):
|
| 67 |
+
|
| 68 |
+
```bash
|
| 69 |
+
uv run python gr00t/eval/run_gr00t_server.py \
|
| 70 |
+
--model-path nvidia/GR00T-N1.7-3B \
|
| 71 |
+
--embodiment-tag OXE_DROID_RELATIVE_EEF_RELATIVE_JOINT
|
| 72 |
+
```
|
| 73 |
+
|
| 74 |
+
### Using the finetuned model:
|
| 75 |
+
|
| 76 |
+
```bash
|
| 77 |
+
uv run python gr00t/eval/run_gr00t_server.py \
|
| 78 |
+
--model-path nvidia/GR00T-N1.7-DROID \
|
| 79 |
+
--embodiment-tag OXE_DROID_RELATIVE_EEF_RELATIVE_JOINT
|
| 80 |
+
```
|
| 81 |
+
|
| 82 |
+
## 3. Fine-tuning
|
| 83 |
+
|
| 84 |
+
Fine-tune the base model on DROID data using the shared launcher:
|
| 85 |
+
|
| 86 |
+
```bash
|
| 87 |
+
NUM_GPUS=8 MAX_STEPS=20000 GLOBAL_BATCH_SIZE=640 SAVE_STEPS=1000 uv run bash examples/finetune.sh \
|
| 88 |
+
--base-model-path nvidia/GR00T-N1.7-3B \
|
| 89 |
+
--dataset-path demo_data/droid_sample \
|
| 90 |
+
--embodiment-tag OXE_DROID_RELATIVE_EEF_RELATIVE_JOINT \
|
| 91 |
+
--output-dir /tmp/droid_finetune
|
| 92 |
+
```
|
| 93 |
+
|
| 94 |
+
> **Note:** The above uses the small `demo_data/droid_sample` (3 episodes) for quick validation. For production training, replace `--dataset-path` with the full DROID dataset.
|
| 95 |
+
|
| 96 |
+
## 4. Robot Control Script
|
| 97 |
+
|
| 98 |
+
1. Install the DROID package on the robot control laptop/workstation — [instructions](https://droid-dataset.github.io/droid/software-setup/host-installation.html#configuring-the-laptopworkstation)
|
| 99 |
+
|
| 100 |
+
2. Install dependencies for the GR00T control script in the environment from step 1:
|
| 101 |
+
```bash
|
| 102 |
+
pip install tyro pydantic numpy==1.26.4
|
| 103 |
+
```
|
| 104 |
+
|
| 105 |
+
3. Enter the camera IDs for your ZED cameras in `examples/DROID/main_gr00t.py`.
|
| 106 |
+
|
| 107 |
+
4. Start the control script:
|
| 108 |
+
```bash
|
| 109 |
+
python examples/DROID/main_gr00t.py --external-camera="left" # or "right"
|
| 110 |
+
```
|
Isaac-GR00T/examples/DROID/main_gr00t.py
ADDED
|
@@ -0,0 +1,503 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
| 2 |
+
# SPDX-License-Identifier: Apache-2.0
|
| 3 |
+
#
|
| 4 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 5 |
+
# you may not use this file except in compliance with the License.
|
| 6 |
+
# You may obtain a copy of the License at
|
| 7 |
+
#
|
| 8 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 9 |
+
#
|
| 10 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 11 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 12 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 13 |
+
# See the License for the specific language governing permissions and
|
| 14 |
+
# limitations under the License.
|
| 15 |
+
|
| 16 |
+
# ruff: noqa
|
| 17 |
+
# NOTE: this requires installation of the droid repo.
|
| 18 |
+
# Adapted from https://github.com/Physical-Intelligence/openpi/blob/main/examples/droid/main.py
|
| 19 |
+
|
| 20 |
+
from __future__ import annotations
|
| 21 |
+
|
| 22 |
+
import contextlib
|
| 23 |
+
import dataclasses
|
| 24 |
+
import datetime
|
| 25 |
+
import faulthandler
|
| 26 |
+
import os
|
| 27 |
+
import signal
|
| 28 |
+
import time
|
| 29 |
+
from collections import deque
|
| 30 |
+
|
| 31 |
+
import cv2
|
| 32 |
+
import numpy as np
|
| 33 |
+
import pandas as pd
|
| 34 |
+
import tqdm
|
| 35 |
+
import tyro
|
| 36 |
+
from PIL import Image
|
| 37 |
+
|
| 38 |
+
from scipy.spatial.transform import Rotation
|
| 39 |
+
|
| 40 |
+
faulthandler.enable()
|
| 41 |
+
|
| 42 |
+
# DROID data collection frequency -- we slow down execution to match this frequency
|
| 43 |
+
DROID_CONTROL_FREQUENCY = 15
|
| 44 |
+
RESOLUTION = (180, 320) # resize images to this resolution before sending to the policy server
|
| 45 |
+
|
| 46 |
+
# Egocentric frame correction: R_euler is post-multiplied by this matrix
|
| 47 |
+
# to match the OXE DROID training pipeline (TFG convention).
|
| 48 |
+
# audit: mirror of gr00t/data/state_action/droid_frame.py — this example runs on
|
| 49 |
+
# a slim DROID install without the gr00t package, so it cannot import the
|
| 50 |
+
# canonical source. Keep this matrix and compute_eef_9d in sync with it.
|
| 51 |
+
DROID_EEF_ROTATION_CORRECT = np.array(
|
| 52 |
+
[[0, 0, -1], [-1, 0, 0], [0, 1, 0]],
|
| 53 |
+
dtype=np.float64,
|
| 54 |
+
)
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
def compute_eef_9d(cartesian_position: np.ndarray) -> np.ndarray:
|
| 58 |
+
"""Convert cartesian_position (XYZ + euler 3D) to eef_9d (XYZ + rot6d).
|
| 59 |
+
|
| 60 |
+
Uses extrinsic XYZ Euler convention (scipy ``"XYZ"``, equivalent to
|
| 61 |
+
``tfg.rotation_matrix_3d.from_euler``) and post-multiplies by
|
| 62 |
+
``DROID_EEF_ROTATION_CORRECT`` to match the pretrained model.
|
| 63 |
+
"""
|
| 64 |
+
c = np.asarray(cartesian_position, dtype=np.float64).reshape(6)
|
| 65 |
+
xyz = c[:3]
|
| 66 |
+
euler = c[3:6]
|
| 67 |
+
rot_robot = Rotation.from_euler("XYZ", euler).as_matrix()
|
| 68 |
+
rot_mat = rot_robot @ DROID_EEF_ROTATION_CORRECT
|
| 69 |
+
rot6d = rot_mat[:2, :].reshape(6)
|
| 70 |
+
return np.concatenate([xyz, rot6d]).astype(np.float32)
|
| 71 |
+
|
| 72 |
+
|
| 73 |
+
@dataclasses.dataclass
|
| 74 |
+
class Args:
|
| 75 |
+
# Hardware parameters
|
| 76 |
+
|
| 77 |
+
left_camera_id: str = "<SET THIS>" # e.g., "24259877"
|
| 78 |
+
right_camera_id: str = "<SET THIS>" # e.g., "24514023"
|
| 79 |
+
wrist_camera_id: str = "<SET THIS>" # e.g., "13062452"
|
| 80 |
+
|
| 81 |
+
# Policy parameters
|
| 82 |
+
policy_host: str = "localhost"
|
| 83 |
+
policy_port: int = 5555
|
| 84 |
+
policy_api_token: str = None
|
| 85 |
+
|
| 86 |
+
results_dir: str = None # if None, will use the current timestamp as the results directory
|
| 87 |
+
|
| 88 |
+
# Rollout parameters
|
| 89 |
+
max_timesteps: int = 600 # how many steps to run each rollout
|
| 90 |
+
|
| 91 |
+
# How many actions to execute from a predicted action chunk before querying policy server again
|
| 92 |
+
open_loop_horizon: int = 15
|
| 93 |
+
external_camera: str = (
|
| 94 |
+
"left" # which exterior camera to use for the policy server, choose from ["left", "right"]
|
| 95 |
+
)
|
| 96 |
+
render_camera: str = "left" # which camera to render saved video from
|
| 97 |
+
render_fps: int = 50
|
| 98 |
+
|
| 99 |
+
debug: bool = False
|
| 100 |
+
vis_cameras: bool = False
|
| 101 |
+
|
| 102 |
+
delay_seconds: int = 5
|
| 103 |
+
|
| 104 |
+
|
| 105 |
+
def _load_runtime_deps():
|
| 106 |
+
"""Load robot-only dependencies after CLI parsing so --help stays usable."""
|
| 107 |
+
try:
|
| 108 |
+
import imageio
|
| 109 |
+
from droid.robot_env import RobotEnv
|
| 110 |
+
from server_client import PolicyClient
|
| 111 |
+
from utils import resize_with_pad
|
| 112 |
+
except ModuleNotFoundError as exc:
|
| 113 |
+
raise ModuleNotFoundError(
|
| 114 |
+
"examples/DROID/main_gr00t.py requires the DROID robot-control environment. "
|
| 115 |
+
"Follow examples/DROID/README.md and install the DROID package plus "
|
| 116 |
+
"`pip install tyro pydantic numpy==1.26.4` before running."
|
| 117 |
+
) from exc
|
| 118 |
+
|
| 119 |
+
return RobotEnv, PolicyClient, imageio, resize_with_pad
|
| 120 |
+
|
| 121 |
+
|
| 122 |
+
# We are using Ctrl+C to optionally terminate rollouts early -- however, if we press Ctrl+C while the policy server is
|
| 123 |
+
# waiting for a new action chunk, it will raise an exception and the server connection dies.
|
| 124 |
+
# This context manager temporarily prevents Ctrl+C and delays it after the server call is complete.
|
| 125 |
+
@contextlib.contextmanager
|
| 126 |
+
def prevent_keyboard_interrupt():
|
| 127 |
+
"""Temporarily prevent keyboard interrupts by delaying them until after the protected code."""
|
| 128 |
+
interrupted = False
|
| 129 |
+
original_handler = signal.getsignal(signal.SIGINT)
|
| 130 |
+
|
| 131 |
+
def handler(signum, frame):
|
| 132 |
+
nonlocal interrupted
|
| 133 |
+
interrupted = True
|
| 134 |
+
|
| 135 |
+
signal.signal(signal.SIGINT, handler)
|
| 136 |
+
try:
|
| 137 |
+
yield
|
| 138 |
+
finally:
|
| 139 |
+
signal.signal(signal.SIGINT, original_handler)
|
| 140 |
+
if interrupted:
|
| 141 |
+
raise KeyboardInterrupt
|
| 142 |
+
|
| 143 |
+
|
| 144 |
+
def main(args: Args):
|
| 145 |
+
RobotEnv, PolicyClient, imageio, resize_with_pad = _load_runtime_deps()
|
| 146 |
+
|
| 147 |
+
assert args.external_camera in ["left", "right"], (
|
| 148 |
+
f"Invalid exterior camera: {args.exterior_camera}"
|
| 149 |
+
)
|
| 150 |
+
|
| 151 |
+
if args.results_dir is None:
|
| 152 |
+
results_dir = f"results_gr00t_{datetime.datetime.now().strftime('%Y_%m_%d')}"
|
| 153 |
+
else:
|
| 154 |
+
results_dir = args.results_dir
|
| 155 |
+
|
| 156 |
+
# Initialize the Panda environment.
|
| 157 |
+
env = RobotEnv(action_space="joint_position", gripper_action_space="position")
|
| 158 |
+
print("Created the droid env!")
|
| 159 |
+
|
| 160 |
+
os.makedirs(results_dir, exist_ok=True)
|
| 161 |
+
|
| 162 |
+
policy_client = PolicyClient(
|
| 163 |
+
host=args.policy_host, port=args.policy_port, api_token=args.policy_api_token
|
| 164 |
+
)
|
| 165 |
+
|
| 166 |
+
modality_config = policy_client.get_modality_config()
|
| 167 |
+
video_delta = modality_config["video"].delta_indices
|
| 168 |
+
video_T = len(video_delta)
|
| 169 |
+
video_history_len = max(-min(video_delta), 0) + 1 if video_delta else 1
|
| 170 |
+
video_keys = modality_config["video"].modality_keys
|
| 171 |
+
state_keys = modality_config["state"].modality_keys
|
| 172 |
+
state_T = len(modality_config["state"].delta_indices)
|
| 173 |
+
# Action chunk size is dictated by the policy (server) side. open_loop_horizon
|
| 174 |
+
# is the only locally-authored horizon; it is a deliberate receding-horizon
|
| 175 |
+
# choice and MAY be < the chunk, but it must never exceed it, otherwise
|
| 176 |
+
# `pred_action_chunk[actions_from_chunk_completed]` indexes past the
|
| 177 |
+
# predicted chunk and IndexErrors mid-rollout. Source the chunk size from
|
| 178 |
+
# the policy and validate the contract up-front instead of crashing deep in
|
| 179 |
+
# the loop.
|
| 180 |
+
action_chunk_size = len(modality_config["action"].delta_indices)
|
| 181 |
+
if not (1 <= args.open_loop_horizon <= action_chunk_size):
|
| 182 |
+
raise ValueError(
|
| 183 |
+
f"open_loop_horizon={args.open_loop_horizon} must satisfy "
|
| 184 |
+
f"1 <= open_loop_horizon <= action_chunk_size={action_chunk_size} "
|
| 185 |
+
"(= len(policy.action.delta_indices)). A larger value would index "
|
| 186 |
+
"past the predicted action chunk and IndexError mid-rollout."
|
| 187 |
+
)
|
| 188 |
+
print(
|
| 189 |
+
f"Model config — video T={video_T} (delta={video_delta}), "
|
| 190 |
+
f"state T={state_T}, action chunk={action_chunk_size}, "
|
| 191 |
+
f"open_loop_horizon={args.open_loop_horizon}, "
|
| 192 |
+
f"keys: video={video_keys}, state={state_keys}"
|
| 193 |
+
)
|
| 194 |
+
|
| 195 |
+
df = pd.DataFrame(columns=["success", "duration", "video_filename"])
|
| 196 |
+
|
| 197 |
+
if args.debug:
|
| 198 |
+
debug_dir = os.path.join(results_dir, "debug_data")
|
| 199 |
+
os.makedirs(debug_dir, exist_ok=True)
|
| 200 |
+
os.makedirs(os.path.join(debug_dir, "videos/wrist_image/"), exist_ok=True)
|
| 201 |
+
os.makedirs(os.path.join(debug_dir, "videos/exterior_image_1_left/"), exist_ok=True)
|
| 202 |
+
|
| 203 |
+
instruction = None
|
| 204 |
+
while True:
|
| 205 |
+
if instruction is None:
|
| 206 |
+
instruction = input("Enter instruction: ")
|
| 207 |
+
else:
|
| 208 |
+
if input("Change instruction? (enter y or n) ").lower() == "y":
|
| 209 |
+
instruction = input("Enter instruction: ")
|
| 210 |
+
|
| 211 |
+
time.sleep(args.delay_seconds)
|
| 212 |
+
|
| 213 |
+
# Rollout parameters
|
| 214 |
+
actions_from_chunk_completed = 0
|
| 215 |
+
pred_action_chunk = None
|
| 216 |
+
|
| 217 |
+
# Prepare to save video of rollout
|
| 218 |
+
timestamp = datetime.datetime.now().strftime("%Y_%m_%d_%H:%M:%S")
|
| 219 |
+
video = []
|
| 220 |
+
if args.debug:
|
| 221 |
+
model_wrist_image_writer = imageio.get_writer(
|
| 222 |
+
os.path.join(
|
| 223 |
+
debug_dir, "videos/wrist_image/", f"model_wrist_image_{timestamp}.mp4"
|
| 224 |
+
),
|
| 225 |
+
fps=5,
|
| 226 |
+
)
|
| 227 |
+
model_exterior_image_1_left_writer = imageio.get_writer(
|
| 228 |
+
os.path.join(
|
| 229 |
+
debug_dir,
|
| 230 |
+
"videos/exterior_image_1_left/",
|
| 231 |
+
f"model_exterior_image_1_left_{timestamp}.mp4",
|
| 232 |
+
),
|
| 233 |
+
fps=5,
|
| 234 |
+
)
|
| 235 |
+
|
| 236 |
+
bar = tqdm.tqdm(range(args.max_timesteps))
|
| 237 |
+
print("Running rollout... press Ctrl+C to stop early.")
|
| 238 |
+
|
| 239 |
+
# Profiling variables (reset for each rollout)
|
| 240 |
+
rollout_start_time = time.time()
|
| 241 |
+
obs_times = deque(maxlen=50) # Track observation collection times
|
| 242 |
+
server_times = deque(maxlen=50) # Track server response times
|
| 243 |
+
action_count = 0
|
| 244 |
+
frame_buffer = deque(maxlen=video_history_len)
|
| 245 |
+
|
| 246 |
+
for t_step in bar:
|
| 247 |
+
step_start_time = time.time()
|
| 248 |
+
try:
|
| 249 |
+
# Get the current observation
|
| 250 |
+
obs_start_time = time.time()
|
| 251 |
+
curr_obs = _extract_observation(
|
| 252 |
+
args,
|
| 253 |
+
env.get_observation(),
|
| 254 |
+
# Save the first observation to disk
|
| 255 |
+
save_to_disk=t_step == 0,
|
| 256 |
+
)
|
| 257 |
+
obs_time = time.time() - obs_start_time
|
| 258 |
+
obs_times.append(obs_time)
|
| 259 |
+
|
| 260 |
+
video.append(curr_obs[f"{args.render_camera}_image"])
|
| 261 |
+
|
| 262 |
+
# Resize every step so the rolling frame buffer stays current.
|
| 263 |
+
left_image = resize_with_pad(curr_obs["left_image"], RESOLUTION[0], RESOLUTION[1])
|
| 264 |
+
right_image = resize_with_pad(curr_obs["right_image"], RESOLUTION[0], RESOLUTION[1])
|
| 265 |
+
wrist_image = resize_with_pad(curr_obs["wrist_image"], RESOLUTION[0], RESOLUTION[1])
|
| 266 |
+
|
| 267 |
+
if args.external_camera == "left":
|
| 268 |
+
ext_image = left_image
|
| 269 |
+
elif args.external_camera == "right":
|
| 270 |
+
ext_image = right_image
|
| 271 |
+
|
| 272 |
+
frame_buffer.append({"ext": ext_image, "wrist": wrist_image})
|
| 273 |
+
|
| 274 |
+
# Send websocket request to policy server if it's time to predict a new chunk
|
| 275 |
+
if (
|
| 276 |
+
actions_from_chunk_completed == 0
|
| 277 |
+
or actions_from_chunk_completed >= args.open_loop_horizon
|
| 278 |
+
):
|
| 279 |
+
actions_from_chunk_completed = 0
|
| 280 |
+
|
| 281 |
+
if args.debug:
|
| 282 |
+
model_wrist_image_writer.append_data(wrist_image)
|
| 283 |
+
model_exterior_image_1_left_writer.append_data(ext_image)
|
| 284 |
+
|
| 285 |
+
# Build video tensor with T frames derived from the model's
|
| 286 |
+
# delta_indices (e.g. [-15, 0] -> T=2, [0] -> T=1).
|
| 287 |
+
if video_T == 1:
|
| 288 |
+
video_dict = {
|
| 289 |
+
"exterior_image_1_left": ext_image[None, None, ...],
|
| 290 |
+
"wrist_image_left": wrist_image[None, None, ...],
|
| 291 |
+
} # (B=1, T=1, H, W, C)
|
| 292 |
+
else:
|
| 293 |
+
hist_frame = frame_buffer[0]
|
| 294 |
+
cur_frame = frame_buffer[-1]
|
| 295 |
+
video_dict = {
|
| 296 |
+
"exterior_image_1_left": np.stack(
|
| 297 |
+
[hist_frame["ext"], cur_frame["ext"]]
|
| 298 |
+
)[None, ...],
|
| 299 |
+
"wrist_image_left": np.stack([hist_frame["wrist"], cur_frame["wrist"]])[
|
| 300 |
+
None, ...
|
| 301 |
+
],
|
| 302 |
+
} # (B=1, T=video_T, H, W, C)
|
| 303 |
+
|
| 304 |
+
# Build state dict from the model's reported state keys.
|
| 305 |
+
state_dict = {}
|
| 306 |
+
state_source = {
|
| 307 |
+
"eef_9d": curr_obs["eef_9d"],
|
| 308 |
+
"gripper_position": curr_obs["gripper_position"],
|
| 309 |
+
"joint_position": curr_obs["joint_position"],
|
| 310 |
+
}
|
| 311 |
+
for key in state_keys:
|
| 312 |
+
state_dict[key] = state_source[key][None, None, ...].astype(
|
| 313 |
+
np.float32
|
| 314 |
+
) # (B=1, T=1, D)
|
| 315 |
+
|
| 316 |
+
lang_key = modality_config["language"].modality_keys[0]
|
| 317 |
+
request_data = {
|
| 318 |
+
"video": video_dict,
|
| 319 |
+
"state": state_dict,
|
| 320 |
+
"language": {lang_key: [[instruction]]},
|
| 321 |
+
}
|
| 322 |
+
|
| 323 |
+
if args.vis_cameras:
|
| 324 |
+
# viz the left image 1 and wrist image and use cv2 to display them side by side
|
| 325 |
+
left_image_display = cv2.resize(
|
| 326 |
+
left_image, (wrist_image.shape[1], wrist_image.shape[0])
|
| 327 |
+
)
|
| 328 |
+
combined_display = np.concatenate([left_image_display, wrist_image], axis=1)
|
| 329 |
+
# convert to bgr
|
| 330 |
+
combined_display = combined_display[..., ::-1]
|
| 331 |
+
cv2.imshow("Camera Views", combined_display)
|
| 332 |
+
cv2.waitKey(1)
|
| 333 |
+
|
| 334 |
+
# Wrap the server call in a context manager to prevent Ctrl+C from interrupting it
|
| 335 |
+
# Ctrl+C will be handled after the server call is complete
|
| 336 |
+
server_start_time = time.time()
|
| 337 |
+
with prevent_keyboard_interrupt():
|
| 338 |
+
# this returns action chunk [N, 8] of joint position actions (7) + gripper position (1)
|
| 339 |
+
response = policy_client.get_action(request_data)
|
| 340 |
+
server_time = time.time() - server_start_time
|
| 341 |
+
server_times.append(server_time)
|
| 342 |
+
|
| 343 |
+
pred_action_chunk = np.concatenate(
|
| 344 |
+
(
|
| 345 |
+
response[0]["joint_position"][0],
|
| 346 |
+
response[0]["gripper_position"][0],
|
| 347 |
+
),
|
| 348 |
+
axis=1,
|
| 349 |
+
)
|
| 350 |
+
|
| 351 |
+
# Select current action to execute from chunk
|
| 352 |
+
action = pred_action_chunk[actions_from_chunk_completed]
|
| 353 |
+
actions_from_chunk_completed += 1
|
| 354 |
+
|
| 355 |
+
# Binarize gripper action
|
| 356 |
+
if action[-1].item() > 0.5:
|
| 357 |
+
action = np.concatenate([action[:-1], np.ones((1,))])
|
| 358 |
+
else:
|
| 359 |
+
action = np.concatenate([action[:-1], np.zeros((1,))])
|
| 360 |
+
|
| 361 |
+
env.step(action)
|
| 362 |
+
action_count += 1
|
| 363 |
+
|
| 364 |
+
# Sleep to match DROID data collection frequency
|
| 365 |
+
elapsed_time = time.time() - step_start_time
|
| 366 |
+
if elapsed_time < 1 / DROID_CONTROL_FREQUENCY:
|
| 367 |
+
time.sleep(1 / DROID_CONTROL_FREQUENCY - elapsed_time)
|
| 368 |
+
|
| 369 |
+
# profiling stats
|
| 370 |
+
if obs_times:
|
| 371 |
+
avg_obs_time = np.mean(obs_times) * 1000
|
| 372 |
+
min_obs_time = np.min(obs_times) * 1000
|
| 373 |
+
max_obs_time = np.max(obs_times) * 1000
|
| 374 |
+
else:
|
| 375 |
+
avg_obs_time = min_obs_time = max_obs_time = 0
|
| 376 |
+
|
| 377 |
+
if server_times:
|
| 378 |
+
avg_server_time = np.mean(server_times) * 1000
|
| 379 |
+
min_server_time = np.min(server_times) * 1000
|
| 380 |
+
max_server_time = np.max(server_times) * 1000
|
| 381 |
+
else:
|
| 382 |
+
avg_server_time = min_server_time = max_server_time = 0
|
| 383 |
+
|
| 384 |
+
total_elapsed = time.time() - rollout_start_time
|
| 385 |
+
actions_per_sec = action_count / total_elapsed if total_elapsed > 0 else 0
|
| 386 |
+
|
| 387 |
+
bar.set_description(
|
| 388 |
+
f"Obs: {avg_obs_time:.1f}ms [{min_obs_time:.1f}-{max_obs_time:.1f}] | "
|
| 389 |
+
f"Server: {avg_server_time:.1f}ms [{min_server_time:.1f}-{max_server_time:.1f}] | "
|
| 390 |
+
f"Actions/sec: {actions_per_sec:.2f}"
|
| 391 |
+
)
|
| 392 |
+
except KeyboardInterrupt:
|
| 393 |
+
break
|
| 394 |
+
|
| 395 |
+
os.makedirs(os.path.join(results_dir, "videos"), exist_ok=True)
|
| 396 |
+
video = np.stack(video)
|
| 397 |
+
# replace whitespace with underscores in instruction
|
| 398 |
+
sanitized_instruction = instruction.replace(" ", "_")
|
| 399 |
+
save_filename = os.path.join(
|
| 400 |
+
results_dir, "videos", f"{sanitized_instruction}_video_" + timestamp
|
| 401 |
+
)
|
| 402 |
+
with imageio.get_writer(save_filename + ".mp4", fps=args.render_fps) as writer:
|
| 403 |
+
for frame in video:
|
| 404 |
+
writer.append_data(frame)
|
| 405 |
+
|
| 406 |
+
if args.debug:
|
| 407 |
+
model_wrist_image_writer.close()
|
| 408 |
+
model_exterior_image_1_left_writer.close()
|
| 409 |
+
|
| 410 |
+
success: str | float | None = None
|
| 411 |
+
while not isinstance(success, float):
|
| 412 |
+
success = input(
|
| 413 |
+
"Did the rollout succeed? (enter y for 100%, n for 0%), or a numeric value 0-100 based on the evaluation spec"
|
| 414 |
+
)
|
| 415 |
+
if success == "y":
|
| 416 |
+
success = 1.0
|
| 417 |
+
elif success == "n":
|
| 418 |
+
success = 0.0
|
| 419 |
+
|
| 420 |
+
success = float(success) / 100
|
| 421 |
+
if not (0 <= success <= 1):
|
| 422 |
+
print(f"Success must be a number in [0, 100] but got: {success * 100}")
|
| 423 |
+
|
| 424 |
+
new_row = {
|
| 425 |
+
"success": success,
|
| 426 |
+
"duration": t_step,
|
| 427 |
+
"video_filename": save_filename,
|
| 428 |
+
}
|
| 429 |
+
new_index = len(df)
|
| 430 |
+
df.loc[new_index] = new_row
|
| 431 |
+
|
| 432 |
+
if input("Do one more eval? (enter y or n) ").lower() != "y":
|
| 433 |
+
break
|
| 434 |
+
env.reset(randomize=False)
|
| 435 |
+
|
| 436 |
+
timestamp = datetime.datetime.now().strftime("%I:%M%p_%B_%d_%Y")
|
| 437 |
+
csv_filename = os.path.join(results_dir, f"eval_{timestamp}.csv")
|
| 438 |
+
df.to_csv(csv_filename)
|
| 439 |
+
print(f"Results saved to {csv_filename}")
|
| 440 |
+
|
| 441 |
+
|
| 442 |
+
def _extract_observation(args: Args, obs_dict, *, stereo_camera="left", save_to_disk=False):
|
| 443 |
+
image_observations = obs_dict["image"]
|
| 444 |
+
key_left = f"{args.left_camera_id}_{stereo_camera}"
|
| 445 |
+
key_right = f"{args.right_camera_id}_{stereo_camera}"
|
| 446 |
+
key_wrist = f"{args.wrist_camera_id}_{stereo_camera}"
|
| 447 |
+
|
| 448 |
+
left_image = image_observations.get(key_left)
|
| 449 |
+
right_image = image_observations.get(key_right)
|
| 450 |
+
wrist_image = image_observations.get(key_wrist)
|
| 451 |
+
|
| 452 |
+
available = list(image_observations.keys())
|
| 453 |
+
assert left_image is not None, (
|
| 454 |
+
f"Left camera not found for key {key_left!r}. Available keys: {available}. "
|
| 455 |
+
"Set --left-camera-id to the ZED serial used in observation keys."
|
| 456 |
+
)
|
| 457 |
+
assert right_image is not None, (
|
| 458 |
+
f"Right camera not found for key {key_right!r}. Available keys: {available}. "
|
| 459 |
+
"Set --right-camera-id to the ZED serial used in observation keys."
|
| 460 |
+
)
|
| 461 |
+
assert wrist_image is not None, (
|
| 462 |
+
f"Wrist camera not found for key {key_wrist!r}. Available keys: {available}. "
|
| 463 |
+
"Set --wrist-camera-id to the ZED serial used in observation keys."
|
| 464 |
+
)
|
| 465 |
+
|
| 466 |
+
# Drop the alpha dimension
|
| 467 |
+
left_image = left_image[..., :3]
|
| 468 |
+
right_image = right_image[..., :3]
|
| 469 |
+
wrist_image = wrist_image[..., :3]
|
| 470 |
+
|
| 471 |
+
# Convert to RGB
|
| 472 |
+
left_image = left_image[..., ::-1]
|
| 473 |
+
right_image = right_image[..., ::-1]
|
| 474 |
+
wrist_image = wrist_image[..., ::-1]
|
| 475 |
+
|
| 476 |
+
# In addition to image observations, also capture the proprioceptive state
|
| 477 |
+
robot_state = obs_dict["robot_state"]
|
| 478 |
+
cartesian_position = np.array(robot_state["cartesian_position"])
|
| 479 |
+
joint_position = np.array(robot_state["joint_positions"])
|
| 480 |
+
gripper_position = np.array([robot_state["gripper_position"]])
|
| 481 |
+
eef_9d = compute_eef_9d(cartesian_position)
|
| 482 |
+
|
| 483 |
+
# Save the images to disk so that they can be viewed live while the robot is running
|
| 484 |
+
# Create one combined image to make live viewing easy
|
| 485 |
+
if save_to_disk:
|
| 486 |
+
combined_image = np.concatenate([left_image, wrist_image, right_image], axis=1)
|
| 487 |
+
combined_image = Image.fromarray(combined_image)
|
| 488 |
+
combined_image.save("robot_camera_views.png")
|
| 489 |
+
|
| 490 |
+
return {
|
| 491 |
+
"left_image": left_image,
|
| 492 |
+
"right_image": right_image,
|
| 493 |
+
"wrist_image": wrist_image,
|
| 494 |
+
"cartesian_position": cartesian_position,
|
| 495 |
+
"eef_9d": eef_9d,
|
| 496 |
+
"joint_position": joint_position,
|
| 497 |
+
"gripper_position": gripper_position,
|
| 498 |
+
}
|
| 499 |
+
|
| 500 |
+
|
| 501 |
+
if __name__ == "__main__":
|
| 502 |
+
args: Args = tyro.cli(Args)
|
| 503 |
+
main(args)
|
Isaac-GR00T/examples/DROID/server_client.py
ADDED
|
@@ -0,0 +1,395 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
| 2 |
+
# SPDX-License-Identifier: Apache-2.0
|
| 3 |
+
#
|
| 4 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 5 |
+
# you may not use this file except in compliance with the License.
|
| 6 |
+
# You may obtain a copy of the License at
|
| 7 |
+
#
|
| 8 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 9 |
+
#
|
| 10 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 11 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 12 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 13 |
+
# See the License for the specific language governing permissions and
|
| 14 |
+
# limitations under the License.
|
| 15 |
+
|
| 16 |
+
from __future__ import annotations
|
| 17 |
+
|
| 18 |
+
from abc import ABC, abstractmethod
|
| 19 |
+
from dataclasses import asdict, dataclass, is_dataclass
|
| 20 |
+
from enum import Enum
|
| 21 |
+
import io
|
| 22 |
+
from typing import Any
|
| 23 |
+
|
| 24 |
+
import msgpack
|
| 25 |
+
import numpy as np
|
| 26 |
+
import zmq
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def to_json_serializable(obj: Any) -> Any:
|
| 30 |
+
"""
|
| 31 |
+
Recursively convert dataclasses and numpy arrays to JSON-serializable format.
|
| 32 |
+
|
| 33 |
+
Args:
|
| 34 |
+
obj: Object to convert (can be dataclass, numpy array, dict, list, etc.)
|
| 35 |
+
|
| 36 |
+
Returns:
|
| 37 |
+
JSON-serializable representation of the object
|
| 38 |
+
"""
|
| 39 |
+
if is_dataclass(obj) and not isinstance(obj, type):
|
| 40 |
+
# Convert dataclass to dict, then recursively process the dict
|
| 41 |
+
return to_json_serializable(asdict(obj))
|
| 42 |
+
elif isinstance(obj, np.ndarray):
|
| 43 |
+
# Convert numpy array to list
|
| 44 |
+
return obj.tolist()
|
| 45 |
+
elif isinstance(obj, np.integer):
|
| 46 |
+
# Convert numpy integers to Python int
|
| 47 |
+
return int(obj)
|
| 48 |
+
elif isinstance(obj, np.floating):
|
| 49 |
+
# Convert numpy floats to Python float
|
| 50 |
+
return float(obj)
|
| 51 |
+
elif isinstance(obj, np.bool_):
|
| 52 |
+
# Convert numpy bool to Python bool
|
| 53 |
+
return bool(obj)
|
| 54 |
+
elif isinstance(obj, dict):
|
| 55 |
+
# Recursively process dictionary values
|
| 56 |
+
return {key: to_json_serializable(value) for key, value in obj.items()}
|
| 57 |
+
elif isinstance(obj, (list, tuple)):
|
| 58 |
+
# Recursively process list/tuple elements
|
| 59 |
+
return [to_json_serializable(item) for item in obj]
|
| 60 |
+
elif isinstance(obj, set):
|
| 61 |
+
# Convert set to list
|
| 62 |
+
return [to_json_serializable(item) for item in obj]
|
| 63 |
+
elif isinstance(obj, (str, int, float, bool, type(None))):
|
| 64 |
+
# Already JSON-serializable
|
| 65 |
+
return obj
|
| 66 |
+
elif isinstance(obj, Enum):
|
| 67 |
+
return obj.name
|
| 68 |
+
else:
|
| 69 |
+
# For other types, try to convert to string as fallback
|
| 70 |
+
# You might want to handle specific types differently
|
| 71 |
+
return str(obj)
|
| 72 |
+
|
| 73 |
+
|
| 74 |
+
class MessageType(Enum):
|
| 75 |
+
START_OF_EPISODE = "start_of_episode"
|
| 76 |
+
END_OF_EPISODE = "end_of_episode"
|
| 77 |
+
EPISODE_STEP = "episode_step"
|
| 78 |
+
IMAGE = "image"
|
| 79 |
+
TEXT = "text"
|
| 80 |
+
|
| 81 |
+
|
| 82 |
+
class ActionRepresentation(Enum):
|
| 83 |
+
RELATIVE = "relative"
|
| 84 |
+
DELTA = "delta"
|
| 85 |
+
ABSOLUTE = "absolute"
|
| 86 |
+
|
| 87 |
+
|
| 88 |
+
class ActionType(Enum):
|
| 89 |
+
EEF = "eef"
|
| 90 |
+
NON_EEF = "non_eef"
|
| 91 |
+
|
| 92 |
+
|
| 93 |
+
class ActionFormat(Enum):
|
| 94 |
+
DEFAULT = "default"
|
| 95 |
+
XYZ_ROT6D = "xyz+rot6d"
|
| 96 |
+
XYZ_ROTVEC = "xyz+rotvec"
|
| 97 |
+
|
| 98 |
+
|
| 99 |
+
@dataclass
|
| 100 |
+
class ActionConfig:
|
| 101 |
+
rep: ActionRepresentation
|
| 102 |
+
type: ActionType
|
| 103 |
+
format: ActionFormat
|
| 104 |
+
state_key: str | None = None
|
| 105 |
+
|
| 106 |
+
|
| 107 |
+
@dataclass
|
| 108 |
+
class ModalityConfig:
|
| 109 |
+
"""Configuration for a modality defining how data should be sampled and loaded.
|
| 110 |
+
|
| 111 |
+
This class specifies which indices to sample relative to a base index and which
|
| 112 |
+
keys to load for a particular modality (e.g., video, state, action).
|
| 113 |
+
"""
|
| 114 |
+
|
| 115 |
+
delta_indices: list[int]
|
| 116 |
+
"""Delta indices to sample relative to the current index. The returned data will correspond to the original data at a sampled base index + delta indices."""
|
| 117 |
+
modality_keys: list[str]
|
| 118 |
+
"""The keys to load for the modality in the dataset."""
|
| 119 |
+
sin_cos_embedding_keys: list[str] | None = None
|
| 120 |
+
"""Optional list of keys to apply sin/cos encoding. If None or empty, use min/max normalization for all keys."""
|
| 121 |
+
mean_std_embedding_keys: list[str] | None = None
|
| 122 |
+
"""Optional list of keys to apply mean/std normalization. If None or empty, use min/max normalization for all keys."""
|
| 123 |
+
action_configs: list[ActionConfig] | None = None
|
| 124 |
+
|
| 125 |
+
def __post_init__(self):
|
| 126 |
+
"""Set default values for action-related fields if not specified."""
|
| 127 |
+
if self.action_configs is not None:
|
| 128 |
+
assert len(self.action_configs) == len(self.modality_keys), (
|
| 129 |
+
f"Number of action configs ({len(self.action_configs)}) must match number of modality keys ({len(self.modality_keys)})"
|
| 130 |
+
)
|
| 131 |
+
parsed_action_configs = []
|
| 132 |
+
for action_config in self.action_configs:
|
| 133 |
+
if isinstance(action_config, dict):
|
| 134 |
+
action_config = ActionConfig(
|
| 135 |
+
rep=ActionRepresentation[action_config["rep"]],
|
| 136 |
+
type=ActionType[action_config["type"]],
|
| 137 |
+
format=ActionFormat[action_config["format"]],
|
| 138 |
+
state_key=action_config.get("state_key", None),
|
| 139 |
+
)
|
| 140 |
+
parsed_action_configs.append(action_config)
|
| 141 |
+
self.action_configs = parsed_action_configs
|
| 142 |
+
|
| 143 |
+
|
| 144 |
+
class MsgSerializer:
|
| 145 |
+
@staticmethod
|
| 146 |
+
def to_bytes(data: Any) -> bytes:
|
| 147 |
+
return msgpack.packb(data, default=MsgSerializer.encode_custom_classes)
|
| 148 |
+
|
| 149 |
+
@staticmethod
|
| 150 |
+
def from_bytes(data: bytes) -> Any:
|
| 151 |
+
return msgpack.unpackb(data, object_hook=MsgSerializer.decode_custom_classes)
|
| 152 |
+
|
| 153 |
+
@staticmethod
|
| 154 |
+
def decode_custom_classes(obj):
|
| 155 |
+
if not isinstance(obj, dict):
|
| 156 |
+
return obj
|
| 157 |
+
if "__ModalityConfig_class__" in obj:
|
| 158 |
+
return ModalityConfig(**obj["as_json"])
|
| 159 |
+
if "__ndarray_class__" in obj:
|
| 160 |
+
return np.load(io.BytesIO(obj["as_npy"]), allow_pickle=False)
|
| 161 |
+
return obj
|
| 162 |
+
|
| 163 |
+
@staticmethod
|
| 164 |
+
def encode_custom_classes(obj):
|
| 165 |
+
if isinstance(obj, ModalityConfig):
|
| 166 |
+
# Convert to dict and let msgpack recursively handle nested objects
|
| 167 |
+
return {"__ModalityConfig_class__": True, "as_json": to_json_serializable(obj)}
|
| 168 |
+
if isinstance(obj, np.ndarray):
|
| 169 |
+
output = io.BytesIO()
|
| 170 |
+
np.save(output, obj, allow_pickle=False)
|
| 171 |
+
return {"__ndarray_class__": True, "as_npy": output.getvalue()}
|
| 172 |
+
return obj
|
| 173 |
+
|
| 174 |
+
|
| 175 |
+
class BasePolicy(ABC):
|
| 176 |
+
"""Abstract base class for robotic control policies.
|
| 177 |
+
|
| 178 |
+
This class defines the interface that all policies must implement, including
|
| 179 |
+
methods for action computation, input/output validation, and state management.
|
| 180 |
+
|
| 181 |
+
Subclasses must implement:
|
| 182 |
+
- check_observation(): Validate observation format
|
| 183 |
+
- check_action(): Validate action format
|
| 184 |
+
- _get_action(): Core action computation logic
|
| 185 |
+
- reset(): Reset policy to initial state
|
| 186 |
+
"""
|
| 187 |
+
|
| 188 |
+
def __init__(self, *, strict: bool = True):
|
| 189 |
+
self.strict = strict
|
| 190 |
+
|
| 191 |
+
@abstractmethod
|
| 192 |
+
def check_observation(self, observation: dict[str, Any]) -> None:
|
| 193 |
+
"""Check if the observation is valid.
|
| 194 |
+
|
| 195 |
+
Args:
|
| 196 |
+
observation: Dictionary containing the current state/observation of the environment
|
| 197 |
+
|
| 198 |
+
Raises:
|
| 199 |
+
AssertionError: If the observation is invalid.
|
| 200 |
+
"""
|
| 201 |
+
pass
|
| 202 |
+
|
| 203 |
+
@abstractmethod
|
| 204 |
+
def check_action(self, action: dict[str, Any]) -> None:
|
| 205 |
+
"""Check if the action is valid.
|
| 206 |
+
|
| 207 |
+
Args:
|
| 208 |
+
action: Dictionary containing the action to be executed
|
| 209 |
+
|
| 210 |
+
Raises:
|
| 211 |
+
AssertionError: If the action is invalid.
|
| 212 |
+
"""
|
| 213 |
+
pass
|
| 214 |
+
|
| 215 |
+
@abstractmethod
|
| 216 |
+
def _get_action(
|
| 217 |
+
self, observation: dict[str, Any], options: dict[str, Any] | None = None
|
| 218 |
+
) -> tuple[dict[str, Any], dict[str, Any]]:
|
| 219 |
+
"""Compute and return the next action based on current observation.
|
| 220 |
+
|
| 221 |
+
This method should be overridden by subclasses to implement policy-specific
|
| 222 |
+
action computation. Input validation is handled by the public get_action() method.
|
| 223 |
+
|
| 224 |
+
Args:
|
| 225 |
+
observation: Dictionary containing the current state/observation
|
| 226 |
+
options: Optional configuration dict for action computation
|
| 227 |
+
|
| 228 |
+
Returns:
|
| 229 |
+
Tuple of (action, info):
|
| 230 |
+
- action: Dictionary containing the action to be executed
|
| 231 |
+
- info: Dictionary containing additional metadata (e.g., confidence scores)
|
| 232 |
+
"""
|
| 233 |
+
pass
|
| 234 |
+
|
| 235 |
+
def get_action(
|
| 236 |
+
self, observation: dict[str, Any], options: dict[str, Any] | None = None
|
| 237 |
+
) -> tuple[dict[str, Any], dict[str, Any]]:
|
| 238 |
+
"""Compute and return the next action based on current observation with validation.
|
| 239 |
+
|
| 240 |
+
This is the main public interface. It validates the observation, calls
|
| 241 |
+
the internal _get_action(), and validates the resulting action.
|
| 242 |
+
|
| 243 |
+
Args:
|
| 244 |
+
observation: Dictionary containing the current state/observation
|
| 245 |
+
options: Optional configuration dict for action computation
|
| 246 |
+
|
| 247 |
+
Returns:
|
| 248 |
+
Tuple of (action, info):
|
| 249 |
+
- action: Dictionary containing the validated action
|
| 250 |
+
- info: Dictionary containing additional metadata
|
| 251 |
+
|
| 252 |
+
Raises:
|
| 253 |
+
AssertionError/ValueError: If observation or action validation fails
|
| 254 |
+
"""
|
| 255 |
+
if self.strict:
|
| 256 |
+
self.check_observation(observation)
|
| 257 |
+
action, info = self._get_action(observation, options)
|
| 258 |
+
if self.strict:
|
| 259 |
+
self.check_action(action)
|
| 260 |
+
return action, info
|
| 261 |
+
|
| 262 |
+
@abstractmethod
|
| 263 |
+
def reset(self, options: dict[str, Any] | None = None) -> dict[str, Any]:
|
| 264 |
+
"""Reset the policy to its initial state.
|
| 265 |
+
|
| 266 |
+
Args:
|
| 267 |
+
options: Dictionary containing the options for the reset
|
| 268 |
+
|
| 269 |
+
Returns:
|
| 270 |
+
Dictionary containing the info after resetting the policy
|
| 271 |
+
"""
|
| 272 |
+
pass
|
| 273 |
+
|
| 274 |
+
|
| 275 |
+
class PolicyClient(BasePolicy):
|
| 276 |
+
def __init__(
|
| 277 |
+
self,
|
| 278 |
+
host: str = "localhost",
|
| 279 |
+
port: int = 5555,
|
| 280 |
+
timeout_ms: int = 15000,
|
| 281 |
+
api_token: str = None,
|
| 282 |
+
strict: bool = False,
|
| 283 |
+
):
|
| 284 |
+
super().__init__(strict=strict)
|
| 285 |
+
self._closed = False
|
| 286 |
+
self.context = zmq.Context()
|
| 287 |
+
self.host = host
|
| 288 |
+
self.port = port
|
| 289 |
+
self.timeout_ms = timeout_ms
|
| 290 |
+
self.api_token = api_token
|
| 291 |
+
self._init_socket()
|
| 292 |
+
|
| 293 |
+
def _init_socket(self):
|
| 294 |
+
"""Initialize or reinitialize the socket with current settings"""
|
| 295 |
+
self.socket = self.context.socket(zmq.REQ)
|
| 296 |
+
self.socket.connect(f"tcp://{self.host}:{self.port}")
|
| 297 |
+
|
| 298 |
+
def ping(self) -> bool:
|
| 299 |
+
try:
|
| 300 |
+
self.call_endpoint("ping", requires_input=False)
|
| 301 |
+
return True
|
| 302 |
+
except zmq.error.ZMQError:
|
| 303 |
+
self._init_socket() # Recreate socket for next attempt
|
| 304 |
+
return False
|
| 305 |
+
|
| 306 |
+
def kill_server(self):
|
| 307 |
+
"""
|
| 308 |
+
Kill the server.
|
| 309 |
+
"""
|
| 310 |
+
self.call_endpoint("kill", requires_input=False)
|
| 311 |
+
|
| 312 |
+
def call_endpoint(
|
| 313 |
+
self, endpoint: str, data: dict | None = None, requires_input: bool = True
|
| 314 |
+
) -> Any:
|
| 315 |
+
"""
|
| 316 |
+
Call an endpoint on the server.
|
| 317 |
+
|
| 318 |
+
Args:
|
| 319 |
+
endpoint: The name of the endpoint.
|
| 320 |
+
data: The input data for the endpoint.
|
| 321 |
+
requires_input: Whether the endpoint requires input data.
|
| 322 |
+
"""
|
| 323 |
+
request: dict = {"endpoint": endpoint}
|
| 324 |
+
if requires_input:
|
| 325 |
+
request["data"] = data
|
| 326 |
+
if self.api_token:
|
| 327 |
+
request["api_token"] = self.api_token
|
| 328 |
+
|
| 329 |
+
self.socket.send(MsgSerializer.to_bytes(request))
|
| 330 |
+
message = self.socket.recv()
|
| 331 |
+
if message == b"ERROR":
|
| 332 |
+
raise RuntimeError("Server error. Make sure we are running the correct policy server.")
|
| 333 |
+
response = MsgSerializer.from_bytes(message)
|
| 334 |
+
|
| 335 |
+
if isinstance(response, dict) and "error" in response:
|
| 336 |
+
raise RuntimeError(f"Server error: {response['error']}")
|
| 337 |
+
return response
|
| 338 |
+
|
| 339 |
+
def close(self) -> None:
|
| 340 |
+
"""Release the REQ socket and ZMQ context. Idempotent.
|
| 341 |
+
|
| 342 |
+
Mirrors ``gr00t.policy.server_client.PolicyClient.close()`` so the
|
| 343 |
+
DROID example demonstrates the explicit-lifecycle pattern.
|
| 344 |
+
"""
|
| 345 |
+
if getattr(self, "_closed", True):
|
| 346 |
+
return
|
| 347 |
+
self._closed = True
|
| 348 |
+
socket = getattr(self, "socket", None)
|
| 349 |
+
if socket is not None:
|
| 350 |
+
try:
|
| 351 |
+
socket.close(linger=0)
|
| 352 |
+
except Exception:
|
| 353 |
+
pass
|
| 354 |
+
context = getattr(self, "context", None)
|
| 355 |
+
if context is not None:
|
| 356 |
+
try:
|
| 357 |
+
context.term()
|
| 358 |
+
except Exception:
|
| 359 |
+
pass
|
| 360 |
+
|
| 361 |
+
def __enter__(self):
|
| 362 |
+
return self
|
| 363 |
+
|
| 364 |
+
def __exit__(self, exc_type, exc, tb):
|
| 365 |
+
self.close()
|
| 366 |
+
|
| 367 |
+
def __del__(self):
|
| 368 |
+
try:
|
| 369 |
+
self.close()
|
| 370 |
+
except Exception:
|
| 371 |
+
pass
|
| 372 |
+
|
| 373 |
+
def _get_action(
|
| 374 |
+
self, observation: dict[str, Any], options: dict[str, Any] | None = None
|
| 375 |
+
) -> tuple[dict[str, Any], dict[str, Any]]:
|
| 376 |
+
response = self.call_endpoint(
|
| 377 |
+
"get_action", {"observation": observation, "options": options}
|
| 378 |
+
)
|
| 379 |
+
return tuple(response) # Convert list (from msgpack) to tuple of (action, info)
|
| 380 |
+
|
| 381 |
+
def reset(self, options: dict[str, Any] | None = None) -> dict[str, Any]:
|
| 382 |
+
return self.call_endpoint("reset", {"options": options})
|
| 383 |
+
|
| 384 |
+
def get_modality_config(self) -> dict[str, ModalityConfig]:
|
| 385 |
+
return self.call_endpoint("get_modality_config", requires_input=False)
|
| 386 |
+
|
| 387 |
+
def check_observation(self, observation: dict[str, Any]) -> None:
|
| 388 |
+
raise NotImplementedError(
|
| 389 |
+
"check_observation is not implemented. Please use `strict=False` to disable strict mode or implement this method in the subclass."
|
| 390 |
+
)
|
| 391 |
+
|
| 392 |
+
def check_action(self, action: dict[str, Any]) -> None:
|
| 393 |
+
raise NotImplementedError(
|
| 394 |
+
"check_action is not implemented. Please use `strict=False` to disable strict mode or implement this method in the subclass."
|
| 395 |
+
)
|
Isaac-GR00T/examples/DROID/utils.py
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
| 2 |
+
# SPDX-License-Identifier: Apache-2.0
|
| 3 |
+
#
|
| 4 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 5 |
+
# you may not use this file except in compliance with the License.
|
| 6 |
+
# You may obtain a copy of the License at
|
| 7 |
+
#
|
| 8 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 9 |
+
#
|
| 10 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 11 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 12 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 13 |
+
# See the License for the specific language governing permissions and
|
| 14 |
+
# limitations under the License.
|
| 15 |
+
|
| 16 |
+
"""
|
| 17 |
+
Taken from https://github.com/Physical-Intelligence/openpi/tree/main/packages/openpi-client/src/openpi_client
|
| 18 |
+
"""
|
| 19 |
+
|
| 20 |
+
import numpy as np
|
| 21 |
+
from PIL import Image
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
def convert_to_uint8(img: np.ndarray) -> np.ndarray:
|
| 25 |
+
"""Converts an image to uint8 if it is a float image.
|
| 26 |
+
|
| 27 |
+
This is important for reducing the size of the image when sending it over the network.
|
| 28 |
+
"""
|
| 29 |
+
if np.issubdtype(img.dtype, np.floating):
|
| 30 |
+
img = (255 * img).astype(np.uint8)
|
| 31 |
+
return img
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
def resize_with_pad(
|
| 35 |
+
images: np.ndarray, height: int, width: int, method=Image.BILINEAR
|
| 36 |
+
) -> np.ndarray:
|
| 37 |
+
"""Replicates tf.image.resize_with_pad for multiple images using PIL. Resizes a batch of images to a target height.
|
| 38 |
+
|
| 39 |
+
Args:
|
| 40 |
+
images: A batch of images in [..., height, width, channel] format.
|
| 41 |
+
height: The target height of the image.
|
| 42 |
+
width: The target width of the image.
|
| 43 |
+
method: The interpolation method to use. Default is bilinear.
|
| 44 |
+
|
| 45 |
+
Returns:
|
| 46 |
+
The resized images in [..., height, width, channel].
|
| 47 |
+
"""
|
| 48 |
+
# If the images are already the correct size, return them as is.
|
| 49 |
+
if images.shape[-3:-1] == (height, width):
|
| 50 |
+
return images
|
| 51 |
+
|
| 52 |
+
original_shape = images.shape
|
| 53 |
+
|
| 54 |
+
images = images.reshape(-1, *original_shape[-3:])
|
| 55 |
+
resized = np.stack(
|
| 56 |
+
[_resize_with_pad_pil(Image.fromarray(im), height, width, method=method) for im in images]
|
| 57 |
+
)
|
| 58 |
+
return resized.reshape(*original_shape[:-3], *resized.shape[-3:])
|
| 59 |
+
|
| 60 |
+
|
| 61 |
+
def _resize_with_pad_pil(image: Image.Image, height: int, width: int, method: int) -> Image.Image:
|
| 62 |
+
"""Replicates tf.image.resize_with_pad for one image using PIL. Resizes an image to a target height and
|
| 63 |
+
width without distortion by padding with zeros.
|
| 64 |
+
|
| 65 |
+
Unlike the jax version, note that PIL uses [width, height, channel] ordering instead of [batch, h, w, c].
|
| 66 |
+
"""
|
| 67 |
+
cur_width, cur_height = image.size
|
| 68 |
+
if cur_width == width and cur_height == height:
|
| 69 |
+
return image # No need to resize if the image is already the correct size.
|
| 70 |
+
|
| 71 |
+
ratio = max(cur_width / width, cur_height / height)
|
| 72 |
+
resized_height = int(cur_height / ratio)
|
| 73 |
+
resized_width = int(cur_width / ratio)
|
| 74 |
+
resized_image = image.resize((resized_width, resized_height), resample=method)
|
| 75 |
+
|
| 76 |
+
zero_image = Image.new(resized_image.mode, (width, height), 0)
|
| 77 |
+
pad_height = max(0, int((height - resized_height) / 2))
|
| 78 |
+
pad_width = max(0, int((width - resized_width) / 2))
|
| 79 |
+
zero_image.paste(resized_image, (pad_width, pad_height))
|
| 80 |
+
assert zero_image.size == (width, height)
|
| 81 |
+
return zero_image
|
Isaac-GR00T/examples/GR00TWholeBodyControl/README.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# GR00T Whole-Body Control Real-World Benchmark
|
| 2 |
+
|
| 3 |
+
This example reports a real-world Unitree G1 evaluation using **Isaac GR00T N1.7** together with **GR00T Whole-Body Control / GEAR-SONIC**. The benchmark focuses on everyday mobile-manipulation tasks that require walking, table approach, grasping, foot placement, and whole-body pickup motions.
|
| 4 |
+
|
| 5 |
+
## Summary
|
| 6 |
+
|
| 7 |
+
GR00T N1.7 with SONIC can execute closed-loop whole-body skills on a real humanoid robot. The main targeted task is **walk to a table and pick up an object**. A single mixed-object policy was trained from demonstrations covering about 50 table-top objects, then evaluated systematically across 8 representative objects in the training set. This follows the object-pickup setting studied in the [SONIC paper](https://nvlabs.github.io/GEAR-SONIC/static/pdf/sonic_paper.pdf), where the robot walks to a table, locates a target object, and grasps it under randomized table heights and object positions. A second task-specific policy was trained for walking to a small table, picking up a soda can, stepping on a trash-can trigger, and dropping the can inside.
|
| 8 |
+
|
| 9 |
+
For more GR00T Whole-Body Control task examples, see the [GEAR-SONIC project page](https://nvlabs.github.io/GEAR-SONIC/).
|
| 10 |
+
|
| 11 |
+
## Evaluation Results
|
| 12 |
+
|
| 13 |
+
| Task Family | Policy Setup | Task Specification | Logged Trials | Successes | Success Rate |
|
| 14 |
+
| --- | --- | --- | ---: | ---: | ---: |
|
| 15 |
+
| Walk to table and pick up object | Single mixed-object pickup policy | Walk to the table, localize a target object, grasp it, and lift it. Evaluated on 8 objects across 3 table heights and 9 object placements. Autonomous retries count as success. | 216 | 159 | 73.6% |
|
| 16 |
+
| Soda can from small table to trash can | Task-specific soda-can policy | Walk toward a small table, pick up a soda can, rotate toward the trash can, step on the trigger, and drop the can inside. | 12 | 8 | 66.7% |
|
| 17 |
+
|
| 18 |
+
For object pickup, each object was evaluated with 27 trials: 3 table heights (24, 27, and 30 inches) crossed with a 3 by 3 grid of object placements on the table (left/middle/right and front/middle/back). The failures were mostly grasp failures: the gripper missed the object, contacted it from an unstable grasp point, pushed it out of reach, or dropped it into a pose that the policy could not recover from. The soda-can failures were similarly dominated by missed grasps, unstable grasps, or missed trigger steps.
|
| 19 |
+
|
| 20 |
+
### Object Pickup Breakdown
|
| 21 |
+
|
| 22 |
+
| Object | Trials | Successes | Success Rate |
|
| 23 |
+
| --- | ---: | ---: | ---: |
|
| 24 |
+
| Towel | 27 | 24 | 88.9% |
|
| 25 |
+
| Shoe | 27 | 14 | 51.9% |
|
| 26 |
+
| Apple | 27 | 19 | 70.4% |
|
| 27 |
+
| Scoop | 27 | 18 | 66.7% |
|
| 28 |
+
| Lamp | 27 | 17 | 63.0% |
|
| 29 |
+
| Flashlight | 27 | 20 | 74.1% |
|
| 30 |
+
| Fruit | 27 | 26 | 96.3% |
|
| 31 |
+
| Sock | 27 | 21 | 77.8% |
|
| 32 |
+
|
| 33 |
+
## Demo Videos
|
| 34 |
+
|
| 35 |
+
The MP4 samples below are attached as video files in this repository. Click any preview image to open the corresponding MP4. The source tree intentionally keeps only a curated sample set; full per-trial review videos are better shared as supplementary material through a stable gallery or archive. For more task demos beyond these two quantified results, see the [GEAR-SONIC project page](https://nvlabs.github.io/GEAR-SONIC/).
|
| 36 |
+
|
| 37 |
+
### Walk To Table And Pick Up Objects
|
| 38 |
+
|
| 39 |
+
Representative examples are included for the evaluated object pickup task. Captions describe the behavior visible in the clip; some successful clips include retries, regrasping, object contact, or small recovery motions because autonomous recovery was counted as success during evaluation. A trial is considered failure when it stucks for over 30s without progress.
|
| 40 |
+
|
| 41 |
+
| Object | Example 1 | Example 2 |
|
| 42 |
+
| --- | --- | --- |
|
| 43 |
+
| Lamp | [<img src="media/g1_real_eval/posters/mixed_pickup_lamp_01_pickup_success.jpg" alt="Lamp pickup from a 24-inch table placement" width="280">](media/g1_real_eval/videos/mixed_pickup_lamp_01_pickup_success.mp4)<br>Picks up the lamp from a 24-inch table | [<img src="media/g1_real_eval/posters/mixed_pickup_lamp_02_base_grasp_success.jpg" alt="Lamp base grasp after contact at a 30-inch table placement" width="280">](media/g1_real_eval/videos/mixed_pickup_lamp_02_base_grasp_success.mp4)<br>Contacts the lamp, then grasps the base |
|
| 44 |
+
| Towel | [<img src="media/g1_real_eval/posters/mixed_pickup_towel_01_pickup_success.jpg" alt="Towel pickup from a 24-inch table placement" width="280">](media/g1_real_eval/videos/mixed_pickup_towel_01_pickup_success.mp4)<br>Picks up the towel | [<img src="media/g1_real_eval/posters/mixed_pickup_towel_02_regrasp_success.jpg" alt="Towel grasp, drop, and regrasp sequence" width="280">](media/g1_real_eval/videos/mixed_pickup_towel_02_regrasp_success.mp4)<br>Grasps, drops, and regrasps |
|
| 45 |
+
| Apple | [<img src="media/g1_real_eval/posters/mixed_pickup_apple_01_retry_success.jpg" alt="Apple pickup after a retry grasp" width="280">](media/g1_real_eval/videos/mixed_pickup_apple_01_retry_success.mp4)<br>Retries the grasp and succeeds | [<img src="media/g1_real_eval/posters/mixed_pickup_apple_02_adjust_success.jpg" alt="Apple pickup after gripper adjustment over the object" width="280">](media/g1_real_eval/videos/mixed_pickup_apple_02_adjust_success.mp4)<br>Adjusts over the apple before lifting |
|
| 46 |
+
| Shoe | [<img src="media/g1_real_eval/posters/mixed_pickup_shoe_01_many_attempts_success.jpg" alt="Shoe pickup after multiple grasp attempts" width="280">](media/g1_real_eval/videos/mixed_pickup_shoe_01_many_attempts_success.mp4)<br>Succeeds after several attempts | [<img src="media/g1_real_eval/posters/mixed_pickup_shoe_02_regrasp_success.jpg" alt="Shoe drop and regrasp success" width="280">](media/g1_real_eval/videos/mixed_pickup_shoe_02_regrasp_success.mp4)<br>Drops the shoe, then regrasps |
|
| 47 |
+
| Scoop | [<img src="media/g1_real_eval/posters/mixed_pickup_scoop_01_pickup_success.jpg" alt="Scoop pickup from a 27-inch table placement" width="280">](media/g1_real_eval/videos/mixed_pickup_scoop_01_pickup_success.mp4)<br>Picks up the scoop | [<img src="media/g1_real_eval/posters/mixed_pickup_scoop_02_noisy_success.jpg" alt="Scoop pickup with noisy approach motion" width="280">](media/g1_real_eval/videos/mixed_pickup_scoop_02_noisy_success.mp4)<br>Noisy approach, successful pickup |
|
| 48 |
+
| Flashlight | [<img src="media/g1_real_eval/posters/mixed_pickup_flashlight_01_smooth_success.jpg" alt="Smooth flashlight pickup" width="280">](media/g1_real_eval/videos/mixed_pickup_flashlight_01_smooth_success.mp4)<br>Smooth pickup | [<img src="media/g1_real_eval/posters/mixed_pickup_flashlight_02_pickup_success.jpg" alt="Flashlight pickup from a 27-inch table placement" width="280">](media/g1_real_eval/videos/mixed_pickup_flashlight_02_pickup_success.mp4)<br>Picks up the flashlight |
|
| 49 |
+
| Fruit | [<img src="media/g1_real_eval/posters/mixed_pickup_fruit_01_pickup_success.jpg" alt="Fruit pickup from a 24-inch table placement" width="280">](media/g1_real_eval/videos/mixed_pickup_fruit_01_pickup_success.mp4)<br>Picks up the fruit | [<img src="media/g1_real_eval/posters/mixed_pickup_fruit_02_regrasp_success.jpg" alt="Fruit grasp, drop, and regrasp success" width="280">](media/g1_real_eval/videos/mixed_pickup_fruit_02_regrasp_success.mp4)<br>Grasps, drops, and regrasps |
|
| 50 |
+
| Sock | [<img src="media/g1_real_eval/posters/mixed_pickup_sock_01_top_grasp_success.jpg" alt="Sock top-down grasp success" width="280">](media/g1_real_eval/videos/mixed_pickup_sock_01_top_grasp_success.mp4)<br>Top-down grasp succeeds | [<img src="media/g1_real_eval/posters/mixed_pickup_sock_02_regrasp_success.jpg" alt="Sock grasp, drop, and regrasp success" width="280">](media/g1_real_eval/videos/mixed_pickup_sock_02_regrasp_success.mp4)<br>Drops once, then regrasps |
|
| 51 |
+
|
| 52 |
+
### Soda Can From Small Table To Trash Can
|
| 53 |
+
|
| 54 |
+
| Task | Example 1 | Example 2 | Example 3 |
|
| 55 |
+
| --- | --- | --- | --- |
|
| 56 |
+
| Soda can to trash | [<img src="media/g1_real_eval/posters/soda_can_table_trash_01_smooth_success.jpg" alt="Soda can picked up and dropped into the trash can in one smooth sequence" width="240">](media/g1_real_eval/videos/soda_can_table_trash_01_smooth_success.mp4)<br>Smooth full sequence | [<img src="media/g1_real_eval/posters/soda_can_table_trash_02_second_grasp_step_success.jpg" alt="Soda can succeeds after a second grasp and second trigger step" width="240">](media/g1_real_eval/videos/soda_can_table_trash_02_second_grasp_step_success.mp4)<br>Second grasp and trigger step | [<img src="media/g1_real_eval/posters/soda_can_table_trash_03_clean_success.jpg" alt="Soda can picked up and dropped into the trash can without a visible retry" width="240">](media/g1_real_eval/videos/soda_can_table_trash_03_clean_success.mp4)<br>Single-attempt full sequence |
|
| 57 |
+
|
| 58 |
+
## Data Collection Experience
|
| 59 |
+
|
| 60 |
+
We followed the [GR00T Whole-Body Control data collection tutorial](https://nvlabs.github.io/GR00T-WholeBodyControl/tutorials/data_collection.html) to collect G1 whole-body manipulation datasets.
|
| 61 |
+
|
| 62 |
+
Training a good policy depends on both collecting high-quality data and configuring training properly. Each demonstration should ideally complete the task on the first attempt, without corrective motions such as re-grasping after a failed grasp or redoing a missed stepping trigger. For the mixed object pickup policy, we trained for 60k iterations at batch size 256 on roughly 18k episodes covering about 50 different objects; for the soda-can-to-trash policy, we trained for 20k iterations at batch size 32 on roughly 150 episodes of this single task.
|
| 63 |
+
|
| 64 |
+
### Notes
|
| 65 |
+
|
| 66 |
+
1. The mixed pickup result uses one policy trained from a combined object dataset and evaluated across multiple table-top objects.
|
| 67 |
+
2. For the pickup task, we used an in-house UMI gripper design. Similar tasks may require users to build task-appropriate gripper designs for their own hardware setup.
|
| 68 |
+
|
| 69 |
+
## Data-Train-Eval Workflow
|
| 70 |
+
|
| 71 |
+
This benchmark used the public GR00T N1.7 and GR00T Whole-Body Control workflow:
|
| 72 |
+
|
| 73 |
+
1. Collect G1 demonstrations with SONIC teleoperation.
|
| 74 |
+
2. Fine-tune GR00T N1.7 with `UNITREE_G1_SONIC`.
|
| 75 |
+
3. Run the GR00T policy server and the SONIC robot-side controller.
|
| 76 |
+
4. Evaluate in closed loop on the real robot with video recording.
|
| 77 |
+
|
| 78 |
+
Fine-tuning used the SONIC embodiment tag:
|
| 79 |
+
|
| 80 |
+
```bash
|
| 81 |
+
bash examples/finetune.sh \
|
| 82 |
+
--base-model-path nvidia/GR00T-N1.7-3B \
|
| 83 |
+
--dataset-path /path/to/your/lerobot_dataset \
|
| 84 |
+
--embodiment-tag UNITREE_G1_SONIC \
|
| 85 |
+
--output-dir /path/to/output_checkpoint \
|
| 86 |
+
--experiment-name g1-sonic-task
|
| 87 |
+
```
|
| 88 |
+
|
| 89 |
+
Closed-loop evaluation used a GR00T policy server:
|
| 90 |
+
|
| 91 |
+
```bash
|
| 92 |
+
python gr00t/eval/run_gr00t_server.py \
|
| 93 |
+
--model-path /path/to/output_checkpoint/checkpoint-<step> \
|
| 94 |
+
--embodiment-tag UNITREE_G1_SONIC \
|
| 95 |
+
--device cuda:0 \
|
| 96 |
+
--host 0.0.0.0 \
|
| 97 |
+
--port 5550
|
| 98 |
+
```
|
| 99 |
+
|
| 100 |
+
The robot-side controller follows the GR00T Whole-Body Control VLA inference workflow.
|
| 101 |
+
|
| 102 |
+
### Notes
|
| 103 |
+
|
| 104 |
+
- The data format should be LeRobot V2 already and ready to train the model.
|
| 105 |
+
- It would be beneficial to check open-loop robot joint trajectory matching against training set/validation set before deploying on real robot.
|
| 106 |
+
- As suggested in Data Collection Experience, data quality is preferred than quantity during post-training.
|
| 107 |
+
|
| 108 |
+
## References
|
| 109 |
+
|
| 110 |
+
- [NVIDIA Isaac GR00T](https://github.com/NVIDIA/Isaac-GR00T)
|
| 111 |
+
- [SONIC paper](https://nvlabs.github.io/GEAR-SONIC/static/pdf/sonic_paper.pdf)
|
| 112 |
+
- [GR00T Whole-Body Control documentation](https://nvlabs.github.io/GR00T-WholeBodyControl/)
|
| 113 |
+
- [GEAR-SONIC project page](https://nvlabs.github.io/GEAR-SONIC/)
|
| 114 |
+
- [GR00T data preparation guide](../../getting_started/data_preparation.md)
|
| 115 |
+
- [GR00T policy server/client guide](../../getting_started/policy.md)
|
Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_apple_01_retry_success.jpg
ADDED
|
Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_apple_02_adjust_success.jpg
ADDED
|
Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_flashlight_01_smooth_success.jpg
ADDED
|
Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_flashlight_02_pickup_success.jpg
ADDED
|
Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_fruit_01_pickup_success.jpg
ADDED
|
Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_fruit_02_regrasp_success.jpg
ADDED
|
Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_lamp_01_pickup_success.jpg
ADDED
|
Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_lamp_02_base_grasp_success.jpg
ADDED
|
Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_scoop_01_pickup_success.jpg
ADDED
|
Isaac-GR00T/examples/GR00TWholeBodyControl/media/g1_real_eval/posters/mixed_pickup_scoop_02_noisy_success.jpg
ADDED
|