EigenAxisSlew#
- class m4opt.dynamics.EigenAxisSlew(max_angular_velocity, max_angular_acceleration, settling_time=<Quantity 0. s>)[source] [edit on github]#
Bases:
SlewModel slew time for a spacecraft employing an eigenaxis maneuver.
An eigenaxis maneuver is a rotation along the path of shortest angular separation, about a single axis. Assuming that the spaceraft has a maximum angular acceleration and angular rate, the fastest possible eigenaxis maneuver is a “bang-bang” trajectory consisting of an acceleration phase at the maximum acceleration, possibly a coasting phase at the maximum angular velocity, and a deceleration phase at the maximum acceleration, as shown in the figure below.
Notes
An eigenaxis maneuver is generally not the fastest possible slew maneuver, even for a spacecraft with symmetric moment of inertia and symmetric torque limits [1].
References
Attributes Summary
Maximum angular acceleration.
Maximum angular rate.
Time to settle to rest after a slew.
Methods Summary
separation(center1, center2[, roll1, roll2])Determine the smallest angle to slew between two attitudes.
time(center1, center2[, roll1, roll2])Calculate the time to execute an optimal slew.
Attributes Documentation
- Parameters:
- max_angular_acceleration: Annotated[Quantity, PhysicalType('angular acceleration')] = <dataclasses._MISSING_TYPE object>#
Maximum angular acceleration.
- max_angular_velocity: Quantity, PhysicalType({'angular frequency', 'angular speed', 'angular velocity'})] = <dataclasses._MISSING_TYPE object>#
Maximum angular rate.
- settling_time: Annotated[Quantity, PhysicalType('time')] = <Quantity 0. s>#
Time to settle to rest after a slew.
Methods Documentation
- static separation(center1, center2, roll1=<Quantity 0. rad>, roll2=<Quantity 0. rad>)[source] [edit on github]#
Determine the smallest angle to slew between two attitudes.
- Parameters:
- Returns:
Shortest possible angular separation of the two orientations.
- Return type:
Examples
>>> from astropy.coordinates import SkyCoord >>> from astropy import units as u >>> from m4opt.dynamics import EigenAxisSlew >>> c1 = SkyCoord(0 * u.deg, 20 * u.deg) >>> c2 = SkyCoord(0 * u.deg, 40 * u.deg) >>> roll1 = 20 * u.deg >>> roll2 = 40 * u.deg >>> EigenAxisSlew.separation(c1, c2) <Angle 20. deg> >>> EigenAxisSlew.separation(c1, c1, roll1, roll2) <Angle 20. deg> >>> EigenAxisSlew.separation(c1, c2, roll1, roll2) <Angle 28.21208852 deg>
- time(center1, center2, roll1=<Quantity 0. rad>, roll2=<Quantity 0. rad>)[source] [edit on github]#
Calculate the time to execute an optimal slew.
- Parameters:
- Returns:
Time to slew between the two orientations.
- Return type: