Skip to content

Commit 2381a6d

Browse files
committed
MAINT: Apply new inertia tensor naming to Flight class
1 parent ca55ed2 commit 2381a6d

File tree

1 file changed

+80
-63
lines changed

1 file changed

+80
-63
lines changed

rocketpy/Flight.py

Lines changed: 80 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1309,10 +1309,10 @@ def uDot(self, t, u, postProcessing=False):
13091309
# Motor burning
13101310
# Retrieve important motor quantities
13111311
# Inertias
1312-
Tz = self.rocket.motor.inertiaZ.getValueOpt(t)
1313-
Ti = self.rocket.motor.inertiaI.getValueOpt(t)
1314-
TzDot = self.rocket.motor.inertiaZDot.getValueOpt(t)
1315-
TiDot = self.rocket.motor.inertiaIDot.getValueOpt(t)
1312+
Tz = self.rocket.motor.I_33.getValueOpt(t)
1313+
Ti = self.rocket.motor.I_11.getValueOpt(t)
1314+
TzDot = self.rocket.motor.I_33.differentiate(t, dx=1e-6)
1315+
TiDot = self.rocket.motor.I_11.differentiate(t, dx=1e-6)
13161316
# Mass
13171317
MtDot = self.rocket.motor.massDot.getValueOpt(t)
13181318
Mt = self.rocket.motor.mass.getValueOpt(t)
@@ -1333,8 +1333,8 @@ def uDot(self, t, u, postProcessing=False):
13331333

13341334
# Retrieve important quantities
13351335
# Inertias
1336-
Rz = self.rocket.inertiaZ
1337-
Ri = self.rocket.inertiaI
1336+
Rz = self.rocket.dry_I_33
1337+
Ri = self.rocket.dry_I_11
13381338
# Mass
13391339
Mr = self.rocket.mass
13401340
M = Mt + Mr
@@ -1568,35 +1568,52 @@ def uDotGeneralized(self, t, u, postProcessing=False):
15681568
x, y, z, vx, vy, vz, q0, q1, q2, q3, omega1, omega2, omega3 = u
15691569

15701570
# Compute quaternion derivatives
1571-
q0d = 0.5 * (-omega1 * q1 - omega2 * q2 - omega3 * q3)
1572-
q1d = 0.5 * (omega1 * q0 + omega3 * q2 - omega2 * q3)
1573-
q2d = 0.5 * (omega2 * q0 - omega3 * q1 + omega1 * q3)
1574-
q3d = 0.5 * (omega3 * q0 + omega2 * q1 - omega1 * q2)
1571+
q_0_d = 0.5 * (-omega1 * q1 - omega2 * q2 - omega3 * q3)
1572+
q_1_d = 0.5 * (omega1 * q0 + omega3 * q2 - omega2 * q3)
1573+
q_2_d = 0.5 * (omega2 * q0 - omega3 * q1 + omega1 * q3)
1574+
q_3_d = 0.5 * (omega3 * q0 + omega2 * q1 - omega1 * q2)
15751575

15761576
# Load mass and inertia properties
1577-
M = self.rocket.mass + self.rocket.motor.mass.getValueOpt(t)
1578-
md = self.rocket.motor.massDot.getValueOpt(t)
1579-
mdd = self.rocket.motor.massDot.differentiate(t, dx=1e-6)
1580-
# TODO: implement self.rocket.IXX
1581-
Ixx = self.rocket.Ixx.getValueOpt(t)
1582-
Iyy = self.rocket.Iyy.getValueOpt(t)
1583-
Izz = self.rocket.Izz.getValueOpt(t)
1584-
Ixy = self.rocket.Ixy.getValueOpt(t)
1585-
Izx = self.rocket.Izx.getValueOpt(t)
1586-
Iyz = self.rocket.Iyz.getValueOpt(t)
1587-
Ixxd = self.rocket.Ixx.differentiate(t, dx=1e-6)
1588-
Iyyd = self.rocket.Iyy.differentiate(t, dx=1e-6)
1589-
Izzd = self.rocket.Izz.differentiate(t, dx=1e-6)
1590-
Ixyd = self.rocket.Ixy.differentiate(t, dx=1e-6)
1591-
Iyzd = self.rocket.Iyz.differentiate(t, dx=1e-6)
1592-
Izxd = self.rocket.Izx.differentiate(t, dx=1e-6)
1577+
dry_mass = self.rocket.mass
1578+
propellant_mass = self.rocket.motor.mass.getValueOpt(t)
1579+
total_mass = dry_mass + propellant_mass
1580+
reduced_mass = (dry_mass * propellant_mass) / (dry_mass + propellant_mass)
1581+
m_d = self.rocket.motor.massDot.getValueOpt(t)
1582+
m_dd = self.rocket.motor.massDot.differentiate(t, dx=1e-6)
1583+
I_11 = self.rocket.I_11.getValueOpt(t)
1584+
I_22 = self.rocket.I_22.getValueOpt(t)
1585+
I_33 = self.rocket.I_33.getValueOpt(t)
1586+
I_12 = self.rocket.I_12.getValueOpt(t)
1587+
I_13 = self.rocket.I_13.getValueOpt(t)
1588+
I_23 = self.rocket.I_23.getValueOpt(t)
1589+
I_11_d = self.rocket.I_11.differentiate(t, dx=1e-6)
1590+
I_22_d = self.rocket.I_22.differentiate(t, dx=1e-6)
1591+
I_33_d = self.rocket.I_33.differentiate(t, dx=1e-6)
1592+
I_12_d = self.rocket.I_12.differentiate(t, dx=1e-6)
1593+
I_13_d = self.rocket.I_13.differentiate(t, dx=1e-6)
1594+
I_23_d = self.rocket.I_23.differentiate(t, dx=1e-6)
15931595

