EigenAxisSlew#

class m4opt.dynamics.EigenAxisSlew(max_angular_velocity, max_angular_acceleration, settling_time=<Quantity 0. s>)[source] [edit on github]#

Bases: Slew

Model 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.

../_images/m4opt-dynamics-EigenAxisSlew-1.svg

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

max_angular_acceleration

Maximum angular acceleration.

max_angular_velocity

Maximum angular rate.

settling_time

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_velocity (Annotated[Quantity, PhysicalType({'angular frequency', 'angular speed', 'angular velocity'})])

  • max_angular_acceleration (Annotated[Quantity, PhysicalType('angular acceleration')])

  • settling_time (Annotated[Quantity, PhysicalType('time')])

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:

Annotated[Quantity, PhysicalType(‘angle’)]

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:

Annotated[Quantity, PhysicalType(‘time’)]