本文整理汇总了Python中JSBSim_utils.CreateFDM.get_propagate方法的典型用法代码示例。如果您正苦于以下问题:Python CreateFDM.get_propagate方法的具体用法?Python CreateFDM.get_propagate怎么用?Python CreateFDM.get_propagate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类JSBSim_utils.CreateFDM
的用法示例。
在下文中一共展示了CreateFDM.get_propagate方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: testSteadyFlight
# 需要导入模块: from JSBSim_utils import CreateFDM [as 别名]
# 或者: from JSBSim_utils.CreateFDM import get_propagate [as 别名]
def testSteadyFlight(self):
script_name = 'c1722.xml'
script_path = self.sandbox.path_to_jsbsim_file('scripts', script_name)
self.AddAccelerometersToAircraft(script_path)
fdm = CreateFDM(self.sandbox)
fdm.set_aircraft_path('aircraft')
fdm.load_script(script_path)
# Switch the accel on
fdm['fcs/accelerometer/on'] = 1.0
# Use the standard gravity (i.e. GM/r^2)
fdm['simulation/gravity-model'] = 0
# Select an orientation such that frame transformations simplify
fdm['ic/psi-true-rad'] = 0.0
fdm.run_ic()
ExecuteUntil(fdm, 0.1)
fdm['simulation/do_simple_trim'] = 1
r = fdm['position/radius-to-vehicle-ft']
pitch = fdm['attitude/theta-rad']
roll = fdm['attitude/phi-rad']
latitude = fdm['position/lat-gc-rad']
g = fdm['accelerations/gravity-ft_sec2']
omega = 0.00007292115 # Earth rotation rate in rad/sec
fc = r * math.cos(latitude) * omega * omega # Centrifugal force
uvw = np.array(fdm.get_propagate().get_uvw().T)[0]
Omega = omega * np.array([math.cos(pitch - latitude),
math.sin(pitch - latitude) * math.sin(roll),
math.sin(pitch - latitude) * math.cos(roll)])
# Compute the acceleration measured by the accelerometer as the sum of
# the gravity and the centrifugal and Coriolis forces.
fa_yz = (fc * math.cos(latitude - pitch) - g * math.cos(pitch))
fa = np.array([(fc * math.sin(latitude - pitch) + g * math.sin(pitch)),
fa_yz * math.sin(roll),
fa_yz * math.cos(roll)]) + np.cross(2.0*Omega, uvw)
# After the trim we are close to the equilibrium but there remains a
# small residual that we have to take the bias into account
fax = fa[0] + fdm['accelerations/udot-ft_sec2']
fay = fa[1] + fdm['accelerations/vdot-ft_sec2']
faz = fa[2] + fdm['accelerations/wdot-ft_sec2']
# Deltas are relaxed because the tolerances of the trimming algorithm
# are quite relaxed themselves.
self.assertAlmostEqual(fdm['fcs/accelerometer/X'], fax, delta=1E-6)
self.assertAlmostEqual(fdm['fcs/accelerometer/Y'], fay, delta=1E-4)
self.assertAlmostEqual(fdm['fcs/accelerometer/Z'], faz, delta=1E-5)
del fdm