1596+
# Geometry
1597+
# b = -self.rocket.distanceRocketPropellant
1598+
b = (
1599+
-(
1600+
self.rocket.centerOfPropellantPosition(0)
1601+
- self.rocket.centerOfDryMassPosition
1602+
)
1603+
* self.rocket._csys
1604+
)
1605+
# c = -self.rocket.distanceRocketNozzle
1606+
c = (
1607+
-(self.rocket.motorPosition - self.rocket.centerOfDryMassPosition)
1608+
* self.rocket._csys
1609+
)
1610+
a = b * propellant_mass / total_mass
15941611
# Load nozzle data
15951612
r_noz_scalar = (
15961613
self.rocket.distanceRocketNozzle
15971614
) # TODO: Make sure value is negative
1598-
S_noz_zz = self.rocket.motor.nozzleRadius**2
1599-
S_noz_xx = 0.5 * S_noz_zz
1615+
S_noz_zz = 0.5 * self.rocket.motor.nozzleRadius**2
1616+
S_noz_xx = 0.5 * S_noz_zz + 0.25 * c**2
16001617
S_noz_yy = S_noz_xx
16011618
S_noz_xy = 0
16021619
S_noz_yz = 0
@@ -1606,8 +1623,8 @@ def uDotGeneralized(self, t, u, postProcessing=False):
16061623
r_cm_scalar = self.rocket.centerOfMass.getValueOpt(
16071624
t
16081625
) # TODO: Make sure value is negative
1609-
r_cmd = self.rocket.centerOfMass.differentiate(t, dx=1e-6)
1610-
r_cmdd = self.rocket.centerOfMass.differentiate(t, order=2, dx=1e-6)
1626+
r_cm_d = self.rocket.centerOfMass.differentiate(t, dx=1e-6)
1627+
r_cm_dd = self.rocket.centerOfMass.differentiate(t, order=2, dx=1e-6)
16111628

16121629
# Compute forces and moments
16131630
g = self.env.g
@@ -1713,7 +1730,7 @@ def uDotGeneralized(self, t, u, postProcessing=False):
17131730

17141731
# Compute matrices
17151732
A_matrix = AA.autofunc_c(
1716-
M, r_cm_scalar, q0, q1, q2, q3, Ixx, Iyy, Izz, Ixy, Izx, Iyz
1733+
total_mass, r_cm_scalar, q0, q1, q2, q3, I_11, I_22, I_33, I_12, I_23, I_13
17171734
)
17181735
b_vector = bb.autofunc_c(
17191736
q0,
@@ -1723,36 +1740,36 @@ def uDotGeneralized(self, t, u, postProcessing=False):
17231740
omega1,
17241741
omega2,
17251742
omega3,
1726-
q0d,
1727-
q1d,
1728-
q2d,
1729-
q3d,
1730-
M,
1731-
md,
1732-
mdd,
1743+
q_0_d,
1744+
q_1_d,
1745+
q_2_d,
1746+
q_3_d,
1747+
total_mass,
1748+
m_d,
1749+
m_dd,
17331750
r_cm_scalar,
1734-
r_cmd,
1735-
r_cmdd,
1751+
r_cm_d,
1752+
r_cm_dd,
17361753
r_noz_scalar,
17371754
R3,
17381755
R1,
17391756
R2,
17401757
Thrust,
1741-
Ixx,
1742-
Iyy,
1743-
Izz,
1744-
Ixy,
1745-
Iyz,
1746-
Izx,
1747-
Ixxd,
1748-
Iyyd,
1749-
Izzd,
1750-
Ixyd,
1751-
Iyzd,
1752-
Izxd,
1753-
Mx,
1754-
My,
1755-
Mz,
1758+
I_11,
1759+
I_22,
1760+
I_33,
1761+
I_12,
1762+
I_23,
1763+
I_13,
1764+
I_11_d,
1765+
I_22_d,
1766+
I_33_d,
1767+
I_12_d,
1768+
I_23_d,
1769+
I_13_d,
1770+
M1,
1771+
M2,
1772+
M3,
17561773
g,
17571774
S_noz_xx,
17581775
S_noz_yy,
@@ -1773,10 +1790,10 @@ def uDotGeneralized(self, t, u, postProcessing=False):
17731790
ax,
17741791
ay,
17751792
az,
1776-
q0d,
1777-
q1d,
1778-
q2d,
1779-
q3d,
1793+
q_0_d,
1794+
q_1_d,
1795+
q_2_d,
1796+
q_3_d,
17801797
alpha1,
17811798
alpha2,
17821799
alpha3,
@@ -2334,10 +2351,10 @@ def rotationalEnergy(self):
23342351
* self.rocket._csys
23352352
)
23362353
mu = self.rocket.reducedMass
2337-
Rz = self.rocket.inertiaZ
2338-
Ri = self.rocket.inertiaI
2339-
Tz = self.rocket.motor.inertiaZ
2340-
Ti = self.rocket.motor.inertiaI
2354+
Rz = self.rocket.dry_I_33
2355+
Ri = self.rocket.dry_I_11
2356+
Tz = self.rocket.motor.I_33
2357+
Ti = self.rocket.motor.I_11
23412358
I1, I2, I3 = (Ri + Ti + mu * b**2), (Ri + Ti + mu * b**2), (Rz + Tz)
23422359
# Redefine I1, I2 and I3 time grid to allow for efficient Function algebra
23432360
I1.setDiscreteBasedOnModel(self.w1)

0 commit comments

Comments
 (0)