|
| 1 | +Executive Summary |
| 2 | +----------------- |
| 3 | + |
| 4 | +This module reads in the Reaction Wheel (RW) speeds, determines the net RW momentum, and then determines the amount of angular momentum that must be dumped. |
| 5 | + |
| 6 | +A separate thruster firing logic module called thrMomentumDumping will later on compute the thruster on cycling. The module |
| 7 | +:download:`PDF Description </../../src/fswAlgorithms/attControl/thrMomentumManagement/_Documentation/Basilisk-thrMomentumManagement-20160817.pdf>` |
| 8 | +contains further information on this module's function, how to run it, as well as testing. |
| 9 | + |
| 10 | +Module Input and Output |
| 11 | +======================= |
| 12 | + |
| 13 | +The module input and output messages are illustrated in Figure~\ref{fig:moduleImg}. The module has a single output message of type {\tt CmdTorqueBodyIntMsg} which contains the desired momentum change $\leftexp{B}{\Delta}\bm H$. |
| 14 | + |
| 15 | +There are 2 required input messages. The message of type {\tt RWArrayConfigMsg} is read in during the {\tt Reset()} method and provides the RW configuration states. The message of type {\tt RWSpeedMsg} provides the current RW speeds and is read in during the {\tt Update()} method. |
| 16 | + |
| 17 | +Table `1 <#tab:inputRWSpeedTable>`__ shows the input message with the reaction wheel speed information. |
| 18 | + |
| 19 | +.. container:: |
| 20 | + :name: tab:inputRWSpeedTable |
| 21 | + |
| 22 | + .. table:: Input RW Speed Message |
| 23 | + |
| 24 | + +--------------------------+-----------+--------+------------------------------+ |
| 25 | + | Name | Type | Length | Description | |
| 26 | + +==========================+===========+========+==============================+ |
| 27 | + | :math:`\Omega` | double | 1 | Angular velocity of the | |
| 28 | + | | | | reaction wheels | |
| 29 | + +--------------------------+-----------+--------+------------------------------+ |
| 30 | + | :math:`\theta` | double | 1 | Angle of the reaction wheels | |
| 31 | + +--------------------------+-----------+--------+------------------------------+ |
| 32 | + |
| 33 | +Table `2 <#tab:inputRWArrayTable>`__ shows the input message about the reaction wheel array information. |
| 34 | + |
| 35 | +.. container:: |
| 36 | + :name: tab:inputRWArrayTable |
| 37 | + |
| 38 | + .. table:: Input RW Array Message |
| 39 | + |
| 40 | + +--------------------------+-----------+--------+------------------------------+ |
| 41 | + | Name | Type | Length | Description | |
| 42 | + +==========================+===========+========+==============================+ |
| 43 | + | :math:`\boldsymbol{G}_S` | double [] | 3 | Reaction wheel spin axis | |
| 44 | + +--------------------------+-----------+--------+------------------------------+ |
| 45 | + | :math:`J_S` | double | 1 | Reaction wheel inertia about | |
| 46 | + | | | | its spin axismmmmmmm | |
| 47 | + +--------------------------+-----------+--------+------------------------------+ |
| 48 | + | :math:`n_{\text{RW}}` | int | 1 | Number of reaction wheels | |
| 49 | + +--------------------------+-----------+--------+------------------------------+ |
| 50 | + | :math:`u_{\text{max}}` | double | 1 | Maximum motor torque | |
| 51 | + +--------------------------+-----------+--------+------------------------------+ |
| 52 | + |
| 53 | +Table `3 <#tab:outputTorqueTable>`__ shows the output message of the module. |
| 54 | + |
| 55 | +.. container:: |
| 56 | + :name: tab:outputTorqueTable |
| 57 | + |
| 58 | + .. table:: Output Torque Message |
| 59 | + |
| 60 | + +--------------------------+-----------+--------+------------------------------+ |
| 61 | + | Name | Type | Length | Description | |
| 62 | + +==========================+===========+========+==============================+ |
| 63 | + | :math:`\boldsymbol{L}_r` | double [] | 3 | Requested torque applied to | |
| 64 | + | | | | the hub as an external torque| |
| 65 | + +--------------------------+-----------+--------+------------------------------+ |
| 66 | + |
| 67 | +Module Description |
| 68 | +================== |
| 69 | + |
| 70 | +To manage the Reaction Wheel (RW) angular momentum build-up over time, a thruster-based momentum dumping strategy is used. The output of {\tt thrMomentumManagement} module is a :math:`\Delta \boldsymbol H` vector. This output is then mapped into a thruster impulse request using the {\tt thrForceMapping} module. Note that this latter module is designed to map a control torque vector into thruster forces. If the input torque and output force sets are multiplied by time, the same module also functions to map a desired angular momentum changes vector :math:`\Delta H` into a set of thruster impulse requests. The final module {\tt thrMomentumDumping} in the series takes the thruster impulse requests and determines a thruster firing sequence to achieve this desired momentum change. The spacecraft attitude is held constant by simultaneously having a RW control module holding an inertial attitude. The process of holding the desired attitude leads to the RWs despinning to the desired level due the external thruster disturbances. |
| 71 | + |
| 72 | +Assume the spacecraft contains :math:`N_{\text{RW}}` RWs. The net RW angular momentum is given by |
| 73 | + |
| 74 | +.. math:: |
| 75 | +
|
| 76 | + \begin{equation} |
| 77 | + \boldsymbol h_{s} = \sum_{i=1}^{N_{\text{RW}}} \hat{\boldsymbol g}_{s_{i}} J_{s_{i}} \Omega_{i} |
| 78 | + \end{equation} |
| 79 | +where :math:`\hat{\boldsymbol g}_{s_{i}}` is the RW spin axis, :math:`J_{s_{i}}` is the spin axis RW inertia and :math:`\Omega_{i}` is the RW speed rate about this axis. |
| 80 | +Because the inertial attitude of the spacecraft is assumed to be held nominally steady the body-relative RW cluster angular momentum rate can be approximated as |
| 81 | + |
| 82 | +.. math:: |
| 83 | +
|
| 84 | + \begin{equation} |
| 85 | + \dot{\boldsymbol h}_{s} = \frac{{}^{\mathcal{B}}{\text{d}}\boldsymbol h_{s}}{\text{d} t} + \boldsymbol\omega_{\mathcal{B}/N} \times \boldsymbol h_{s} \approx \frac{{}^{\mathcal{B}}{\text{d}}\boldsymbol h_{s}}{\text{d} t} |
| 86 | + \end{equation} |
| 87 | +
|
| 88 | +Let :math:`h_{s,\text{min}}` be lower bound that the RW momentum dumping strategy should achieve. The desired net change in inertial angular momentum is thus determined through |
| 89 | + |
| 90 | +.. math:: |
| 91 | +
|
| 92 | + \begin{equation} |
| 93 | + {}^{\mathcal{B}}{\Delta}\boldsymbol H = -{}^{\mathcal{B}}{\boldsymbol h}_{s} \frac{ |
| 94 | + |\boldsymbol h_{s}| - h_{s,\text{min}} |
| 95 | + }{|\boldsymbol h_{s}|} |
| 96 | + \end{equation} |
| 97 | +
|
| 98 | +This strategy requires a thruster firing solution which creates this desired :math:`{}^{\mathcal{B}}{\Delta}\boldsymbol H` over the duration of the momentum dumping. The goal of the RW momentum management module is to simply compute if a :math:`{}^{\mathcal{B}}{\Delta}\boldsymbol H` is required, or set it equal to zero if the RW momentum is too small. Not that this module will only compute :math:`{}^{\mathcal{B}}{\Delta}\boldsymbol H` once. Either it is zero or non-zero. To reuse this momentum management module, the reset() function must be called. |
| 99 | + |
| 100 | +The Reset Method |
| 101 | +================ |
| 102 | + |
| 103 | +The ``Reset()`` method reads in the RW configuration message and then resets the flag to do the angular momentum checking. The goal here is to do this momentum checking only once after the reset function is called, rather than doing this checking autonomously. |
| 104 | + |
| 105 | +Message Connection Descriptions |
| 106 | +------------------------------- |
| 107 | +The following table lists all the module input and output messages. The module msg connection is set by the |
| 108 | +user from python. The msg type contains a link to the message structure definition, while the description |
| 109 | +provides information on what this message is used for. |
| 110 | + |
| 111 | +.. list-table:: Module I/O Messages |
| 112 | + :widths: 25 25 50 |
| 113 | + :header-rows: 1 |
| 114 | + |
| 115 | + * - Msg Variable Name |
| 116 | + - Msg Type |
| 117 | + - Description |
| 118 | + * - deltaHOutMsg |
| 119 | + - :ref:`CmdTorqueBodyMsgPayload` |
| 120 | + - output message with the requested inertial angular momentum change |
| 121 | + * - rwSpeedsInMsg |
| 122 | + - :ref:`RWSpeedMsgPayload` |
| 123 | + - reaction wheel speed input message |
| 124 | + * - rwConfigDataInMsg |
| 125 | + - :ref:`RWArrayConfigMsgPayload` |
| 126 | + - name of the RWA configuration message |
0 commit comments