├── .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 |
--------------------------------------------------------------------------------