@@ -1309,10 +1309,10 @@ def uDot(self, t, u, postProcessing=False):
1309
1309
# Motor burning
1310
1310
# Retrieve important motor quantities
1311
1311
# 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 )
1316
1316
# Mass
1317
1317
MtDot = self .rocket .motor .massDot .getValueOpt (t )
1318
1318
Mt = self .rocket .motor .mass .getValueOpt (t )
@@ -1333,8 +1333,8 @@ def uDot(self, t, u, postProcessing=False):
1333
1333
1334
1334
# Retrieve important quantities
1335
1335
# 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
1338
1338
# Mass
1339
1339
Mr = self .rocket .mass
1340
1340
M = Mt + Mr
@@ -1568,35 +1568,52 @@ def uDotGeneralized(self, t, u, postProcessing=False):
1568
1568
x , y , z , vx , vy , vz , q0 , q1 , q2 , q3 , omega1 , omega2 , omega3 = u
1569
1569
1570
1570
# 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 )
1575
1575
1576
1576
# 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 )
1593
1595
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
1594
1611
# Load nozzle data
1595
1612
r_noz_scalar = (
1596
1613
self .rocket .distanceRocketNozzle
1597
1614
) # 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
1600
1617
S_noz_yy = S_noz_xx
1601
1618
S_noz_xy = 0
1602
1619
S_noz_yz = 0
@@ -1606,8 +1623,8 @@ def uDotGeneralized(self, t, u, postProcessing=False):
1606
1623
r_cm_scalar = self .rocket .centerOfMass .getValueOpt (
1607
1624
t
1608
1625
) # 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 )
1611
1628
1612
1629
# Compute forces and moments
1613
1630
g = self .env .g
@@ -1713,7 +1730,7 @@ def uDotGeneralized(self, t, u, postProcessing=False):
1713
1730
1714
1731
# Compute matrices
1715
1732
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
1717
1734
)
1718
1735
b_vector = bb .autofunc_c (
1719
1736
q0 ,
@@ -1723,36 +1740,36 @@ def uDotGeneralized(self, t, u, postProcessing=False):
1723
1740
omega1 ,
1724
1741
omega2 ,
1725
1742
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 ,
1733
1750
r_cm_scalar ,
1734
- r_cmd ,
1735
- r_cmdd ,
1751
+ r_cm_d ,
1752
+ r_cm_dd ,
1736
1753
r_noz_scalar ,
1737
1754
R3 ,
1738
1755
R1 ,
1739
1756
R2 ,
1740
1757
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 ,
1756
1773
g ,
1757
1774
S_noz_xx ,
1758
1775
S_noz_yy ,
@@ -1773,10 +1790,10 @@ def uDotGeneralized(self, t, u, postProcessing=False):
1773
1790
ax ,
1774
1791
ay ,
1775
1792
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 ,
1780
1797
alpha1 ,
1781
1798
alpha2 ,
1782
1799
alpha3 ,
@@ -2334,10 +2351,10 @@ def rotationalEnergy(self):
2334
2351
* self .rocket ._csys
2335
2352
)
2336
2353
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
2341
2358
I1 , I2 , I3 = (Ri + Ti + mu * b ** 2 ), (Ri + Ti + mu * b ** 2 ), (Rz + Tz )
2342
2359
# Redefine I1, I2 and I3 time grid to allow for efficient Function algebra
2343
2360
I1 .setDiscreteBasedOnModel (self .w1 )
0 commit comments