88def main ():
99 parser = argparse .ArgumentParser ()
1010 parser .add_argument ("-v" , "--vis" , action = "store_true" , default = False )
11+ parser .add_argument ("-n" , "--n_envs" , type = int , default = 49 )
1112 args = parser .parse_args ()
1213
1314 ########################## init ##########################
@@ -48,12 +49,16 @@ def main():
4849 )
4950
5051 ########################## build ##########################
51- scene .build ()
52+ scene .build (n_envs = args . n_envs , env_spacing = ( 1 , 1 ) )
5253
5354 motors_dof = np .arange (7 )
5455 fingers_dof = np .arange (7 , 9 )
5556
5657 # Optional: set control gains
58+ if args .n_envs == 0 :
59+ franka .set_qpos (np .array ([1.56 , - 0.72 , - 0.02 , - 2.09 , 0.04 , 1.33 , 2.4 , 0.01 , 0.01 ]))
60+ else :
61+ franka .set_qpos (np .array ([[1.56 , - 0.72 , - 0.02 , - 2.09 , 0.04 , 1.33 , 2.4 , 0.01 , 0.01 ]] * args .n_envs ))
5762 franka .set_dofs_kp (
5863 np .array ([4500 , 4500 , 3500 , 3500 , 2000 , 2000 , 2000 , 100 , 100 ]),
5964 )
@@ -70,10 +75,11 @@ def main():
7075 # move to pre-grasp pose
7176 qpos = franka .inverse_kinematics (
7277 link = end_effector ,
73- pos = np .array ([0.65 , 0.0 , 0.25 ]),
74- quat = np .array ([0 , 1 , 0 , 0 ]),
78+ pos = np .array ([0.65 , 0.0 , 0.25 ]) if args . n_envs == 0 else np . array ([[ 0.65 , 0.0 , 0.25 ]] * args . n_envs ),
79+ quat = np .array ([0 , 1 , 0 , 0 ]) if args . n_envs == 0 else np . array ([[ 0 , 1 , 0 , 0 ]] * args . n_envs ) ,
7580 )
76- qpos [- 2 :] = 0.04
81+ qpos [...,- 2 :] = 0.04
82+
7783 path = franka .plan_path (qpos )
7884 for waypoint in path :
7985 franka .control_dofs_position (waypoint )
@@ -84,30 +90,36 @@ def main():
8490 # reach
8591 qpos = franka .inverse_kinematics (
8692 link = end_effector ,
87- pos = np .array ([0.65 , 0.0 , 0.142 ]),
88- quat = np .array ([0 , 1 , 0 , 0 ]),
93+ pos = np .array ([0.65 , 0.0 , 0.142 ]) if args . n_envs == 0 else np . array ([[ 0.65 , 0.0 , 0.142 ]] * args . n_envs ),
94+ quat = np .array ([0 , 1 , 0 , 0 ]) if args . n_envs == 0 else np . array ([[ 0 , 1 , 0 , 0 ]] * args . n_envs ) ,
8995 )
90- franka .control_dofs_position (qpos [:- 2 ], motors_dof )
96+ franka .control_dofs_position (qpos [..., :- 2 ], motors_dof )
9197 for i in range (100 ):
9298 scene .step ()
9399
94100 # grasp
95- franka .control_dofs_position (qpos [:- 2 ], motors_dof )
96- franka .control_dofs_position (np .array ([0 , 0 ]), fingers_dof ) # you can use position control
101+ franka .control_dofs_position (qpos [...,:- 2 ], motors_dof )
102+ franka .control_dofs_position (
103+ np .array ([0 , 0 ]) if args .n_envs == 0 else np .array ([[0 , 0 ]] * args .n_envs ),
104+ fingers_dof
105+ ) # you can use position control
97106 for i in range (100 ):
98107 scene .step ()
99108
100109 # lift
101110 qpos = franka .inverse_kinematics (
102111 link = end_effector ,
103- pos = np .array ([0.65 , 0.0 , 0.3 ]),
104- quat = np .array ([0 , 1 , 0 , 0 ]),
112+ pos = np .array ([0.65 , 0.0 , 0.3 ]) if args . n_envs == 0 else np . array ([[ 0.65 , 0.0 , 0.3 ]] * args . n_envs ) ,
113+ quat = np .array ([0 , 1 , 0 , 0 ]) if args . n_envs == 0 else np . array ([[ 0 , 1 , 0 , 0 ]] * args . n_envs ) ,
105114 )
106- franka .control_dofs_position (qpos [:- 2 ], motors_dof )
107- franka .control_dofs_force (np .array ([- 20 , - 20 ]), fingers_dof ) # can also use force control
115+ franka .control_dofs_position (qpos [...,:- 2 ], motors_dof )
116+ franka .control_dofs_force (
117+ np .array ([- 20 , - 20 ]) if args .n_envs == 0 else np .array ([[- 20 , - 20 ]] * args .n_envs ),
118+ fingers_dof
119+ ) # can also use force control
108120 for i in range (1000 ):
109121 scene .step ()
110122
111123
112124if __name__ == "__main__" :
113- main ()
125+ main ()
0 commit comments