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)
Exemplo n.º 2
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
Exemplo n.º 3
0
 def __init__(self):
     self.attitudeProvider = AttitudeProvider()
     self.heightProvider = HeightProvider()