Esempio n. 1
0
    def test_fill_controls_data(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        aircraft = Aircraft(fdmexec)

        factory = SensorDataFactory(aircraft)

        protocol = factory.buildProtocol(("127.0.0.1", 12345))

        sensor_data_response = fdm_pb2.SensorDataResponse()

        protocol.fill_controls_data(sensor_data_response)

        self.assertAlmostEqual(sensor_data_response.controls.aileron,
                               aircraft.controls.aileron)
        self.assertAlmostEqual(sensor_data_response.controls.elevator,
                               aircraft.controls.elevator)
        self.assertAlmostEqual(sensor_data_response.controls.rudder,
                               aircraft.controls.rudder)
        self.assertAlmostEqual(sensor_data_response.controls.throttle,
                               aircraft.controls.throttle)

        self.assertEqual(sensor_data_response.type, fdm_pb2.CONTROLS_REQUEST)
Esempio n. 2
0
    def test_gyroscope(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        gyroscope = Gyroscope(fdmexec)

        self.assertAlmostEqual(gyroscope.true_roll_rate,
                               math.degrees(fdmexec.GetPropagate().GetPQR(1)),
                               3)
        self.assertAlmostEqual(gyroscope.true_pitch_rate,
                               math.degrees(fdmexec.GetPropagate().GetPQR(2)),
                               3)
        self.assertAlmostEqual(gyroscope.true_yaw_rate,
                               math.degrees(fdmexec.GetPropagate().GetPQR(3)),
                               3)

        self.assertAlmostEqual(
            gyroscope.roll_rate,
            gyroscope.true_roll_rate + gyroscope._roll_rate_measurement_noise,
            3)
        self.assertAlmostEqual(
            gyroscope.pitch_rate, gyroscope.true_pitch_rate +
            gyroscope._pitch_rate_measurement_noise, 3)
        self.assertAlmostEqual(
            gyroscope.yaw_rate,
            gyroscope.true_yaw_rate + gyroscope._yaw_rate_measurement_noise, 3)
Esempio n. 3
0
    def test_fill_gps_data(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        aircraft = Aircraft(fdmexec)

        factory = SensorDataFactory(aircraft)

        protocol = factory.buildProtocol(("127.0.0.1", 12345))

        sensor_data_response = fdm_pb2.SensorDataResponse()

        protocol.fill_gps_data(sensor_data_response)

        self.assertAlmostEqual(sensor_data_response.gps.latitude,
                               aircraft.instruments.gps.latitude)
        self.assertAlmostEqual(sensor_data_response.gps.longitude,
                               aircraft.instruments.gps.longitude)
        self.assertAlmostEqual(sensor_data_response.gps.altitude,
                               aircraft.instruments.gps.altitude)
        self.assertAlmostEqual(sensor_data_response.gps.airspeed,
                               aircraft.instruments.gps.airspeed)
        self.assertAlmostEqual(sensor_data_response.gps.heading,
                               aircraft.instruments.gps.heading)

        self.assertEqual(sensor_data_response.type, fdm_pb2.GPS_REQUEST)
Esempio n. 4
0
    def test_fill_gyroscope_data(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        aircraft = Aircraft(fdmexec)

        factory = SensorDataFactory(aircraft)

        protocol = factory.buildProtocol(("127.0.0.1", 12345))

        sensor_data_response = fdm_pb2.SensorDataResponse()

        protocol.fill_gyroscope_data(sensor_data_response)

        self.assertAlmostEqual(sensor_data_response.gyroscope.roll_rate,
                               aircraft.sensors.gyroscope.roll_rate)
        self.assertAlmostEqual(sensor_data_response.gyroscope.pitch_rate,
                               aircraft.sensors.gyroscope.pitch_rate)
        self.assertAlmostEqual(sensor_data_response.gyroscope.yaw_rate,
                               aircraft.sensors.gyroscope.yaw_rate)

        self.assertEqual(sensor_data_response.type, fdm_pb2.GYROSCOPE_REQUEST)
Esempio n. 5
0
    def test_datagram_received(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        aircraft = Aircraft(fdmexec)

        controls_protocol = ControlsProtocol(fdmexec)

        aileron = 0.1
        elevator = 0.2
        rudder = 0.3
        throttle = 0.4

        controls = fdm_pb2.Controls()
        controls.aileron = aileron
        controls.elevator = elevator
        controls.rudder = rudder
        controls.throttle = throttle

        controls_datagram = controls.SerializeToString()

        host = "127.0.0.1"
        port = 12345

        controls_protocol.datagramReceived(controls_datagram, (host, port))

        self.assertAlmostEqual(aircraft.controls.aileron, aileron, 3)
        self.assertAlmostEqual(aircraft.controls.elevator, elevator, 3)
        self.assertAlmostEqual(aircraft.controls.rudder, rudder, 3)
        self.assertAlmostEqual(aircraft.controls.throttle, throttle, 3)
Esempio n. 6
0
    def test_inertialNavigationSystem(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        sensors = Sensors(fdmexec)

        self.assertAlmostEqual(sensors.inertial_navigation_system.true_roll,
                               fdmexec.GetPropagate().GetEulerDeg(1), 3)
        self.assertAlmostEqual(sensors.inertial_navigation_system.true_pitch,
                               fdmexec.GetPropagate().GetEulerDeg(2), 3)
        self.assertAlmostEqual(
            sensors.inertial_navigation_system.true_latitude,
            fdmexec.GetPropagate().GetLatitudeDeg(), 3)
        self.assertAlmostEqual(
            sensors.inertial_navigation_system.true_longitude,
            fdmexec.GetPropagate().GetLongitudeDeg(), 3)
        self.assertAlmostEqual(
            sensors.inertial_navigation_system.true_altitude,
            fdmexec.GetPropagate().GetAltitudeASLmeters(), 3)
        self.assertAlmostEqual(
            sensors.inertial_navigation_system.true_airspeed,
            convert_jsbsim_velocity(fdmexec.GetAuxiliary().GetVtrueFPS()), 3)
        self.assertAlmostEqual(
            sensors.inertial_navigation_system.true_heading,
            math.degrees(fdmexec.GetPropagate().GetEuler(3)), 3)
Esempio n. 7
0
    def test_handle_sensor_data_request(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        aircraft = Aircraft(fdmexec)

        factory = SensorDataFactory(aircraft)

        protocol = factory.buildProtocol(("127.0.0.1", 12345))
        protocol.send_response_string = MagicMock()

        sensor_data_request = fdm_pb2.SensorDataRequest()
        sensor_data_request.type = fdm_pb2.GPS_REQUEST

        protocol.handle_sensor_data_request(sensor_data_request)

        expected_sensor_data_response = fdm_pb2.SensorDataResponse()
        expected_sensor_data_response.type = fdm_pb2.GPS_REQUEST
        expected_sensor_data_response.gps.latitude = aircraft.instruments.gps.latitude
        expected_sensor_data_response.gps.longitude = aircraft.instruments.gps.longitude
        expected_sensor_data_response.gps.altitude = aircraft.instruments.gps.altitude
        expected_sensor_data_response.gps.airspeed = aircraft.instruments.gps.airspeed
        expected_sensor_data_response.gps.heading = aircraft.instruments.gps.heading

        protocol.send_response_string.assert_called_once_with(
            expected_sensor_data_response.SerializeToString())
Esempio n. 8
0
    def test_fill_accelerometer_data(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        aircraft = Aircraft(fdmexec)

        factory = SensorDataFactory(aircraft)

        protocol = factory.buildProtocol(("127.0.0.1", 12345))

        sensor_data_response = fdm_pb2.SensorDataResponse()

        protocol.fill_accelerometer_data(sensor_data_response)

        self.assertAlmostEqual(sensor_data_response.accelerometer.x,
                               aircraft.sensors.accelerometer.x)
        self.assertAlmostEqual(sensor_data_response.accelerometer.y,
                               aircraft.sensors.accelerometer.y)
        self.assertAlmostEqual(sensor_data_response.accelerometer.z,
                               aircraft.sensors.accelerometer.z)

        self.assertEqual(sensor_data_response.type,
                         fdm_pb2.ACCELEROMETER_REQUEST)
Esempio n. 9
0
    def test_fill_ins_data(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        aircraft = Aircraft(fdmexec)

        factory = SensorDataFactory(aircraft)

        protocol = factory.buildProtocol(("127.0.0.1", 12345))

        sensor_data_response = fdm_pb2.SensorDataResponse()

        protocol.fill_ins_data(sensor_data_response)

        self.assertAlmostEqual(
            sensor_data_response.ins.roll,
            aircraft.sensors.inertial_navigation_system.roll)
        self.assertAlmostEqual(
            sensor_data_response.ins.pitch,
            aircraft.sensors.inertial_navigation_system.pitch)

        self.assertEqual(sensor_data_response.type, fdm_pb2.INS_REQUEST)
Esempio n. 10
0
    def test_ins_meaurement_noise_update(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        ins = InertialNavigationSystem(fdmexec)

        ins._roll_measurement_noise = 0.0
        ins._pitch_measurement_noise = 0.0
        ins._heading_measurement_noise = 0.0
        ins._latitude_measurement_noise = 0.0
        ins._longitude_measurement_noise = 0.0
        ins._altitude_measurement_noise = 0.0
        ins._airspeed_measurement_noise = 0.0

        fdmexec.Run()

        self.assertEqual(ins._roll_measurement_noise, 0.0)
        self.assertEqual(ins.roll_measurement_noise, 0.0)
        self.assertEqual(ins._pitch_measurement_noise, 0.0)
        self.assertEqual(ins.pitch_measurement_noise, 0.0)
        self.assertEqual(ins._heading_measurement_noise, 0.0)
        self.assertEqual(ins.heading_measurement_noise, 0.0)
        self.assertEqual(ins._latitude_measurement_noise, 0.0)
        self.assertEqual(ins.latitude_measurement_noise, 0.0)
        self.assertEqual(ins._longitude_measurement_noise, 0.0)
        self.assertEqual(ins.longitude_measurement_noise, 0.0)
        self.assertEqual(ins._airspeed_measurement_noise, 0.0)
        self.assertEqual(ins.airspeed_measurement_noise, 0.0)
        self.assertEqual(ins._altitude_measurement_noise, 0.0)
        self.assertEqual(ins.altitude_measurement_noise, 0.0)

        run_until = fdmexec.GetSimTime() + (1.0 / ins.update_rate) + 1.0
        while fdmexec.GetSimTime() < run_until:
            fdmexec.Run()

        self.assertNotEqual(ins.roll_measurement_noise, 0.0)
        self.assertEqual(ins._roll_measurement_noise,
                         ins.roll_measurement_noise)
        self.assertNotEqual(ins.pitch_measurement_noise, 0.0)
        self.assertEqual(ins._pitch_measurement_noise,
                         ins.pitch_measurement_noise)
        self.assertNotEqual(ins.heading_measurement_noise, 0.0)
        self.assertEqual(ins._heading_measurement_noise,
                         ins.heading_measurement_noise)
        self.assertNotEqual(ins.latitude_measurement_noise, 0.0)
        self.assertEqual(ins._latitude_measurement_noise,
                         ins.latitude_measurement_noise)
        self.assertNotEqual(ins.longitude_measurement_noise, 0.0)
        self.assertEqual(ins._longitude_measurement_noise,
                         ins.longitude_measurement_noise)
        self.assertNotEqual(ins.altitude_measurement_noise, 0.0)
        self.assertEqual(ins._altitude_measurement_noise,
                         ins.altitude_measurement_noise)
        self.assertNotEqual(ins.airspeed_measurement_noise, 0.0)
        self.assertEqual(ins._airspeed_measurement_noise,
                         ins.airspeed_measurement_noise)
Esempio n. 11
0
    def test_engine(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        engine = Engine(fdmexec)

        self.assertAlmostEqual(engine.thrust, convert_jsbsim_force(fdmexec.GetPropulsion().GetEngine(0).GetThruster().GetThrust()))
        self.assertAlmostEqual(engine.throttle, fdmexec.GetFCS().GetThrottleCmd(0))
Esempio n. 12
0
    def test_step(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        simulator = Simulator(fdmexec)

        result = simulator.step()

        self.assertTrue(result)
Esempio n. 13
0
    def test_set_rudder(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()
        
        aircraft = Aircraft(fdmexec)
        
        fdmexec.GetFCS().SetDrCmd(0.178)
        
        self.assertAlmostEqual(aircraft.controls.rudder, 0.178, 0.0)
Esempio n. 14
0
    def test_presure_sensor(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        sensors = Sensors(fdmexec)

        self.assertAlmostEqual(
            sensors.pressure_sensor.true_pressure,
            convert_jsbsim_pressure(fdmexec.GetAtmosphere().GetPressure()))
Esempio n. 15
0
    def test_set_throttle(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()
        
        aircraft = Aircraft(fdmexec)
        
        fdmexec.GetFCS().SetThrottleCmd(0, 0.198)
        
        self.assertAlmostEqual(aircraft.controls.throttle, 0.198)
Esempio n. 16
0
    def test_pitot_tube(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        sensors = Sensors(fdmexec)

        self.assertAlmostEqual(
            sensors.pitot_tube.true_pressure,
            convert_jsbsim_pressure(fdmexec.GetAuxiliary().GetTotalPressure()))
Esempio n. 17
0
    def test_accelerations(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        velocities = Velocities(fdmexec)

        velocity = fdmexec.GetPropagate().GetPQR(1)
        expected_velocity = convert_jsbsim_angular_velocity(velocity)
        self.assertAlmostEqual(velocities.p, expected_velocity, 3)

        velocity = fdmexec.GetPropagate().GetPQR(2)
        expected_velocity = convert_jsbsim_angular_velocity(velocity)
        self.assertAlmostEqual(velocities.q, expected_velocity, 3)

        velocity = fdmexec.GetPropagate().GetPQR(3)
        expected_velocity = convert_jsbsim_angular_velocity(velocity)
        self.assertAlmostEqual(velocities.r, expected_velocity, 3)

        airspeed = fdmexec.GetAuxiliary().GetVtrueFPS()
        expected_airspeed = convert_jsbsim_velocity(airspeed)
        self.assertAlmostEqual(velocities.true_airspeed, expected_airspeed, 3)

        climb_rate = -fdmexec.GetPropagate().GetVel(3)
        expected_climb_rate = convert_jsbsim_velocity(climb_rate)
        self.assertAlmostEqual(velocities.climb_rate, expected_climb_rate, 3)

        velocity = fdmexec.GetPropagate().GetUVW(1)
        expected_velocity = convert_jsbsim_velocity(velocity)
        self.assertAlmostEqual(velocities.u, expected_velocity, 3)

        velocity = fdmexec.GetPropagate().GetUVW(2)
        expected_velocity = convert_jsbsim_velocity(velocity)
        self.assertAlmostEqual(velocities.v, expected_velocity, 3)

        velocity = fdmexec.GetPropagate().GetUVW(3)
        expected_velocity = convert_jsbsim_velocity(velocity)
        self.assertAlmostEqual(velocities.w, expected_velocity, 3)

        airspeed = fdmexec.GetAuxiliary().GetVcalibratedFPS()
        expected_airspeed = convert_jsbsim_velocity(airspeed)
        self.assertAlmostEqual(velocities.calibrated_airspeed,
                               expected_airspeed, 3)

        airspeed = fdmexec.GetAuxiliary().GetVequivalentFPS()
        expected_airspeed = convert_jsbsim_velocity(airspeed)
        self.assertAlmostEqual(velocities.equivalent_airspeed,
                               expected_airspeed, 3)
def main():
    huginn_data_path = configuration.get_data_path()

    fdm_builder = FDMBuilder(huginn_data_path)
    fdm_builder.aircraft = "Rascal"
    fdmexec = fdm_builder.create_fdm()

    with open("fdm_properties.txt", "r") as f, open("fdm_property_values.txt",
                                                    "w") as o:
        for line in f:
            property_name = line.strip()
            property_value = fdmexec.GetPropertyValue(property_name)
            print("%s\t%f" % (property_name, property_value))
            o.write("%s\t%f\n" % (property_name, property_value))
Esempio n. 19
0
    def test_gyroscope(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        sensors = Sensors(fdmexec)

        self.assertAlmostEqual(sensors.gyroscope.true_roll_rate,
                               math.degrees(fdmexec.GetPropagate().GetPQR(1)))
        self.assertAlmostEqual(sensors.gyroscope.true_pitch_rate,
                               math.degrees(fdmexec.GetPropagate().GetPQR(2)))
        self.assertAlmostEqual(sensors.gyroscope.true_yaw_rate,
                               math.degrees(fdmexec.GetPropagate().GetPQR(3)))
Esempio n. 20
0
    def test_pitot_tube(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        pitot_tube = PitotTube(fdmexec)

        self.assertAlmostEqual(
            pitot_tube.true_pressure,
            convert_jsbsim_pressure(fdmexec.GetAuxiliary().GetTotalPressure()),
            3)
        self.assertAlmostEqual(
            pitot_tube.pressure,
            pitot_tube.true_pressure + pitot_tube.measurement_noise, 3)
Esempio n. 21
0
    def test_thermometer(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        thermometer = Thermometer(fdmexec)

        self.assertAlmostEqual(
            thermometer.true_temperature,
            convert_jsbsim_temperature(
                fdmexec.GetAtmosphere().GetTemperature()))
        self.assertAlmostEqual(
            thermometer.temperature,
            thermometer.true_temperature + thermometer.measurement_noise)
Esempio n. 22
0
    def test_inertialNavigationSystem(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        ins = InertialNavigationSystem(fdmexec)

        self.assertAlmostEqual(ins.true_roll,
                               fdmexec.GetPropagate().GetEulerDeg(1), 3)
        self.assertAlmostEqual(ins.true_pitch,
                               fdmexec.GetPropagate().GetEulerDeg(2), 3)
        self.assertAlmostEqual(ins.true_latitude,
                               fdmexec.GetPropagate().GetLatitudeDeg(), 3)
        self.assertAlmostEqual(ins.true_longitude,
                               fdmexec.GetPropagate().GetLongitudeDeg(), 3)
        self.assertAlmostEqual(ins.true_altitude,
                               fdmexec.GetPropagate().GetAltitudeASLmeters(),
                               3)
        self.assertAlmostEqual(
            ins.true_airspeed,
            convert_jsbsim_velocity(fdmexec.GetAuxiliary().GetVtrueFPS()), 3)
        self.assertAlmostEqual(
            ins.true_heading, math.degrees(fdmexec.GetPropagate().GetEuler(3)),
            3)

        self.assertAlmostEqual(ins.roll,
                               ins.true_roll + ins.roll_measurement_noise, 3)
        self.assertAlmostEqual(ins.pitch,
                               ins.true_pitch + ins.pitch_measurement_noise, 3)
        self.assertAlmostEqual(
            ins.latitude, ins.true_latitude + ins.latitude_measurement_noise,
            3)
        self.assertAlmostEqual(
            ins.longitude,
            ins.true_longitude + ins.longitude_measurement_noise, 3)
        self.assertAlmostEqual(
            ins.altitude, ins.true_altitude + ins.altitude_measurement_noise,
            3)
        self.assertAlmostEqual(
            ins.airspeed, ins.true_airspeed + ins.airspeed_measurement_noise,
            3)
        self.assertAlmostEqual(
            ins.heading, ins.true_heading + ins.heading_measurement_noise, 3)
Esempio n. 23
0
    def test_run_for(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        simulator = Simulator(fdmexec)

        time_to_run = 1.0

        start_time = simulator.simulation_time
        expected_end_time = start_time + time_to_run

        result = simulator.run_for(time_to_run)

        self.assertTrue(result)
        self.assertAlmostEqual(expected_end_time, simulator.simulation_time, 2)
Esempio n. 24
0
    def test_aircraft_position(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        position = Position(fdmexec)

        self.assertAlmostEqual(position.latitude,
                               fdmexec.GetPropagate().GetLatitudeDeg(), 3)
        self.assertAlmostEqual(position.longitude,
                               fdmexec.GetPropagate().GetLongitudeDeg(), 3)
        self.assertAlmostEqual(position.altitude,
                               fdmexec.GetPropagate().GetAltitudeASLmeters(),
                               3)
        self.assertAlmostEqual(
            position.heading, math.degrees(fdmexec.GetPropagate().GetEuler(3)),
            3)
Esempio n. 25
0
    def test_gps(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        gps = GPS(fdmexec)

        self.assertAlmostEqual(gps.latitude,
                               fdmexec.GetPropagate().GetLatitudeDeg())
        self.assertAlmostEqual(gps.longitude,
                               fdmexec.GetPropagate().GetLongitudeDeg())
        self.assertAlmostEqual(gps.altitude,
                               fdmexec.GetPropagate().GetAltitudeASLmeters())
        self.assertAlmostEqual(
            gps.airspeed,
            convert_jsbsim_velocity(fdmexec.GetAuxiliary().GetVtrueFPS()))
        self.assertAlmostEqual(
            gps.heading, math.degrees(fdmexec.GetPropagate().GetEuler(3)))
Esempio n. 26
0
    def test_run_with_real_fdmexec(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        self.assertIsNotNone(fdmexec)

        simulator = Simulator(fdmexec)

        start_time = simulator.simulation_time

        simulator.resume()

        #run_result = aircraft.run()
        simulator.run()

        self.assertAlmostEqual(simulator.simulation_time,
                               start_time + configuration.DT, 6)
Esempio n. 27
0
    def test_fill_pitot_tube_data(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        aircraft = Aircraft(fdmexec)

        factory = SensorDataFactory(aircraft)

        protocol = factory.buildProtocol(("127.0.0.1", 12345))

        sensor_data_response = fdm_pb2.SensorDataResponse()

        protocol.fill_pitot_tube_data(sensor_data_response)

        self.assertAlmostEqual(sensor_data_response.pitot_tube.pressure,
                               aircraft.sensors.pitot_tube.pressure)

        self.assertEqual(sensor_data_response.type, fdm_pb2.PITOT_TUBE_REQUEST)
Esempio n. 28
0
    def test_accelerometer(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        sensors = Sensors(fdmexec)

        self.assertAlmostEqual(
            sensors.accelerometer.true_x,
            convert_jsbsim_acceleration(
                fdmexec.GetAuxiliary().GetPilotAccel(1)))
        self.assertAlmostEqual(
            sensors.accelerometer.true_y,
            convert_jsbsim_acceleration(
                fdmexec.GetAuxiliary().GetPilotAccel(2)))
        self.assertAlmostEqual(
            sensors.accelerometer.true_z,
            convert_jsbsim_acceleration(
                fdmexec.GetAuxiliary().GetPilotAccel(3)))
Esempio n. 29
0
    def test_schedule_update(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        update_rate = 50

        sensor = MockSensor(fdmexec, update_rate)

        sensor._update_sensor = MagicMock()

        data = sensor.value

        sensor._update_sensor.assert_not_called()

        while fdmexec.GetSimTime() < sensor._update_at + 0.1:
            fdmexec.Run()

        data = sensor.value

        sensor._update_sensor.assert_called_once()
Esempio n. 30
0
    def test_pitot_tube_meaurement_noise_update(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdm_builder.aircraft = "Rascal"
        fdmexec = fdm_builder.create_fdm()

        pitot_tube = PitotTube(fdmexec)

        pitot_tube._measurement_noise = 0.0

        fdmexec.Run()

        self.assertEqual(pitot_tube._measurement_noise, 0.0)
        self.assertEqual(pitot_tube.measurement_noise, 0.0)

        run_until = fdmexec.GetSimTime() + (1.0 / pitot_tube.update_rate) + 1.0
        while fdmexec.GetSimTime() < run_until:
            fdmexec.Run()

        self.assertNotEqual(pitot_tube.measurement_noise, 0.0)
        self.assertEqual(pitot_tube.measurement_noise,
                         pitot_tube._measurement_noise)