예제 #1
0
    def test_get_fdm_data(self):
        huginn_data_path = configuration.get_data_path()

        fdm_builder = FDMBuilder(huginn_data_path)
        fdmexec = fdm_builder.create_fdm()

        aircraft = Aircraft(fdmexec)
        fdm = FDM(fdmexec)
        
        resource = FDMResource(fdm, aircraft)

        fdm_data = resource.get()

        self.assertAlmostEqual(fdm.fdmexec.GetSimTime(), fdm_data["time"], 3)
        self.assertAlmostEqual(fdm.fdmexec.GetDeltaT(), fdm_data["dt"], 3)
        self.assertAlmostEqual(fdm.position.latitude, fdm_data["latitude"], 3)
        self.assertAlmostEqual(fdm.position.longitude, fdm_data["longitude"], 3)
        self.assertAlmostEqual(fdm.position.altitude, fdm_data["altitude"], 3)
        self.assertAlmostEqual(fdm.velocities.true_airspeed, fdm_data["airspeed"], 3)
        self.assertAlmostEqual(fdm.position.heading, fdm_data["heading"], 3)
        self.assertAlmostEqual(fdm.accelerations.x, fdm_data["x_acceleration"], 3)
        self.assertAlmostEqual(fdm.accelerations.y, fdm_data["y_acceleration"], 3)
        self.assertAlmostEqual(fdm.accelerations.z, fdm_data["z_acceleration"], 3)
        self.assertAlmostEqual(fdm.velocities.p, fdm_data["roll_rate"], 3)
        self.assertAlmostEqual(fdm.velocities.q, fdm_data["pitch_rate"], 3)
        self.assertAlmostEqual(fdm.velocities.r, fdm_data["yaw_rate"], 3)
        self.assertAlmostEqual(fdm.atmosphere.temperature, fdm_data["temperature"], 3)
        self.assertAlmostEqual(fdm.atmosphere.pressure, fdm_data["static_pressure"], 3)
        self.assertAlmostEqual(aircraft.sensors.pitot_tube.true_pressure, fdm_data["total_pressure"], 3)
        self.assertAlmostEqual(fdm.orientation.phi, fdm_data["roll"], 3)
        self.assertAlmostEqual(fdm.orientation.theta, fdm_data["pitch"], 3)

        climb_rate = convert_jsbsim_velocity(-fdmexec.GetPropagate().GetVel(3))
        
        self.assertAlmostEqual(climb_rate, fdm_data["climb_rate"], 3)
예제 #2
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)
예제 #3
0
    def test_convert_velocity(self):
        velocity = 1.0
        
        expected_velocity = 0.3048

        converted_velocity = convert_jsbsim_velocity(velocity)

        self.assertAlmostEqual(converted_velocity, expected_velocity, 3)
예제 #4
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)
예제 #5
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)
예제 #6
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)))
예제 #7
0
    def ground_speed(self):
        """Returns the ground speed in meters/sec"""
        airspeed = self.fdmexec.GetAuxiliary().GetVground()

        return convert_jsbsim_velocity(airspeed)
예제 #8
0
    def equivalent_airspeed(self):
        """Returns the equivalent airspeed in meters/sec"""
        airspeed = self.fdmexec.GetAuxiliary().GetVequivalentFPS()

        return convert_jsbsim_velocity(airspeed)
예제 #9
0
    def calibrated_airspeed(self):
        """Returns the calibrated airspeed in meters/sec"""
        airspeed = self.fdmexec.GetAuxiliary().GetVcalibratedFPS()

        return convert_jsbsim_velocity(airspeed)
예제 #10
0
    def w(self):
        """Returns the w item of the body frame velocity vector in
        meters/sec"""
        velocity = self.fdmexec.GetPropagate().GetUVW(3)

        return convert_jsbsim_velocity(velocity)
예제 #11
0
    def climb_rate(self):
        """Return the vertical velocity in meters/seconds"""
        # climb_rate = self.fdmexec.GetPropertyValue("velocities/v-down-fps")
        climb_rate = -self.fdmexec.GetPropagate().GetVel(3)

        return convert_jsbsim_velocity(climb_rate)
예제 #12
0
    def true_airspeed(self):
        """Return the true airspeed in meters/second"""
        airspeed = self.fdmexec.GetAuxiliary().GetVtrueFPS()

        return convert_jsbsim_velocity(airspeed)