├── .gitignore ├── .gitmodules ├── .idea ├── vcs.xml └── workspace.xml ├── InfiniGym ├── __init__.py ├── assets │ └── urdf │ │ ├── franka-LICENSE.txt │ │ └── franka_description │ │ ├── meshes │ │ ├── collision │ │ │ ├── finger.obj │ │ │ ├── finger.stl │ │ │ ├── hand.obj │ │ │ ├── hand.stl │ │ │ ├── link0.obj │ │ │ ├── link0.stl │ │ │ ├── link1.obj │ │ │ ├── link1.stl │ │ │ ├── link2.obj │ │ │ ├── link2.stl │ │ │ ├── link3.obj │ │ │ ├── link3.stl │ │ │ ├── link4.obj │ │ │ ├── link4.stl │ │ │ ├── link5.obj │ │ │ ├── link5.stl │ │ │ ├── link6.obj │ │ │ ├── link6.stl │ │ │ ├── link7.obj │ │ │ ├── link7.stl │ │ │ ├── stltoobj.bat │ │ │ └── stltoobj.mlx │ │ ├── collision_cvx │ │ │ ├── finger.stl │ │ │ ├── finger_2part.obj │ │ │ ├── finger_4part.obj │ │ │ ├── hand.obj │ │ │ ├── hand.stl │ │ │ ├── link0.obj │ │ │ ├── link0.stl │ │ │ ├── link1.obj │ │ │ ├── link1.stl │ │ │ ├── link2.obj │ │ │ ├── link2.stl │ │ │ ├── link3.obj │ │ │ ├── link3.stl │ │ │ ├── link4.obj │ │ │ ├── link4.stl │ │ │ ├── link5.obj │ │ │ ├── link5.stl │ │ │ ├── link6.obj │ │ │ ├── link6.stl │ │ │ ├── link7.obj │ │ │ ├── link7.stl │ │ │ ├── stltoobj.bat │ │ │ └── stltoobj.mlx │ │ ├── franka_gripper_collision_mesh.stl │ │ └── visual │ │ │ ├── daetoobj.bat │ │ │ ├── daetoobj.mlx │ │ │ ├── finger.dae │ │ │ ├── finger.mtl │ │ │ ├── finger.obj │ │ │ ├── hand.dae │ │ │ ├── hand.mtl │ │ │ ├── hand.obj │ │ │ ├── link0.dae │ │ │ ├── link0.mtl │ │ │ ├── link0.obj │ │ │ ├── link1.dae │ │ │ ├── link1.mtl │ │ │ ├── link1.obj │ │ │ ├── link2.dae │ │ │ ├── link2.mtl │ │ │ ├── link2.obj │ │ │ ├── link3.dae │ │ │ ├── link3.mtl │ │ │ ├── link3.obj │ │ │ ├── link4.dae │ │ │ ├── link4.mtl │ │ │ ├── link4.obj │ │ │ ├── link5.dae │ │ │ ├── link5.mtl │ │ │ ├── link5.obj │ │ │ ├── link6.dae │ │ │ ├── link6.mtl │ │ │ ├── link6.obj │ │ │ ├── link7.dae │ │ │ ├── link7.mtl │ │ │ └── link7.obj │ │ └── robots │ │ ├── franka_panda.urdf │ │ ├── franka_panda_gripper.urdf │ │ ├── franka_r3.urdf │ │ ├── franka_r3_cvx.urdf │ │ └── franka_r3_cvx_ompl.urdf └── isaacgymenvs │ ├── __init__.py │ ├── config │ ├── config.yaml │ ├── scene │ │ └── benchmark_eval │ │ │ ├── RigidObjCellShelfDesk_0.yaml │ │ │ ├── RigidObjCellShelfDesk_1.yaml │ │ │ ├── RigidObjCellShelfDesk_2.yaml │ │ │ ├── RigidObjCellShelfDesk_3.yaml │ │ │ ├── RigidObjCellShelfDesk_4.yaml │ │ │ ├── RigidObjCellShelfDesk_5.yaml │ │ │ ├── RigidObjCellShelfDesk_6.yaml │ │ │ ├── RigidObjCellShelfDesk_7.yaml │ │ │ ├── RigidObjCellShelfDesk_8.yaml │ │ │ ├── RigidObjCellShelfDesk_9.yaml │ │ │ ├── RigidObjDeskWall_0.yaml │ │ │ ├── RigidObjDeskWall_1.yaml │ │ │ ├── RigidObjDeskWall_2.yaml │ │ │ ├── RigidObjDeskWall_3.yaml │ │ │ ├── RigidObjDeskWall_4.yaml │ │ │ ├── RigidObjDeskWall_5.yaml │ │ │ ├── RigidObjDeskWall_6.yaml │ │ │ ├── RigidObjDesk_0.yaml │ │ │ ├── RigidObjDesk_1.yaml │ │ │ ├── RigidObjDesk_2.yaml │ │ │ ├── RigidObjDesk_3.yaml │ │ │ ├── RigidObjDesk_4.yaml │ │ │ ├── RigidObjDesk_5.yaml │ │ │ ├── RigidObjDoubleDoorCabinet_0.yaml │ │ │ ├── RigidObjDoubleDoorCabinet_1.yaml │ │ │ ├── RigidObjDoubleDoorCabinet_2.yaml │ │ │ ├── RigidObjDoubleDoorCabinet_3.yaml │ │ │ ├── RigidObjDoubleDoorCabinet_4.yaml │ │ │ ├── RigidObjDoubleDoorCabinet_5.yaml │ │ │ ├── RigidObjDrawerShelf_0.yaml │ │ │ ├── RigidObjDrawerShelf_1.yaml │ │ │ ├── RigidObjDrawerShelf_2.yaml │ │ │ ├── RigidObjDrawerShelf_3.yaml │ │ │ ├── RigidObjDrawerShelf_4.yaml │ │ │ ├── RigidObjDrawerShelf_5.yaml │ │ │ ├── RigidObjDrawerShelf_6.yaml │ │ │ ├── RigidObjDrawerShelf_7.yaml │ │ │ ├── RigidObjDrawerShelf_8.yaml │ │ │ ├── RigidObjDrawerShelf_9.yaml │ │ │ ├── RigidObjDrawer_0.yaml │ │ │ ├── RigidObjDrawer_1.yaml │ │ │ ├── RigidObjDrawer_2.yaml │ │ │ ├── RigidObjDrawer_3.yaml │ │ │ ├── RigidObjDrawer_4.yaml │ │ │ ├── RigidObjDrawer_5.yaml │ │ │ ├── RigidObjEketShelf_0.yaml │ │ │ ├── RigidObjEketShelf_1.yaml │ │ │ ├── RigidObjEketShelf_2.yaml │ │ │ ├── RigidObjEketShelf_3.yaml │ │ │ ├── RigidObjEketShelf_4.yaml │ │ │ ├── RigidObjLargeShelfDesk_0.yaml │ │ │ ├── RigidObjLargeShelfDesk_1.yaml │ │ │ ├── RigidObjLargeShelfDesk_2.yaml │ │ │ ├── RigidObjLargeShelfDesk_3.yaml │ │ │ ├── RigidObjLargeShelfDesk_4.yaml │ │ │ ├── RigidObjLargeShelfDesk_5.yaml │ │ │ ├── RigidObjLargeShelfDesk_6.yaml │ │ │ ├── RigidObjLargeShelfDesk_7.yaml │ │ │ ├── RigidObjLargeShelfDesk_8.yaml │ │ │ ├── RigidObjLargeShelf_0.yaml │ │ │ ├── RigidObjLargeShelf_1.yaml │ │ │ ├── RigidObjLargeShelf_2.yaml │ │ │ ├── RigidObjLargeShelf_3.yaml │ │ │ ├── RigidObjLargeShelf_4.yaml │ │ │ ├── RigidObjLargeShelf_5.yaml │ │ │ ├── RigidObjLargeShelf_6.yaml │ │ │ ├── RigidObjLargeShelf_7.yaml │ │ │ ├── RigidObjLargeShelf_8.yaml │ │ │ ├── RigidObjLargeShelf_9.yaml │ │ │ ├── RigidObjLayerShelf_0.yaml │ │ │ ├── RigidObjLayerShelf_1.yaml │ │ │ ├── RigidObjLayerShelf_2.yaml │ │ │ ├── RigidObjLayerShelf_3.yaml │ │ │ ├── RigidObjLayerShelf_4.yaml │ │ │ ├── RigidObjLayerShelf_5.yaml │ │ │ ├── RigidObjLayerShelf_6.yaml │ │ │ ├── RigidObjLayerShelf_7.yaml │ │ │ ├── RigidObjLayerShelf_8.yaml │ │ │ ├── RigidObjLayerShelf_9.yaml │ │ │ ├── RigidObjRoundTable_0.yaml │ │ │ ├── RigidObjRoundTable_1.yaml │ │ │ ├── RigidObjRoundTable_2.yaml │ │ │ ├── RigidObjRoundTable_3.yaml │ │ │ ├── RigidObjRoundTable_4.yaml │ │ │ ├── RigidObjRoundTable_5.yaml │ │ │ ├── RigidObjRoundTable_6.yaml │ │ │ ├── RigidObjRoundTable_7.yaml │ │ │ ├── RigidObjRoundTable_8.yaml │ │ │ ├── RigidObjSingleDoorCabinetDesk_0.yaml │ │ │ ├── RigidObjSingleDoorCabinetDesk_1.yaml │ │ │ ├── RigidObjSingleDoorCabinetDesk_2.yaml │ │ │ ├── RigidObjSingleDoorCabinetDesk_3.yaml │ │ │ ├── RigidObjSingleDoorCabinetDesk_4.yaml │ │ │ ├── RigidObjSingleDoorCabinetDesk_5.yaml │ │ │ ├── RigidObjSingleDoorCabinetDesk_6.yaml │ │ │ ├── RigidObjTriangleShelfDesk_0.yaml │ │ │ ├── RigidObjTriangleShelfDesk_1.yaml │ │ │ ├── RigidObjTriangleShelfDesk_2.yaml │ │ │ ├── RigidObjTriangleShelfDesk_3.yaml │ │ │ └── RigidObjTriangleShelfDesk_4.yaml │ └── task │ │ ├── FetchBase.yaml │ │ ├── FetchCuroboDataGen.yaml │ │ ├── FetchMeshCurobo.yaml │ │ ├── FetchMeshCuroboPtdCGNBeta.yaml │ │ ├── FetchMeshCuroboPtdCGNBetaRep.yaml │ │ ├── FetchMeshCuroboRep.yaml │ │ ├── FetchMeshPyompl.yaml │ │ ├── FetchMeshPyomplPtdCGNBeta.yaml │ │ ├── FetchMeshPyomplRep.yaml │ │ ├── FetchNaive.yaml │ │ ├── FetchPointCloudBase.yaml │ │ ├── FetchPtdCabinet.yaml │ │ ├── FetchPtdCabinetCGNBeta.yaml │ │ ├── FetchPtdCurobo.yaml │ │ ├── FetchPtdCuroboCGNBeta.yaml │ │ ├── FetchPtdCuroboCGNBetaRep.yaml │ │ ├── FetchPtdCuroboRep.yaml │ │ ├── FetchPtdImitCuroboCGN.yaml │ │ ├── FetchPtdImitE2E.yaml │ │ ├── FetchPtdImitTwoStage.yaml │ │ ├── FetchPtdPyompl.yaml │ │ ├── FetchPtdPyomplCGNBeta.yaml │ │ ├── FetchPtdPyomplCGNBetaRep.yaml │ │ └── FetchPtdPyomplRep.yaml │ ├── data_gen.py │ ├── eval.py │ ├── result.py │ ├── tasks │ ├── __init__.py │ └── fetch │ │ ├── __init__.py │ │ ├── fetch_base.py │ │ ├── fetch_mesh_curobo.py │ │ ├── fetch_mesh_curobo_cgn_beta.py │ │ ├── fetch_mesh_curobo_datagen.py │ │ ├── fetch_mesh_pyompl.py │ │ ├── fetch_mesh_pyompl_cgn_beta.py │ │ ├── fetch_naive.py │ │ ├── fetch_ptd.py │ │ ├── fetch_ptd_cabinet.py │ │ ├── fetch_ptd_cabinet_cgn_beta.py │ │ ├── fetch_ptd_curobo.py │ │ ├── fetch_ptd_curobo_cgn_beta.py │ │ ├── fetch_ptd_pyompl.py │ │ ├── fetch_ptd_pyompl_cgn_beta.py │ │ ├── fetch_solution_base.py │ │ ├── imit │ │ ├── fetch_ptd_imit_base.py │ │ ├── fetch_ptd_imit_curobo_cgn.py │ │ ├── fetch_ptd_imit_e2e.py │ │ └── fetch_ptd_imit_two_stage.py │ │ ├── infini_scene │ │ ├── infini_scenes.py │ │ └── trimesh_scene.py │ │ ├── repeat │ │ ├── fetch_mesh_curobo_cgn_beta_rep.py │ │ ├── fetch_mesh_curobo_rep.py │ │ ├── fetch_mesh_pyompl_rep.py │ │ ├── fetch_ptd_curobo_cgn_beta_rep.py │ │ ├── fetch_ptd_curobo_rep.py │ │ ├── fetch_ptd_pyompl_cgn_beta_rep.py │ │ └── fetch_ptd_pyompl_rep.py │ │ ├── utils │ │ ├── __init__.py │ │ ├── contact_graspnet_utils.py │ │ ├── imit_utils.py │ │ ├── load_utils.py │ │ ├── mppi_utils.py │ │ ├── point_cloud_utils.py │ │ ├── pyompl_utils.py │ │ ├── scene_ik_filter.py │ │ └── scene_seg_filter.py │ │ └── vec_task.py │ ├── train_imit.py │ └── utils │ ├── __init__.py │ ├── dr_utils.py │ ├── reformat.py │ ├── rlgames_utils.py │ ├── torch_jit_utils.py │ └── utils.py ├── LICENSE ├── README.md └── requirement.txt /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | */__pycache__ 3 | *.zip 4 | third_party 5 | imit_checkpoints 6 | InfiniGym/isaacgymenvs/logs 7 | InfiniGym/isaacgymenvs/runs 8 | InfiniGym/isaacgymenvs/videos 9 | InfiniGym/runs 10 | InfiniGym/logs 11 | InfiniGym/videos 12 | 13 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "InfiniGym/e2e_imit"] 2 | path = InfiniGym/e2e_imit 3 | url = https://github.com/princeton-vl/FetchBench-Imit.git 4 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /InfiniGym/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/__init__.py -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision/finger.obj: -------------------------------------------------------------------------------- 1 | #### 2 | # 3 | # OBJ File Generated by Meshlab 4 | # 5 | #### 6 | # Object finger.obj 7 | # 8 | # Vertices: 52 9 | # Faces: 32 10 | # 11 | #### 12 | vn 0.999991 0.003723 -0.001919 13 | v 0.010360 0.026403 0.000155 14 | vn 0.019341 -0.997893 -0.061925 15 | v 0.010449 0.002583 0.000147 16 | vn -0.999568 -0.025962 0.013789 17 | v -0.010387 0.002534 0.000132 18 | vn -0.999606 -0.009503 0.026403 19 | v -0.010479 0.016102 0.018988 20 | vn -0.000579 0.001464 -0.999999 21 | v -0.010401 0.026309 0.000167 22 | vn -0.044737 0.976483 0.210900 23 | v -0.010389 0.025220 0.019188 24 | vn -0.871286 -0.490748 0.005227 25 | v -0.008730 -0.000024 0.036165 26 | vn 0.999861 0.006488 0.015354 27 | v 0.010400 0.025253 0.019037 28 | vn 0.377718 0.867563 0.323518 29 | v 0.005840 0.014274 0.053803 30 | vn 0.736099 -0.021564 0.676530 31 | v 0.008616 0.013989 0.051328 32 | vn 0.999373 -0.008600 0.034345 33 | v 0.010495 0.015103 0.018436 34 | vn 0.013041 -0.999896 -0.006124 35 | v 0.008693 -0.000133 0.050166 36 | vn -0.998603 -0.032800 0.041418 37 | v -0.008623 -0.000057 0.050953 38 | vn -0.588468 -0.017705 0.808327 39 | v -0.005481 -0.000091 0.053725 40 | vn 0.004085 -0.008700 0.999954 41 | v -0.005278 0.014293 0.053849 42 | vn -0.691057 -0.012018 0.722700 43 | v -0.007778 0.014218 0.052366 44 | vn -0.665951 0.690851 0.281486 45 | v -0.008841 0.013918 0.050589 46 | vn 0.736099 -0.021564 0.676530 47 | v 0.006138 -0.000021 0.053578 48 | vn -0.002818 0.998255 0.058981 49 | v 0.010360 0.026403 0.000155 50 | vn 0.000073 0.000898 -1.000000 51 | v 0.010360 0.026403 0.000155 52 | vn 0.999898 -0.012431 0.007036 53 | v 0.010449 0.002583 0.000147 54 | vn 0.000724 0.000331 -1.000000 55 | v 0.010449 0.002583 0.000147 56 | vn -0.871286 -0.490748 0.005227 57 | v -0.010387 0.002534 0.000132 58 | vn 0.002403 -0.997480 -0.070914 59 | v -0.010387 0.002534 0.000132 60 | vn 0.000073 0.000898 -1.000000 61 | v -0.010387 0.002534 0.000132 62 | vn -0.004486 0.998354 0.057168 63 | v -0.010401 0.026309 0.000167 64 | vn -0.999988 0.004662 -0.001626 65 | v -0.010401 0.026309 0.000167 66 | vn -0.665951 0.690851 0.281486 67 | v -0.010389 0.025220 0.019188 68 | vn -0.999597 0.009346 0.026807 69 | v -0.010389 0.025220 0.019188 70 | vn 0.006493 -0.999457 -0.032313 71 | v -0.008730 -0.000024 0.036165 72 | vn 0.377718 0.867563 0.323518 73 | v 0.010400 0.025253 0.019037 74 | vn -0.000242 0.983230 0.182372 75 | v 0.010400 0.025253 0.019037 76 | vn 0.665647 0.002096 0.746264 77 | v 0.005840 0.014274 0.053803 78 | vn 0.008418 -0.012115 0.999891 79 | v 0.005840 0.014274 0.053803 80 | vn 0.001757 0.953702 0.300749 81 | v 0.005840 0.014274 0.053803 82 | vn 0.377718 0.867563 0.323518 83 | v 0.008616 0.013989 0.051328 84 | vn 0.998361 0.003310 0.057136 85 | v 0.008616 0.013989 0.051328 86 | vn 0.798906 -0.045001 0.599770 87 | v 0.008693 -0.000133 0.050166 88 | vn 0.998687 -0.025065 0.044683 89 | v 0.008693 -0.000133 0.050166 90 | vn -0.769031 -0.017753 0.638965 91 | v -0.008623 -0.000057 0.050953 92 | vn -0.008996 -0.999957 -0.002185 93 | v -0.008623 -0.000057 0.050953 94 | vn -0.871286 -0.490748 0.005227 95 | v -0.008623 -0.000057 0.050953 96 | vn 0.008418 -0.012115 0.999891 97 | v -0.005481 -0.000091 0.053725 98 | vn -0.002059 -0.999940 0.010793 99 | v -0.005481 -0.000091 0.053725 100 | vn -0.510143 -0.000217 0.860089 101 | v -0.005278 0.014293 0.053849 102 | vn -0.108731 0.943365 0.313433 103 | v -0.005278 0.014293 0.053849 104 | vn -0.665951 0.690851 0.281486 105 | v -0.007778 0.014218 0.052366 106 | vn -0.218924 0.920873 0.322590 107 | v -0.007778 0.014218 0.052366 108 | vn -0.858159 -0.000049 0.513385 109 | v -0.008841 0.013918 0.050589 110 | vn -0.998665 -0.002749 0.051583 111 | v -0.008841 0.013918 0.050589 112 | vn 0.006542 -0.999267 0.037718 113 | v 0.006138 -0.000021 0.053578 114 | vn 0.012751 -0.015529 0.999798 115 | v 0.006138 -0.000021 0.053578 116 | # 52 vertices, 0 vertices normals 117 | 118 | f 20//20 22//22 25//25 119 | f 3//3 4//4 27//27 120 | f 27//27 4//4 29//29 121 | f 2//2 30//30 24//24 122 | f 32//32 6//6 35//35 123 | f 25//25 5//5 20//20 124 | f 37//37 11//11 8//8 125 | f 11//11 39//39 21//21 126 | f 37//37 39//39 11//11 127 | f 42//42 23//23 7//7 128 | f 2//2 12//12 30//30 129 | f 12//12 44//44 30//30 130 | f 8//8 11//11 21//21 131 | f 8//8 21//21 1//1 132 | f 32//32 19//19 6//6 133 | f 6//6 46//46 35//35 134 | f 48//48 46//46 6//6 135 | f 40//40 14//14 16//16 136 | f 3//3 13//13 4//4 137 | f 31//31 9//9 36//36 138 | f 19//19 26//26 6//6 139 | f 4//4 50//50 29//29 140 | f 17//17 47//47 28//28 141 | f 34//34 43//43 52//52 142 | f 15//15 43//43 34//34 143 | f 12//12 51//51 44//44 144 | f 18//18 38//38 10//10 145 | f 44//44 41//41 30//30 146 | f 16//16 14//14 45//45 147 | f 13//13 50//50 4//4 148 | f 18//18 10//10 33//33 149 | f 16//16 49//49 40//40 150 | # 32 faces, 0 coords texture 151 | 152 | # End of File 153 | -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision/finger.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision/finger.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision/hand.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision/hand.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision/link0.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision/link0.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision/link1.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision/link1.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision/link2.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision/link2.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision/link3.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision/link3.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision/link4.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision/link4.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision/link5.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision/link5.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision/link6.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision/link6.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision/link7.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision/link7.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision/stltoobj.bat: -------------------------------------------------------------------------------- 1 | REM SET PATH=%PATH%;C:/Tools/Assimp/bin/x64/ 2 | REM forfiles /m *.dae /c "cmd /c assimp export @file @fname.obj --verbose --show-log -ptv" 3 | 4 | SET PATH=%PATH%;C:/Program Files/VCG/MeshLab/ 5 | forfiles /m *.stl /c "cmd /c meshlabserver -i @file -o @fname.obj -m vn -s stltoobj.mlx" -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision/stltoobj.mlx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/finger.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/finger.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/hand.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/hand.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/link0.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/link0.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/link1.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/link1.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/link2.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/link2.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/link3.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/link3.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/link4.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/link4.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/link5.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/link5.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/link6.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/link6.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/link7.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/link7.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/stltoobj.bat: -------------------------------------------------------------------------------- 1 | REM SET PATH=%PATH%;C:/Tools/Assimp/bin/x64/ 2 | REM forfiles /m *.dae /c "cmd /c assimp export @file @fname.obj --verbose --show-log -ptv" 3 | 4 | SET PATH=%PATH%;C:/Program Files/VCG/MeshLab/ 5 | forfiles /m *.stl /c "cmd /c meshlabserver -i @file -o @fname.obj -m vn -s stltoobj.mlx" -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/collision_cvx/stltoobj.mlx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/franka_gripper_collision_mesh.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/assets/urdf/franka_description/meshes/franka_gripper_collision_mesh.stl -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/visual/daetoobj.bat: -------------------------------------------------------------------------------- 1 | SET PATH=%PATH%;C:/Tools/Assimp/bin/x64/ 2 | forfiles /m *.dae /c "cmd /c assimp export @file @fname.obj --verbose --show-log -ptv" 3 | 4 | REM SET PATH=%PATH%;C:/Program Files/VCG/MeshLab/ 5 | REM forfiles /m *.dae /c "cmd /c meshlabserver -i @file -o @fname.obj -m vn vt -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/visual/daetoobj.mlx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/visual/finger.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 2 3 | 4 | newmtl Part__Feature001_006 5 | Ns -1.960784 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.901961 0.921569 0.929412 8 | Ks 0.250000 0.250000 0.250000 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl Part__Feature_007 15 | Ns -1.960784 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 0.250980 0.250980 0.250980 18 | Ks 0.250000 0.250000 0.250000 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/visual/hand.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 5 3 | 4 | newmtl Part__Feature001_008_005 5 | Ns -1.960784 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.250980 0.250980 0.250980 8 | Ks 0.007812 0.007812 0.007812 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl Part__Feature002_005_005 15 | Ns -1.960784 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 0.901961 0.921569 0.929412 18 | Ks 0.015625 0.015625 0.015625 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | 24 | newmtl Part__Feature005_001_005 25 | Ns -1.960784 26 | Ka 1.000000 1.000000 1.000000 27 | Kd 1.000000 1.000000 1.000000 28 | Ks 0.015625 0.015625 0.015625 29 | Ke 0.000000 0.000000 0.000000 30 | Ni 1.000000 31 | d 1.000000 32 | illum 2 33 | 34 | newmtl Part__Feature005_001_005_001 35 | Ns -1.960784 36 | Ka 1.000000 1.000000 1.000000 37 | Kd 0.901961 0.921569 0.929412 38 | Ks 0.015625 0.015625 0.015625 39 | Ke 0.000000 0.000000 0.000000 40 | Ni 1.000000 41 | d 1.000000 42 | illum 2 43 | 44 | newmtl Part__Feature_009_005 45 | Ns -1.960784 46 | Ka 1.000000 1.000000 1.000000 47 | Kd 0.250980 0.250980 0.250980 48 | Ks 0.015625 0.015625 0.015625 49 | Ke 0.000000 0.000000 0.000000 50 | Ni 1.000000 51 | d 1.000000 52 | illum 2 53 | -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/visual/link0.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 12 3 | 4 | newmtl Face636_001 5 | Ns -1.960784 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.901961 0.921569 0.929412 8 | Ks 0.125000 0.125000 0.125000 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl Part__Feature017_001 15 | Ns -1.960784 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 1.000000 1.000000 1.000000 18 | Ks 0.500000 0.500000 0.500000 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | 24 | newmtl Part__Feature018_001 25 | Ns -1.960784 26 | Ka 1.000000 1.000000 1.000000 27 | Kd 1.000000 1.000000 1.000000 28 | Ks 0.500000 0.500000 0.500000 29 | Ke 0.000000 0.000000 0.000000 30 | Ni 1.000000 31 | d 1.000000 32 | illum 2 33 | 34 | newmtl Part__Feature019_001 35 | Ns -1.960784 36 | Ka 1.000000 1.000000 1.000000 37 | Kd 1.000000 1.000000 1.000000 38 | Ks 0.125000 0.125000 0.125000 39 | Ke 0.000000 0.000000 0.000000 40 | Ni 1.000000 41 | d 1.000000 42 | illum 2 43 | 44 | newmtl Part__Feature022_001 45 | Ns -1.960784 46 | Ka 1.000000 1.000000 1.000000 47 | Kd 0.901961 0.921569 0.929412 48 | Ks 0.125000 0.125000 0.125000 49 | Ke 0.000000 0.000000 0.000000 50 | Ni 1.000000 51 | d 1.000000 52 | illum 2 53 | 54 | newmtl Part__Feature023_001 55 | Ns -1.960784 56 | Ka 1.000000 1.000000 1.000000 57 | Kd 0.250980 0.250980 0.250980 58 | Ks 0.125000 0.125000 0.125000 59 | Ke 0.000000 0.000000 0.000000 60 | Ni 1.000000 61 | d 1.000000 62 | illum 2 63 | 64 | newmtl Shell001_001 65 | Ns -1.960784 66 | Ka 1.000000 1.000000 1.000000 67 | Kd 0.250980 0.250980 0.250980 68 | Ks 0.125000 0.125000 0.125000 69 | Ke 0.000000 0.000000 0.000000 70 | Ni 1.000000 71 | d 1.000000 72 | illum 2 73 | 74 | newmtl Shell002_001 75 | Ns -1.960784 76 | Ka 1.000000 1.000000 1.000000 77 | Kd 0.901961 0.921569 0.929412 78 | Ks 0.125000 0.125000 0.125000 79 | Ke 0.000000 0.000000 0.000000 80 | Ni 1.000000 81 | d 1.000000 82 | illum 2 83 | 84 | newmtl Shell003_001 85 | Ns -1.960784 86 | Ka 1.000000 1.000000 1.000000 87 | Kd 0.901961 0.921569 0.929412 88 | Ks 0.125000 0.125000 0.125000 89 | Ke 0.000000 0.000000 0.000000 90 | Ni 1.000000 91 | d 1.000000 92 | illum 2 93 | 94 | newmtl Shell009_001 95 | Ns -1.960784 96 | Ka 1.000000 1.000000 1.000000 97 | Kd 0.250980 0.250980 0.250980 98 | Ks 0.125000 0.125000 0.125000 99 | Ke 0.000000 0.000000 0.000000 100 | Ni 1.000000 101 | d 1.000000 102 | illum 2 103 | 104 | newmtl Shell010_001 105 | Ns -1.960784 106 | Ka 1.000000 1.000000 1.000000 107 | Kd 0.901961 0.921569 0.929412 108 | Ks 0.125000 0.125000 0.125000 109 | Ke 0.000000 0.000000 0.000000 110 | Ni 1.000000 111 | d 1.000000 112 | illum 2 113 | 114 | newmtl Shell_001 115 | Ns -1.960784 116 | Ka 1.000000 1.000000 1.000000 117 | Kd 0.250980 0.250980 0.250980 118 | Ks 0.125000 0.125000 0.125000 119 | Ke 0.000000 0.000000 0.000000 120 | Ni 1.000000 121 | d 1.000000 122 | illum 2 123 | -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/visual/link1.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 1 3 | 4 | newmtl Part__Feature_001 5 | Ns -1.960784 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 1.000000 1.000000 1.000000 8 | Ks 0.062500 0.062500 0.062500 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/visual/link2.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 1 3 | 4 | newmtl Part__Feature024 5 | Ns -1.960784 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 1.000000 1.000000 1.000000 8 | Ks 0.125000 0.125000 0.125000 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/visual/link3.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 4 3 | 4 | newmtl Part__Feature001_010_001_002.001 5 | Ns -1.960784 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 1.000000 1.000000 1.000000 8 | Ks 0.007812 0.007812 0.007812 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl Part__Feature002_007_001_002.001 15 | Ns -1.960784 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 1.000000 1.000000 1.000000 18 | Ks 0.007812 0.007812 0.007812 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | 24 | newmtl Part__Feature003_004_001_002.001 25 | Ns -1.960784 26 | Ka 1.000000 1.000000 1.000000 27 | Kd 1.000000 1.000000 1.000000 28 | Ks 0.007812 0.007812 0.007812 29 | Ke 0.000000 0.000000 0.000000 30 | Ni 1.000000 31 | d 1.000000 32 | illum 2 33 | 34 | newmtl Part__Feature_001_001_001_002.001 35 | Ns -1.960784 36 | Ka 1.000000 1.000000 1.000000 37 | Kd 0.250980 0.250980 0.250980 38 | Ks 0.007812 0.007812 0.007812 39 | Ke 0.000000 0.000000 0.000000 40 | Ni 1.000000 41 | d 1.000000 42 | illum 2 43 | -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/visual/link4.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 4 3 | 4 | newmtl Part__Feature001_001_003_001 5 | Ns -1.960784 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 1.000000 1.000000 1.000000 8 | Ks 0.007812 0.007812 0.007812 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl Part__Feature002_001_003_001 15 | Ns -1.960784 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 0.250980 0.250980 0.250980 18 | Ks 0.007812 0.007812 0.007812 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | 24 | newmtl Part__Feature003_001_003_001 25 | Ns -1.960784 26 | Ka 1.000000 1.000000 1.000000 27 | Kd 1.000000 1.000000 1.000000 28 | Ks 0.007812 0.007812 0.007812 29 | Ke 0.000000 0.000000 0.000000 30 | Ni 1.000000 31 | d 1.000000 32 | illum 2 33 | 34 | newmtl Part__Feature_002_003_001 35 | Ns -1.960784 36 | Ka 1.000000 1.000000 1.000000 37 | Kd 1.000000 1.000000 1.000000 38 | Ks 0.007812 0.007812 0.007812 39 | Ke 0.000000 0.000000 0.000000 40 | Ni 1.000000 41 | d 1.000000 42 | illum 2 43 | -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/visual/link5.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 3 3 | 4 | newmtl Part__Feature_002_004_003 5 | Ns -1.960784 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 1.000000 1.000000 1.000000 8 | Ks 0.015625 0.015625 0.015625 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl Shell001_001_001_003 15 | Ns -1.960784 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 0.250000 0.250000 0.250000 18 | Ks 0.015625 0.015625 0.015625 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | 24 | newmtl Shell_001_001_003 25 | Ns -1.960784 26 | Ka 1.000000 1.000000 1.000000 27 | Kd 1.000000 1.000000 1.000000 28 | Ks 0.015625 0.015625 0.015625 29 | Ke 0.000000 0.000000 0.000000 30 | Ni 1.000000 31 | d 1.000000 32 | illum 2 33 | -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/visual/link6.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 17 3 | 4 | newmtl Face064_002_001_002_001 5 | Ns -1.960784 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 1.000000 0.000000 0.000000 8 | Ks 0.003906 0.003906 0.003906 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl Face065_002_001_002_001 15 | Ns -1.960784 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 0.000000 1.000000 0.000000 18 | Ks 0.003906 0.003906 0.003906 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | 24 | newmtl Face374_002_001_002_001 25 | Ns -1.960784 26 | Ka 1.000000 1.000000 1.000000 27 | Kd 1.000000 1.000000 1.000000 28 | Ks 0.003906 0.003906 0.003906 29 | Ke 0.000000 0.000000 0.000000 30 | Ni 1.000000 31 | d 1.000000 32 | illum 2 33 | 34 | newmtl Face539_002_001_002_001 35 | Ns -1.960784 36 | Ka 1.000000 1.000000 1.000000 37 | Kd 0.250980 0.250980 0.250980 38 | Ks 0.003906 0.003906 0.003906 39 | Ke 0.000000 0.000000 0.000000 40 | Ni 1.000000 41 | d 1.000000 42 | illum 2 43 | 44 | newmtl Part__Feature001_009_001_002_001 45 | Ns -1.960784 46 | Ka 1.000000 1.000000 1.000000 47 | Kd 0.250980 0.250980 0.250980 48 | Ks 0.003906 0.003906 0.003906 49 | Ke 0.000000 0.000000 0.000000 50 | Ni 1.000000 51 | d 1.000000 52 | illum 2 53 | 54 | newmtl Part__Feature002_006_001_002_001 55 | Ns -1.960784 56 | Ka 1.000000 1.000000 1.000000 57 | Kd 0.250980 0.250980 0.250980 58 | Ks 0.003906 0.003906 0.003906 59 | Ke 0.000000 0.000000 0.000000 60 | Ni 1.000000 61 | d 1.000000 62 | illum 2 63 | 64 | newmtl Shell002_002_001_002_001 65 | Ns -1.960784 66 | Ka 1.000000 1.000000 1.000000 67 | Kd 1.000000 1.000000 1.000000 68 | Ks 0.003906 0.003906 0.003906 69 | Ke 0.000000 0.000000 0.000000 70 | Ni 1.000000 71 | d 1.000000 72 | illum 2 73 | 74 | newmtl Shell003_002_001_002_001 75 | Ns -1.960784 76 | Ka 1.000000 1.000000 1.000000 77 | Kd 1.000000 1.000000 1.000000 78 | Ks 0.003906 0.003906 0.003906 79 | Ke 0.000000 0.000000 0.000000 80 | Ni 1.000000 81 | d 1.000000 82 | illum 2 83 | 84 | newmtl Shell004_001_001_002_001 85 | Ns -1.960784 86 | Ka 1.000000 1.000000 1.000000 87 | Kd 1.000000 1.000000 1.000000 88 | Ks 0.003906 0.003906 0.003906 89 | Ke 0.000000 0.000000 0.000000 90 | Ni 1.000000 91 | d 1.000000 92 | illum 2 93 | 94 | newmtl Shell005_001_001_002_001 95 | Ns -1.960784 96 | Ka 1.000000 1.000000 1.000000 97 | Kd 1.000000 1.000000 1.000000 98 | Ks 0.003906 0.003906 0.003906 99 | Ke 0.000000 0.000000 0.000000 100 | Ni 1.000000 101 | d 1.000000 102 | illum 2 103 | 104 | newmtl Shell006_003_002_001 105 | Ns -1.960784 106 | Ka 1.000000 1.000000 1.000000 107 | Kd 0.901961 0.921569 0.929412 108 | Ks 0.015625 0.015625 0.015625 109 | Ke 0.000000 0.000000 0.000000 110 | Ni 1.000000 111 | d 1.000000 112 | illum 2 113 | 114 | newmtl Shell007_002_002_001 115 | Ns -1.960784 116 | Ka 1.000000 1.000000 1.000000 117 | Kd 0.250000 0.250000 0.250000 118 | Ks 0.003906 0.003906 0.003906 119 | Ke 0.000000 0.000000 0.000000 120 | Ni 1.000000 121 | d 1.000000 122 | illum 2 123 | 124 | newmtl Shell011_002_002_001 125 | Ns -1.960784 126 | Ka 1.000000 1.000000 1.000000 127 | Kd 1.000000 1.000000 1.000000 128 | Ks 0.003906 0.003906 0.003906 129 | Ke 0.000000 0.000000 0.000000 130 | Ni 1.000000 131 | d 1.000000 132 | illum 2 133 | 134 | newmtl Shell012_002_002_001 135 | Ns -1.960784 136 | Ka 1.000000 1.000000 1.000000 137 | Kd 1.000000 1.000000 1.000000 138 | Ks 0.003906 0.003906 0.003906 139 | Ke 0.000000 0.000000 0.000000 140 | Ni 1.000000 141 | d 1.000000 142 | illum 2 143 | 144 | newmtl Shell_003_001_002_001 145 | Ns -1.960784 146 | Ka 1.000000 1.000000 1.000000 147 | Kd 0.250980 0.250980 0.250980 148 | Ks 0.003906 0.003906 0.003906 149 | Ke 0.000000 0.000000 0.000000 150 | Ni 1.000000 151 | d 1.000000 152 | illum 2 153 | 154 | newmtl Union001_001_001_002_001 155 | Ns -1.960784 156 | Ka 1.000000 1.000000 1.000000 157 | Kd 0.039216 0.541176 0.780392 158 | Ks 0.003906 0.003906 0.003906 159 | Ke 0.000000 0.000000 0.000000 160 | Ni 1.000000 161 | d 1.000000 162 | illum 2 163 | 164 | newmtl Union_001_001_002_001 165 | Ns -1.960784 166 | Ka 1.000000 1.000000 1.000000 167 | Kd 0.039216 0.541176 0.780392 168 | Ks 0.003906 0.003906 0.003906 169 | Ke 0.000000 0.000000 0.000000 170 | Ni 1.000000 171 | d 1.000000 172 | illum 2 173 | -------------------------------------------------------------------------------- /InfiniGym/assets/urdf/franka_description/meshes/visual/link7.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 8 3 | 4 | newmtl Part__Mirroring001_004_002 5 | Ns -1.960784 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.250980 0.250980 0.250980 8 | Ks 0.015625 0.015625 0.015625 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl Part__Mirroring002_004_001 15 | Ns -1.960784 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 0.250980 0.250980 0.250980 18 | Ks 0.031250 0.031250 0.031250 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | 24 | newmtl Part__Mirroring003_004_001 25 | Ns -1.960784 26 | Ka 1.000000 1.000000 1.000000 27 | Kd 0.250980 0.250980 0.250980 28 | Ks 0.031250 0.031250 0.031250 29 | Ke 0.000000 0.000000 0.000000 30 | Ni 1.000000 31 | d 1.000000 32 | illum 2 33 | 34 | newmtl Part__Mirroring004_004_002 35 | Ns -1.960784 36 | Ka 1.000000 1.000000 1.000000 37 | Kd 1.000000 1.000000 1.000000 38 | Ks 0.031250 0.031250 0.031250 39 | Ke 0.000000 0.000000 0.000000 40 | Ni 1.000000 41 | d 1.000000 42 | illum 2 43 | 44 | newmtl Part__Mirroring005_004_001 45 | Ns -1.960784 46 | Ka 1.000000 1.000000 1.000000 47 | Kd 0.250980 0.250980 0.250980 48 | Ks 0.031250 0.031250 0.031250 49 | Ke 0.000000 0.000000 0.000000 50 | Ni 1.000000 51 | d 1.000000 52 | illum 2 53 | 54 | newmtl Part__Mirroring006_004_001 55 | Ns -1.960784 56 | Ka 1.000000 1.000000 1.000000 57 | Kd 0.250980 0.250980 0.250980 58 | Ks 0.031250 0.031250 0.031250 59 | Ke 0.000000 0.000000 0.000000 60 | Ni 1.000000 61 | d 1.000000 62 | illum 2 63 | 64 | newmtl Part__Mirroring007_004_001 65 | Ns -1.960784 66 | Ka 1.000000 1.000000 1.000000 67 | Kd 0.250980 0.250980 0.250980 68 | Ks 0.031250 0.031250 0.031250 69 | Ke 0.000000 0.000000 0.000000 70 | Ni 1.000000 71 | d 1.000000 72 | illum 2 73 | 74 | newmtl Part__Mirroring_004_001 75 | Ns -1.960784 76 | Ka 1.000000 1.000000 1.000000 77 | Kd 0.898039 0.917647 0.929412 78 | Ks 0.031250 0.031250 0.031250 79 | Ke 0.000000 0.000000 0.000000 80 | Ni 1.000000 81 | d 1.000000 82 | illum 2 83 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/__init__.py: -------------------------------------------------------------------------------- 1 | import hydra 2 | from hydra import compose, initialize 3 | from hydra.core.hydra_config import HydraConfig 4 | from omegaconf import DictConfig, OmegaConf 5 | from isaacgymenvs.utils.reformat import omegaconf_to_dict 6 | 7 | 8 | OmegaConf.register_new_resolver('eq', lambda x, y: x.lower()==y.lower()) 9 | OmegaConf.register_new_resolver('contains', lambda x, y: x.lower() in y.lower()) 10 | OmegaConf.register_new_resolver('if', lambda pred, a, b: a if pred else b) 11 | OmegaConf.register_new_resolver('resolve_default', lambda default, arg: default if arg=='' else arg) 12 | 13 | 14 | def make( 15 | seed: int, 16 | task: str, 17 | num_envs: int, 18 | sim_device: str, 19 | rl_device: str, 20 | graphics_device_id: int = -1, 21 | headless: bool = False, 22 | multi_gpu: bool = False, 23 | virtual_screen_capture: bool = False, 24 | force_render: bool = True, 25 | cfg: DictConfig = None, 26 | **kwargs 27 | ): 28 | from isaacgymenvs.utils.rlgames_utils import get_rlgames_env_creator 29 | # create hydra config if no config passed in 30 | if cfg is None: 31 | # reset current hydra config if already parsed (but not passed in here) 32 | if HydraConfig.initialized(): 33 | task = HydraConfig.get().runtime.choices['task'] 34 | hydra.core.global_hydra.GlobalHydra.instance().clear() 35 | 36 | with initialize(config_path="./cfg"): 37 | cfg = compose(config_name="config", overrides=[f"task={task}"]) 38 | cfg_dict = omegaconf_to_dict(cfg.task) 39 | cfg_dict['env']['numEnvs'] = num_envs 40 | # reuse existing config 41 | else: 42 | cfg_dict = omegaconf_to_dict(cfg.task) 43 | 44 | create_rlgpu_env = get_rlgames_env_creator( 45 | seed=seed, 46 | task_config=cfg_dict, 47 | task_name=cfg_dict["name"], 48 | sim_device=sim_device, 49 | rl_device=rl_device, 50 | graphics_device_id=graphics_device_id, 51 | headless=headless, 52 | multi_gpu=multi_gpu, 53 | virtual_screen_capture=virtual_screen_capture, 54 | force_render=force_render, 55 | **kwargs 56 | ) 57 | return create_rlgpu_env() 58 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/config.yaml: -------------------------------------------------------------------------------- 1 | 2 | # Task name - used to pick the class to load 3 | task_name: ${task.name} 4 | # experiment name. defaults to name of training config 5 | experiment: '' 6 | 7 | # if set to positive integer, overrides the default number of environments 8 | num_envs: '' 9 | 10 | # seed - set to -1 to choose random seed 11 | seed: 42 12 | # set to True for deterministic performance 13 | torch_deterministic: True 14 | 15 | # set the maximum number of learning iterations to train for. overrides default per-environment setting 16 | max_iterations: '' 17 | 18 | ## Device config 19 | # 'physx' or 'flex' 20 | physics_engine: 'physx' 21 | # whether to use cpu or gpu pipeline 22 | pipeline: 'gpu' 23 | # device for running physics simulation 24 | sim_device: 'cuda:0' 25 | # device to run RL 26 | rl_device: 'cuda:0' 27 | graphics_device_id: 0 28 | 29 | ## PhysX arguments 30 | num_threads: 4 # Number of worker threads per scene used by PhysX - for CPU PhysX only. 31 | solver_type: 1 # 0: pgs, 1: tgs 32 | num_subscenes: 4 # Splits the simulation into N physics scenes and runs each one in a separate thread 33 | 34 | # RLGames Arguments 35 | # test - if set, run policy in inference mode (requires setting checkpoint to load) 36 | test: False 37 | 38 | # set to True to use multi-gpu training 39 | multi_gpu: False 40 | capture_video: False 41 | force_render: True 42 | 43 | # disables rendering 44 | headless: False 45 | 46 | # set default task and default training config based on task 47 | defaults: 48 | - task: FetchBase 49 | - scene: benchmark_eval/RigidObjDesk_0 50 | - override hydra/job_logging: disabled 51 | - _self_ 52 | 53 | # set the directory where the output files get saved 54 | hydra: 55 | output_subdir: null 56 | run: 57 | dir: . 58 | 59 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjCellShelfDesk_0.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjCellShelfDesk_0 2 | scene_list: 3 | - benchmark_eval/CellShelfDesk/CellShelfDeskSceneFactory_20 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjCellShelfDesk_1.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjCellShelfDesk_1 2 | scene_list: 3 | - benchmark_eval/CellShelfDesk/CellShelfDeskSceneFactory_45 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjCellShelfDesk_2.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjCellShelfDesk_2 2 | scene_list: 3 | - benchmark_eval/CellShelfDesk/CellShelfDeskSceneFactory_18 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjCellShelfDesk_3.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjCellShelfDesk_3 2 | scene_list: 3 | - benchmark_eval/CellShelfDesk/CellShelfDeskSceneFactory_23 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjCellShelfDesk_4.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjCellShelfDesk_4 2 | scene_list: 3 | - benchmark_eval/CellShelfDesk/CellShelfDeskSceneFactory_16 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjCellShelfDesk_5.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjCellShelfDesk_5 2 | scene_list: 3 | - benchmark_eval/CellShelfDesk/CellShelfDeskSceneFactory_40 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjCellShelfDesk_6.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjCellShelfDesk_6 2 | scene_list: 3 | - benchmark_eval/CellShelfDesk/CellShelfDeskSceneFactory_27 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjCellShelfDesk_7.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjCellShelfDesk_7 2 | scene_list: 3 | - benchmark_eval/CellShelfDesk/CellShelfDeskSceneFactory_41 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjCellShelfDesk_8.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjCellShelfDesk_8 2 | scene_list: 3 | - benchmark_eval/CellShelfDesk/CellShelfDeskSceneFactory_21 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjCellShelfDesk_9.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjCellShelfDesk_9 2 | scene_list: 3 | - benchmark_eval/CellShelfDesk/CellShelfDeskSceneFactory_46 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDeskWall_0.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDeskWall_0 2 | scene_list: 3 | - benchmark_eval/DeskWall/DeskWallSceneFactory_25 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDeskWall_1.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDeskWall_1 2 | scene_list: 3 | - benchmark_eval/DeskWall/DeskWallSceneFactory_32 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDeskWall_2.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDeskWall_2 2 | scene_list: 3 | - benchmark_eval/DeskWall/DeskWallSceneFactory_12 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDeskWall_3.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDeskWall_3 2 | scene_list: 3 | - benchmark_eval/DeskWall/DeskWallSceneFactory_14 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDeskWall_4.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDeskWall_4 2 | scene_list: 3 | - benchmark_eval/DeskWall/DeskWallSceneFactory_18 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDeskWall_5.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDeskWall_5 2 | scene_list: 3 | - benchmark_eval/DeskWall/DeskWallSceneFactory_26 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDeskWall_6.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDeskWall_6 2 | scene_list: 3 | - benchmark_eval/DeskWall/DeskWallSceneFactory_23 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDesk_0.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDesk_0 2 | scene_list: 3 | - benchmark_eval/Desk/DeskSceneFactory_48 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDesk_1.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDesk_1 2 | scene_list: 3 | - benchmark_eval/Desk/DeskSceneFactory_25 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDesk_2.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDesk_2 2 | scene_list: 3 | - benchmark_eval/Desk/DeskSceneFactory_46 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDesk_3.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDesk_3 2 | scene_list: 3 | - benchmark_eval/Desk/DeskSceneFactory_11 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDesk_4.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDesk_4 2 | scene_list: 3 | - benchmark_eval/Desk/DeskSceneFactory_30 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDesk_5.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDesk_5 2 | scene_list: 3 | - benchmark_eval/Desk/DeskSceneFactory_3 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDoubleDoorCabinet_0.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDoubleDoorCabinet_0 2 | scene_list: 3 | - benchmark_eval/DoubleDoorCabinet/DoubleDoorCabinetSceneFactory_40 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDoubleDoorCabinet_1.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDoubleDoorCabinet_1 2 | scene_list: 3 | - benchmark_eval/DoubleDoorCabinet/DoubleDoorCabinetSceneFactory_50 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDoubleDoorCabinet_2.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDoubleDoorCabinet_2 2 | scene_list: 3 | - benchmark_eval/DoubleDoorCabinet/DoubleDoorCabinetSceneFactory_43 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDoubleDoorCabinet_3.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDoubleDoorCabinet_3 2 | scene_list: 3 | - benchmark_eval/DoubleDoorCabinet/DoubleDoorCabinetSceneFactory_44 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDoubleDoorCabinet_4.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDoubleDoorCabinet_4 2 | scene_list: 3 | - benchmark_eval/DoubleDoorCabinet/DoubleDoorCabinetSceneFactory_45 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDoubleDoorCabinet_5.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDoubleDoorCabinet_5 2 | scene_list: 3 | - benchmark_eval/DoubleDoorCabinet/DoubleDoorCabinetSceneFactory_46 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDrawerShelf_0.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDrawerShelf_0 2 | scene_list: 3 | - benchmark_eval/DrawerShelf/DrawerShelfSceneFactory_17 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDrawerShelf_1.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDrawerShelf_1 2 | scene_list: 3 | - benchmark_eval/DrawerShelf/DrawerShelfSceneFactory_43 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDrawerShelf_2.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDrawerShelf_2 2 | scene_list: 3 | - benchmark_eval/DrawerShelf/DrawerShelfSceneFactory_6 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDrawerShelf_3.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDrawerShelf_3 2 | scene_list: 3 | - benchmark_eval/DrawerShelf/DrawerShelfSceneFactory_5 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDrawerShelf_4.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDrawerShelf_4 2 | scene_list: 3 | - benchmark_eval/DrawerShelf/DrawerShelfSceneFactory_20 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDrawerShelf_5.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDrawerShelf_5 2 | scene_list: 3 | - benchmark_eval/DrawerShelf/DrawerShelfSceneFactory_8 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDrawerShelf_6.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDrawerShelf_6 2 | scene_list: 3 | - benchmark_eval/DrawerShelf/DrawerShelfSceneFactory_28 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDrawerShelf_7.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDrawerShelf_7 2 | scene_list: 3 | - benchmark_eval/DrawerShelf/DrawerShelfSceneFactory_18 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDrawerShelf_8.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDrawerShelf_8 2 | scene_list: 3 | - benchmark_eval/DrawerShelf/DrawerShelfSceneFactory_23 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDrawerShelf_9.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDrawerShelf_9 2 | scene_list: 3 | - benchmark_eval/DrawerShelf/DrawerShelfSceneFactory_0 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDrawer_0.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDrawer_0 2 | scene_list: 3 | - benchmark_eval/Drawer/DrawerSceneFactory_15 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDrawer_1.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDrawer_1 2 | scene_list: 3 | - benchmark_eval/Drawer/DrawerSceneFactory_28 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDrawer_2.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDrawer_2 2 | scene_list: 3 | - benchmark_eval/Drawer/DrawerSceneFactory_26 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDrawer_3.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDrawer_3 2 | scene_list: 3 | - benchmark_eval/Drawer/DrawerSceneFactory_39 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDrawer_4.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDrawer_4 2 | scene_list: 3 | - benchmark_eval/Drawer/DrawerSceneFactory_43 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjDrawer_5.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjDrawer_5 2 | scene_list: 3 | - benchmark_eval/Drawer/DrawerSceneFactory_42 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjEketShelf_0.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjEketShelf_0 2 | scene_list: 3 | - benchmark_eval/EketShelf/EketShelfSceneFactory_18 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjEketShelf_1.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjEketShelf_1 2 | scene_list: 3 | - benchmark_eval/EketShelf/EketShelfSceneFactory_0 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjEketShelf_2.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjEketShelf_2 2 | scene_list: 3 | - benchmark_eval/EketShelf/EketShelfSceneFactory_33 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjEketShelf_3.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjEketShelf_3 2 | scene_list: 3 | - benchmark_eval/EketShelf/EketShelfSceneFactory_37 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjEketShelf_4.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjEketShelf_4 2 | scene_list: 3 | - benchmark_eval/EketShelf/EketShelfSceneFactory_27 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelfDesk_0.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelfDesk_0 2 | scene_list: 3 | - benchmark_eval/LargeShelfDesk/LargeShelfDeskSceneFactory_9 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelfDesk_1.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelfDesk_1 2 | scene_list: 3 | - benchmark_eval/LargeShelfDesk/LargeShelfDeskSceneFactory_17 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelfDesk_2.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelfDesk_2 2 | scene_list: 3 | - benchmark_eval/LargeShelfDesk/LargeShelfDeskSceneFactory_42 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelfDesk_3.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelfDesk_3 2 | scene_list: 3 | - benchmark_eval/LargeShelfDesk/LargeShelfDeskSceneFactory_8 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelfDesk_4.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelfDesk_4 2 | scene_list: 3 | - benchmark_eval/LargeShelfDesk/LargeShelfDeskSceneFactory_23 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelfDesk_5.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelfDesk_5 2 | scene_list: 3 | - benchmark_eval/LargeShelfDesk/LargeShelfDeskSceneFactory_48 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelfDesk_6.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelfDesk_6 2 | scene_list: 3 | - benchmark_eval/LargeShelfDesk/LargeShelfDeskSceneFactory_40 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelfDesk_7.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelfDesk_7 2 | scene_list: 3 | - benchmark_eval/LargeShelfDesk/LargeShelfDeskSceneFactory_11 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelfDesk_8.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelfDesk_8 2 | scene_list: 3 | - benchmark_eval/LargeShelfDesk/LargeShelfDeskSceneFactory_31 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelf_0.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelf_0 2 | scene_list: 3 | - benchmark_eval/LargeShelf/LargeShelfSceneFactory_11 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelf_1.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelf_1 2 | scene_list: 3 | - benchmark_eval/LargeShelf/LargeShelfSceneFactory_35 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelf_2.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelf_2 2 | scene_list: 3 | - benchmark_eval/LargeShelf/LargeShelfSceneFactory_31 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelf_3.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelf_3 2 | scene_list: 3 | - benchmark_eval/LargeShelf/LargeShelfSceneFactory_42 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelf_4.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelf_4 2 | scene_list: 3 | - benchmark_eval/LargeShelf/LargeShelfSceneFactory_46 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelf_5.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelf_5 2 | scene_list: 3 | - benchmark_eval/LargeShelf/LargeShelfSceneFactory_16 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelf_6.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelf_6 2 | scene_list: 3 | - benchmark_eval/LargeShelf/LargeShelfSceneFactory_3 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelf_7.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelf_7 2 | scene_list: 3 | - benchmark_eval/LargeShelf/LargeShelfSceneFactory_27 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelf_8.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelf_8 2 | scene_list: 3 | - benchmark_eval/LargeShelf/LargeShelfSceneFactory_1 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLargeShelf_9.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLargeShelf_9 2 | scene_list: 3 | - benchmark_eval/LargeShelf/LargeShelfSceneFactory_47 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLayerShelf_0.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLayerShelf_0 2 | scene_list: 3 | - benchmark_eval/LayerShelf/LayerShelfSceneFactory_1 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLayerShelf_1.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLayerShelf_1 2 | scene_list: 3 | - benchmark_eval/LayerShelf/LayerShelfSceneFactory_7 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLayerShelf_2.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLayerShelf_2 2 | scene_list: 3 | - benchmark_eval/LayerShelf/LayerShelfSceneFactory_13 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLayerShelf_3.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLayerShelf_3 2 | scene_list: 3 | - benchmark_eval/LayerShelf/LayerShelfSceneFactory_43 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLayerShelf_4.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLayerShelf_4 2 | scene_list: 3 | - benchmark_eval/LayerShelf/LayerShelfSceneFactory_32 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLayerShelf_5.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLayerShelf_5 2 | scene_list: 3 | - benchmark_eval/LayerShelf/LayerShelfSceneFactory_33 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLayerShelf_6.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLayerShelf_6 2 | scene_list: 3 | - benchmark_eval/LayerShelf/LayerShelfSceneFactory_29 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLayerShelf_7.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLayerShelf_7 2 | scene_list: 3 | - benchmark_eval/LayerShelf/LayerShelfSceneFactory_16 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLayerShelf_8.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLayerShelf_8 2 | scene_list: 3 | - benchmark_eval/LayerShelf/LayerShelfSceneFactory_24 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjLayerShelf_9.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjLayerShelf_9 2 | scene_list: 3 | - benchmark_eval/LayerShelf/LayerShelfSceneFactory_30 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjRoundTable_0.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjRoundTable_0 2 | scene_list: 3 | - benchmark_eval/RoundTable/RoundTableSceneFactory_31 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjRoundTable_1.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjRoundTable_1 2 | scene_list: 3 | - benchmark_eval/RoundTable/RoundTableSceneFactory_34 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjRoundTable_2.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjRoundTable_2 2 | scene_list: 3 | - benchmark_eval/RoundTable/RoundTableSceneFactory_9 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjRoundTable_3.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjRoundTable_3 2 | scene_list: 3 | - benchmark_eval/RoundTable/RoundTableSceneFactory_30 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjRoundTable_4.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjRoundTable_4 2 | scene_list: 3 | - benchmark_eval/RoundTable/RoundTableSceneFactory_13 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjRoundTable_5.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjRoundTable_5 2 | scene_list: 3 | - benchmark_eval/RoundTable/RoundTableSceneFactory_29 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjRoundTable_6.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjRoundTable_6 2 | scene_list: 3 | - benchmark_eval/RoundTable/RoundTableSceneFactory_27 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjRoundTable_7.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjRoundTable_7 2 | scene_list: 3 | - benchmark_eval/RoundTable/RoundTableSceneFactory_41 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjRoundTable_8.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjRoundTable_8 2 | scene_list: 3 | - benchmark_eval/RoundTable/RoundTableSceneFactory_33 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjSingleDoorCabinetDesk_0.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjSingleDoorCabinetDesk_0 2 | scene_list: 3 | - benchmark_eval/SingleDoorCabinetDesk/SingleDoorCabinetDeskSceneFactory_24 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjSingleDoorCabinetDesk_1.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjSingleDoorCabinetDesk_1 2 | scene_list: 3 | - benchmark_eval/SingleDoorCabinetDesk/SingleDoorCabinetDeskSceneFactory_35 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjSingleDoorCabinetDesk_2.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjSingleDoorCabinetDesk_2 2 | scene_list: 3 | - benchmark_eval/SingleDoorCabinetDesk/SingleDoorCabinetDeskSceneFactory_47 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjSingleDoorCabinetDesk_3.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjSingleDoorCabinetDesk_3 2 | scene_list: 3 | - benchmark_eval/SingleDoorCabinetDesk/SingleDoorCabinetDeskSceneFactory_25 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjSingleDoorCabinetDesk_4.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjSingleDoorCabinetDesk_4 2 | scene_list: 3 | - benchmark_eval/SingleDoorCabinetDesk/SingleDoorCabinetDeskSceneFactory_36 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjSingleDoorCabinetDesk_5.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjSingleDoorCabinetDesk_5 2 | scene_list: 3 | - benchmark_eval/SingleDoorCabinetDesk/SingleDoorCabinetDeskSceneFactory_16 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjSingleDoorCabinetDesk_6.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjSingleDoorCabinetDesk_6 2 | scene_list: 3 | - benchmark_eval/SingleDoorCabinetDesk/SingleDoorCabinetDeskSceneFactory_13 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjTriangleShelfDesk_0.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjTriangleShelfDesk_0 2 | scene_list: 3 | - benchmark_eval/TriangleShelfDesk/TriangleShelfDeskSceneFactory_15 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjTriangleShelfDesk_1.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjTriangleShelfDesk_1 2 | scene_list: 3 | - benchmark_eval/TriangleShelfDesk/TriangleShelfDeskSceneFactory_5 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjTriangleShelfDesk_2.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjTriangleShelfDesk_2 2 | scene_list: 3 | - benchmark_eval/TriangleShelfDesk/TriangleShelfDeskSceneFactory_16 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjTriangleShelfDesk_3.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjTriangleShelfDesk_3 2 | scene_list: 3 | - benchmark_eval/TriangleShelfDesk/TriangleShelfDeskSceneFactory_42 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/scene/benchmark_eval/RigidObjTriangleShelfDesk_4.yaml: -------------------------------------------------------------------------------- 1 | name: RigidObjTriangleShelfDesk_4 2 | scene_list: 3 | - benchmark_eval/TriangleShelfDesk/TriangleShelfDeskSceneFactory_31 4 | num_tasks: 60 5 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchBase.yaml: -------------------------------------------------------------------------------- 1 | # used to create the object 2 | name: FetchBase 3 | prefix: Debug 4 | 5 | physics_engine: ${..physics_engine} 6 | experiment_name: '' 7 | 8 | viewer: 9 | camPos: [-2.0, 1.5, 2.5] 10 | camTar: [0, 0, 0.7] 11 | enable: True 12 | 13 | eval: 14 | z_threshold: 0.28 15 | x_threshold: 0.15 16 | e_threshold: 0.10 17 | d_threshold: 0.12 18 | 19 | 20 | # if given, will override the device setting in gym. 21 | env: 22 | numEnvs: ${resolve_default:1, ${...num_envs}} 23 | envSpacing: 2.5 24 | episodeLength: 150 25 | enableDebugVis: False 26 | 27 | numObjs: 15 28 | numTasks: null 29 | randomGoalIndex: False 30 | 31 | aggregateMode: 0 32 | aggregateBody: 30 33 | aggregateShape: 1000 34 | 35 | actionScale: 1.5 36 | oscControlRepeat: 12 37 | armControlType: joint # options are {joint, osc} 38 | gripperControlType: velocity 39 | 40 | # set to True if you use camera sensors in the environment 41 | enableCameraSensors: True 42 | 43 | robot: 44 | type: franka_r3_cvx 45 | friction: 1.0 46 | contact_offset: 0.001 47 | restitution: 0.0 48 | add_damping: True 49 | disable_self_collision: 0 50 | gripper_force_damp_ratio: 1000 51 | osc_gain: 400. 52 | osc_null_damp: 5. 53 | joint_gain: 1000.0 54 | joint_damp: 50.0 55 | armature: 0.005 56 | 57 | scene: 58 | buffer_ratio: 0.1 59 | max_num_objs: 15 60 | friction: 0.5 61 | contact_offset: 0.001 62 | restitution: 0.0 63 | 64 | objects: 65 | contact_offset: 0.0005 66 | friction: 1.0 67 | density: 150.0 68 | restitution: 0.0 69 | rolling_friction: 0.05 70 | torsion_friction: 0.05 71 | add_damping: True 72 | 73 | cam: 74 | num_cam: 2 75 | width: 640 76 | height: 480 77 | hov: 70 78 | 79 | sim: 80 | dt: 0.0166 # 1/60 81 | substeps: 6 82 | up_axis: "z" 83 | use_gpu_pipeline: ${eq:${...pipeline},"gpu"} 84 | gravity: [0.0, 0.0, -9.81] 85 | physx: 86 | num_threads: ${....num_threads} 87 | solver_type: ${....solver_type} 88 | use_gpu: ${contains:"cpu",${....sim_device}} # set to False to run on CPU 89 | num_position_iterations: 12 90 | num_velocity_iterations: 0 91 | contact_offset: 0.001 92 | rest_offset: 0.0 93 | bounce_threshold_velocity: 0.2 94 | max_depenetration_velocity: 1000.0 95 | default_buffer_size_multiplier: 5.0 96 | max_gpu_contact_pairs: 8388608 # 8*1024*1024 97 | num_subscenes: ${....num_subscenes} 98 | contact_collection: 1 # 0: CC_NEVER (don't collect contact info), 1: CC_LAST_SUBSTEP (collect only contacts on last substep), 2: CC_ALL_SUBSTEPS (broken - do not use!) 99 | 100 | task: 101 | randomize: False 102 | scene_config_path: [] 103 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchCuroboDataGen.yaml: -------------------------------------------------------------------------------- 1 | # used to create the object 2 | name: FetchCuroboDataGen 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchPointCloudBase 7 | - FetchMeshCurobo 8 | - _self_ 9 | 10 | 11 | scene_config_path: [] 12 | max_tasks: 30 13 | 14 | path: /home/beining/Desktop/IsaacGym/Task/benchmark_eval 15 | category: Desk 16 | num_batch: 1 17 | batch_idx: 0 18 | data_path: '../Trajs/train' 19 | 20 | 21 | viewer: 22 | camPos: [-2.0, 1.5, 2.5] 23 | camTar: [0, 0, 0.7] 24 | enable: True 25 | 26 | # if given, will override the device setting in gym. 27 | env: 28 | numTasks: null 29 | enableDebugVis: False 30 | 31 | aggregateMode: 0 32 | aggregateBody: 30 33 | aggregateShape: 1000 34 | 35 | armControlType: joint # options are {joint, osc} 36 | gripperControlType: velocity 37 | 38 | # set to True if you use camera sensors in the environment 39 | enableCameraSensors: True 40 | 41 | cam: 42 | width: 320 43 | height: 240 44 | 45 | solution: 46 | cuRobo: 47 | ik_rot_th: 0.02 48 | ik_pos_th: 0.002 49 | ik_num_seed: 32 50 | trjopt_num_seed: 16 51 | graph_num_seed: 4 52 | collision_activation_dist: 0.025 53 | motion_interpolation_dt: 0.01 54 | motion_interpolation_steps: 5000 55 | motion_gen_timeout: 40 56 | motion_gen_max_attempts: 20 57 | motion_trajopt_steps: 40 58 | 59 | move_offset_method: cartesian_linear 60 | 61 | randomize_init_state: true 62 | 63 | direct_grasp: True 64 | pre_grasp_offset: 0.04 65 | retract_offset: 0.0 66 | grasp_overshoot_ratio: 1.05 67 | disable_grasp_obj_ik_collision: False 68 | disable_grasp_obj_motion_gen: False 69 | 70 | log_mode: trajectory 71 | log_scene_ptd: True 72 | log_cam_ptd: False 73 | log_cam_render: False 74 | log_state: True 75 | 76 | log_scene_pts: 16384 77 | log_goal_pts: 2048 78 | log_robot_pts: 4096 79 | 80 | log_ptd_downscale: 1 81 | log_pts_range: 1.2 82 | log_traj_min_delta_skip: 0.05 83 | log_traj_frame_skip: 6 84 | num_max_trajs: 1 85 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchMeshCurobo.yaml: -------------------------------------------------------------------------------- 1 | # used to create the object 2 | name: FetchMeshCurobo 3 | prefix: Debug 4 | 5 | # GA-Mesh-Curobo 6 | defaults: 7 | - FetchBase 8 | - _self_ 9 | 10 | 11 | viewer: 12 | camPos: [-2.0, 1.5, 2.5] 13 | camTar: [0, 0, 0.7] 14 | enable: True 15 | 16 | 17 | # if given, will override the device setting in gym. 18 | env: 19 | numTasks: null 20 | enableDebugVis: False 21 | 22 | aggregateMode: 0 23 | aggregateBody: 30 24 | aggregateShape: 1000 25 | 26 | armControlType: joint # options are {joint, osc} 27 | gripperControlType: velocity 28 | 29 | # set to True if you use camera sensors in the environment 30 | enableCameraSensors: True 31 | 32 | solution: 33 | cuRobo: 34 | ik_rot_th: 0.02 35 | ik_pos_th: 0.002 36 | ik_num_seed: 32 37 | trjopt_num_seed: 16 38 | graph_num_seed: 4 39 | collision_activation_dist: 0.025 40 | motion_interpolation_dt: 0.01 41 | motion_interpolation_steps: 5000 42 | motion_gen_timeout: 60 43 | motion_gen_max_attempts: 100 44 | motion_trajopt_steps: 40 45 | 46 | velocity_scale: 0.1 47 | acceleration_scale: 0.1 48 | 49 | enable_graph: True 50 | enable_opt: True 51 | 52 | attach_object_z_offset: 0.0025 53 | surface_sphere_radius: 0.0005 54 | sphere_approx_method: 0 # 0: sample_surface 1: voxel_volume_sample_surface 55 | 56 | grasp_label: 57 | gripper_type: cvx 58 | use_flex_label: False 59 | use_isaac_force_label: True 60 | use_isaac_success_label: False 61 | 62 | init_steps: 20 63 | eval_steps: 600 64 | gripper_steps: 90 65 | 66 | max_grasp_pose: 200 67 | move_offset_method: cartesian_linear 68 | video_freq: 8 69 | 70 | direct_grasp: False 71 | pre_grasp_offset: 0.04 72 | retract_offset: 0.02 73 | grasp_overshoot_ratio: 1.05 74 | disable_grasp_obj_ik_collision: False 75 | disable_grasp_obj_motion_gen: False 76 | attach_goal_obj: True 77 | 78 | num_step_repeat_per_plan_dt: 2 # usually motion_interpolation_dt / sim_dt 79 | num_osc_repeat: 12 80 | num_cartesian_steps: 5 81 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchMeshCuroboPtdCGNBeta.yaml: -------------------------------------------------------------------------------- 1 | # CGN-Mesh-Curobo 2 | name: FetchMeshCuroboPtdCGNBeta 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchMeshCurobo 7 | - FetchPointCloudBase 8 | - _self_ 9 | 10 | 11 | viewer: 12 | camPos: [-2.0, 1.5, 2.5] 13 | camTar: [0, 0, 0.7] 14 | enable: True 15 | 16 | 17 | # if given, will override the device setting in gym. 18 | env: 19 | numTasks: null 20 | enableDebugVis: False 21 | 22 | solution: 23 | 24 | cgn: 25 | full_ptd: True 26 | top_k: 10 27 | confidence_th: 0.0 28 | num_forward_passes: 4 29 | 30 | cuRobo: 31 | ik_rot_th: 0.02 32 | ik_pos_th: 0.002 33 | ik_num_seed: 32 34 | trjopt_num_seed: 16 35 | graph_num_seed: 4 36 | motion_gen_timeout: 20 37 | motion_gen_max_attempts: 10 38 | 39 | move_offset_method: cartesian_linear 40 | video_freq: 8 41 | 42 | direct_grasp: False 43 | disable_grasp_obj_ik_collision: True 44 | disable_grasp_obj_motion_gen: True 45 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchMeshCuroboPtdCGNBetaRep.yaml: -------------------------------------------------------------------------------- 1 | # CGN-Mesh-Curobo-Repx5 2 | name: FetchMeshCuroboPtdCGNBetaRep 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchMeshCuroboPtdCGNBeta 7 | - _self_ 8 | 9 | 10 | viewer: 11 | camPos: [-2.0, 1.5, 2.5] 12 | camTar: [0, 0, 0.7] 13 | enable: True 14 | 15 | 16 | # if given, will override the device setting in gym. 17 | env: 18 | numTasks: null 19 | enableDebugVis: False 20 | 21 | solution: 22 | max_grasp_pose: 200 23 | video_freq: 20 24 | move_offset_method: cartesian_linear 25 | 26 | direct_grasp: False 27 | disable_grasp_obj_ik_collision: False 28 | disable_grasp_obj_motion_gen: False 29 | 30 | num_max_trials: 5 31 | 32 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchMeshCuroboRep.yaml: -------------------------------------------------------------------------------- 1 | # GA-Mesh-Curobo-Repx5 2 | name: FetchMeshCuroboRep 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchMeshCurobo 7 | - _self_ 8 | 9 | 10 | scene_config_path: [] 11 | 12 | 13 | viewer: 14 | camPos: [-2.0, 1.5, 2.5] 15 | camTar: [0, 0, 0.7] 16 | enable: True 17 | 18 | 19 | # if given, will override the device setting in gym. 20 | env: 21 | numTasks: null 22 | enableDebugVis: False 23 | 24 | solution: 25 | 26 | init_steps: 20 27 | eval_steps: 600 28 | gripper_steps: 90 29 | 30 | max_grasp_pose: 200 31 | video_freq: 12 32 | move_offset_method: cartesian_linear 33 | 34 | direct_grasp: False 35 | disable_grasp_obj_ik_collision: False 36 | disable_grasp_obj_motion_gen: False 37 | 38 | num_max_trials: 5 39 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchMeshPyompl.yaml: -------------------------------------------------------------------------------- 1 | # GA-Mesh-RRTConnect 2 | name: FetchMeshPyompl 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchBase 7 | - _self_ 8 | 9 | viewer: 10 | camPos: [-2.0, 1.5, 2.5] 11 | camTar: [0, 0, 0.7] 12 | enable: True 13 | 14 | 15 | # if given, will override the device setting in gym. 16 | env: 17 | numTasks: null 18 | enableDebugVis: False 19 | 20 | aggregateMode: 0 21 | aggregateBody: 30 22 | aggregateShape: 1000 23 | 24 | armControlType: joint # options are {joint, osc} 25 | gripperControlType: velocity 26 | 27 | # set to True if you use camera sensors in the environment 28 | enableCameraSensors: True 29 | 30 | solution: 31 | pyompl: 32 | planner: RRTConnect 33 | single_timeout: 10 34 | total_timeout: 30 35 | ik_pos_th: 0.002 36 | ik_rot_th: 0.02 37 | ik_num_seed: 4 38 | collision_activation_dist: 0.025 39 | goal_threshold: 0.01 40 | attach_offset_z: 0.01 41 | valid_seg_frac: 0.005 42 | 43 | grasp_label: 44 | gripper_type: cvx 45 | use_flex_label: False 46 | use_isaac_force_label: True 47 | use_isaac_success_label: False 48 | 49 | init_steps: 20 50 | eval_steps: 600 51 | gripper_steps: 90 52 | 53 | max_grasp_pose: 200 54 | video_freq: 10 55 | 56 | direct_grasp: False 57 | move_offset_method: cartesian_linear 58 | pre_grasp_offset: 0.04 59 | retract_offset: 0.02 60 | grasp_overshoot_ratio: 1.05 61 | disable_grasp_obj_motion_gen: False 62 | attach_goal_obj: True 63 | 64 | gripper_force_damp_ratio: 1000. 65 | num_step_repeat_per_plan_dt: 1 # usually motion_interpolation_dt / sim_dt 66 | num_osc_repeat: 12 67 | num_cartesian_steps: 5 68 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchMeshPyomplPtdCGNBeta.yaml: -------------------------------------------------------------------------------- 1 | # CGN-Mesh-RRTConnect 2 | name: FetchMeshPyomplPtdCGNBeta 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchMeshPyompl 7 | - FetchPointCloudBase 8 | - _self_ 9 | 10 | 11 | viewer: 12 | camPos: [-2.0, 1.5, 2.5] 13 | camTar: [0, 0, 0.7] 14 | enable: True 15 | 16 | 17 | # if given, will override the device setting in gym. 18 | env: 19 | numTasks: null 20 | enableDebugVis: False 21 | 22 | solution: 23 | cgn: 24 | full_ptd: True 25 | top_k: 10 26 | confidence_th: 0.0 27 | num_forward_passes: 4 28 | 29 | pyompl: 30 | planner: RRTConnect 31 | single_timeout: 20 32 | total_timeout: 25 33 | ik_pos_th: 0.002 34 | ik_rot_th: 0.02 35 | ik_num_seed: 4 36 | collision_activation_dist: 0.025 37 | 38 | video_freq: 10 39 | 40 | direct_grasp: False 41 | move_offset_method: cartesian_linear 42 | disable_grasp_obj_motion_gen: True 43 | 44 | gripper_force_damp_ratio: 1000. 45 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchMeshPyomplRep.yaml: -------------------------------------------------------------------------------- 1 | # GA-Mesh-RRTConnect 2 | name: FetchMeshPyomplRep 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchMeshPyompl 7 | - _self_ 8 | 9 | 10 | scene_config_path: [] 11 | 12 | 13 | viewer: 14 | camPos: [-2.0, 1.5, 2.5] 15 | camTar: [0, 0, 0.7] 16 | enable: True 17 | 18 | 19 | # if given, will override the device setting in gym. 20 | env: 21 | numTasks: null 22 | enableDebugVis: False 23 | 24 | solution: 25 | 26 | init_steps: 20 27 | eval_steps: 600 28 | gripper_steps: 90 29 | 30 | max_grasp_pose: 200 31 | video_freq: 15 32 | 33 | direct_grasp: True 34 | move_offset_method: cartesian_linear 35 | disable_grasp_obj_motion_gen: False 36 | 37 | num_max_trials: 5 38 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchNaive.yaml: -------------------------------------------------------------------------------- 1 | # used to create the object 2 | name: FetchNaive 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchBase 7 | - _self_ 8 | 9 | viewer: 10 | camPos: [-2.0, 1.5, 2.5] 11 | camTar: [0, 0, 0.7] 12 | enable: True 13 | 14 | 15 | # if given, will override the device setting in gym. 16 | env: 17 | numTasks: null 18 | 19 | aggregateMode: 0 20 | aggregateBody: 30 21 | aggregateShape: 1000 22 | 23 | armControlType: joint # options are {joint, osc} 24 | gripperControlType: position 25 | 26 | # set to True if you use camera sensors in the environment 27 | enableCameraSensors: False 28 | 29 | solution: 30 | init_steps: 10 31 | eval_steps: 600 32 | video_freq: 5 33 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchPointCloudBase.yaml: -------------------------------------------------------------------------------- 1 | # used to create the object 2 | name: FetchPointCloudBase 3 | 4 | defaults: 5 | - FetchBase 6 | - _self_ 7 | 8 | # if given, will override the device setting in gym. 9 | env: 10 | enableDebugVis: False 11 | 12 | aggregateMode: 0 13 | aggregateBody: 30 14 | aggregateShape: 1000 15 | 16 | # set to True if you use camera sensors in the environment 17 | enableCameraSensors: True 18 | 19 | cam: 20 | num_cam: 2 21 | width: 640 22 | height: 480 23 | hov: 70 24 | depth_min: 0.15 25 | depth_max: 2.5 26 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchPtdCabinet.yaml: -------------------------------------------------------------------------------- 1 | # GA-Ptd-Cabinet 2 | name: FetchPtdCabinet 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchPointCloudBase 7 | - _self_ 8 | 9 | 10 | viewer: 11 | camPos: [-2.0, 1.5, 2.5] 12 | camTar: [0, 0, 0.7] 13 | enable: True 14 | 15 | 16 | # if given, will override the device setting in gym. 17 | env: 18 | numTasks: null 19 | enableDebugVis: False 20 | 21 | aggregateMode: 0 22 | aggregateBody: 30 23 | aggregateShape: 1000 24 | 25 | armControlType: joint # options are {joint, osc} 26 | gripperControlType: velocity 27 | 28 | # set to True if you use camera sensors in the environment 29 | enableCameraSensors: True 30 | 31 | solution: 32 | cuRobo: 33 | ik_rot_th: 0.02 34 | ik_pos_th: 0.002 35 | ik_num_seed: 32 36 | trjopt_num_seed: 16 37 | graph_num_seed: 4 38 | collision_activation_dist: 0.025 39 | 40 | mppi: 41 | num_iks: 25 42 | horizon: 40 43 | num_rollouts: 50 44 | q_noise_std: 0.08 45 | max_step: 0.05 46 | collision_steps: 10 47 | transition_threshold: 0.04 48 | self_coll_nn: 'SCN' 49 | scene_coll_nn: 'CBN' 50 | update_model_center: true 51 | sample_waypoints: true 52 | 53 | init_steps: 20 54 | eval_steps: 600 55 | gripper_steps: 90 56 | 57 | num_grasp_steps: 30 58 | num_fetch_steps: 30 59 | control_freq: 1 60 | 61 | max_grasp_pose: 200 62 | video_freq: 6 63 | 64 | pre_grasp_offset: 0.05 65 | retract_offset: 0.05 66 | grasp_overshoot_ratio: 1.05 67 | move_offset_method: cartesian_linear 68 | disable_grasp_obj_ik_collision: False 69 | 70 | num_step_repeat_per_plan_dt: 2 # usually motion_interpolation_dt / sim_dt 71 | num_osc_repeat: 12 72 | num_cartesian_steps: 5 73 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchPtdCabinetCGNBeta.yaml: -------------------------------------------------------------------------------- 1 | # CGN-Cabinet 2 | name: FetchPtdCabinetCGNBeta 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchPtdCabinet 7 | - _self_ 8 | 9 | 10 | viewer: 11 | camPos: [-2.0, 1.5, 2.5] 12 | camTar: [0, 0, 0.7] 13 | enable: True 14 | 15 | 16 | # if given, will override the device setting in gym. 17 | env: 18 | numTasks: null 19 | enableDebugVis: False 20 | 21 | solution: 22 | cgn: 23 | full_ptd: True 24 | top_k: 8 25 | confidence_th: 0.2 26 | num_forward_passes: 4 -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchPtdCurobo.yaml: -------------------------------------------------------------------------------- 1 | # GA-Ptd-Curobo 2 | name: FetchPtdCurobo 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchPointCloudBase 7 | - _self_ 8 | 9 | 10 | viewer: 11 | camPos: [-2.0, 1.5, 2.5] 12 | camTar: [0, 0, 0.7] 13 | enable: True 14 | 15 | 16 | # if given, will override the device setting in gym. 17 | env: 18 | numTasks: null 19 | enableDebugVis: False 20 | 21 | aggregateMode: 0 22 | aggregateBody: 30 23 | aggregateShape: 1000 24 | 25 | armControlType: joint # options are {joint, osc} 26 | gripperControlType: velocity 27 | 28 | # set to True if you use camera sensors in the environment 29 | enableCameraSensors: True 30 | 31 | solution: 32 | cuRobo: 33 | ik_rot_th: 0.02 34 | ik_pos_th: 0.002 35 | ik_num_seed: 32 36 | trjopt_num_seed: 16 37 | graph_num_seed: 4 38 | collision_activation_dist: 0.025 39 | motion_interpolation_dt: 0.01 40 | motion_interpolation_steps: 5000 41 | motion_gen_timeout: 60 42 | motion_gen_max_attempts: 100 43 | motion_trajopt_steps: 40 44 | 45 | scene_voxel_size: 0.005 46 | goal_obj_voxel_size: 0.005 47 | 48 | velocity_scale: 0.1 49 | acceleration_scale: 0.1 50 | 51 | enable_graph: True 52 | enable_opt: True 53 | 54 | attach_object_z_offset: 0.007 55 | surface_sphere_radius: 0.001 56 | 57 | grasp_label: 58 | gripper_type: cvx 59 | use_flex_label: False 60 | use_isaac_force_label: True 61 | use_isaac_success_label: False 62 | 63 | init_steps: 20 64 | eval_steps: 600 65 | gripper_steps: 90 66 | 67 | max_grasp_pose: 200 68 | video_freq: 6 69 | 70 | pre_grasp_offset: 0.04 71 | retract_offset: 0.02 72 | grasp_overshoot_ratio: 1.05 73 | move_offset_method: cartesian_linear 74 | disable_grasp_obj_ik_collision: False 75 | disable_grasp_obj_motion_gen: False 76 | update_motion_gen_collider_before_fetch: True 77 | attach_goal_obj: True 78 | 79 | num_step_repeat_per_plan_dt: 2 # usually motion_interpolation_dt / sim_dt 80 | num_osc_repeat: 12 81 | num_cartesian_steps: 5 82 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchPtdCuroboCGNBeta.yaml: -------------------------------------------------------------------------------- 1 | # CGN-Curobo 2 | name: FetchPtdCuroboCGNBeta 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchPtdCurobo 7 | - _self_ 8 | 9 | 10 | viewer: 11 | camPos: [-2.0, 1.5, 2.5] 12 | camTar: [0, 0, 0.7] 13 | enable: True 14 | 15 | 16 | # if given, will override the device setting in gym. 17 | env: 18 | numTasks: null 19 | enableDebugVis: False 20 | 21 | solution: 22 | cgn: 23 | full_ptd: True 24 | top_k: 10 25 | confidence_th: 0.0 26 | num_forward_passes: 4 27 | 28 | cuRobo: 29 | ik_rot_th: 0.02 30 | ik_pos_th: 0.002 31 | motion_gen_timeout: 20 32 | motion_gen_max_attempts: 10 33 | ik_num_seed: 16 34 | trjopt_num_seed: 8 35 | graph_num_seed: 2 36 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchPtdCuroboCGNBetaRep.yaml: -------------------------------------------------------------------------------- 1 | # CGN-Curobo-Repx5 2 | name: FetchPtdCuroboCGNBetaRep 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchPtdCuroboCGNBeta 7 | - _self_ 8 | 9 | 10 | viewer: 11 | camPos: [-2.0, 1.5, 2.5] 12 | camTar: [0, 0, 0.7] 13 | enable: True 14 | 15 | 16 | # if given, will override the device setting in gym. 17 | env: 18 | numTasks: null 19 | enableDebugVis: False 20 | 21 | solution: 22 | init_steps: 20 23 | eval_steps: 600 24 | gripper_steps: 90 25 | 26 | max_grasp_pose: 200 27 | video_freq: 20 28 | 29 | update_motion_gen_collider_before_fetch: True 30 | 31 | num_max_trials: 5 32 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchPtdCuroboRep.yaml: -------------------------------------------------------------------------------- 1 | # GA-Ptd-Curobo-Repx5 2 | name: FetchPtdCuroboRep 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchPtdCurobo 7 | - _self_ 8 | 9 | 10 | scene_config_path: [] 11 | 12 | 13 | viewer: 14 | camPos: [-2.0, 1.5, 2.5] 15 | camTar: [0, 0, 0.7] 16 | enable: True 17 | 18 | 19 | # if given, will override the device setting in gym. 20 | env: 21 | numTasks: null 22 | enableDebugVis: False 23 | 24 | 25 | solution: 26 | init_steps: 20 27 | eval_steps: 600 28 | gripper_steps: 90 29 | 30 | max_grasp_pose: 200 31 | video_freq: 10 32 | 33 | update_motion_gen_collider_before_fetch: True 34 | 35 | num_max_trials: 5 36 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchPtdImitCuroboCGN.yaml: -------------------------------------------------------------------------------- 1 | # CGN-Curobo-Imit 2 | name: FetchPtdImitCuroboCGN 3 | 4 | defaults: 5 | - FetchPtdImitTwoStage 6 | - FetchPtdCuroboCGNBeta 7 | - _self_ 8 | 9 | viewer: 10 | camPos: [-2.0, 1.5, 2.5] 11 | camTar: [0, 0, 0.7] 12 | enable: True 13 | 14 | # if given, will override the device setting in gym. 15 | env: 16 | numTasks: null 17 | enableDebugVis: False 18 | 19 | aggregateMode: 0 20 | aggregateBody: 30 21 | aggregateShape: 1000 22 | 23 | armControlType: joint # options are {joint, osc} 24 | gripperControlType: velocity 25 | 26 | # set to True if you use camera sensors in the environment 27 | enableCameraSensors: True 28 | sim_delay_steps: True 29 | 30 | cam: 31 | width: 320 32 | height: 240 33 | 34 | solution: 35 | ckpt_path: null 36 | video_freq: 8 37 | num_fetch_steps: 100 38 | impedance_control: false 39 | config: null 40 | 41 | 42 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchPtdImitE2E.yaml: -------------------------------------------------------------------------------- 1 | # E2EImit 2 | name: FetchPtdImitE2E 3 | 4 | defaults: 5 | - FetchPointCloudBase 6 | - _self_ 7 | 8 | viewer: 9 | camPos: [-2.0, 1.5, 2.5] 10 | camTar: [0, 0, 0.7] 11 | enable: True 12 | 13 | # if given, will override the device setting in gym. 14 | env: 15 | numTasks: null 16 | enableDebugVis: False 17 | 18 | aggregateMode: 0 19 | aggregateBody: 30 20 | aggregateShape: 1000 21 | 22 | armControlType: joint # options are {joint, osc} 23 | gripperControlType: velocity 24 | 25 | # set to True if you use camera sensors in the environment 26 | enableCameraSensors: True 27 | sim_delay_steps: True 28 | 29 | cam: 30 | width: 320 31 | height: 240 32 | 33 | solution: 34 | ckpt_path: null 35 | imit_ptd_subsample: 1 36 | impedance_control: false 37 | 38 | init_steps: 20 39 | eval_steps: 600 40 | gripper_steps: 90 41 | 42 | video_freq: 10 43 | 44 | num_steps_repeat_per_cmd: 6 # usually motion_interpolation_dt / sim_dt 45 | 46 | max_num_steps: 250 47 | config: null 48 | 49 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchPtdImitTwoStage.yaml: -------------------------------------------------------------------------------- 1 | # used to create the object 2 | name: FetchPtdImitTwoStage 3 | 4 | defaults: 5 | - FetchPointCloudBase 6 | - _self_ 7 | 8 | viewer: 9 | camPos: [-2.0, 1.5, 2.5] 10 | camTar: [0, 0, 0.7] 11 | enable: True 12 | 13 | # if given, will override the device setting in gym. 14 | env: 15 | numTasks: null 16 | enableDebugVis: False 17 | 18 | aggregateMode: 0 19 | aggregateBody: 30 20 | aggregateShape: 1000 21 | 22 | armControlType: joint # options are {joint, osc} 23 | gripperControlType: velocity 24 | 25 | # set to True if you use camera sensors in the environment 26 | enableCameraSensors: True 27 | sim_delay_steps: True 28 | 29 | cam: 30 | width: 320 31 | height: 240 32 | 33 | solution: 34 | ckpt_path: null 35 | imit_ptd_subsample: 1 36 | impedance_control: false 37 | 38 | init_steps: 20 39 | eval_steps: 600 40 | gripper_steps: 90 41 | 42 | video_freq: 6 43 | 44 | num_steps_repeat_per_cmd: 6 # usually motion_interpolation_dt / sim_dt 45 | 46 | num_grasp_steps: 150 47 | num_fetch_steps: 100 48 | 49 | config: null 50 | 51 | 52 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchPtdPyompl.yaml: -------------------------------------------------------------------------------- 1 | # GA-Ptd-RRTConnect 2 | name: FetchPtdPyompl 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchPointCloudBase 7 | - _self_ 8 | 9 | 10 | viewer: 11 | camPos: [-2.0, 1.5, 2.5] 12 | camTar: [0, 0, 0.7] 13 | enable: True 14 | 15 | 16 | # if given, will override the device setting in gym. 17 | env: 18 | numTasks: null 19 | enableDebugVis: False 20 | 21 | aggregateMode: 0 22 | aggregateBody: 30 23 | aggregateShape: 1000 24 | 25 | armControlType: joint # options are {joint, osc} 26 | gripperControlType: velocity 27 | 28 | # set to True if you use camera sensors in the environment 29 | enableCameraSensors: True 30 | 31 | solution: 32 | pyompl: 33 | planner: RRTConnect 34 | single_timeout: 10 35 | total_timeout: 30 36 | ik_pos_th: 0.002 37 | ik_rot_th: 0.02 38 | ik_num_seed: 4 39 | collision_activation_dist: 0.025 40 | goal_threshold: 0.01 41 | attach_offset_z: 0.01 42 | valid_seg_frac: 0.005 43 | occ_grid_size: 0.005 44 | 45 | grasp_label: 46 | gripper_type: cvx 47 | use_flex_label: False 48 | use_isaac_force_label: True 49 | use_isaac_success_label: False 50 | 51 | init_steps: 20 52 | eval_steps: 600 53 | gripper_steps: 90 54 | 55 | max_grasp_pose: 200 56 | video_freq: 8 57 | 58 | pre_grasp_offset: 0.04 59 | retract_offset: 0.02 60 | grasp_overshoot_ratio: 1.05 61 | move_offset_method: cartesian_linear 62 | disable_grasp_obj_ik_collision: False 63 | disable_grasp_obj_motion_gen: False 64 | update_motion_gen_collider_before_fetch: True 65 | attach_goal_obj: True 66 | 67 | num_step_repeat_per_plan_dt: 1 # usually motion_interpolation_dt / sim_dt 68 | num_osc_repeat: 12 69 | num_cartesian_steps: 5 70 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchPtdPyomplCGNBeta.yaml: -------------------------------------------------------------------------------- 1 | # CGN-RRTConnect 2 | name: FetchPtdPyomplCGNBeta 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchPtdPyompl 7 | - _self_ 8 | 9 | viewer: 10 | camPos: [-2.0, 1.5, 2.5] 11 | camTar: [0, 0, 0.7] 12 | enable: True 13 | 14 | 15 | # if given, will override the device setting in gym. 16 | env: 17 | numTasks: null 18 | enableDebugVis: False 19 | 20 | solution: 21 | cgn: 22 | full_ptd: False 23 | top_k: 10 24 | confidence_th: 0.0 25 | num_forward_passes: 4 26 | 27 | pyompl: 28 | planner: RRTConnect 29 | single_timeout: 20 30 | total_timeout: 22 31 | ik_pos_th: 0.002 32 | ik_rot_th: 0.02 33 | ik_num_seed: 4 34 | collision_activation_dist: 0.025 35 | goal_threshold: 0.01 36 | attach_offset_z: 0.01 37 | valid_seg_frac: 0.005 38 | occ_grid_size: 0.005 -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchPtdPyomplCGNBetaRep.yaml: -------------------------------------------------------------------------------- 1 | # CGN-RRTConnect-Repx5 2 | name: FetchPtdPyomplCGNBetaRep 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchPtdPyomplCGNBeta 7 | - _self_ 8 | 9 | viewer: 10 | camPos: [-2.0, 1.5, 2.5] 11 | camTar: [0, 0, 0.7] 12 | enable: True 13 | 14 | 15 | # if given, will override the device setting in gym. 16 | env: 17 | numTasks: null 18 | enableDebugVis: False 19 | 20 | solution: 21 | init_steps: 20 22 | eval_steps: 600 23 | gripper_steps: 90 24 | 25 | max_grasp_pose: 200 26 | video_freq: 50 27 | 28 | update_motion_gen_collider_before_fetch: True 29 | 30 | num_max_trials: 5 -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/config/task/FetchPtdPyomplRep.yaml: -------------------------------------------------------------------------------- 1 | # GA-RRTConnect-Repx5 2 | name: FetchPtdPyomplRep 3 | prefix: Debug 4 | 5 | defaults: 6 | - FetchPtdPyompl 7 | - _self_ 8 | 9 | 10 | scene_config_path: [] 11 | 12 | 13 | viewer: 14 | camPos: [-2.0, 1.5, 2.5] 15 | camTar: [0, 0, 0.7] 16 | enable: True 17 | 18 | 19 | # if given, will override the device setting in gym. 20 | env: 21 | numTasks: null 22 | enableDebugVis: False 23 | 24 | aggregateMode: 0 25 | aggregateBody: 30 26 | aggregateShape: 1000 27 | 28 | armControlType: joint # options are {joint, osc} 29 | gripperControlType: velocity 30 | 31 | # set to True if you use camera sensors in the environment 32 | enableCameraSensors: True 33 | 34 | solution: 35 | init_steps: 20 36 | eval_steps: 600 37 | gripper_steps: 90 38 | 39 | max_grasp_pose: 200 40 | video_freq: 12 41 | 42 | update_motion_gen_collider_before_fetch: True 43 | 44 | num_max_trials: 5 45 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/data_gen.py: -------------------------------------------------------------------------------- 1 | 2 | import os 3 | from datetime import datetime 4 | import pandas as pd 5 | 6 | import imageio.v3 as iio 7 | import numpy as np 8 | 9 | import hydra 10 | from omegaconf import DictConfig, OmegaConf, ListConfig 11 | 12 | 13 | def log_data(path, trajs, scene, task_id): 14 | for i, traj in enumerate(trajs): 15 | np.save(f'{path}/task_{task_id}_traj{i}.npy', traj) 16 | np.save(f'{path}/task_{task_id}_init_scene.npy', scene) 17 | 18 | 19 | def datagen_hydra(task_config_path, num_tasks, cfg): 20 | 21 | import logging 22 | 23 | import isaacgym 24 | import gym 25 | from isaacgymenvs.utils.reformat import omegaconf_to_dict, print_dict 26 | from isaacgymenvs.utils.utils import set_np_formatting, set_seed 27 | 28 | import isaacgymenvs 29 | 30 | time_str = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") 31 | 32 | cfg_dict = omegaconf_to_dict(cfg) 33 | print_dict(cfg_dict) 34 | 35 | scene_name = task_config_path.split('/')[-1] 36 | cfg.scene.name = scene_name 37 | cfg.task.task.scene_config_path = ListConfig([task_config_path]) 38 | cfg.scene.num_tasks = num_tasks 39 | 40 | experiment_name = f'{scene_name}_{cfg.task.name}_{cfg.task.prefix}_{time_str}' 41 | experiment_dir = os.path.join(cfg.task.data_path, experiment_name) 42 | os.makedirs(experiment_dir, exist_ok=True) 43 | with open(os.path.join(experiment_dir, 'config.yaml'), 'w') as f: 44 | f.write(OmegaConf.to_yaml(cfg)) 45 | 46 | # set numpy formatting for printing only 47 | set_np_formatting() 48 | 49 | # global rank of the GPU 50 | global_rank = int(os.getenv("RANK", "0")) 51 | 52 | # sets seed. if seed is -1 will pick a random one 53 | cfg.seed = set_seed(cfg.seed, torch_deterministic=cfg.torch_deterministic, rank=global_rank) 54 | 55 | # Load Eval Env Set 56 | cfg.task.experiment_name = experiment_name 57 | 58 | # Create Vectorized Env 59 | vec_env = isaacgymenvs.make( 60 | cfg.seed, 61 | cfg.task_name, 62 | cfg.task.env.numEnvs, 63 | cfg.sim_device, 64 | cfg.rl_device, 65 | cfg.graphics_device_id, 66 | cfg.headless, 67 | cfg.multi_gpu, 68 | cfg.capture_video, 69 | cfg.force_render, 70 | cfg 71 | ) 72 | 73 | for i in range(min(cfg.scene.num_tasks, cfg.task.max_tasks)): 74 | vec_env.reset_task(i) 75 | trajs, scene = vec_env.solve() 76 | 77 | trajs = vec_env.save_trajs(trajs, scene) 78 | log_data(f'{experiment_dir}', trajs, scene, task_id=i) 79 | 80 | exit() 81 | 82 | 83 | @hydra.main(version_base="1.1", config_name="config", config_path="./config") 84 | def multiprocess_label_grasp_poses(cfg: DictConfig): 85 | from multiprocessing import Process 86 | 87 | metadata = pd.read_csv(f'{cfg.task.path}/metadata.csv') 88 | metadata = metadata.loc[metadata['Category'] == cfg.task.category] 89 | 90 | bs = max(1, len(metadata) // cfg.task.num_batch) 91 | batch_init_idx = min(bs * cfg.task.batch_idx, len(metadata)) 92 | batch_end_idx = min(bs * (cfg.task.batch_idx + 1), len(metadata)) 93 | 94 | metadata = metadata.iloc[batch_init_idx:batch_end_idx] 95 | prefix = cfg.task.path.split('/')[-1] 96 | 97 | for i, b in metadata.iterrows(): 98 | ntasks = min(b['NumTasks'], 90) 99 | p = Process(target=datagen_hydra, args=(f'{prefix}/{b["Path"]}', ntasks, cfg)) 100 | p.start() 101 | p.join(timeout=ntasks * (cfg.task.solution.num_max_trajs * 900 + 600)) 102 | 103 | 104 | if __name__ == "__main__": 105 | multiprocess_label_grasp_poses() 106 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/eval.py: -------------------------------------------------------------------------------- 1 | 2 | import hydra 3 | from omegaconf import DictConfig, OmegaConf 4 | 5 | import logging 6 | import os 7 | from datetime import datetime 8 | 9 | import isaacgym 10 | import gym 11 | from isaacgymenvs.utils.reformat import omegaconf_to_dict, print_dict 12 | from isaacgymenvs.utils.utils import set_np_formatting, set_seed 13 | 14 | import isaacgymenvs 15 | import imageio.v3 as iio 16 | import numpy as np 17 | 18 | 19 | def log_videos(path, idx, videos, fps=10): 20 | if not os.path.exists(f'{path}'): 21 | os.makedirs(f'{path}') 22 | 23 | iio.imwrite(f'{path}/log_{idx}.mp4', np.stack(videos, axis=0), fps=fps) 24 | 25 | 26 | def log_results(path, results): 27 | count, success = 0, 0 28 | 29 | log = { 30 | 'z_threshold': [], 31 | 'x_threshold': [], 32 | 'e_threshold': [], 33 | 'success': [], 34 | 'label': [], 35 | 'task_repeat': [], 36 | 'extra': [] 37 | } 38 | 39 | for i, res in enumerate(results): 40 | count += np.product(*np.array(res['success']).shape) 41 | success += np.array(res['success']).astype(np.float32).sum() 42 | 43 | for k, v in res.items(): 44 | log[k].append(v) 45 | 46 | print("Success Rate: ", success / count) 47 | 48 | np.save(f'{path}/result.npy', log) 49 | 50 | 51 | @hydra.main(version_base="1.1", config_name="config", config_path="./config") 52 | def launch_eval_hydra(cfg: DictConfig): 53 | time_str = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") 54 | 55 | cfg_dict = omegaconf_to_dict(cfg) 56 | print_dict(cfg_dict) 57 | 58 | experiment_name = f'{cfg.scene.name}_{cfg.task.name}_{cfg.task.prefix}_{time_str}' 59 | experiment_dir = os.path.join('runs', experiment_name) 60 | os.makedirs(experiment_dir, exist_ok=True) 61 | with open(os.path.join(experiment_dir, 'config.yaml'), 'w') as f: 62 | f.write(OmegaConf.to_yaml(cfg)) 63 | 64 | # set numpy formatting for printing only 65 | set_np_formatting() 66 | 67 | # global rank of the GPU 68 | global_rank = int(os.getenv("RANK", "0")) 69 | 70 | # sets seed. if seed is -1 will pick a random one 71 | cfg.seed = set_seed(cfg.seed, torch_deterministic=cfg.torch_deterministic, rank=global_rank) 72 | 73 | # Load Eval Env Set 74 | cfg.task.task.scene_config_path = cfg.scene.scene_list 75 | cfg.task.experiment_name = experiment_name 76 | 77 | # Create Vectorized Env 78 | vec_env = isaacgymenvs.make( 79 | cfg.seed, 80 | cfg.task_name, 81 | cfg.task.env.numEnvs, 82 | cfg.sim_device, 83 | cfg.rl_device, 84 | cfg.graphics_device_id, 85 | cfg.headless, 86 | cfg.multi_gpu, 87 | cfg.capture_video, 88 | cfg.force_render, 89 | cfg 90 | ) 91 | 92 | if cfg.task.name.startswith('FetchPtdOptimus'): 93 | from isaacgymenvs.tasks.fetch.utils.optimus_utils import load_optimus_algo 94 | algo = load_optimus_algo(cfg["task"]) 95 | vec_env.update_algo(algo) 96 | if cfg.task.name.startswith('FetchPtdImit'): 97 | from isaacgymenvs.tasks.fetch.utils.imit_utils import load_imitation_algo 98 | algo = load_imitation_algo(cfg["task"]["solution"]["ckpt_path"]) 99 | vec_env.update_algo(algo) 100 | 101 | # Eval Env 102 | results, logs = [], [] 103 | for i in range(cfg.scene.num_tasks): 104 | vec_env.reset_task(i) 105 | rgb, log = vec_env.solve() 106 | res = vec_env.eval() 107 | 108 | res['extra'] = log 109 | results.append(res) 110 | 111 | log_videos(f'./videos/{experiment_name}', i, rgb, fps=24) 112 | 113 | # Log Results 114 | log_results(f'./runs/{experiment_name}', results) 115 | 116 | vec_env.exit() 117 | exit() 118 | 119 | 120 | if __name__ == "__main__": 121 | launch_eval_hydra() 122 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/result.py: -------------------------------------------------------------------------------- 1 | 2 | import os 3 | import numpy as np 4 | 5 | 6 | def read_results(path, res_dict, **kwargs): 7 | res = np.load(f'{path}/result.npy', allow_pickle=True).tolist() 8 | 9 | for s in range(len(res['success'])): 10 | for k, v in res_dict.items(): 11 | if k == 'computing_time' or k == 'traj_length': 12 | res_dict[k].extend(res['extra'][s][k]) 13 | else: 14 | res_dict[k].extend(res[k][s]) 15 | 16 | # sanity check 17 | res_len = len(res_dict['success']) 18 | for k, v in res_dict.items(): 19 | if k == 'extra': 20 | continue 21 | else: 22 | assert len(v) == res_len 23 | 24 | return res_dict 25 | 26 | 27 | def read_all_exp_results(dir_path, task_name, **kwargs): 28 | 29 | res_dict = { 30 | 'success': [], 31 | 'label': [], 32 | 'z_threshold': [], 33 | 'x_threshold': [], 34 | 'e_threshold': [], 35 | 'computing_time': [], 36 | 'traj_length': [] 37 | } 38 | 39 | config = 'benchmark_eval' 40 | 41 | not_founds = [] 42 | for scene in os.listdir(f'config/scene/{config}'): 43 | file = f'{scene[:-5]}_{task_name}' 44 | found = False 45 | for f in os.listdir(dir_path): 46 | try: 47 | if f.startswith(file): 48 | if found: 49 | continue 50 | res_dict = read_results(f'{dir_path}/{f}', res_dict, **kwargs) 51 | found = True 52 | except: 53 | continue 54 | 55 | if not found: 56 | not_founds.append(scene[:-5]) 57 | 58 | s = '' 59 | for f in not_founds: 60 | s += f + ' ' 61 | 62 | print("Result Not Found: ", s) 63 | return res_dict 64 | 65 | 66 | def summarize_experiments(res_dict, key='success'): 67 | rigid_task_labels = { 68 | 'on_table': [], 69 | 'on_shelf': [], 70 | 'in_basket': [], 71 | 'in_drawer': [], 72 | 'total': [] 73 | } 74 | 75 | for i in range(len(res_dict['label'])): 76 | for k, v in rigid_task_labels.items(): 77 | if key in ['success', 'label', 'z_threshold', 'x_threshold', 'e_threshold', 'computing_time', 'traj_length']: 78 | if k in res_dict['label'][i]: 79 | rigid_task_labels[k].append(res_dict[key][i]) 80 | rigid_task_labels['total'].append(res_dict[key][i]) 81 | else: 82 | if k in res_dict['label'][i]: 83 | rigid_task_labels[k].append(res_dict['extra'][key][i]) 84 | rigid_task_labels['total'].append(res_dict['extra'][key][i]) 85 | 86 | for k, v in rigid_task_labels.items(): 87 | mean = np.array(v).mean() 88 | count = len(v) 89 | print(k, count, mean) 90 | 91 | 92 | def compare_baselines(result_dir, task_list, sum_key, **kwargs): 93 | for t in task_list: 94 | print(t) 95 | res_dict = read_all_exp_results(result_dir, t, **kwargs) 96 | summarize_experiments(res_dict, sum_key) 97 | 98 | 99 | if __name__ == "__main__": 100 | task = [ 101 | #'FetchMeshCurobo_Release', 102 | #'FetchPtdCuroboCGNBeta_Release', 103 | #'FetchPtdPyomplCGNBeta_Release', 104 | #'FetchPtdCabinetCGNBeta_Release' 105 | #'FetchPtdImitE2E_Release' 106 | ] 107 | compare_baselines('../runs', task, 'success') -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | from .fetch.fetch_base import FetchBase 3 | from .fetch.fetch_ptd import FetchPointCloudBase 4 | from .fetch.fetch_naive import FetchNaive 5 | 6 | # CuRobo 7 | from .fetch.fetch_mesh_curobo import FetchMeshCurobo 8 | from .fetch.repeat.fetch_mesh_curobo_rep import FetchMeshCuroboRep 9 | from .fetch.fetch_ptd_curobo import FetchPtdCurobo 10 | from .fetch.repeat.fetch_ptd_curobo_rep import FetchPtdCuroboRep 11 | 12 | from .fetch.fetch_mesh_curobo_datagen import FetchCuroboDataGen 13 | 14 | # Imit Beta 15 | from .fetch.imit.fetch_ptd_imit_e2e import FetchPtdImitE2E 16 | from .fetch.imit.fetch_ptd_imit_two_stage import FetchPtdImitTwoStage 17 | from .fetch.imit.fetch_ptd_imit_curobo_cgn import FetchPtdImitCuroboCGN 18 | 19 | isaacgym_task_map = { 20 | "FetchBase": FetchBase, 21 | "FetchPointCloudBase": FetchPointCloudBase, 22 | 23 | "FetchNaive": FetchNaive, 24 | "FetchMeshCurobo": FetchMeshCurobo, 25 | "FetchMeshCuroboRep": FetchMeshCuroboRep, 26 | 27 | "FetchPtdCurobo": FetchPtdCurobo, 28 | "FetchPtdCuroboRep": FetchPtdCuroboRep, 29 | 30 | "FetchCuroboDataGen": FetchCuroboDataGen, 31 | 32 | "FetchPtdImitE2E": FetchPtdImitE2E, 33 | "FetchPtdImitTwoStage": FetchPtdImitTwoStage, 34 | "FetchPtdImitCuroboCGN": FetchPtdImitCuroboCGN 35 | } 36 | 37 | 38 | try: 39 | # OMPL 40 | from .fetch.fetch_mesh_pyompl import FetchMeshPyompl 41 | from .fetch.repeat.fetch_mesh_pyompl_rep import FetchMeshPyomplRep 42 | from .fetch.fetch_ptd_pyompl import FetchPtdPyompl 43 | from .fetch.repeat.fetch_ptd_pyompl_rep import FetchPtdPyomplRep 44 | 45 | # Cabinet 46 | from .fetch.fetch_ptd_cabinet import FetchPtdCabinet 47 | from .fetch.fetch_ptd_cabinet_cgn_beta import FetchPtdCabinetCGNBeta 48 | 49 | # Contact_Graspnet_Pytorch 50 | from .fetch.fetch_ptd_curobo_cgn_beta import FetchPtdCuroboCGNBeta 51 | from .fetch.fetch_ptd_pyompl_cgn_beta import FetchPtdPyomplCGNBeta 52 | from .fetch.fetch_mesh_curobo_cgn_beta import FetchMeshCuroboPtdCGNBeta 53 | from .fetch.fetch_mesh_pyompl_cgn_beta import FetchMeshPyomplPtdCGNBeta 54 | 55 | from .fetch.repeat.fetch_mesh_curobo_cgn_beta_rep import FetchMeshCuroboPtdCGNBetaRep 56 | from .fetch.repeat.fetch_ptd_curobo_cgn_beta_rep import FetchPtdCuroboCGNBetaRep 57 | from .fetch.repeat.fetch_ptd_pyompl_cgn_beta_rep import FetchPtdPyomplCGNBetaRep 58 | 59 | isaacgym_task_map = { 60 | "FetchBase": FetchBase, 61 | "FetchPointCloudBase": FetchPointCloudBase, 62 | 63 | "FetchNaive": FetchNaive, 64 | "FetchMeshCurobo": FetchMeshCurobo, 65 | "FetchMeshPyompl": FetchMeshPyompl, 66 | "FetchMeshCuroboRep": FetchMeshCuroboRep, 67 | "FetchMeshPyomplRep": FetchMeshPyomplRep, 68 | 69 | "FetchPtdCurobo": FetchPtdCurobo, 70 | "FetchPtdPyompl": FetchPtdPyompl, 71 | 72 | "FetchCuroboDataGen": FetchCuroboDataGen, 73 | 74 | "FetchPtdCuroboRep": FetchPtdCuroboRep, 75 | "FetchPtdPyomplRep": FetchPtdPyomplRep, 76 | 77 | "FetchPtdCuroboCGNBeta": FetchPtdCuroboCGNBeta, 78 | "FetchPtdPyomplCGNBeta": FetchPtdPyomplCGNBeta, 79 | "FetchMeshCuroboPtdCGNBeta": FetchMeshCuroboPtdCGNBeta, 80 | "FetchMeshPyomplPtdCGNBeta": FetchMeshPyomplPtdCGNBeta, 81 | 82 | "FetchPtdCabinet": FetchPtdCabinet, 83 | "FetchPtdCabinetCGNBeta": FetchPtdCabinetCGNBeta, 84 | 85 | "FetchMeshCuroboPtdCGNBetaRep": FetchMeshCuroboPtdCGNBetaRep, 86 | "FetchPtdCuroboCGNBetaRep": FetchPtdCuroboCGNBetaRep, 87 | "FetchPtdPyomplCGNBetaRep": FetchPtdPyomplCGNBetaRep, 88 | 89 | "FetchPtdImitE2E": FetchPtdImitE2E, 90 | "FetchPtdImitTwoStage": FetchPtdImitTwoStage, 91 | "FetchPtdImitCuroboCGN": FetchPtdImitCuroboCGN 92 | } 93 | 94 | except: 95 | print("============================================================") 96 | print("Import Error: Additional Method Excluded.") 97 | 98 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/fetch/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/isaacgymenvs/tasks/fetch/__init__.py -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/fetch/fetch_naive.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | import os 4 | import torch 5 | import imageio 6 | import trimesh.transformations as tra 7 | 8 | from isaacgym import gymutil, gymtorch, gymapi 9 | from isaacgymenvs.utils.torch_jit_utils import to_torch, get_axis_params, tensor_clamp, \ 10 | tf_vector, tf_combine, quat_mul, quat_conjugate, quat_apply, quat_to_angle_axis, tf_inverse 11 | from isaacgymenvs.tasks.fetch.fetch_base import FetchBase 12 | 13 | 14 | def image_to_video(obs_buf): 15 | video = [] 16 | for s, images in enumerate(obs_buf): 17 | steps = [] 18 | for e, imgs in enumerate(images): 19 | steps.append(np.concatenate(imgs, axis=0)) 20 | video.append(np.concatenate(steps, axis=1)) 21 | return video 22 | 23 | 24 | class FetchNaive(FetchBase): 25 | def __init__(self, cfg, rl_device, sim_device, graphics_device_id, 26 | headless, virtual_screen_capture, force_render): 27 | super().__init__(cfg, rl_device, sim_device, graphics_device_id, 28 | headless, virtual_screen_capture, force_render) 29 | 30 | self._init_steps = self.cfg["solution"]["init_steps"] 31 | self._eval_steps = self.cfg["solution"]["eval_steps"] 32 | 33 | self._solution_video = [] 34 | self._video_freq = self.cfg["solution"]["video_freq"] 35 | self._video_frame = 0 36 | 37 | assert self.arm_control_type == 'joint' 38 | 39 | """ 40 | Your Solution 41 | """ 42 | 43 | def repeat(self): 44 | # curr state 45 | q = self.states["q"].clone() 46 | self._arm_control = q[:, :-2] 47 | self._gripper_control = q[:, -2:] 48 | 49 | self.gym.set_dof_position_target_tensor(self.sim, gymtorch.unwrap_tensor(self._pos_control)) 50 | 51 | for _ in range(self._eval_steps): 52 | self.env_physics_step() 53 | self.post_phy_step() 54 | rgb, seg = self.get_camera_image(rgb=True, seg=False) 55 | self.log_video(rgb) 56 | 57 | def solve(self): 58 | # set goal obj color 59 | self.set_target_color() 60 | self._solution_video = [] 61 | 62 | for _ in range(self._init_steps): 63 | self.env_physics_step() 64 | self.post_phy_step() 65 | rgb, seg = self.get_camera_image(rgb=True, seg=False) 66 | self.log_video(rgb) 67 | 68 | log = { 69 | 'traj_length': self._traj_length.cpu().numpy(), 70 | 'computing_time': [0 for _ in range(self.num_envs)] 71 | } 72 | 73 | self.repeat() 74 | 75 | self.set_default_color() 76 | 77 | return image_to_video(self._solution_video), log 78 | 79 | 80 | """ 81 | Camera 82 | """ 83 | 84 | def log_video(self, rgb): 85 | if self._video_frame % self._video_freq == 0: 86 | self._solution_video.append(rgb) 87 | self._video_frame += 1 -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/fetch/imit/fetch_ptd_imit_base.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | import torch 4 | import trimesh 5 | 6 | from isaacgym import gymutil, gymtorch, gymapi 7 | import time 8 | from isaacgymenvs.utils.torch_jit_utils import to_torch, tf_combine, tf_inverse 9 | from isaacgymenvs.tasks.fetch.fetch_ptd import FetchPointCloudBase 10 | from isaacgymenvs.tasks.fetch.fetch_mesh_curobo import image_to_video 11 | from isaacgymenvs.tasks.fetch.fetch_solution_base import FetchSolutionBase 12 | 13 | import sys 14 | sys.path.append('../third_party/Optimus') 15 | import optimus.modules.functional as F 16 | 17 | 18 | def vis_scene(ptc, env_idx=0): 19 | scene = trimesh.Scene() 20 | axis = trimesh.creation.axis() 21 | scene.add_geometry(axis) 22 | 23 | for i, k in enumerate(['scene', 'robot', 'goal']): 24 | pts = ptc[k][env_idx][0].cpu().numpy() 25 | pts = trimesh.points.PointCloud(pts, colors=np.array([[255, 0, 100 * i]]).repeat(pts.shape[0], axis=0)) 26 | scene.add_geometry(pts) 27 | 28 | scene.show() 29 | 30 | 31 | def regularize_pc_point_count(pc, npoints): 32 | if len(pc) > npoints: 33 | pc = pc.reshape(-1, *pc.shape[-2:]).transpose(1, 2) 34 | sample = F.furthest_point_sample(pc, npoints).transpose(1, 2)[0] 35 | else: 36 | sample = torch.zeros(size=(npoints, 3), device=pc.device) 37 | if len(pc) > 0: 38 | sample[:pc.shape[0]] = pc 39 | return sample 40 | 41 | 42 | class FetchPtdImitBase(FetchPointCloudBase, FetchSolutionBase): 43 | def __init__(self, cfg, rl_device, sim_device, graphics_device_id, 44 | headless, virtual_screen_capture, force_render): 45 | super().__init__(cfg, rl_device, sim_device, graphics_device_id, 46 | headless, virtual_screen_capture, force_render) 47 | 48 | self.algo = None 49 | 50 | self._control_type = None 51 | self._seq_length = 0 52 | 53 | self.obs = [] 54 | self.last_command = None 55 | 56 | """ 57 | Solver Utils 58 | """ 59 | def _get_robot_state(self): 60 | self._refresh() 61 | rq, rt = tf_inverse(self._robot_base_state[..., 3:7].clone(), self._robot_base_state[..., :3].clone()) 62 | eq, et = tf_combine(rq, rt, self.states["eef_quat"].clone(), self.states["eef_pos"].clone()) 63 | rq = rq.unsqueeze(1).repeat(1, self._rigid_body_state.shape[1], 1) 64 | rt = rt.unsqueeze(1).repeat(1, self._rigid_body_state.shape[1], 1) 65 | rbq, rbt = tf_combine(rq, rt, self._rigid_body_state[..., 3:7].clone(), self._rigid_body_state[..., :3].clone()) 66 | 67 | rev = eq[:, -1:] >= 0. 68 | eq = eq * (2 * rev.float() - 1.) 69 | 70 | rev_rb = rbq[..., -1:] >= 0. 71 | rbq = rbq * (2 * rev_rb.float() - 1.) 72 | 73 | pose = { 74 | 'eef_pos': et.clone(), 75 | 'eef_quat': eq.clone(), 76 | 'q': self.states["q"].clone(), 77 | 'rigid_pos': rbt[:, :11].clone(), 78 | 'rigid_quat': rbq[:, :11].clone(), 79 | } 80 | 81 | return pose 82 | 83 | def _update_obs(self, phase=None): 84 | point_clouds = self.get_camera_data(tensor_ptd=True, ptd_in_robot_base=True, segmented_ptd=True, 85 | ptd_downscale=self.cfg["solution"]['imit_ptd_subsample'])['camera_pointcloud_seg'] 86 | robot_state = self._get_robot_state() 87 | 88 | if phase is None: 89 | phase_index = np.array([[0., 0.]]) 90 | elif 'fetch' in phase: 91 | phase_index = np.array([[0., 1.]]) 92 | elif 'grasp' in phase: 93 | phase_index = np.array([[1., 0.]]) 94 | else: 95 | raise NotImplementedError 96 | 97 | phase_index = torch.from_numpy(phase_index).float().repeat(self.num_envs, 1) 98 | 99 | ptc_samples = [] 100 | for env_idx, ptc_full in enumerate(point_clouds): 101 | ptc = {} 102 | for k, v in ptc_full.items(): 103 | pts = v[v.norm(dim=-1) <= 1.2] # workspace range, hard coded 104 | ptc[k] = regularize_pc_point_count(pts, self.algo.algo_config['obs_shape'][f'num_{k}_points']) 105 | ptc_samples.append(ptc) 106 | 107 | self.obs.append({ 108 | 'point_cloud': ptc_samples, 109 | 'robot_state': robot_state, 110 | 'phase_index': phase_index 111 | }) 112 | if len(self.obs) > self._seq_length: 113 | self.obs = self.obs[-self._seq_length:] 114 | 115 | def get_algo_input_batch(self): 116 | batch = { 117 | 'q': [], 118 | 'eef_pos': [], 119 | 'eef_quat': [], 120 | 'rigid_pos': [], 121 | 'rigid_quat': [], 122 | 'visual': { 123 | 'goal': [], 124 | 'scene': [], 125 | 'robot': [] 126 | } 127 | } 128 | 129 | if self.cfg["solution"]["config"]["algo"]["two_phase"]: 130 | batch['phase_index'] = [] 131 | 132 | for step in range(-self._seq_length, 0): 133 | s = max(len(self.obs) + step, 0) 134 | 135 | batch['eef_pos'].append(self.obs[s]["robot_state"]["eef_pos"]) 136 | batch['eef_quat'].append(self.obs[s]["robot_state"]["eef_quat"]) 137 | batch['q'].append(self.obs[s]["robot_state"]["q"]) 138 | batch['rigid_pos'].append(self.obs[s]['robot_state']['rigid_pos']) 139 | batch['rigid_quat'].append(self.obs[s]['robot_state']['rigid_quat']) 140 | 141 | for k in ['goal', 'scene', 'robot']: 142 | ptc_envs = [] 143 | for env_idx in range(self.num_envs): 144 | ptc_envs.append(self.obs[s]["point_cloud"][env_idx][k]) 145 | ptc_envs = torch.stack(ptc_envs, dim=0) 146 | batch['visual'][k].append(ptc_envs) 147 | 148 | if self.cfg["solution"]["config"]["algo"]["two_phase"]: 149 | batch['phase_index'].append(self.obs[s]['phase_index']) 150 | 151 | batch['eef_pos'] = torch.stack(batch['eef_pos'], dim=1).detach() 152 | batch['eef_quat'] = torch.stack(batch['eef_quat'], dim=1).detach() 153 | batch['q'] = torch.stack(batch['q'], dim=1).detach() 154 | batch['rigid_pos'] = torch.stack(batch['rigid_pos'], dim=1).detach() 155 | batch['rigid_quat'] = torch.stack(batch['rigid_quat'], dim=1).detach() 156 | 157 | for k in ['goal', 'scene', 'robot']: 158 | batch['visual'][k] = torch.stack(batch['visual'][k], dim=1).detach() 159 | 160 | if self.cfg["solution"]["config"]["algo"]["two_phase"]: 161 | batch['phase_index'] = torch.stack(batch['phase_index'], dim=1).detach() 162 | 163 | return batch 164 | 165 | def update_algo(self, algo): 166 | self.algo = algo 167 | self.algo.set_eval() 168 | self._seq_length = self.algo.global_config.dataset.seq_length 169 | self._control_type = self.algo.global_config.dataset.action_type 170 | 171 | if self.cfg["solution"]["config"] is None: 172 | self.cfg["solution"]["config"] = self.algo.global_config 173 | 174 | assert self.cfg["solution"]["config"]["algo"]["two_phase"] == True 175 | 176 | def reset(self): 177 | super().reset() 178 | self.last_command = None 179 | self.obs = [] 180 | 181 | """ 182 | Solve 183 | """ 184 | 185 | def solve(self): 186 | pass 187 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/fetch/imit/fetch_ptd_imit_curobo_cgn.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | import os 4 | import torch 5 | 6 | from isaacgym import gymutil, gymtorch, gymapi 7 | import time 8 | from isaacgymenvs.tasks.fetch.fetch_ptd_curobo_cgn_beta import FetchPtdCuroboCGNBeta 9 | from isaacgymenvs.tasks.fetch.fetch_mesh_curobo import image_to_video 10 | from isaacgymenvs.tasks.fetch.imit.fetch_ptd_imit_two_stage import FetchPtdImitTwoStage 11 | 12 | 13 | class FetchPtdImitCuroboCGN(FetchPtdImitTwoStage, FetchPtdCuroboCGNBeta): 14 | def __init__(self, cfg, rl_device, sim_device, graphics_device_id, 15 | headless, virtual_screen_capture, force_render): 16 | super().__init__(cfg, rl_device, sim_device, graphics_device_id, 17 | headless, virtual_screen_capture, force_render) 18 | 19 | assert self.arm_control_type == 'joint' 20 | 21 | """ 22 | Solve 23 | """ 24 | 25 | def solve(self): 26 | log = {} 27 | 28 | self.set_target_color() 29 | self._solution_video = [] 30 | self._video_frame = 0 31 | computing_time = 0. 32 | 33 | for _ in range(self._init_steps): 34 | self.env_physics_step() 35 | self.post_phy_step() 36 | 37 | self.update_ptd_motion_gen_world() 38 | 39 | start_time = time.time() 40 | cgn_result, cgn_logs = self.sample_goal_obj_collision_free_grasp_pose() 41 | if self.cgn_log_dir is not None: 42 | np.save(f'{self.cgn_log_dir}/log_{self.get_task_idx()}.npy', cgn_logs) 43 | 44 | traj, success, poses, results = \ 45 | self.motion_gen_to_grasp_pose_ordered(cgn_result['pre_grasp_poses'], lsts=cgn_result['grasp_ordered_lst']) 46 | print("Pre Grasp Plan", success) 47 | log['pre_grasp_plan_success'] = success 48 | computing_time += time.time() - start_time 49 | 50 | self.follow_motion_trajs(traj, gripper_state=0) # 0 means no movement 51 | print("Pre Grasp Phase End") 52 | 53 | if self.cfg["solution"]["move_offset_method"] == 'motion_planning': 54 | if self.cfg["solution"]["disable_grasp_obj_motion_gen"]: 55 | self.enable_motion_gen_collider(enable_goal_obj=False) 56 | 57 | start_time = time.time() 58 | traj, success, poses, results = self.motion_gen_by_z_offset(z=self.cfg["solution"]["pre_grasp_offset"], 59 | mask=success) 60 | computing_time += time.time() - start_time 61 | 62 | if self.cfg["solution"]["disable_grasp_obj_motion_gen"]: 63 | self.enable_motion_gen_collider(enable_goal_obj=True) 64 | 65 | print("Grasp Plan", success) 66 | log['grasp_plan_success'] = success 67 | 68 | self.follow_motion_trajs(traj, gripper_state=0) # 0 means no movement 69 | elif self.cfg["solution"]["move_offset_method"] == 'cartesian_linear': 70 | offset = np.array([0, 0, self.cfg["solution"]["pre_grasp_offset"] * 71 | self.cfg["solution"]["grasp_overshoot_ratio"]]) 72 | self.follow_cartesian_linear_motion(offset, gripper_state=0) 73 | else: 74 | raise NotImplementedError 75 | 76 | print("Grasp Phase End") 77 | 78 | self.close_gripper() 79 | log['grasp_finger_obj_contact'] = self.finger_goal_obj_contact() 80 | print("Gripper Close End") 81 | 82 | self._task_cmd_status = torch.ones((self.num_envs, ), device=self.device, dtype=torch.bool) 83 | self.obs = [] 84 | for i in range(self.cfg["solution"]["num_fetch_steps"] // self.cfg["solution"]["config"]["dataset"]["frame_skip"]): 85 | self._update_obs('fetch_traj') 86 | 87 | start_time = time.time() 88 | input = self.get_algo_input_batch() 89 | 90 | actions = self.algo.get_action(input, i) 91 | delay_time = time.time() - start_time 92 | computing_time += delay_time 93 | 94 | delay = self.step_action(actions, delay_time / self.num_envs, gripper_state=-1) 95 | 96 | if not self._task_cmd_status.any().cpu().numpy(): 97 | break 98 | 99 | log['fetch_phase_delay_steps_per_cmd'] = delay 100 | 101 | log['traj_length'] = self._traj_length.cpu().numpy() 102 | log['computing_time'] = [computing_time / self.num_envs for _ in range(self.num_envs)] 103 | 104 | self.repeat() 105 | log['end_finger_obj_contact'] = self.finger_goal_obj_contact() 106 | print("Eval Phase End") 107 | self.set_default_color() 108 | 109 | return image_to_video(self._solution_video), log 110 | 111 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/fetch/imit/fetch_ptd_imit_e2e.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | import torch 4 | import trimesh 5 | 6 | from isaacgym import gymutil, gymtorch, gymapi 7 | import time 8 | from isaacgymenvs.utils.torch_jit_utils import to_torch, tf_combine, tf_inverse 9 | from isaacgymenvs.tasks.fetch.fetch_mesh_curobo import image_to_video 10 | from isaacgymenvs.tasks.fetch.imit.fetch_ptd_imit_base import FetchPtdImitBase 11 | 12 | 13 | class FetchPtdImitE2E(FetchPtdImitBase): 14 | def __init__(self, cfg, rl_device, sim_device, graphics_device_id, 15 | headless, virtual_screen_capture, force_render): 16 | super().__init__(cfg, rl_device, sim_device, graphics_device_id, 17 | headless, virtual_screen_capture, force_render) 18 | 19 | self._task_status = None 20 | 21 | assert self.num_envs == 1 22 | 23 | """ 24 | Action 25 | """ 26 | def _get_gripper_state(self): 27 | dist = self.states['q'][:, -2:].sum(dim=-1).cpu().numpy()[0] 28 | if dist > 0.075: 29 | return 'open' 30 | elif dist < 0.002: 31 | return 'close' 32 | else: 33 | return 'grasp' 34 | 35 | def step_action(self, actions, computing_time): 36 | self.switch_arm_control_type(self._control_type, impedance=self.cfg["solution"]["impedance_control"]) 37 | 38 | # simulate computing delay 39 | actions = actions.clone().to(self.device) 40 | delay_steps = int(computing_time / self.cfg["sim"]["dt"]) 41 | if delay_steps > 0 and self.last_command is not None and self.cfg["env"]["sim_delay_steps"]: 42 | for i in range(delay_steps): 43 | self.pre_phy_step(self.last_command, robot_base=True) 44 | self.env_physics_step() 45 | self.post_phy_step() 46 | rgb, seg = self.get_camera_image(rgb=True, seg=False) 47 | self.log_video(rgb) 48 | 49 | if self._control_type == 'osc': 50 | command = { 51 | 'eef_pos': actions[:, :3], 52 | 'eef_quat': actions[:, 3:-1], 53 | } 54 | elif self._control_type == 'joint': 55 | joint_cmd = torch.clamp(actions[:, :-1], self.robot_dof_lower_limits[:-2].unsqueeze(0), 56 | self.robot_dof_upper_limits[:-2].unsqueeze(0)) 57 | command = {"joint_state": joint_cmd} 58 | else: 59 | raise NotImplementedError 60 | 61 | if 'grasp' in self._task_status and self._get_gripper_state() == 'open': 62 | command['gripper_state'] = None 63 | elif 'grasp' in self._task_status and not (self._get_gripper_state() == 'open'): 64 | command['gripper_state'] = torch.ones((self.num_envs,), device=self.device) 65 | elif 'fetch' in self._task_status: 66 | command['gripper_state'] = - torch.ones((self.num_envs,), device=self.device) 67 | else: 68 | raise NotImplementedError 69 | 70 | cmd_repeat = (self.cfg["solution"]["num_steps_repeat_per_cmd"] * 71 | self.algo.global_config.dataset.frame_skip) 72 | 73 | for i in range(cmd_repeat): 74 | self.pre_phy_step(command, robot_base=True) 75 | self.env_physics_step() 76 | self.post_phy_step() 77 | rgb, seg = self.get_camera_image(rgb=True, seg=False) 78 | self.log_video(rgb) 79 | 80 | self.switch_arm_control_type('joint') 81 | 82 | self.last_command = command 83 | 84 | # additional executions 85 | if actions[0, -1].cpu().numpy() > 0: 86 | self.obs = [] 87 | self.last_command = None 88 | if 'grasp' in self._task_status: 89 | self._task_status = 'fetch_traj' 90 | return 'close' 91 | elif 'fetch' in self._task_status: 92 | self._task_status = 'end' 93 | return 'end' 94 | 95 | if 'fetch' in self._task_status and not (self._get_gripper_state() == 'grasp'): 96 | self.obs = [] 97 | self.last_command = None 98 | self._task_status = 'grasp_traj' 99 | return 'open' 100 | 101 | return None 102 | 103 | """ 104 | Solve 105 | """ 106 | 107 | def solve(self): 108 | log = {} 109 | 110 | # set goal obj color 111 | self.set_target_color() 112 | self._solution_video = [] 113 | self._video_frame = 0 114 | computing_time = 0. 115 | 116 | for _ in range(self._init_steps): 117 | self.env_physics_step() 118 | self.post_phy_step() 119 | 120 | self._task_status = 'grasp_traj' # init with grasp traj 121 | 122 | step_counter = 0 123 | for i in range(self.cfg["solution"]["max_num_steps"]): 124 | self._update_obs(self._task_status) 125 | 126 | start_time = time.time() 127 | input = self.get_algo_input_batch() 128 | actions = self.algo.get_action(input, step_counter) 129 | delay_time = time.time() - start_time 130 | computing_time += delay_time 131 | 132 | gripper_action = self.step_action(actions, delay_time / self.num_envs) 133 | step_counter += 1 134 | 135 | if gripper_action == 'close': 136 | print("Close Gripper") 137 | self.close_gripper() 138 | step_counter = 0 139 | elif gripper_action == 'open': 140 | print("Re-open Gripper") 141 | self.open_gripper() 142 | step_counter = 0 143 | elif gripper_action == 'end': 144 | print("Policy End") 145 | break 146 | 147 | log['delay_steps_per_cmd'] = delay_time / self.num_envs 148 | 149 | log['traj_length'] = self._traj_length.cpu().numpy() 150 | log['computing_time'] = [computing_time / self.num_envs for _ in range(self.num_envs)] 151 | 152 | self.repeat() 153 | log['end_finger_obj_contact'] = self.finger_goal_obj_contact() 154 | print("Eval Phase End") 155 | self.set_default_color() 156 | 157 | return image_to_video(self._solution_video), log -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/fetch/imit/fetch_ptd_imit_two_stage.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | import torch 4 | import trimesh 5 | 6 | from isaacgym import gymutil, gymtorch, gymapi 7 | import time 8 | from isaacgymenvs.utils.torch_jit_utils import to_torch, tf_combine, tf_inverse 9 | from isaacgymenvs.tasks.fetch.fetch_mesh_curobo import image_to_video 10 | from isaacgymenvs.tasks.fetch.imit.fetch_ptd_imit_base import FetchPtdImitBase 11 | 12 | 13 | class FetchPtdImitTwoStage(FetchPtdImitBase): 14 | def __init__(self, cfg, rl_device, sim_device, graphics_device_id, 15 | headless, virtual_screen_capture, force_render): 16 | super().__init__(cfg, rl_device, sim_device, graphics_device_id, 17 | headless, virtual_screen_capture, force_render) 18 | 19 | self._task_cmd_status = torch.ones((self.num_envs, ), device=self.device, dtype=torch.bool) 20 | 21 | """ 22 | Action 23 | """ 24 | 25 | def step_action(self, actions, computing_time, gripper_state): 26 | self.switch_arm_control_type(self._control_type, impedance=self.cfg["solution"]["impedance_control"]) 27 | 28 | # simulate computing delay 29 | actions = actions.clone().to(self.device) 30 | delay_steps = int(computing_time / self.cfg["sim"]["dt"]) 31 | if delay_steps > 0 and self.last_command is not None and self.cfg["env"]["sim_delay_steps"]: 32 | for i in range(delay_steps): 33 | self.pre_phy_step(self.last_command, robot_base=True) 34 | self.env_physics_step() 35 | self.post_phy_step() 36 | rgb, seg = self.get_camera_image(rgb=True, seg=False) 37 | self.log_video(rgb) 38 | else: 39 | delay_steps = 0 40 | 41 | command = {} 42 | if self._control_type == 'osc': 43 | task_status = self._task_cmd_status.float().reshape(-1, 1) 44 | robot_state = self._get_robot_state() 45 | eef_pos = robot_state["eef_pos"].clone() * (1. - task_status) + actions[:, :3] * task_status 46 | eef_quat = robot_state["eef_quat"].clone() * (1. - task_status) + actions[:, 3:-1] * task_status 47 | 48 | command = { 49 | 'eef_pos': eef_pos, 50 | 'eef_quat': eef_quat, 51 | } 52 | elif self._control_type == 'joint': 53 | 54 | curr_state = self.states["q"][:, :-2].clone() 55 | input_action = actions[:, :-1] 56 | 57 | task_status = self._task_cmd_status.float().reshape(-1, 1) 58 | joint_cmd = curr_state * (1. - task_status) + input_action * task_status 59 | 60 | joint_cmd = torch.clamp(joint_cmd, self.robot_dof_lower_limits[:-2].unsqueeze(0), 61 | self.robot_dof_upper_limits[:-2].unsqueeze(0)) 62 | command = {"joint_state": joint_cmd} 63 | else: 64 | raise NotImplementedError 65 | 66 | if gripper_state == 0: 67 | command['gripper_state'] = None 68 | else: 69 | command['gripper_state'] = gripper_state * torch.ones((self.num_envs,), device=self.device) 70 | 71 | cmd_repeat = (self.cfg["solution"]["num_steps_repeat_per_cmd"] * 72 | self.algo.global_config.dataset.frame_skip) 73 | 74 | for i in range(cmd_repeat): 75 | self.pre_phy_step(command, robot_base=True) 76 | self.env_physics_step() 77 | self.post_phy_step() 78 | rgb, seg = self.get_camera_image(rgb=True, seg=False) 79 | self.log_video(rgb) 80 | 81 | self.switch_arm_control_type('joint') 82 | 83 | # update phase end 84 | command_task_state = actions[:, -1] < 0. 85 | self._task_cmd_status = command_task_state & self._task_cmd_status 86 | self.last_command = command 87 | return delay_steps 88 | 89 | """ 90 | Solve 91 | """ 92 | 93 | def solve(self): 94 | log = {} 95 | 96 | # set goal obj color 97 | self.set_target_color() 98 | self._solution_video = [] 99 | self._video_frame = 0 100 | computing_time = 0. 101 | 102 | for _ in range(self._init_steps): 103 | self.env_physics_step() 104 | self.post_phy_step() 105 | 106 | self._task_cmd_status = torch.ones((self.num_envs, ), device=self.device, dtype=torch.bool) 107 | # grasp_phase 108 | for i in range(self.cfg["solution"]["num_grasp_steps"] // self.cfg["solution"]["config"]["dataset"]["frame_skip"]): 109 | self._update_obs('grasp_traj') 110 | 111 | start_time = time.time() 112 | input = self.get_algo_input_batch() 113 | 114 | actions = self.algo.get_action(input, i) 115 | delay_time = time.time() - start_time 116 | computing_time += delay_time 117 | 118 | delay = self.step_action(actions, delay_time / self.num_envs, 0) 119 | 120 | if not self._task_cmd_status.any().cpu().numpy(): 121 | break 122 | 123 | self.close_gripper() 124 | log['grasp_finger_obj_contact'] = self.finger_goal_obj_contact() 125 | log['grasp_phase_delay_steps_per_cmd'] = delay 126 | print("Gripper Close End") 127 | 128 | self._task_cmd_status = torch.ones((self.num_envs, ), device=self.device, dtype=torch.bool) 129 | self.obs = [] 130 | for i in range(self.cfg["solution"]["num_fetch_steps"] // self.cfg["solution"]["config"]["dataset"]["frame_skip"]): 131 | self._update_obs('fetch_traj') 132 | 133 | start_time = time.time() 134 | input = self.get_algo_input_batch() 135 | 136 | actions = self.algo.get_action(input, i) 137 | delay_time = time.time() - start_time 138 | computing_time += delay_time 139 | 140 | delay = self.step_action(actions, delay_time / self.num_envs, gripper_state=-1) 141 | 142 | if not self._task_cmd_status.any().cpu().numpy(): 143 | break 144 | 145 | log['fetch_phase_delay_steps_per_cmd'] = delay 146 | 147 | log['traj_length'] = self._traj_length.cpu().numpy() 148 | log['computing_time'] = [computing_time / self.num_envs for _ in range(self.num_envs)] 149 | 150 | self.repeat() 151 | log['end_finger_obj_contact'] = self.finger_goal_obj_contact() 152 | print("Eval Phase End") 153 | self.set_default_color() 154 | 155 | return image_to_video(self._solution_video), log 156 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/fetch/repeat/fetch_mesh_curobo_cgn_beta_rep.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | import time 4 | 5 | from curobo.types.math import Pose 6 | 7 | from curobo.types.robot import JointState, RobotConfig 8 | 9 | 10 | from isaacgymenvs.tasks.fetch.fetch_mesh_curobo_cgn_beta import FetchMeshCuroboPtdCGNBeta 11 | from isaacgymenvs.tasks.fetch.fetch_mesh_curobo import image_to_video, create_gripper_marker, plot_trajs 12 | 13 | 14 | class FetchMeshCuroboPtdCGNBetaRep(FetchMeshCuroboPtdCGNBeta): 15 | def __init__(self, cfg, rl_device, sim_device, graphics_device_id, 16 | headless, virtual_screen_capture, force_render): 17 | super().__init__(cfg, rl_device, sim_device, graphics_device_id, 18 | headless, virtual_screen_capture, force_render) 19 | 20 | assert self.num_envs == 1 21 | 22 | self.num_max_trials = self.cfg["solution"]["num_max_trials"] 23 | 24 | state = self.motion_generators[0].compute_kinematics( 25 | JointState.from_position(self.robot_default_dof_pos.to(self.tensor_args.device).view(1, -1)[:, :-2]) 26 | ) 27 | 28 | self.retract_pose = Pose(position=state.ee_pos_seq, quaternion=state.ee_quat_seq).clone() 29 | 30 | """ 31 | Motion Gen 32 | """ 33 | 34 | def motion_plan_to_retract_pose(self): 35 | target_poses = [] 36 | for i in range(self.num_envs): 37 | target_poses.append(self.retract_pose.clone().unsqueeze(dim=0)) 38 | 39 | return self.motion_gen_to_pose_goalset(target_poses) 40 | 41 | """ 42 | Solve 43 | """ 44 | 45 | def solve(self): 46 | log = {} 47 | 48 | # set goal obj color 49 | self.set_target_color() 50 | self._solution_video = [] 51 | self._video_frame = 0 52 | computing_time = 0. 53 | 54 | for _ in range(self._init_steps): 55 | self.env_physics_step() 56 | self.post_phy_step() 57 | 58 | for k in range(self.num_max_trials): 59 | self.update_cuRobo_world_collider_pose() 60 | 61 | st = time.time() 62 | cgn_result, cgn_logs = self.sample_goal_obj_collision_free_grasp_pose() 63 | computing_time += st - time.time() 64 | if self.cgn_log_dir is not None: 65 | np.save(f'{self.cgn_log_dir}/log_{self.get_task_idx()}.npy', cgn_logs) 66 | 67 | if self.cfg["solution"]["direct_grasp"]: 68 | self.update_cuRobo_world_collider_pose() 69 | start_time = time.time() 70 | traj, success, poses, results = self.motion_gen_to_grasp_pose_ordered(cgn_result['grasp_poses'], 71 | cgn_result['grasp_ordered_lst']) 72 | print("Grasp Plan", success) 73 | log['grasp_plan_success'] = success 74 | computing_time += time.time() - start_time 75 | 76 | self.follow_motion_trajs(traj, gripper_state=0) # 0 means no movement 77 | log['grasp_execute_error'] = self.get_end_effect_error(poses) 78 | 79 | else: 80 | start_time = time.time() 81 | traj, success, poses, results = self.motion_gen_to_grasp_pose_ordered(cgn_result["pre_grasp_poses"], 82 | cgn_result['grasp_ordered_lst']) 83 | print("Pre Grasp Plan", success) 84 | log['pre_grasp_plan_success'] = success 85 | computing_time += time.time() - start_time 86 | 87 | self.follow_motion_trajs(traj, gripper_state=0) # 0 means no movement 88 | print("Pre Grasp Phase End") 89 | log['pre_grasp_execute_error'] = self.get_end_effect_error(poses) 90 | 91 | # Move to Grasp Pose, disable goal_obj collision checking 92 | if self.cfg["solution"]["move_offset_method"] == 'motion_planning': 93 | self.update_cuRobo_world_collider_pose() 94 | if self.cfg["solution"]["disable_grasp_obj_motion_gen"]: 95 | self._enable_goal_obj_collision_checking(False) 96 | 97 | start_time = time.time() 98 | traj, success, poses, results = self.motion_gen_by_z_offset(z=self.cfg["solution"]["pre_grasp_offset"], 99 | mask=success) 100 | computing_time += time.time() - start_time 101 | print("Grasp Plan", success) 102 | 103 | if self.cfg["solution"]["disable_grasp_obj_motion_gen"]: 104 | self._enable_goal_obj_collision_checking(True) 105 | 106 | log['grasp_plan_success'] = success 107 | self.follow_motion_trajs(traj, gripper_state=0) # 0 means no movement 108 | 109 | log['grasp_execute_error'] = self.get_end_effect_error(poses) 110 | print("Grasp Phase End") 111 | 112 | elif self.cfg["solution"]["move_offset_method"] == 'cartesian_linear': 113 | offset = np.array([0, 0, self.cfg["solution"]["pre_grasp_offset"] * 114 | self.cfg["solution"]["grasp_overshoot_ratio"]]) 115 | self.follow_cartesian_linear_motion(offset, gripper_state=0) 116 | print("Grasp Phase End") 117 | 118 | self.close_gripper() 119 | log['grasp_finger_obj_contact'] = self.finger_goal_obj_contact() 120 | print("Gripper Close End") 121 | 122 | if self.cfg["solution"]["retract_offset"] > 0: 123 | offset = np.array([0, 0, self.cfg["solution"]["retract_offset"]]) 124 | self.follow_cartesian_linear_motion(offset, gripper_state=-1, eef_frame=False) 125 | log['retract_finger_obj_contact'] = self.finger_goal_obj_contact() 126 | 127 | # Fetch Object out 128 | self.update_cuRobo_motion_gen_config(attach_goal_obj=True) 129 | 130 | start_time = time.time() 131 | traj, success, poses, results = self.motion_gen_to_free_space(mask=success) 132 | print("Fetch Plan", success) 133 | computing_time += time.time() - start_time 134 | 135 | self.update_cuRobo_motion_gen_config(attach_goal_obj=False) 136 | log['fetch_plan_success'] = success 137 | fetch_failure = [] 138 | for r in results: 139 | if r is None: 140 | fetch_failure.append(r) 141 | else: 142 | fetch_failure.append(r.status) 143 | log['fetch_plan_failure'] = fetch_failure 144 | 145 | self.follow_motion_trajs(traj, gripper_state=-1) 146 | log['fetch_execute_error'] = self.get_end_effect_error(poses) 147 | print("Fetch Phase End") 148 | 149 | log['num_repetitive_trials'] = [k] 150 | if self.eval()['success'][0] or (not self.eval()['task_repeat'][0]): 151 | break 152 | 153 | self.open_gripper() 154 | self.update_cuRobo_world_collider_pose() 155 | 156 | start_time = time.time() 157 | traj, success, poses, results = self.motion_plan_to_retract_pose() 158 | computing_time += time.time() - start_time 159 | 160 | self.follow_motion_trajs(traj, gripper_state=0) 161 | print("Reset Phase End") 162 | 163 | log['traj_length'] = self._traj_length.cpu().numpy() 164 | log['computing_time'] = [computing_time / self.num_envs for _ in range(self.num_envs)] 165 | 166 | self.repeat() 167 | log['end_finger_obj_contact'] = self.finger_goal_obj_contact() 168 | print("Eval Phase End") 169 | self.set_default_color() 170 | 171 | return image_to_video(self._solution_video), log 172 | 173 | 174 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/fetch/repeat/fetch_mesh_pyompl_rep.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | import os 4 | import torch 5 | import trimesh 6 | import time 7 | import trimesh.transformations as tr 8 | 9 | from isaacgymenvs.tasks.fetch.fetch_mesh_pyompl import FetchMeshPyompl 10 | from isaacgymenvs.tasks.fetch.fetch_mesh_curobo import image_to_video 11 | 12 | 13 | class FetchMeshPyomplRep(FetchMeshPyompl): 14 | def __init__(self, cfg, rl_device, sim_device, graphics_device_id, 15 | headless, virtual_screen_capture, force_render): 16 | super().__init__(cfg, rl_device, sim_device, graphics_device_id, 17 | headless, virtual_screen_capture, force_render) 18 | 19 | assert self.num_envs == 1 # Buggy Pybullet, only one env at a time 20 | # Multiple Pybullet Server may cause error 21 | 22 | self.num_max_trials = self.cfg["solution"]["num_max_trials"] 23 | 24 | def motion_plan_to_retract_pose(self): 25 | target_pos = [[0.13, 0., 0.7]] 26 | target_quat = [[0., 1., 0., 0.]] 27 | 28 | end_poses = [] 29 | for t in range(len(target_quat)): 30 | pos = target_pos[t] 31 | quat = target_quat[t] 32 | translation = tr.translation_matrix(pos) 33 | rotation = tr.quaternion_matrix(quat) 34 | end_poses.append(translation @ rotation) 35 | end_poses = np.stack(end_poses, axis=0) 36 | 37 | target_poses = [] 38 | for i in range(self.num_envs): 39 | target_poses.append(end_poses) 40 | 41 | return self.motion_gen_to_pose_goalset(target_poses) 42 | 43 | def solve(self): 44 | # set goal obj color 45 | log = {} 46 | 47 | self.set_target_color() 48 | self._solution_video = [] 49 | self._video_frame = 0 50 | computing_time = 0. 51 | 52 | for _ in range(self._init_steps): 53 | self.env_physics_step() 54 | self.post_phy_step() 55 | 56 | for k in range(self.num_max_trials): 57 | 58 | # Sample Good Grasp Pose 59 | #start_time = time.time() 60 | self.update_pyompl_world_collider_pose(attach_goal_obj=False) 61 | grasp_result = self.sample_goal_obj_collision_free_grasp_pose() 62 | #computing_time += time.time() - start_time 63 | 64 | if self.cfg["solution"]["direct_grasp"]: 65 | 66 | start_time = time.time() 67 | traj, success, poses = ( 68 | self.motion_gen_to_grasp_pose(grasp_result['grasp_poses'], mask=grasp_result['grasp_success']) 69 | ) 70 | print("Grasp Plan", success) 71 | log['grasp_plan_success'] = success 72 | computing_time += time.time() - start_time 73 | 74 | self.follow_motion_trajs(traj, gripper_state=0) # 0 means no movement 75 | print("Grasp Phase End") 76 | log['grasp_execute_error'] = self.get_end_effect_error(poses) 77 | else: 78 | start_time = time.time() 79 | traj, success, poses = ( 80 | self.motion_gen_to_grasp_pose(grasp_result['pre_grasp_poses'], mask=grasp_result['grasp_success'])) 81 | print("Pre Grasp Plan", success) 82 | log['pre_grasp_plan_success'] = success 83 | computing_time += time.time() - start_time 84 | 85 | self.follow_motion_trajs(traj, gripper_state=0) # 0 means no movement 86 | print("Pre Grasp Phase End") 87 | log['pre_grasp_execute_error'] = self.get_end_effect_error(poses) 88 | 89 | offset = np.array([0, 0, self.cfg["solution"]["pre_grasp_offset"] * 90 | self.cfg["solution"]["grasp_overshoot_ratio"]]) 91 | self.follow_cartesian_linear_motion(offset, gripper_state=0) 92 | 93 | print("Grasp Phase End") 94 | 95 | self.close_gripper() 96 | log['grasp_finger_obj_contact'] = self.finger_goal_obj_contact() 97 | print("Gripper Close End") 98 | 99 | if self.cfg["solution"]["retract_offset"] > 0: 100 | offset = np.array([0, 0, self.cfg["solution"]["retract_offset"]]) 101 | self.follow_cartesian_linear_motion(offset, gripper_state=-1, eef_frame=False) 102 | log['retract_finger_obj_contact'] = self.finger_goal_obj_contact() 103 | 104 | # Fetch Phase 105 | 106 | self.update_pyompl_world_collider_pose(attach_goal_obj=True) 107 | 108 | start_time = time.time() 109 | traj, success, poses = self.motion_gen_to_free_space(mask=success) 110 | print("Fetch Plan", success) 111 | log['fetch_plan_success'] = success 112 | computing_time += time.time() - start_time 113 | 114 | self.follow_motion_trajs(traj, gripper_state=-1) # 0 means no movement 115 | print("Fetch Phase End") 116 | log['fetch_execute_error'] = self.get_end_effect_error(poses) 117 | 118 | log['num_repetitive_trials'] = [k] 119 | if self.eval()['success'][0] or (not self.eval()['task_repeat'][0]): 120 | break 121 | 122 | self.open_gripper() 123 | self.update_pyompl_world_collider_pose(attach_goal_obj=False) 124 | 125 | start_time = time.time() 126 | traj, success, poses = self.motion_plan_to_retract_pose() 127 | computing_time += time.time() - start_time 128 | 129 | self.follow_motion_trajs(traj, gripper_state=0) 130 | print("Reset Phase End") 131 | 132 | log['traj_length'] = self._traj_length.cpu().numpy() 133 | log['computing_time'] = [computing_time / self.num_envs for _ in range(self.num_envs)] 134 | 135 | self.repeat() 136 | log['end_finger_obj_contact'] = self.finger_goal_obj_contact() 137 | print("Eval Phase End") 138 | self.set_default_color() 139 | 140 | return image_to_video(self._solution_video), log -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/fetch/repeat/fetch_ptd_curobo_cgn_beta_rep.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | import time 4 | from curobo.types.math import Pose 5 | 6 | from curobo.types.robot import JointState, RobotConfig 7 | 8 | from isaacgymenvs.tasks.fetch.fetch_ptd_curobo_cgn_beta import FetchPtdCuroboCGNBeta 9 | from isaacgymenvs.tasks.fetch.fetch_mesh_curobo import image_to_video, create_gripper_marker, plot_trajs 10 | 11 | 12 | class FetchPtdCuroboCGNBetaRep(FetchPtdCuroboCGNBeta): 13 | def __init__(self, cfg, rl_device, sim_device, graphics_device_id, 14 | headless, virtual_screen_capture, force_render): 15 | super().__init__(cfg, rl_device, sim_device, graphics_device_id, 16 | headless, virtual_screen_capture, force_render) 17 | 18 | assert self.num_envs == 1 19 | 20 | self.num_max_trials = self.cfg["solution"]["num_max_trials"] 21 | 22 | state = self.motion_generators[0].compute_kinematics( 23 | JointState.from_position(self.robot_default_dof_pos.to(self.tensor_args.device).view(1, -1)[:, :-2]) 24 | ) 25 | 26 | self.retract_pose = Pose(position=state.ee_pos_seq, quaternion=state.ee_quat_seq).clone() 27 | 28 | """ 29 | Motion Gen 30 | """ 31 | 32 | def motion_plan_to_retract_pose(self): 33 | target_poses = [] 34 | for i in range(self.num_envs): 35 | target_poses.append(self.retract_pose.clone().unsqueeze(dim=0)) 36 | 37 | return self.motion_gen_to_pose_goalset(target_poses) 38 | 39 | """ 40 | Solve 41 | """ 42 | 43 | def solve(self): 44 | log = {} 45 | 46 | # set goal obj color 47 | self.set_target_color() 48 | self._solution_video = [] 49 | self._video_frame = 0 50 | computing_time = 0. 51 | 52 | for _ in range(self._init_steps): 53 | self.env_physics_step() 54 | self.post_phy_step() 55 | 56 | for k in range(self.num_max_trials): 57 | self.update_ptd_motion_gen_world() 58 | 59 | start_time = time.time() 60 | cgn_result, cgn_logs = self.sample_goal_obj_collision_free_grasp_pose() 61 | if self.cgn_log_dir is not None: 62 | np.save(f'{self.cgn_log_dir}/log_{self.get_task_idx()}.npy', cgn_logs) 63 | 64 | traj, success, poses, results = \ 65 | self.motion_gen_to_grasp_pose_ordered(cgn_result['pre_grasp_poses'], lsts=cgn_result['grasp_ordered_lst']) 66 | print("Pre Grasp Plan", success) 67 | log['pre_grasp_plan_success'] = success 68 | computing_time += time.time() - start_time 69 | 70 | self.follow_motion_trajs(traj, gripper_state=0) # 0 means no movement 71 | print("Pre Grasp Phase End") 72 | log['pre_grasp_execute_error'] = self.get_end_effect_error(poses) 73 | 74 | if self.cfg["solution"]["move_offset_method"] == 'motion_planning': 75 | if self.cfg["solution"]["disable_grasp_obj_motion_gen"]: 76 | self.enable_motion_gen_collider(enable_goal_obj=False) 77 | 78 | start_time = time.time() 79 | traj, success, poses, results = self.motion_gen_by_z_offset(z=self.cfg["solution"]["pre_grasp_offset"], 80 | mask=success) 81 | computing_time += time.time() - start_time 82 | 83 | if self.cfg["solution"]["disable_grasp_obj_motion_gen"]: 84 | self.enable_motion_gen_collider(enable_goal_obj=True) 85 | 86 | print("Grasp Plan", success) 87 | log['grasp_plan_success'] = success 88 | 89 | log['grasp_execute_error'] = self.get_end_effect_error(poses) 90 | 91 | self.follow_motion_trajs(traj, gripper_state=0) # 0 means no movement 92 | elif self.cfg["solution"]["move_offset_method"] == 'cartesian_linear': 93 | offset = np.array([0, 0, self.cfg["solution"]["pre_grasp_offset"] * 94 | self.cfg["solution"]["grasp_overshoot_ratio"]]) 95 | self.follow_cartesian_linear_motion(offset, gripper_state=0) 96 | else: 97 | raise NotImplementedError 98 | 99 | print("Grasp Phase End") 100 | 101 | self.close_gripper() 102 | log['grasp_finger_obj_contact'] = self.finger_goal_obj_contact() 103 | print("Gripper Close End") 104 | 105 | if self.cfg["solution"]["retract_offset"] > 0: 106 | offset = np.array([0, 0, self.cfg["solution"]["retract_offset"]]) 107 | self.follow_cartesian_linear_motion(offset, gripper_state=-1, eef_frame=False) 108 | log['retract_finger_obj_contact'] = self.finger_goal_obj_contact() 109 | 110 | if self.cfg["solution"]["update_motion_gen_collider_before_fetch"]: 111 | self.update_ptd_motion_gen_world() 112 | 113 | self.update_ptd_motion_gen_config(attach_goal_obj=True) 114 | 115 | start_time = time.time() 116 | traj, success, poses, results = self.motion_gen_to_free_space(mask=success) 117 | computing_time += time.time() - start_time 118 | 119 | print("Fetch Plan", success) 120 | self.update_ptd_motion_gen_config(attach_goal_obj=False) 121 | log['fetch_plan_success'] = success 122 | 123 | fetch_failure = [] 124 | for r in results: 125 | if r is None: 126 | fetch_failure.append(r) 127 | else: 128 | fetch_failure.append(r.status) 129 | log['fetch_plan_failure'] = fetch_failure 130 | 131 | self.follow_motion_trajs(traj, gripper_state=-1) 132 | print("Fetch Phase End") 133 | 134 | log['fetch_execute_error'] = self.get_end_effect_error(poses) 135 | 136 | log['num_repetitive_trials'] = [k] 137 | if self.eval()['success'][0] or (not self.eval()['task_repeat'][0]): 138 | break 139 | 140 | self.open_gripper() 141 | self.update_ptd_motion_gen_world() 142 | 143 | start_time = time.time() 144 | traj, success, poses, results = self.motion_plan_to_retract_pose() 145 | computing_time += time.time() - start_time 146 | 147 | self.follow_motion_trajs(traj, gripper_state=0) 148 | print("Reset Phase End") 149 | 150 | log['traj_length'] = self._traj_length.cpu().numpy() 151 | log['computing_time'] = [computing_time / self.num_envs for _ in range(self.num_envs)] 152 | 153 | self.repeat() 154 | log['end_finger_obj_contact'] = self.finger_goal_obj_contact() 155 | print("Eval Phase End") 156 | self.set_default_color() 157 | 158 | return image_to_video(self._solution_video), log 159 | 160 | 161 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/fetch/repeat/fetch_ptd_curobo_rep.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | import os 4 | import torch 5 | import time 6 | import trimesh 7 | import heapq 8 | import trimesh.transformations as tr 9 | import pyrender 10 | import os 11 | 12 | from curobo.geom.types import WorldConfig, Cuboid, Mesh 13 | from curobo.types.base import TensorDeviceType 14 | from curobo.types.math import Pose 15 | 16 | from curobo.types.robot import JointState, RobotConfig 17 | 18 | from isaacgym import gymutil, gymtorch, gymapi 19 | from isaacgymenvs.utils.torch_jit_utils import to_torch, get_axis_params, tensor_clamp, \ 20 | tf_vector, tf_combine, quat_mul, quat_conjugate, quat_apply, quat_to_angle_axis, tf_inverse 21 | from isaacgymenvs.tasks.fetch.fetch_ptd_curobo import FetchPtdCurobo 22 | from isaacgymenvs.tasks.fetch.fetch_mesh_curobo import image_to_video, create_gripper_marker, plot_trajs 23 | 24 | 25 | class FetchPtdCuroboRep(FetchPtdCurobo): 26 | def __init__(self, cfg, rl_device, sim_device, graphics_device_id, 27 | headless, virtual_screen_capture, force_render): 28 | super().__init__(cfg, rl_device, sim_device, graphics_device_id, 29 | headless, virtual_screen_capture, force_render) 30 | 31 | assert self.num_envs == 1 32 | 33 | self.num_max_trials = self.cfg["solution"]["num_max_trials"] 34 | 35 | state = self.motion_generators[0].compute_kinematics( 36 | JointState.from_position(self.robot_default_dof_pos.to(self.tensor_args.device).view(1, -1)[:, :-2]) 37 | ) 38 | 39 | self.retract_pose = Pose(position=state.ee_pos_seq, quaternion=state.ee_quat_seq).clone() 40 | 41 | """ 42 | Solver Utils 43 | """ 44 | 45 | def motion_plan_to_retract_pose(self): 46 | target_poses = [] 47 | for i in range(self.num_envs): 48 | target_poses.append(self.retract_pose.clone().unsqueeze(dim=0)) 49 | 50 | return self.motion_gen_to_pose_goalset(target_poses) 51 | 52 | def solve(self): 53 | log = {} 54 | 55 | # set goal obj color 56 | self.set_target_color() 57 | self._solution_video = [] 58 | self._video_frame = 0 59 | computing_time = 0. 60 | 61 | for _ in range(self._init_steps): 62 | self.env_physics_step() 63 | self.post_phy_step() 64 | 65 | for k in range(self.num_max_trials): 66 | self.update_ik_world_collider_pose() 67 | ik_result = self.sample_goal_obj_collision_free_grasp_pose() 68 | ik_success = ik_result['grasp_success'] 69 | 70 | self.update_ptd_motion_gen_world() 71 | 72 | start_time = time.time() 73 | traj, success, poses, results = \ 74 | self.motion_gen_to_grasp_pose(ik_result['pre_grasp_poses'], mask=ik_success) 75 | print("Pre Grasp Plan", success) 76 | log['pre_grasp_plan_success'] = success 77 | computing_time += time.time() - start_time 78 | 79 | self.follow_motion_trajs(traj, gripper_state=0) 80 | log['pre_grasp_execute_error'] = self.get_end_effect_error(poses) # 0 means no movement 81 | print("Pre Grasp Phase End") 82 | 83 | if self.cfg["solution"]["move_offset_method"] == 'motion_planning': 84 | if self.cfg["solution"]["disable_grasp_obj_motion_gen"]: 85 | self.enable_motion_gen_collider(enable_goal_obj=False) 86 | 87 | start_time = time.time() 88 | traj, success, poses, results = self.motion_gen_by_z_offset(z=self.cfg["solution"]["pre_grasp_offset"], 89 | mask=success) 90 | computing_time += time.time() - start_time 91 | 92 | if self.cfg["solution"]["disable_grasp_obj_motion_gen"]: 93 | self.enable_motion_gen_collider(enable_goal_obj=True) 94 | 95 | print("Grasp Plan", success) 96 | log['grasp_plan_success'] = success 97 | 98 | self.follow_motion_trajs(traj, gripper_state=0) 99 | log['grasp_execute_error'] = self.get_end_effect_error(poses)# 0 means no movement 100 | elif self.cfg["solution"]["move_offset_method"] == 'cartesian_linear': 101 | offset = np.array([0, 0, self.cfg["solution"]["pre_grasp_offset"] * 102 | self.cfg["solution"]["grasp_overshoot_ratio"]]) 103 | self.follow_cartesian_linear_motion(offset, gripper_state=0) 104 | else: 105 | raise NotImplementedError 106 | 107 | print("Grasp Phase End") 108 | 109 | self.close_gripper() 110 | log['grasp_finger_obj_contact'] = self.finger_goal_obj_contact() 111 | print("Gripper Close End") 112 | 113 | if self.cfg["solution"]["retract_offset"] > 0: 114 | offset = np.array([0, 0, self.cfg["solution"]["retract_offset"]]) 115 | self.follow_cartesian_linear_motion(offset, gripper_state=-1, eef_frame=False) 116 | log['retract_finger_obj_contact'] = self.finger_goal_obj_contact() 117 | 118 | if self.cfg["solution"]["update_motion_gen_collider_before_fetch"]: 119 | self.update_ptd_motion_gen_world() 120 | 121 | self.update_ptd_motion_gen_config(attach_goal_obj=True) 122 | 123 | start_time = time.time() 124 | traj, success, poses, results = self.motion_gen_to_free_space(mask=success) 125 | computing_time += time.time() - start_time 126 | 127 | print("Fetch Plan", success) 128 | self.update_ptd_motion_gen_config(attach_goal_obj=False) 129 | log['fetch_plan_success'] = success 130 | 131 | fetch_failure = [] 132 | for r in results: 133 | if r is None: 134 | fetch_failure.append(r) 135 | else: 136 | fetch_failure.append(r.status) 137 | log['fetch_plan_failure'] = fetch_failure 138 | 139 | self.follow_motion_trajs(traj, gripper_state=-1) 140 | log['fetch_execute_error'] = self.get_end_effect_error(poses) 141 | print("Fetch Phase End") 142 | 143 | log['num_repetitive_trials'] = [k] 144 | if self.eval()['success'][0] or (not self.eval()['task_repeat'][0]): 145 | break 146 | 147 | self.open_gripper() 148 | self.update_ptd_motion_gen_world() 149 | 150 | start_time = time.time() 151 | traj, success, poses, results = self.motion_plan_to_retract_pose() 152 | computing_time += time.time() - start_time 153 | 154 | self.follow_motion_trajs(traj, gripper_state=0) 155 | print("Reset Phase End") 156 | 157 | log['traj_length'] = self._traj_length.cpu().numpy() 158 | log['computing_time'] = [computing_time / self.num_envs for _ in range(self.num_envs)] 159 | 160 | self.repeat() 161 | log['end_finger_obj_contact'] = self.finger_goal_obj_contact() 162 | print("Eval Phase End") 163 | self.set_default_color() 164 | 165 | return image_to_video(self._solution_video), log 166 | 167 | 168 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/fetch/repeat/fetch_ptd_pyompl_cgn_beta_rep.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | import trimesh.transformations as tr 4 | import time 5 | 6 | from isaacgymenvs.tasks.fetch.fetch_ptd_pyompl_cgn_beta import FetchPtdPyomplCGNBeta 7 | from isaacgymenvs.tasks.fetch.fetch_mesh_curobo import image_to_video, create_gripper_marker, plot_trajs 8 | 9 | 10 | class FetchPtdPyomplCGNBetaRep(FetchPtdPyomplCGNBeta): 11 | def __init__(self, cfg, rl_device, sim_device, graphics_device_id, 12 | headless, virtual_screen_capture, force_render): 13 | super().__init__(cfg, rl_device, sim_device, graphics_device_id, 14 | headless, virtual_screen_capture, force_render) 15 | 16 | assert self.num_envs == 1 # Buggy Pybullet, only one env at a time 17 | 18 | self.num_max_trials = self.cfg["solution"]["num_max_trials"] 19 | 20 | """ 21 | Motion Plan Utils 22 | """ 23 | 24 | def motion_plan_to_retract_pose(self): 25 | target_pos = [[0.13, 0., 0.7]] 26 | target_quat = [[0., 1., 0., 0.]] 27 | 28 | end_poses = [] 29 | for t in range(len(target_quat)): 30 | pos = target_pos[t] 31 | quat = target_quat[t] 32 | translation = tr.translation_matrix(pos) 33 | rotation = tr.quaternion_matrix(quat) 34 | end_poses.append(translation @ rotation) 35 | end_poses = np.stack(end_poses, axis=0) 36 | 37 | target_poses = [] 38 | for i in range(self.num_envs): 39 | target_poses.append(end_poses) 40 | 41 | return self.motion_gen_to_pose_goalset(target_poses) 42 | 43 | """ 44 | Solve 45 | """ 46 | 47 | def solve(self): 48 | # set goal obj color 49 | log = {} 50 | 51 | self.set_target_color() 52 | self._solution_video = [] 53 | self._video_frame = 0 54 | computing_time = 0. 55 | 56 | for _ in range(self._init_steps): 57 | self.env_physics_step() 58 | self.post_phy_step() 59 | 60 | # Sample Good Grasp Pose 61 | for k in range(self.num_max_trials): 62 | self.update_ptd_motion_gen_world(attach_goal_obj=False) 63 | 64 | start_time = time.time() 65 | cgn_result, cgn_logs = self.sample_goal_obj_collision_free_grasp_pose() 66 | if self.cgn_log_dir is not None: 67 | np.save(f'{self.cgn_log_dir}/log_{self.get_task_idx()}.npy', cgn_logs) 68 | 69 | traj, success, poses = self.motion_gen_to_grasp_pose_ordered(cgn_result['pre_grasp_poses'], 70 | lsts=cgn_result['grasp_ordered_lst']) 71 | print("Pre Grasp Plan", success) 72 | log['pre_grasp_plan_success'] = success 73 | computing_time += time.time() - start_time 74 | 75 | if traj is not None: 76 | self.follow_motion_trajs(traj, gripper_state=0) # 0 means no movement 77 | print("Pre Grasp Phase End") 78 | log['pre_grasp_execute_error'] = self.get_end_effect_error(poses) 79 | 80 | offset = np.array([0, 0, self.cfg["solution"]["pre_grasp_offset"] * 81 | self.cfg["solution"]["grasp_overshoot_ratio"]]) 82 | self.follow_cartesian_linear_motion(offset, gripper_state=0) 83 | 84 | print("Grasp Phase End") 85 | 86 | self.close_gripper() 87 | log['grasp_finger_obj_contact'] = self.finger_goal_obj_contact() 88 | print("Gripper Close End") 89 | 90 | if self.cfg["solution"]["retract_offset"] > 0: 91 | offset = np.array([0, 0, self.cfg["solution"]["retract_offset"]]) 92 | self.follow_cartesian_linear_motion(offset, gripper_state=-1, eef_frame=False) 93 | log['retract_finger_obj_contact'] = self.finger_goal_obj_contact() 94 | 95 | # Fetch Phase 96 | self.update_ptd_motion_gen_world(attach_goal_obj=True) 97 | 98 | start_time = time.time() 99 | traj, success, poses = self.motion_gen_to_free_space(mask=success) 100 | print("Fetch Plan", success) 101 | log['fetch_plan_success'] = success 102 | computing_time += time.time() - start_time 103 | 104 | self.follow_motion_trajs(traj, gripper_state=-1) # 0 means no movement 105 | print("Fetch Phase End") 106 | log['fetch_execute_error'] = self.get_end_effect_error(poses) 107 | 108 | log['num_repetitive_trials'] = [k] 109 | if self.eval()['success'][0] or (not self.eval()['task_repeat'][0]): 110 | break 111 | 112 | self.open_gripper() 113 | self.update_ptd_motion_gen_world(attach_goal_obj=False) 114 | 115 | start_time = time.time() 116 | traj, success, poses = self.motion_plan_to_retract_pose() 117 | computing_time += time.time() - start_time 118 | 119 | self.follow_motion_trajs(traj, gripper_state=0) 120 | print("Reset Phase End") 121 | 122 | log['traj_length'] = self._traj_length.cpu().numpy() 123 | log['computing_time'] = [computing_time / self.num_envs for _ in range(self.num_envs)] 124 | 125 | self.repeat() 126 | log['end_finger_obj_contact'] = self.finger_goal_obj_contact() 127 | print("Eval Phase End") 128 | self.set_default_color() 129 | 130 | return image_to_video(self._solution_video), log -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/fetch/repeat/fetch_ptd_pyompl_rep.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | import os 4 | import torch 5 | import trimesh 6 | import trimesh.transformations as tr 7 | import time 8 | 9 | from isaacgymenvs.tasks.fetch.utils.pyompl_utils import PyBulletOMPLPCD 10 | from curobo.types.math import Pose 11 | 12 | 13 | from isaacgymenvs.utils.torch_jit_utils import to_torch, get_axis_params, tensor_clamp, \ 14 | tf_vector, tf_combine, quat_mul, quat_conjugate, quat_apply, quat_to_angle_axis, tf_inverse 15 | from isaacgymenvs.tasks.fetch.fetch_ptd_pyompl import FetchPtdPyompl 16 | from isaacgymenvs.tasks.fetch.fetch_mesh_curobo import image_to_video, create_gripper_marker, plot_trajs 17 | 18 | 19 | class FetchPtdPyomplRep(FetchPtdPyompl): 20 | def __init__(self, cfg, rl_device, sim_device, graphics_device_id, 21 | headless, virtual_screen_capture, force_render): 22 | super().__init__(cfg, rl_device, sim_device, graphics_device_id, 23 | headless, virtual_screen_capture, force_render) 24 | 25 | assert self.num_envs == 1 # Buggy Pybullet, only one env at a time 26 | # Multiple Pybullet Server may cause error 27 | 28 | self.num_max_trials = self.cfg["solution"]["num_max_trials"] 29 | 30 | def motion_plan_to_retract_pose(self): 31 | target_pos = [[0.13, 0., 0.7]] 32 | target_quat = [[0., 1., 0., 0.]] 33 | 34 | end_poses = [] 35 | for t in range(len(target_quat)): 36 | pos = target_pos[t] 37 | quat = target_quat[t] 38 | translation = tr.translation_matrix(pos) 39 | rotation = tr.quaternion_matrix(quat) 40 | end_poses.append(translation @ rotation) 41 | end_poses = np.stack(end_poses, axis=0) 42 | 43 | target_poses = [] 44 | for i in range(self.num_envs): 45 | target_poses.append(end_poses) 46 | 47 | return self.motion_gen_to_pose_goalset(target_poses) 48 | 49 | def solve(self): 50 | # set goal obj color 51 | log = {} 52 | 53 | self.set_target_color() 54 | self._solution_video = [] 55 | self._video_frame = 0 56 | computing_time = 0. 57 | 58 | for _ in range(self._init_steps): 59 | self.env_physics_step() 60 | self.post_phy_step() 61 | 62 | for k in range(self.num_max_trials): 63 | # Sample Good Grasp Pose 64 | self.update_ptd_motion_gen_world(attach_goal_obj=False) 65 | grasp_result = self.sample_goal_obj_collision_free_grasp_pose() 66 | 67 | start_time = time.time() 68 | traj, success, poses = ( 69 | self.motion_gen_to_grasp_pose(grasp_result['pre_grasp_poses'], mask=grasp_result['grasp_success'])) 70 | print("Pre Grasp Plan", success) 71 | log['pre_grasp_plan_success'] = success 72 | computing_time += time.time() - start_time 73 | 74 | self.follow_motion_trajs(traj, gripper_state=0) # 0 means no movement 75 | print("Pre Grasp Phase End") 76 | log['pre_grasp_execute_error'] = self.get_end_effect_error(poses) 77 | 78 | if self.cfg["solution"]["move_offset_method"] == 'motion_planning': 79 | if self.cfg["solution"]["disable_grasp_obj_motion_gen"]: 80 | self.update_ptd_motion_gen_world(disable_goal_obj=True, attach_goal_obj=False) 81 | 82 | raise NotImplementedError 83 | # Todo: Update this with Curobo 84 | 85 | elif self.cfg["solution"]["move_offset_method"] == 'cartesian_linear': 86 | offset = np.array([0, 0, self.cfg["solution"]["pre_grasp_offset"] * self.cfg["solution"]["grasp_overshoot_ratio"]]) 87 | self.follow_cartesian_linear_motion(offset, gripper_state=0) 88 | else: 89 | raise NotImplementedError 90 | 91 | print("Grasp Phase End") 92 | 93 | self.close_gripper() 94 | log['grasp_finger_obj_contact'] = self.finger_goal_obj_contact() 95 | print("Gripper Close End") 96 | 97 | if self.cfg["solution"]["retract_offset"] > 0: 98 | offset = np.array([0, 0, self.cfg["solution"]["retract_offset"]]) 99 | self.follow_cartesian_linear_motion(offset, gripper_state=-1, eef_frame=False) 100 | log['retract_finger_obj_contact'] = self.finger_goal_obj_contact() 101 | 102 | # Fetch Phase 103 | self.update_ptd_motion_gen_world(attach_goal_obj=True) 104 | 105 | start_time = time.time() 106 | traj, success, poses = self.motion_gen_to_free_space(mask=success) 107 | print("Fetch Plan", success) 108 | log['fetch_plan_success'] = success 109 | computing_time += time.time() - start_time 110 | 111 | self.follow_motion_trajs(traj, gripper_state=-1) # 0 means no movement 112 | print("Fetch Phase End") 113 | log['fetch_grasp_execute_error'] = self.get_end_effect_error(poses) 114 | 115 | log['num_repetitive_trials'] = [k] 116 | if self.eval()['success'][0] or (not self.eval()['task_repeat'][0]): 117 | break 118 | 119 | self.open_gripper() 120 | self.update_ptd_motion_gen_world(attach_goal_obj=False) 121 | 122 | start_time = time.time() 123 | traj, success, poses = self.motion_plan_to_retract_pose() 124 | computing_time += time.time() - start_time 125 | 126 | self.follow_motion_trajs(traj, gripper_state=0) 127 | print("Reset Phase End") 128 | 129 | log['traj_length'] = self._traj_length.cpu().numpy() 130 | log['computing_time'] = [computing_time / self.num_envs for _ in range(self.num_envs)] 131 | 132 | self.repeat() 133 | log['end_finger_obj_contact'] = self.finger_goal_obj_contact() 134 | print("Eval Phase End") 135 | self.set_default_color() 136 | 137 | return image_to_video(self._solution_video), log -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/fetch/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/isaacgymenvs/tasks/fetch/utils/__init__.py -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/fetch/utils/contact_graspnet_utils.py: -------------------------------------------------------------------------------- 1 | 2 | import os 3 | import sys 4 | 5 | import numpy as np 6 | sys.path.append('../third_party/contact_graspnet_pytorch') 7 | from contact_graspnet_pytorch.contact_grasp_estimator import GraspEstimator 8 | from contact_graspnet_pytorch import config_utils 9 | 10 | from contact_graspnet_pytorch.visualization_utils_o3d import visualize_grasps, show_image 11 | from contact_graspnet_pytorch.checkpoints import CheckpointIO 12 | from contact_graspnet_pytorch.data import load_available_input_data 13 | 14 | CGN_PATH = f'../third_party/contact_graspnet_pytorch' 15 | 16 | 17 | class ContactGraspNet(object): 18 | def __init__(self, root_dir, ckpt_dir, forward_passes): 19 | global_config = config_utils.load_config(ckpt_dir, batch_size=forward_passes, arg_configs=[]) 20 | grasp_estimator = GraspEstimator(global_config) 21 | 22 | model_checkpoint_dir = os.path.join(ckpt_dir, 'checkpoints') 23 | checkpoint_io = CheckpointIO(checkpoint_dir=model_checkpoint_dir, model=grasp_estimator.model) 24 | try: 25 | load_dict = checkpoint_io.load('model.pt') 26 | except FileExistsError: 27 | print('No model checkpoint found') 28 | load_dict = {} 29 | 30 | self.grasp_estimator = grasp_estimator 31 | self.root_path = root_dir 32 | self.forward_passes = forward_passes 33 | self.init_inference() 34 | 35 | def init_inference(self): 36 | # initialization with an example 37 | segmap, rgb, depth, cam_K, _, _ = load_available_input_data(f'{self.root_path}/test_data/0.npy', K=None) 38 | self.single_depth_inference(rgb, depth, segmap, cam_K, local_regions=True, 39 | skip_border_objects=True, filter_grasps=True, 40 | z_range=[0.5, 2.5], forward_passes=self.forward_passes, 41 | visualization=False) 42 | 43 | def single_depth_inference(self, rgb, depth, segmap, cam_K, local_regions=False, 44 | skip_border_objects=False, filter_grasps=False, z_range=[0.2, 2.5], 45 | forward_passes=1, visualization=False): 46 | if segmap is None: 47 | segmap = np.zeros_like(depth) 48 | 49 | print('Converting depth to point cloud(s)...') 50 | pc_full, pc_segments, pc_colors = self.grasp_estimator.extract_point_clouds(depth, cam_K, segmap=segmap, rgb=rgb, 51 | skip_border_objects=skip_border_objects, 52 | z_range=z_range) 53 | 54 | print('Generating Grasps...') 55 | pred_grasps_cam, scores, contact_pts, _, _ = self.grasp_estimator.predict_scene_grasps(pc_full, 56 | pc_segments=pc_segments, 57 | local_regions=local_regions, 58 | filter_grasps=filter_grasps, 59 | forward_passes=forward_passes, 60 | convert_cam_coords=True) 61 | 62 | # Visualize results 63 | if visualization: 64 | # show_image(rgb, segmap) 65 | # scene = trimesh.Scene() 66 | # axis = trimesh.creation.axis() 67 | # scene.add_geometry(axis) 68 | # for k, v in input_pts.items(): 69 | # pc = trimesh.points.PointCloud(v, colors=np.array([[0, 0, 200, 100]]).repeat(v.shape[0], 0)) 70 | # scene.add_geometry(pc) 71 | # scene.show() 72 | visualize_grasps(pc_full, pred_grasps_cam, scores, plot_opencv_cam=True, pc_colors=pc_colors) 73 | 74 | return pred_grasps_cam, scores, contact_pts, pc_full, pc_colors 75 | 76 | 77 | def single_ptd_inference(self, point_clouds, local_regions=False, filter_grasps=False, forward_passes=1): 78 | res, logs = [], [] 79 | for ptc in point_clouds: 80 | pc_full = ptc['pc_full'] 81 | pc_segments = {1: ptc['pc_obj']} 82 | 83 | if len(ptc['pc_obj']) < 1: 84 | res.append({ 85 | 'grasp_poses': {1: []}, 86 | 'scores': {1: []}, 87 | 'contact': {1: []}, 88 | 'pc_full': {1: pc_full}, 89 | 'pc_input': {1: []}, 90 | 'cam_idx': {1: ptc['cam_idx']}, 91 | 'cam_pose': {1: ptc['cam_pose']} 92 | }) 93 | continue 94 | 95 | pred_grasps_cam, scores, contact_pts, _, input_pts = ( 96 | self.grasp_estimator.predict_scene_grasps(pc_full, pc_segments=pc_segments, 97 | local_regions=local_regions, 98 | filter_grasps=filter_grasps, 99 | forward_passes=forward_passes, 100 | convert_cam_coords=False)) 101 | 102 | res.append({ 103 | 'grasp_poses': pred_grasps_cam, 104 | 'scores': scores, 105 | 'contact': contact_pts, 106 | 'pc_full': pc_full, 107 | 'pc_input': input_pts, 108 | 'cam_idx': ptc['cam_idx'], 109 | 'cam_pose': ptc['cam_pose'] 110 | }) 111 | 112 | return res 113 | 114 | 115 | if __name__ == '__main__': 116 | net = ContactGraspNet('./checkpoints/contact_graspnet', 1) -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/fetch/utils/imit_utils.py: -------------------------------------------------------------------------------- 1 | 2 | from e2e_imit.algo.bc_mlp import PTD_BC_MLPGaussian, PTD_BC_MLPGaussian_ACT 3 | from e2e_imit.algo.bc_transformer import PTD_BC_TransformerGMM, PTD_BC_TransformerGMM_ACT 4 | 5 | import imageio.v3 as iio 6 | from omegaconf import OmegaConf 7 | from collections import OrderedDict 8 | 9 | 10 | def load_ckpt_config(path): 11 | model_path = f'{path}/model.pth' 12 | config_path = f'{path}/config.yaml' 13 | config = OmegaConf.load(config_path) 14 | 15 | config["train"]["ckpt_path"] = model_path 16 | config["train"]["use_ddp"] = False 17 | 18 | print(config) 19 | return config 20 | 21 | 22 | def get_obs_shape(config): 23 | obs_shape = OrderedDict({ 24 | "q": (9,), 25 | "eef_pos": (3,), 26 | "eef_quat": (4,), 27 | "rigid_pos": (11, 3), 28 | "rigid_quat": (11, 4), 29 | "visual": { 30 | 'scene': (config["algo"]["obs_shape"]['num_scene_points'], 3), 31 | 'goal': (config["algo"]["obs_shape"]['num_goal_points'], 3), 32 | 'robot': (config["algo"]["obs_shape"]['num_robot_points'], 3) 33 | } 34 | }) 35 | if config["algo"]["two_phase"]: 36 | obs_shape['phase_index'] = (2,) 37 | 38 | return obs_shape 39 | 40 | 41 | def get_action_params(config): 42 | action_params = config["dataset"]["action_params"] 43 | if config["dataset"]["action_type"] == 'joint': 44 | return { 45 | 'shape': (8,), 46 | 'type': 'joint', 47 | 'scale': action_params['dof'] * config["dataset"]["frame_skip"] * action_params['clip_std_scale'] 48 | } 49 | elif config["dataset"]["action_type"] == 'osc': 50 | return { 51 | 'shape': (7,), 52 | 'type': 'osc', 53 | 'scale': { 54 | 'pos': action_params['eef_pos'] * config["dataset"]["frame_skip"] * action_params['clip_std_scale'], 55 | 'angle': action_params['eef_angle'] * config["dataset"]["frame_skip"] * action_params['clip_std_scale'] 56 | } 57 | } 58 | else: 59 | raise NotImplementedError 60 | 61 | 62 | def load_imitation_algo(ckpt_path): 63 | if not ckpt_path is None: 64 | config = load_ckpt_config(ckpt_path) 65 | else: 66 | raise NotImplementedError 67 | 68 | if config.algo.model_type == 'MLP_Gaussian': 69 | algo = PTD_BC_MLPGaussian( 70 | algo_config=config.algo, 71 | global_config=config, 72 | obs_key_shapes=get_obs_shape(config), 73 | ac_params=get_action_params(config), 74 | device_infos=[0], 75 | ckpt_path=None # no ckpt saving 76 | ) 77 | elif config.algo.model_type == 'MLP_Gaussian_ACT': 78 | algo = PTD_BC_MLPGaussian_ACT( 79 | algo_config=config.algo, 80 | global_config=config, 81 | obs_key_shapes=get_obs_shape(config), 82 | ac_params=get_action_params(config), 83 | device_infos=[0], 84 | ckpt_path=None 85 | ) 86 | elif config.algo.model_type == 'Transformer_GMM': 87 | config["algo"]["transformer"]["context_length"] = config.dataset.seq_length 88 | algo = PTD_BC_TransformerGMM( 89 | algo_config=config.algo, 90 | global_config=config, 91 | obs_key_shapes=get_obs_shape(config), 92 | ac_params=get_action_params(config), 93 | device_infos=[0], 94 | ckpt_path=None 95 | ) 96 | 97 | elif config.algo.model_type == 'Transformer_GMM_ACT': 98 | config["algo"]["transformer"]["context_length"] = config.dataset.seq_length 99 | algo = PTD_BC_TransformerGMM_ACT( 100 | algo_config=config.algo, 101 | global_config=config, 102 | obs_key_shapes=get_obs_shape(config), 103 | ac_params=get_action_params(config), 104 | device_infos=[0], 105 | ckpt_path=None 106 | ) 107 | else: 108 | raise NotImplementedError 109 | 110 | return algo 111 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/tasks/fetch/utils/scene_seg_filter.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | import os 4 | import torch 5 | import imageio 6 | import trimesh.transformations as tra 7 | 8 | from isaacgym import gymutil, gymtorch, gymapi 9 | from isaacgymenvs.tasks.fetch.fetch_base import FetchBase 10 | from isaacgymenvs.tasks.fetch.utils.load_utils import SCENE_PATH 11 | 12 | 13 | class FetchCheck(FetchBase): 14 | def __init__(self, cfg, rl_device, sim_device, graphics_device_id, 15 | headless, virtual_screen_capture, force_render): 16 | super().__init__(cfg, rl_device, sim_device, graphics_device_id, 17 | headless, virtual_screen_capture, force_render) 18 | 19 | self.seg_checks = [] 20 | 21 | def step(self, actions=None): 22 | # set goal obj color 23 | for i, env_ptr in enumerate(self.envs): 24 | self.gym.set_rigid_body_color(env_ptr, 25 | self.objects[i][self.task_obj_index[i][self._task_idx].cpu()], 26 | 0, gymapi.MESH_VISUAL, self.task_obj_color) 27 | 28 | for _ in range(self.cfg["solution"]["init_steps"]): 29 | self.env_physics_step() 30 | self.post_phy_step() 31 | 32 | rgb, seg = self.get_camera_image(rgb=True, seg=True) 33 | self.seg_checks.append(self.check_image_seg(seg)) 34 | self.log_camera_view_image(rgb) 35 | 36 | # set to default color 37 | for i, env_ptr in enumerate(self.envs): 38 | self.gym.set_rigid_body_color(env_ptr, 39 | self.objects[i][self.task_obj_index[i][self._task_idx].cpu()], 40 | 0, gymapi.MESH_VISUAL, self.default_obj_color) 41 | 42 | def check_image_seg(self, render_seg_obs_buf): 43 | seg_bit = [] 44 | for i, env_ptr in enumerate(self.envs): 45 | seg_obs_buf = render_seg_obs_buf[i] 46 | for j in range(len(seg_obs_buf)-1): 47 | seg_image = seg_obs_buf[j] 48 | obj_seg_idx = self.task_obj_index[i].cpu().numpy()[self._task_idx] + 4 49 | pixels = (seg_image == obj_seg_idx).astype(np.int32).sum() 50 | seg_bit.append(pixels > 500) 51 | 52 | return seg_bit 53 | 54 | def log_camera_view_image(self, render_rgb_obs_buf): 55 | for i, images in enumerate(render_rgb_obs_buf): 56 | if not os.path.exists(f'{SCENE_PATH}/{self.scene_config_path[i]}/video'): 57 | os.makedirs(f'{SCENE_PATH}/{self.scene_config_path[i]}/video') 58 | for j, img in enumerate(images): 59 | imageio.imwrite(f'{SCENE_PATH}/{self.scene_config_path[i]}/video/env_{i}_{self._task_idx}_{j}.png', img) 60 | 61 | def check_all_task_configs(self): 62 | assert self.num_envs == 1 63 | for idx in range(self.task_obj_index[0].shape[0]): 64 | self.reset_task(idx) 65 | self.step(None) 66 | 67 | return self.seg_checks 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/princeton-vl/FetchBench-CORL2024/2ed02606aff62372e842d6238517ebc248500da6/InfiniGym/isaacgymenvs/utils/__init__.py -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/utils/reformat.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2018-2023, NVIDIA Corporation 2 | # All rights reserved. 3 | # 4 | # Redistribution and use in source and binary forms, with or without 5 | # modification, are permitted provided that the following conditions are met: 6 | # 7 | # 1. Redistributions of source code must retain the above copyright notice, this 8 | # list of conditions and the following disclaimer. 9 | # 10 | # 2. Redistributions in binary form must reproduce the above copyright notice, 11 | # this list of conditions and the following disclaimer in the documentation 12 | # and/or other materials provided with the distribution. 13 | # 14 | # 3. Neither the name of the copyright holder nor the names of its 15 | # contributors may be used to endorse or promote products derived from 16 | # this software without specific prior written permission. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 22 | # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 | # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 | # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 25 | # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26 | # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 | # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | 29 | from omegaconf import DictConfig, OmegaConf 30 | from typing import Dict 31 | 32 | def omegaconf_to_dict(d: DictConfig)->Dict: 33 | """Converts an omegaconf DictConfig to a python Dict, respecting variable interpolation.""" 34 | ret = {} 35 | for k, v in d.items(): 36 | if isinstance(v, DictConfig): 37 | ret[k] = omegaconf_to_dict(v) 38 | else: 39 | ret[k] = v 40 | return ret 41 | 42 | def print_dict(val, nesting: int = -4, start: bool = True): 43 | """Outputs a nested dictionory.""" 44 | if type(val) == dict: 45 | if not start: 46 | print('') 47 | nesting += 4 48 | for k in val: 49 | print(nesting * ' ', end='') 50 | print(k, end=': ') 51 | print_dict(val[k], nesting, start=False) 52 | else: 53 | print(val) 54 | 55 | # EOF 56 | -------------------------------------------------------------------------------- /InfiniGym/isaacgymenvs/utils/utils.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2018-2023, NVIDIA Corporation 2 | # All rights reserved. 3 | # 4 | # Redistribution and use in source and binary forms, with or without 5 | # modification, are permitted provided that the following conditions are met: 6 | # 7 | # 1. Redistributions of source code must retain the above copyright notice, this 8 | # list of conditions and the following disclaimer. 9 | # 10 | # 2. Redistributions in binary form must reproduce the above copyright notice, 11 | # this list of conditions and the following disclaimer in the documentation 12 | # and/or other materials provided with the distribution. 13 | # 14 | # 3. Neither the name of the copyright holder nor the names of its 15 | # contributors may be used to endorse or promote products derived from 16 | # this software without specific prior written permission. 17 | # 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 22 | # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 | # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 | # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 25 | # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26 | # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 | # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | 29 | # python 30 | #import pwd 31 | import getpass 32 | import tempfile 33 | import time 34 | from collections import OrderedDict 35 | from os.path import join 36 | 37 | import numpy as np 38 | import torch 39 | import random 40 | import os 41 | 42 | 43 | def retry(times, exceptions): 44 | """ 45 | Retry Decorator https://stackoverflow.com/a/64030200/1645784 46 | Retries the wrapped function/method `times` times if the exceptions listed 47 | in ``exceptions`` are thrown 48 | :param times: The number of times to repeat the wrapped function/method 49 | :type times: Int 50 | :param exceptions: Lists of exceptions that trigger a retry attempt 51 | :type exceptions: Tuple of Exceptions 52 | """ 53 | def decorator(func): 54 | def newfn(*args, **kwargs): 55 | attempt = 0 56 | while attempt < times: 57 | try: 58 | return func(*args, **kwargs) 59 | except exceptions: 60 | print(f'Exception thrown when attempting to run {func}, attempt {attempt} out of {times}') 61 | time.sleep(min(2 ** attempt, 30)) 62 | attempt += 1 63 | 64 | return func(*args, **kwargs) 65 | return newfn 66 | return decorator 67 | 68 | 69 | def flatten_dict(d, prefix='', separator='.'): 70 | res = dict() 71 | for key, value in d.items(): 72 | if isinstance(value, (dict, OrderedDict)): 73 | res.update(flatten_dict(value, prefix + key + separator, separator)) 74 | else: 75 | res[prefix + key] = value 76 | 77 | return res 78 | 79 | 80 | def set_np_formatting(): 81 | """ formats numpy print """ 82 | np.set_printoptions(edgeitems=30, infstr='inf', 83 | linewidth=4000, nanstr='nan', precision=2, 84 | suppress=False, threshold=10000, formatter=None) 85 | 86 | 87 | def set_seed(seed, torch_deterministic=False, rank=0): 88 | """ set seed across modules """ 89 | if seed == -1 and torch_deterministic: 90 | seed = 42 + rank 91 | elif seed == -1: 92 | seed = np.random.randint(0, 10000) 93 | else: 94 | seed = seed + rank 95 | 96 | print("Setting seed: {}".format(seed)) 97 | 98 | random.seed(seed) 99 | np.random.seed(seed) 100 | torch.manual_seed(seed) 101 | os.environ['PYTHONHASHSEED'] = str(seed) 102 | torch.cuda.manual_seed(seed) 103 | torch.cuda.manual_seed_all(seed) 104 | 105 | if torch_deterministic: 106 | # refer to https://docs.nvidia.com/cuda/cublas/index.html#cublasApi_reproducibility 107 | os.environ['CUBLAS_WORKSPACE_CONFIG'] = ':4096:8' 108 | torch.backends.cudnn.benchmark = False 109 | torch.backends.cudnn.deterministic = True 110 | torch.use_deterministic_algorithms(True) 111 | else: 112 | torch.backends.cudnn.benchmark = True 113 | torch.backends.cudnn.deterministic = False 114 | 115 | return seed 116 | 117 | def nested_dict_set_attr(d, key, val): 118 | pre, _, post = key.partition('.') 119 | if post: 120 | nested_dict_set_attr(d[pre], post, val) 121 | else: 122 | d[key] = val 123 | 124 | def nested_dict_get_attr(d, key): 125 | pre, _, post = key.partition('.') 126 | if post: 127 | return nested_dict_get_attr(d[pre], post) 128 | else: 129 | return d[key] 130 | 131 | def ensure_dir_exists(path): 132 | if not os.path.exists(path): 133 | os.makedirs(path) 134 | return path 135 | 136 | 137 | def safe_ensure_dir_exists(path): 138 | """Should be safer in multi-treaded environment.""" 139 | try: 140 | return ensure_dir_exists(path) 141 | except FileExistsError: 142 | return path 143 | 144 | 145 | def get_username(): 146 | uid = os.getuid() 147 | try: 148 | return getpass.getuser() 149 | except KeyError: 150 | # worst case scenario - let's just use uid 151 | return str(uid) 152 | 153 | 154 | def project_tmp_dir(): 155 | tmp_dir_name = f'ige_{get_username()}' 156 | return safe_ensure_dir_exists(join(tempfile.gettempdir(), tmp_dir_name)) 157 | 158 | # EOF 159 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2024, Princeton Vision & Learning Lab 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright notice, 12 | this list of conditions and the following disclaimer in the documentation 13 | and/or other materials provided with the distribution. 14 | 15 | 3. Neither the name of the copyright holder nor the names of its 16 | contributors may be used to endorse or promote products derived from 17 | this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 23 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 25 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 26 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FetchBench Benchmark Environments 2 | 3 | 4 | ## About this repository 5 | 6 | This repository contains Isaac-Gym environments for the FetchBench benchmark (https://arxiv.org/abs/2406.11793) . 7 | 8 | To clone the project 9 | 10 | ``` 11 | git clone --recursive git@github.com:princeton-vl/FetchBench-CORL2024.git 12 | ``` 13 | 14 | 15 | ## 1. Installation 16 | 17 | Please follow the steps below to perform the installation: 18 | 19 | ### Create Virtual Env 20 | 21 | We suggest using python=3.8 and numpy=1.23.5. 22 | 23 | ``` 24 | conda create -n FetchBench python=3.8 numpy=1.23.5 25 | conda activate FetchBench 26 | ``` 27 | 28 | ### Install Pytorch 29 | 30 | We suggest using pytorch=1.13.0. Please ref: https://pytorch.org/get-started/previous-versions/ . 31 | 32 | ``` 33 | conda install pytorch==1.13.0 torchvision==0.14.0 torchaudio==0.13.0 pytorch-cuda=11.7 -c pytorch -c nvidia 34 | ``` 35 | 36 | ### Install Python Dependencies 37 | 38 | ``` 39 | pip install -r requirement.txt 40 | ``` 41 | 42 | ### Download Assets 43 | 44 | Please download environment asset (asset_release.zip) from https://drive.google.com/file/d/1DJwa6lDaGN5_NhjL7liOBOGBWRJHowyB/view?usp=sharing. 45 | 46 | The assets include procedural assets generated from Infinigen (https://github.com/princeton-vl/infinigen) and third-party asset from Acronym dataset (https://github.com/NVlabs/acronym, The dataset is released under CC BY-NC 4.0.). 47 | 48 | ### Install Thirdy-party Packages 49 | 50 | Download third_party files (3rd_parties.zip) from https://drive.google.com/file/d/1LbtApHYUcOByw5odPebwcUG71J_tolgy/view?usp=sharing and put it under FetchBench/ . The packages under thirdy_party contain third-party codes from the following sources. 51 | 52 | #### Install Isaac-Gym 53 | 54 | We provide a copy of IsaacGym 4.0.0 (https://developer.nvidia.com/isaac-gym/download). 55 | 56 | ``` 57 | cd third_party/isaac-gym/python 58 | pip install -e . 59 | ``` 60 | 61 | #### Install Curobo 62 | 63 | We provide an adapted version of CuRobo 0.6.2 (https://curobo.org/). 64 | 65 | ``` 66 | cd third_party/curobo 67 | pip install -e . --no-build-isolation 68 | ``` 69 | 70 | For cuda version mismatch issue, one can install the cudatoolkit-dev as follows 71 | 72 | ``` 73 | conda install conda-forge::cudatoolkit-dev 74 | ``` 75 | 76 | #### (Optional) Install Contact-GraspNet-Pytorch 77 | 78 | If you want to run methods using contact-graspnet, we provide a copy of contact-graspnet-pytorch (https://github.com/elchun/contact_graspnet_pytorch). 79 | 80 | ``` 81 | cd third_party/contact_graspnet_pytorch 82 | pip install -e . 83 | ``` 84 | 85 | #### (Optional) Install OMPL Packages 86 | 87 | If you want to run methods using ompl motion planning packages, please follow the step in (https://github.com/lyfkyle/pybullet_ompl?tab=readme-ov-file), and add the ompl python-bindings to the conda environment. 88 | 89 | #### (Optional) Install Cabinet and SceneCollisionNet 90 | 91 | If you want to run methods using cabinet, we provide a copy of scenecollisionnet (https://github.com/NVlabs/SceneCollisionNet) and cabinet (https://github.com/NVlabs/cabi_net). 92 | 93 | ``` 94 | conda install pytorch-scatter -c pyg 95 | cd third_party/SceneCollisionNet 96 | pip install -e . 97 | cd third_party/cabinet 98 | pip install -e . 99 | cd third_party/cabinet/pointnet2 100 | pip install -e . 101 | ``` 102 | 103 | #### (Optional) Download Imitation Learning Models 104 | 105 | If you want to run imitation learning models, please download the checkpoints (imit_ckpts.zip) from (https://drive.google.com/file/d/1wN9rDux3xXzcazWpbtYOi0Pe_240eDyu/view?usp=sharing). 106 | 107 | #### FAQ: 108 | 109 | 1. What if I want to test some baselines but do not want to install other additional packages, e.g., OMPL? 110 | 111 | One can modify the code in InfiniGym/isaacgymenvs/tasks/__init__.py to comment out the corresponding methods' import to prevent explicitly loading these uninstalled packages. For example, if one does not install OMPL python-bindings, one should comment out all methods with Pyompl keywords. In this way, one can still test other methods with cabinet or contact-graspnet-pytorch. 112 | 113 | ## 2. Run 114 | 115 | 116 | ### Add Env variables. 117 | 118 | Please add the ASSET_PATH environment variable to specify the path to the asset directory. 119 | 120 | ``` 121 | export ASSET_PATH=/path/to/the/assets 122 | ``` 123 | 124 | ### Minimal installation Test 125 | 126 | For minimal installation of isaacgym and curobo, one can run: 127 | 128 | ``` 129 | cd InfiniGym 130 | 131 | python isaacgymenvs/eval.py task=FetchMeshCurobo scene=benchmark_eval/RigidObjDesk_0 132 | ``` 133 | ### Benchmark Test 134 | 135 | The overall command to test each method is 136 | 137 | ``` 138 | python isaacgymenvs/eval.py task=${METHOD} scene=bechmark_eval/${TASK} task.solution.XXX=YYY (Overwrite configs)... 139 | ``` 140 | 141 | The list of \${METHOD} is shown in isaacgymenvs/config/task and the list of benchmark \${TASK} are shown in isaacgymenvs/config/scene/benchmark_eval . 142 | 143 | To be specific, to run the imitation learning models with a specific checkpoint, run: 144 | 145 | ``` 146 | python isaacgymenvs/eval.py task=FetchPtdImit${TYPE} scene=${TASK} task.solution.ckpt_path=/path/to/checkpoint/folder 147 | ``` 148 | where ${TYPE} in \{E2E, TwoStage, CuroboCGN\}. 149 | 150 | ### Reference Code 151 | 152 | 1. We provide reference code to generate infinite training tasks in InfiniGym/isaacgymenvs/tasks/fetch/infini_scene/infini_scenes.py. 153 | 154 | 2. We provide reference code to generate infinite expert fetching trajectories in InfiniGym/isaacgymenvs/data_gen.py and InfiniGym/isaacgymenvs/tasks/fetch/fetch_mesh_curobo_datagen.py . 155 | 156 | 3. We provide reference code to train the imitation learning models in InfiniGym/isaacgymenvs/train_imit.py. The code submodule (https://github.com/princeton-vl/FetchBench-Imit.git) is adapted from Optimus (https://github.com/NVlabs/Optimus?tab=readme-ov-file) under Nvidia License. 157 | 158 | 4. We provide reference code to summarize the results of all benchmark tasks in InfiniGym/isaacgymenvs/result.py . 159 | 160 | 5. We will release the baseline dataset and the data generation pipeline soon. Please contact us if you would like to have these asap. 161 | 162 | ## Citing 163 | 164 | If you find our code useful, please cite: 165 | 166 | ``` 167 | @article{han2024fetchbench, 168 | title={FetchBench: A Simulation Benchmark for Robot Fetching}, 169 | author={Han, Beining and Parakh, Meenal and Geng, Derek and Defay, Jack A and Gan, Luyang and Deng, Jia}, 170 | journal={arXiv preprint arXiv:2406.11793}, 171 | year={2024} 172 | } 173 | ``` 174 | 175 | -------------------------------------------------------------------------------- /requirement.txt: -------------------------------------------------------------------------------- 1 | addict==2.4.0 2 | antlr4-python3-runtime==4.9.3 3 | asciitree==0.3.3 4 | asttokens==2.4.1 5 | astunparse==1.6.3 6 | attrdict==2.0.1 7 | autobahn==23.1.2 8 | autolab-core==1.1.1 9 | automat==22.10.0 10 | backcall==0.2.0 11 | beautifulsoup4==4.12.3 12 | cachetools==4.2.4 13 | chardet==5.2.0 14 | cloudpickle==3.0.0 15 | colorlog==6.8.0 16 | comm==0.2.2 17 | configargparse==1.7 18 | constantly==23.10.4 19 | contourpy==1.1.1 20 | cycler==0.12.1 21 | cython==3.0.7 22 | dash==2.16.1 23 | dash-core-components==2.0.0 24 | dash-html-components==2.0.0 25 | dash-table==5.0.0 26 | decorator==5.1.1 27 | diffusers==0.11.1 28 | dill==0.3.7 29 | docker-pycreds==0.4.0 30 | egl-probe==1.0.2 31 | einops==0.7.0 32 | einops-exts==0.0.4 33 | embreex==2.17.7.post4 34 | executing==2.0.1 35 | fasteners==0.19 36 | fastjsonschema==2.19.1 37 | filelock==3.13.1 38 | flask==3.0.2 39 | fonttools==4.47.2 40 | freetype-py==2.4.0 41 | future==0.18.3 42 | gast==0.3.3 43 | gdown==5.1.0 44 | gitdb==4.0.11 45 | gitpython==3.1.40 46 | google-auth==1.35.0 47 | google-auth-oauthlib==0.4.6 48 | google-pasta==0.2.0 49 | gym==0.23.1 50 | gym-notices==0.0.8 51 | h5py==2.10.0 52 | huggingface-hub==0.23.0 53 | hydra==2.5 54 | hydra-core==1.3.2 55 | hyperlink==21.0.0 56 | imageio==2.33.1 57 | imageio-ffmpeg==0.4.9 58 | importlib-resources==6.1.1 59 | incremental==22.10.0 60 | ipython==8.12.3 61 | ipywidgets==8.1.2 62 | itsdangerous==2.1.2 63 | jedi==0.19.1 64 | jinja2==3.1.2 65 | joblib==1.3.2 66 | jsonschema==4.20.0 67 | jsonschema-specifications==2023.11.2 68 | jupyter-core==5.7.2 69 | jupyterlab-widgets==3.0.10 70 | keras-preprocessing==1.1.2 71 | kiwisolver==1.4.5 72 | lazy-loader==0.3 73 | llvmlite==0.41.1 74 | lxml==4.9.4 75 | mapbox-earcut==1.0.1 76 | matplotlib==3.7.4 77 | matplotlib-inline==0.1.6 78 | meshcat==0.3.2 79 | msgpack==1.0.7 80 | multiprocess==0.70.15 81 | nbformat==5.10.3 82 | nest-asyncio==1.6.0 83 | networkx==2.2 84 | ninja==1.11.1.1 85 | numba==0.58.1 86 | numcodecs==0.12.1 87 | numpy-quaternion==2023.0.2 88 | omegaconf==2.3.0 89 | open3d==0.18.0 90 | opencv-python==4.8.1.78 91 | opt-einsum==3.3.0 92 | pandas==2.0.3 93 | parso==0.8.3 94 | pathtools==0.1.2 95 | pexpect==4.9.0 96 | pickleshare==0.7.5 97 | pkgutil-resolve-name==1.3.10 98 | plotly==5.20.0 99 | plyfile==1.0.3 100 | promise==2.3 101 | prompt-toolkit==3.0.43 102 | protobuf==3.20.3 103 | psutil==5.9.7 104 | ptyprocess==0.7.0 105 | pure-eval==0.2.2 106 | pybullet==3.2.6 107 | pycollada==0.6 108 | pygame==2.1.0 109 | pygccxml==2.2.1 110 | pyglet==1.5.0 111 | pygments==2.17.2 112 | pyngrok==7.1.6 113 | pyopengl==3.1.0 114 | pyparsing==3.1.1 115 | pyplusplus==1.8.5 116 | pyquaternion==0.9.9 117 | pyrender==0.1.45 118 | pysdf==0.1.9 119 | python-dateutil==2.8.2 120 | python-fcl==0.7.0.5 121 | pytorch-lightning==1.9.5 122 | pytz==2024.1 123 | pyvirtualdisplay==3.0 124 | pywavelets==1.4.1 125 | pyzmq==26.0.3 126 | ray==2.9.0 127 | referencing==0.32.0 128 | regex==2024.4.28 129 | retrying==1.3.4 130 | roslibpy==1.6.0 131 | robomimic==0.3.0 132 | rotary-embedding-torch==0.2.1 133 | rpds-py==0.15.2 134 | rtree==1.1.0 135 | ruamel-yaml==0.18.5 136 | ruamel-yaml-clib==0.2.8 137 | scikit-learn==1.3.2 138 | scipy==1.8.0 139 | sentry-sdk==1.39.1 140 | service-identity==24.1.0 141 | setproctitle==1.3.3 142 | setuptools-scm==8.0.4 143 | shapely==2.0.2 144 | shortuuid==1.0.11 145 | smmap==5.0.1 146 | soupsieve==2.5 147 | stack-data==0.6.3 148 | svg-path==6.3 149 | swig==4.1.1.post1 150 | tenacity==8.2.3 151 | termcolor==2.4.0 152 | threadpoolctl==3.2.0 153 | tifffile==2023.7.10 154 | tomli==2.0.1 155 | torchtyping==0.1.4 156 | tornado==6.4 157 | tqdm==4.66.1 158 | traitlets==5.14.2 159 | trimesh==3.23.5 160 | twisted==24.3.0 161 | txaio==23.1.1 162 | typeguard==4.1.5 163 | tzdata==2023.4 164 | u-msgpack-python==2.8.0 165 | urdfpy==0.0.22 166 | wandb==0.12.21 167 | warp-lang==0.10.1 168 | wcwidth==0.2.13 169 | widgetsnbextension==4.0.10 170 | wrapt==1.16.0 171 | xvfbwrapper==0.2.9 172 | xxhash==3.4.1 173 | yacs==0.1.8 174 | rl-games==1.6.1 175 | yourdfpy==0.0.53 176 | zope-interface==6.2 177 | --------------------------------------------------------------------------------