@@ -55,57 +55,45 @@ class PruningEnv(gym.Env):
5555
5656 def __init__ (
5757 self ,
58- # angle_threshold_perp: float = 0.52,
59- # angle_threshold_point: float = 0.52,
6058 pbutils : PyBUtils ,
61- sensor_config : dict ,
62- # cam_width: int = 424,
63- # cam_height: int = 240,
64- evaluate : bool = False ,
65- # distance_threshold: float = 0.05,
66- max_steps : int = 1000 ,
59+ # max_steps: int = 1000,
6760 make_trees : bool = False ,
6861 name : str = "PruningEnv" ,
69- num_trees : int | None = None ,
62+ # num_trees: int | None = None,
7063 renders : bool = False ,
7164 tree_count : int = 10 ,
7265 # tree_urdf_path: str | None = None,
7366 # tree_obj_path: str | None = None,
7467 verbose : bool = True ,
75- load_robot : bool = True ,
76- robot_type : str = "ur5" ,
77- robot_pos : ArrayLike = np .array ([0 , 0 , 0 ]),
78- robot_orientation : ArrayLike = np .array ([0 , 0 , 0 , 1 ]),
68+ # load_robot: bool = True,
69+ robots : dict = {},
70+ # robot_type: str = "ur5",
71+ # robot_pos: ArrayLike = np.array([0, 0, 0]),
72+ # robot_orientation: ArrayLike = np.array([0, 0, 0, 1]),
7973 # use_ik: bool = True,
8074 #
8175 ) -> None :
8276 """Initialize the Pruning Environment
8377
8478 Parameters
8579 ----------
86- cam_width (int): Pixel width of the camera
87- cam_height (int): Pixel height of the camera
88- evaluate (bool): Is this environment for evaluation
89- max_steps (int): Maximum number of steps in a single run
90- name (str): Name of the environment (default="PruningEnv")
91- renders (bool): Whether to render the environment
92- tree_count (int): Number of trees to be loaded
80+ ...
9381 """
9482 super ().__init__ ()
9583 self .pbutils = pbutils
9684
9785 # Pybullet GUI variables
9886 self .render_mode = "rgb_array"
9987 self .renders = renders
100- self .eval = evaluate
88+ # self.eval = evaluate
10189
10290 # Gym variables
10391 self .name = name
104- self .step_counter = 0
105- self .global_step_counter = 0
92+ # self.step_counter = 0
93+ # self.global_step_counter = 0
10694 # self.max_steps = max_steps
10795 self .tree_count = tree_count
108- self .is_goal_state = False
96+ # self.is_goal_state = False
10997
11098
11199
@@ -138,18 +126,19 @@ def __init__(
138126 self .debouce_time = 0.5
139127 self .last_button_push_time = time .time ()
140128
141- # Load Robot
142- if load_robot :
143- self .robot = Robot (pbclient = self .pbutils .pbclient )
129+ # Load Robots
130+ self .robots = robots
131+ # if load_robot:
132+ # self.robot = Robot(pbclient=self.pbutils.pbclient)
144133 # self.ur5 = self.load_robot(
145134 # type=robot_type, robot_pos=robot_pos, robot_orientation=robot_orientation, randomize_pose=False
146135 # )
147-
136+
148137 # Load all sensor attributes. # TODO: Load only the required sensor attributes
149138 self ._load_sensor_attributes ()
150139
151- self .sensor_config = sensor_config
152- self ._assign_tf_frame_to_sensors ( self . sensor_config )
140+ log . warn ( self .robots [ 'pruning_robot' ]. sensors )
141+ # self.sensor_config = sensor_config
153142 # log.warning(self.sensor_attributes)
154143 return
155144
@@ -169,13 +158,6 @@ def _load_sensor_attributes(self):
169158 self .sensor_attributes [key ] = value
170159 return
171160
172- def _assign_tf_frame_to_sensors (self , sensor_config : dict ):
173- for sensor_name , conf in sensor_config .items ():
174- sensor = conf ['sensor' ]
175- sensor .tf_frame = conf ['tf_frame' ]
176- log .warn (f"{ sensor .params } " )
177- sensor .tf_frame_index = self .robot .robot_conf ['joint_info' ]['mock_pruner__base--camera0' ]['id' ]
178- return
179161
180162 def load_robot (self , type : str , robot_pos : ArrayLike , robot_orientation : ArrayLike , randomize_pose : bool = False ):
181163 """Load a robot into the environment. Currently only UR5 is supported. TODO: Add Panda"""
@@ -468,7 +450,7 @@ def compute_deprojected_point_mask(self):
468450 # point_mask = np.expand_dims(point_mask_resize, axis=0).astype(np.float32)
469451 return point_mask
470452
471- def is_reachable (self , vertex : Tuple [np .ndarray ], base_xyz : np .ndarray ) -> bool :
453+ def is_reachable (self , robot : Robot , vertex : Tuple [np .ndarray ], base_xyz : np .ndarray ) -> bool :
472454 # if vertex[3] != "SPUR":
473455 # return False
474456 ur5_base_pos = np .array (base_xyz )
@@ -479,7 +461,7 @@ def is_reachable(self, vertex: Tuple[np.ndarray], base_xyz: np.ndarray) -> bool:
479461 if dist >= 0.98 : # TODO: is this for the UR5? Should it be from a parameter file?
480462 return False
481463
482- j_angles = self . robot .calculate_ik (vertex [0 ], None )
464+ j_angles = robot .calculate_ik (vertex [0 ], None )
483465 # env.ur5.set_joint_angles(j_angles)
484466 # for _ in range(100):
485467 # pyb.con.stepSimulation()
@@ -509,7 +491,7 @@ def get_key_pressed(self, relevant=None) -> list:
509491 keys_pressed .append (key )
510492 return keys_pressed
511493
512- def get_key_action (self , keys_pressed : list ) -> np .ndarray :
494+ def get_key_action (self , robot : Robot , keys_pressed : list ) -> np .ndarray :
513495 """Return an action based on the keys pressed."""
514496 action = np .array ([0.0 , 0.0 , 0 , 0.0 , 0.0 , 0.0 ])
515497 if keys_pressed :
@@ -540,9 +522,9 @@ def get_key_action(self, keys_pressed: list) -> np.ndarray:
540522 if ord ("p" ) in keys_pressed :
541523 if time .time () - self .last_button_push_time > self .debouce_time :
542524 # Get view and projection matrices
543- view_matrix = self . ur5 . get_view_mat_at_curr_pose (pan = 0 , tilt = 0 , xyz_offset = [ 0 , 0 , 0 ])
525+ view_matrix = robot . get_view_mat_at_curr_pose (camera = robot . sensors [ 'camera0' ][ 'sensor' ])
544526 log .warning (f"button p pressed" )
545- rgb , depth = self .pbutils .get_rgbd_at_cur_pose (type = "robot" , view_matrix = view_matrix )
527+ rgb , depth = self .pbutils .get_rgbd_at_cur_pose (camera = robot . sensors [ 'camera0' ][ 'sensor' ], type = "robot" , view_matrix = view_matrix )
546528 # log.debug(f'depth:\n{depth}')
547529 depth = - 1 * depth .reshape ((self .cam_width * self .cam_height , 1 ), order = "F" )
548530 world_points = self .deproject_pixels_to_points (
0 commit comments