Dynamically change empty mass and inertia in-flight #961
Replies: 6 comments 5 replies
-
Reminds me of something I brought up on the JSBSim mailing list in 2018. I noticed in both the Airbus A330 paper and the B747 paper that they model the moments of inertia and cg location in a slightly different manner to the normal JSBSim manner. Instead of defining the empty weight moments of inertia and cg location and then making use of point masses to update the overall weight and update the moments of inertia and update the cg they define the moments of inertia using a formula or lookup table based on total weight and specify a cg location simply as cgx %. So for example from the Airbus model: Now looking at the source code for FGMassBalance it doesn’t look like it’s possible to set the moment of inertias using a function/table/property? It looks like you can only specify a fixed number and then you have to use point masses to effectively alter the moments of inertia by ‘adding them in’? And the same applies to the cg? <mass_balance>
<ixx unit="{SLUG*FT2 | KG*M2}"> {number} </ixx>
<iyy unit="{SLUG*FT2 | KG*M2}"> {number} </iyy>
<izz unit="{SLUG*FT2 | KG*M2}"> {number} </izz>
<ixy unit="{SLUG*FT2 | KG*M2}"> {number} </ixy>
<ixz unit="{SLUG*FT2 | KG*M2}"> {number} </ixz>
<iyz unit="{SLUG*FT2 | KG*M2}"> {number} </iyz>
<emptywt unit="{LBS | KG"> {number} </emptywt>
<location name="CG" unit="{IN | FT | M}">
<x> {number} </x>
<y> {number} </y>
<z> {number} </z>
</location> Or have I missed a simple work-around/mapping that would allow one to easily implement something like the A330 model? In particular in a Monte-Carlo setup the ideal would be to set a total weight property and cgx % property and have functions/tables that would work out the moments of inertia and cg location in the FDM. In the end no changes were made to the JSBSim source code to support the use of properties/functions/tables for setting/changing the moments of inertia and cg. It's still on my long list of JSBSim ToDo items to look into adding support to JSBSim to be able to easily and quickly make use of aircraft models that are specified as per the Airbus example above. Here are some snippets I'd also seen online in terms of how Boeing provides data to simulator manufacturers.
Roll Moment of Inertia - IXX (ignore misspelling of weight) |
Beta Was this translation helpful? Give feedback.
-
Here's a few other use-cases off the top of my head for dynamic mass / inertias:
Instantaneous change can be modelled as a point-mass easily enough. But there are many cases where mass / inertia changes continuously and not due to fuel. Sometimes solutions can be hacked together using a combination fuel-tanks and point-masses. Other times not. Did you ever find a work-around for your solution? Outside of a code-change to make mass / inertia be able to be dynamically updated? As much as I'd love the direct solution to be possible! |
Beta Was this translation helpful? Give feedback.
-
One option to modify the inertia without affecting the CG is to move 2 point masses that are located symmetrically with respect to the CG. I have modified the script <description>Simplest of all tests</description>
<use aircraft="ball" initialize="reset01"/>
<run start="0.0" end="600" dt="0.008333">
+ <property value="5.0">inertia/pointmass-weight-lbs[0]</property>
+ <property value="5.0">inertia/pointmass-weight-lbs[1]</property>
+ <property value="0.0">inertia/pointmass-location-Y-inches[1]</property>
+
+ <event name="Change Y inertia">
+ <condition>
+ position/h-agl-ft lt 9000
+ </condition>
+ <set name="inertia/pointmass-location-Y-inches[0]" value="10.0" action="FG_STEP"/>
+ <set name="inertia/pointmass-location-Y-inches[1]" value="-10.0" action="FG_STEP"/>
+ <notify>
+ <property>inertia/weight-lbs</property>
+ <property>inertia/cg-x-in</property>
+ <property>inertia/cg-y-in</property>
+ <property>inertia/cg-x-in</property>
+ <property>inertia/ixx-slugs_ft2</property>
+ <property>inertia/iyy-slugs_ft2</property>
+ <property>inertia/izz-slugs_ft2</property>
+ </notify>
+ </event>
<event name="Reef 1">
<description> Test of parachute reefing </description>
@@ -15,6 +35,13 @@
<set name="fcs/parachute_reef_pos_norm" value="0.2" action="FG_RAMP" tc="1.0"/>
<notify>
<property>simulation/sim-time-sec</property>
+ <property>inertia/weight-lbs</property>
+ <property>inertia/cg-x-in</property>
+ <property>inertia/cg-y-in</property>
+ <property>inertia/cg-x-in</property>
+ <property>inertia/ixx-slugs_ft2</property>
+ <property>inertia/iyy-slugs_ft2</property>
+ <property>inertia/izz-slugs_ft2</property>
</notify>
</event> It gives the following output. As you can see the inertia Ixx and Iyy are modified by the CG position and Iyy are not.
|
Beta Was this translation helpful? Give feedback.
-
No I didn't. At the time I think @bcoconni mentioned the "dumbbell" suggestion that he's mentioned above. |
Beta Was this translation helpful? Give feedback.
-
This is a good suggestion. I took it to it's logical conclusion, and added 6 point masses (2 equal and opposite for each axis) and derived the relationship for controlling all 3 axes moments of inertia: (My algebra skills are very fallible so if anyone wants to use this ^, I would recommend double checking my math) There is an issue though. The system of equations has a imaginary roots if the added inertia (the C terms) in one axis is greater than the sum of the added inertia in the other two axes. The limitations of only being able to shift moment of inertia 2-axes at a time creates this. So it's not possible to shift to any arbitrary system of Ixx, Iyy and Izz, but there is a subset of Ixx, Iyy, Izz values where this solution works. I'll have to do some analysis work to figure out what situations work and which don't for the expected moment of inertia shifts for my system. |
Beta Was this translation helpful? Give feedback.
-
Update: After messing about with some of the tutorial files, I appear to have found a solution that's much less of a hack. As it turns out, there is a JSBSim tutorial with this exact problem. The airship model has a system file called "airship_added_mass.xml" . It's the same physical phenomenon in action (applied to airships rather than parafoils). To model the "mass" and "inertia" terms, they apply an external force / moment opposite to the direction of acceleration, whose magnitude is equal to the added mass / inertia. This has the same effect as adding additional mass or inertia:
I fiddled with this a bit, and it does work, but seems to give me stability issues if the system is undergoing a lot of change (in my case, during parafoil deployment). The airship solution to this problem is to just turn off the apparent mass effects until the system has stabilized after initialization. I implemented the same solution, and while it does work, I do lose the impacts of the apparent mass on parafoil inflation (something I've been struggling to model, and is a bulk of the point of my project). But this is probably the best I can hope for. |
Beta Was this translation helpful? Give feedback.
-
Hey everyone,
I'm attempting to model a parafoil in JSBSim, and have been presented with an interesting challenge. To accurately model a parafoil, it is necessary to be able to continuously change its mass and moment of inertia in flight, due to apparent mass effects acting on the parafoil by the air-mass. This is a common process done in parafoil dynamic modelling. Here is a link to a paper on the subject for the curious:
http://jtam.pl/Apparent-masses-and-inertia-moments-of-the-parafoil-,102141,0,2.html
This paper gives simple algebraic estimates apparent mass and moment of inertia terms. All scale as a function of air-density. These terms are very significant to the parafoil flight behaviour, especially for high-altitude deployments, where the parafoil inertia may be half of what it is near-ground! This means I cannot simply include them as part of an unchanging empty-mass and empty-inertia properties if I want the parafoil to be modelled correctly through changing altitudes. In my JSBSim model, I have created functions of these apparent mass terms, but am unable to dynamically set the empty mass or empty moments of inertia terms in accordance with the changing apparent mass functions. These properties are read-only. Would anyone know of a way I can get around this limitation in JSBSim? How can I dynamically change mass and moment of inertia?
What I've tried so far
1-Using fuel tanks: tried positioning a fictious "fuel-tank" at the center of gravity and filled / emptied it with "fuel" dynamically with my apparent mass function. This worked but doing the equivalent with moments of inertia proved difficult. Changing all 3-axes moment of inertias in this way is a challenge, since adjusting the "fuel" mass in any tank offset from the CoG changes the inertia in 2 different axes. I tried deriving a relationship to calculate a "fuel" loading in 3 tanks (offset in X, Y, Z respectively), but this got complicated fast, so I gave up on this solution. There has to be an easier way.
2-Using external forces: Apply an external force / moment equal to impact of the mass / inertia. Like this: F_ap_mass = - app_mass * accel, in all three axes. And M_app_inert = - app_inert * rot_accel. I like the idea of this solution a lot, since the apparent mass effects technically act directionally (although there are simplifications to reduce them to one mass term I can use with reduced accuracy). This didn't work though; it would cause the simulation to become unstable. I'm not sure why. My theory is that the solver struggles with including acceleration terms in functions for forces, since accelerations should be calculated as a consequence of forces? I don't know. If anyone has any ideas as to why this is not working, I'm all ears.
Anyways, that's my problem. I need to dynamically change mass and moment of inertia to specific values calculated based on the flight condition. If anyone has any work-arounds to the empty-mass / empty-moments-of-inertia being read-only values problem, I'd love to hear them. Thank you so much for your help!
Beta Was this translation helpful? Give feedback.
All reactions