Example #1
0
    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
Example #2
0
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()