def testUse(self): pls = PolarizedLightSensor(45) self.assertEqual(len(pls.directions), 45) pose1 = RigidBodyState(attitude=0.1) data1 = pls.compute_observations(pose1) self.assertTrue('response' in data1) self.assertTrue('sensels' in data1) self.assertTrue(assert_1d_ndarray(array(data1['sensels']))) self.assertTrue(assert_1d_ndarray(array(data1['response'])))
def compute_observations(self, vehicle_state=None): """ Computes the sensor observations at a certain state. OK, you might think this function is kind of mysterious because of all the introspection we use. However, a little black magic here helps in making the client interface clear and intuitive. """ if vehicle_state is None: vehicle_state = self.state data = OpenStruct() data.sensels = [] data.all_sensors = [] for sensor_type in self.config.sensor_types.keys(): setattr(data, sensor_type, []) for i, sensor in enumerate(self.config.sensors): mountpoint = self.sensor2mountpoint[sensor] sensor_pose = vehicle_state.oplus(mountpoint) sensor_data = sensor.compute_observations(sensor_pose) if not 'sensels' in sensor_data: raise BVException('Sensor %s did not produce a "sensels" variable' % sensor) for k, v in sensor_data.items(): if isinstance(v, list): sensor_data[k] = array(v) sensor_data = OpenStruct(**sensor_data) data_array = getattr(data, sensor.sensor_type_string()) data_array.append(sensor_data) data.all_sensors.append(sensor_data) assert_reasonable_value(sensor_data.sensels) assert_1d_ndarray(sensor_data.sensels) data.sensels.extend(list(sensor_data.sensels)) data.sensels = array(data.sensels) return data