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
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)
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)