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)
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)
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)
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 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)
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)))
def ground_speed(self): """Returns the ground speed in meters/sec""" airspeed = self.fdmexec.GetAuxiliary().GetVground() return convert_jsbsim_velocity(airspeed)
def equivalent_airspeed(self): """Returns the equivalent airspeed in meters/sec""" airspeed = self.fdmexec.GetAuxiliary().GetVequivalentFPS() return convert_jsbsim_velocity(airspeed)
def calibrated_airspeed(self): """Returns the calibrated airspeed in meters/sec""" airspeed = self.fdmexec.GetAuxiliary().GetVcalibratedFPS() return convert_jsbsim_velocity(airspeed)
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)
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)
def true_airspeed(self): """Return the true airspeed in meters/second""" airspeed = self.fdmexec.GetAuxiliary().GetVtrueFPS() return convert_jsbsim_velocity(airspeed)