def test_zero(self): mock_listener = MockListener(self) invalid_counter = InvalidCounterListener() attitude_provider = AttitudeProvider() attitude_provider.registerListener(mock_listener) attitude_provider.registerListener(invalid_counter) # give the sensor time to collect values time.sleep(0.05) attitude_provider.update() self.assertEqual(mock_listener.numUpdates, 1) self.assertGreater(mock_listener.sumDeltas, 0.05) # give the sensor time to collect values time.sleep(0.05) attitude_provider.update() self.assertEqual(mock_listener.numUpdates, 2) self.assertGreater(mock_listener.sumDeltas, 0.1) # check that all data is present self.assertEqual(invalid_counter.accelInvalidCounter, 0) self.assertEqual(invalid_counter.gyroInvalidCounter, 0) self.assertEqual(invalid_counter.compassInvalidCounter, 0) self.assertEqual(invalid_counter.fusionPoseInvalidCounter, 0)
class SensorFusionMaster(LoggingStateProviderWithListeners): """ This class is responsible for taking the single sensor fusion results and integrating them into a VehicleState. - AttitudeProvider (gyro, accelerometer, magnetometer) -> AttitudeState (orientation in air) - HeightProvider (gps, ultrasonic sensor, barometer, attitude) -> HeightState (height above ground, vertical speed) """ def __init__(self): self.attitudeProvider = AttitudeProvider() self.heightProvider = HeightProvider() def update(self): # this will trigger the heightProvider via the listener attitude = self.attitudeProvider.update() vehicle_state = self.heightProvider.update(attitude) return vehicle_state
def __init__(self): self.attitudeProvider = AttitudeProvider() self.heightProvider = HeightProvider()