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'])))
Exemple #2
0
    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