def _get_new_sim(self, seed): world_params = WorldParams(size=(self.floorsize, self.floorsize, 2.5), num_substeps=self.n_substeps) builder = WorldBuilder(world_params, seed) floor = Floor() builder.append(floor) # Walls wallsize = 0.1 wall = Geom('box', (wallsize, self.floorsize, 0.5), name="wall1") wall.mark_static() floor.append(wall, placement_xy=(0, 0)) wall = Geom('box', (wallsize, self.floorsize, 0.5), name="wall2") wall.mark_static() floor.append(wall, placement_xy=(1, 0)) wall = Geom('box', (self.floorsize - wallsize*2, wallsize, 0.5), name="wall3") wall.mark_static() floor.append(wall, placement_xy=(1/2, 0)) wall = Geom('box', (self.floorsize - wallsize*2, wallsize, 0.5), name="wall4") wall.mark_static() floor.append(wall, placement_xy=(1/2, 1)) # Add agents obj = ObjFromXML("particle", name="agent0") floor.append(obj) obj.mark(f"object0") # Add food sites for i in range(self.n_food): floor.mark(f"food{i}", (.5, .5, 0.05), rgba=(0., 1., 0., 1.)) sim = builder.get_sim() # Cache constants for quicker lookup later self.food_ids = np.array([sim.model.site_name2id(f'food{i}') for i in range(self.n_food)]) return sim
def get_sim(seed): world_params = WorldParams(size=(4., 4., 2.5)) builder = WorldBuilder(world_params, seed) floor = Floor() builder.append(floor) obj = ObjFromXML("particle_hinge") floor.append(obj) obj.mark("object") floor.mark("target", (.5, .5, 0.05)) return builder.get_sim()
def build_world_step(self, env, floor, floor_size): env.metadata['n_agents'] = self.n_agents successful_placement = True for i in range(self.n_agents): env.metadata.pop(f"agent{i}_initpos", None) for i in range(self.n_agents): obj = ObjFromXML("particle_hinge", name=f"agent{i}") if self.friction is not None: obj.add_transform( set_geom_attr_transform('friction', self.friction)) if self.color is not None: _color = (self.color[i] if isinstance( self.color[0], (list, tuple, np.ndarray)) else self.color) obj.add_transform(set_geom_attr_transform('rgba', _color)) if not self.damp_z: obj.add_transform(set_joint_damping_transform(1, 'tz')) if self.placement_fn is not None: _placement_fn = (self.placement_fn[i] if isinstance( self.placement_fn, list) else self.placement_fn) obj_size = get_size_from_xml(obj) pos, pos_grid = rejection_placement(env, _placement_fn, floor_size, obj_size) if pos is not None: floor.append(obj, placement_xy=pos) # store spawn position in metadata. This allows sampling subsequent agents # close to previous agents env.metadata[f"agent{i}_initpos"] = pos_grid else: successful_placement = False else: floor.append(obj) return successful_placement
def build_world_step(self, env, floor, floor_size): successful_placement = True env.metadata['curr_n_ramps'] = np.ones((self.n_ramps)).astype(np.bool) for i in range(self.n_ramps): char = chr(ord('A') + i % 26) geom = geom = ObjFromXML('ramp', name=f"ramp{i}") geom.set_material(Material(texture="chars/" + char + ".png")) if self.friction is not None: geom.add_transform( set_geom_attr_transform('friction', self.friction)) if self.placement_fn is not None: _placement_fn = (self.placement_fn[i] if isinstance( self.placement_fn, list) else self.placement_fn) pos, _ = rejection_placement(env, _placement_fn, floor_size, get_size_from_xml(geom)) if pos is not None: floor.append(geom, placement_xy=pos) else: successful_placement = False else: floor.append(geom) return successful_placement
def get_sim(seed): world_params = WorldParams(size=(10., 6., 4.5)) builder = WorldBuilder(world_params, seed) floor = Floor() builder.append(floor) obj = ObjFromXML("particle_hinge") floor.append(obj) floorsize = 4. # Walls wallsize = 0.1 wall = Geom('box', (wallsize, floorsize, 0.5), name="wall1") wall.mark_static() floor.append(wall, placement_xy=(0, 0)) wall = Geom('box', (wallsize, floorsize, 0.5), name="wall2") wall.mark_static() floor.append(wall, placement_xy=(1, 0)) wall = Geom('box', (floorsize - wallsize * 2, wallsize, 0.5), name="wall3") wall.mark_static() floor.append(wall, placement_xy=(1 / 2, 0)) wall = Geom('box', (floorsize - wallsize * 2, wallsize, 0.5), name="wall4") wall.mark_static() floor.append(wall, placement_xy=(1 / 2, 1)) # Add agents obj = ObjFromXML("particle", name="agent0") floor.append(obj) obj.mark("object") floor.mark("target", (.5, .5, 0.05)) return builder.get_sim()