Beispiel #1
0
def boot_spec_from_ros_message(msg):
    ''' Infers the boot spec from a ROS message. '''

    # Previously, we used to write only the range as a string
    # for example, '[[0,1],[0,1],[0,1]]'
    # But now, we use the YAML spec directly.
    spec_string = msg.commands_spec

    if spec_string[0] == '[':
        commands_spec = eval(spec_string) # XXX: not safe 
        sensels_shape = msg.sensel_shape # TODO: check coherence

        nu = len(commands_spec)
        spec = {
                'observations': {
                     'shape': list(sensels_shape),
                     'range': [0, 1], # XXX: we need something else here
                     'format': 'C'
                },
                'commands': {
                     'shape': [nu],
                     'range': map(list, commands_spec),
                     'format': ['C'] * nu
                }
        }
        return BootSpec.from_yaml(spec)
    elif spec_string[0] == '{':
        return BootSpec.from_yaml(yaml_load(spec_string))

    else:
        raise ValueError('Cannot interpret spec for msg:\n%s' % spec_string)
 def __init__(self, boot_spec, value,
              dt=Constants.DEFAULT_SIMULATION_DT):
     self.timestamp = time.time()
     self.dt = dt
     self.value = value
     self.spec = BootSpec.from_yaml(boot_spec)
     self.commands = self.spec.get_commands().get_default_value()
     self.commands_source = Constants.CMD_SOURCE_REST
def check_conversions(x):
    spec = BootSpec.from_yaml(x)
    assert isinstance(spec, BootSpec)
    spec_struct = spec.to_yaml()
    assert isinstance(spec_struct, dict)
    spec_struct_yaml = yaml.dump(spec_struct)
    spec_struct2 = yaml.load(spec_struct_yaml)
    spec2 = spec.from_yaml(spec_struct2)
    assert spec == spec2
Beispiel #4
0
 def get_spec(self):
     self._make_sure_inited()
     ncmds = self.discdds.get_num_commands()
     cmd = make_streamels_finite_commands(ncommands=ncmds, default=0)
     cmd_spec = StreamSpec(id_stream=None, streamels=cmd, extra={})
     obs_spec = StreamSpec(id_stream=None,
                           streamels=make_streamels_rgb_float(self.shape),
                           extra={})
     return BootSpec(obs_spec, cmd_spec)
Beispiel #5
0
def spec_from_group(group):
    data_table = group.boot_stream
    if 'boot_spec' in data_table.attrs:
        # Old version
        specs = str(data_table.attrs['boot_spec'])
    else:
        specs = str(group.boot_spec[0])
    spec = BootSpec.from_yaml(yaml_load(specs))
    return spec
 def __init__(self, boot_spec,
              dt=Constants.DEFAULT_SIMULATION_DT, t0=None, y0=None):
     if t0 is None:
         t0 = time.time()
     self.timestamp = t0
     self.dt = dt
     if not isinstance(boot_spec, BootSpec):
         boot_spec = BootSpec.from_yaml(boot_spec) 
     self.spec = boot_spec
     self.commands = self.spec.get_commands().get_default_value()
     self.commands_source = Constants.CMD_SOURCE_REST
     self.y0 = y0
def dummy_robot_from_spec(boot_spec_yaml):
    boot_spec = BootSpec.from_yaml(boot_spec_yaml)
    robot = DummyRobot(boot_spec)
    return robot
    def __init__(self,
                 world=None,
                 id_world=None,
                 vehicle=None,
                 id_vehicle=None,
                 dt=VehiclesConstants.DEFAULT_SIMULATION_DT,
                 **kwargs):
        self.dt = dt

        if not ((world is not None) ^ (id_world is not None)):
            raise ValueError('Specify exactly one of "world" and "id_world".')
        if not ((vehicle is not None) ^ (id_vehicle is not None)):
            raise ValueError('Specify exactly one of "vehicle" '
                             'and "id_vehicle".')

        vehicles = get_conftools_vehicles()
        worlds = get_conftools_worlds()

        # TODO: user shortcuts
        if vehicle is not None:
            id_vehicle = vehicle['id']
            vehicle_spec = vehicle
            # TODO: check well formed
            vehicle = vehicles.instance_spec(vehicle)
        else:
            vehicle_spec = vehicles[id_vehicle]
            vehicle = vehicles.instance(id_vehicle)

        if world is not None:
            id_world = world['id']
            # TODO: check well formed
            world_spec = world
            world = worlds.instance_spec(world)
        else:
            world_spec = worlds[id_world]
            world = worlds.instance(id_world)

        VehicleSimulation.__init__(self, vehicle, world, **kwargs)

        cmd_spec = StreamSpec.from_yaml(
            self.vehicle.dynamics.get_commands_spec())

        self.last_commands = cmd_spec.get_default_value()

        if len(self.vehicle.sensors) == 0:
            raise Exception('Vehicle %r has no sensors defined.' % id_vehicle)

        obs_spec = create_obs_spec(self.vehicle)
        self._boot_spec = BootSpec(obs_spec=obs_spec,
                                   cmd_spec=cmd_spec,
                                   id_robot=id_vehicle)
        # XXX: id, desc, extra?
        self.commands_source = BootOlympicsConstants.CMD_SOURCE_REST

        self.boot_episode_started = False

        # Save for later
        self.id_world = id_world
        self.id_vehicle = id_vehicle
        self.world_spec = world_spec
        self.vehicle_spec = vehicle_spec
def check_parsing(x):
    BootSpec.from_yaml(x)