Dynamics: Reaction Wheel Array
Description
The reaction wheel array component is a container and interface for a set of ReactionWheel
modules. By default, it registers any reaction wheel component that has been attached to it as a child object as part of its array to manage. It’s primary purpose is to act as a single interface to control the attached reaction wheel array and to collect ensemble information e.g. reaction wheel mass properties and contributions to the parent object Equations of Motion (EOM). This design is to simplify user interactions (e.g. one command message array can be attached to a single object instead of individual commands to each reaction wheel) and to better support unit-specific model calibration (e.g. calibrating each reaction wheel to represent measured performance).
Example Use Cases
- Reaction Wheel Actuators: This module can be used as the primary interface for a reaction wheel-based actuation set in an ADCS.
Module Implementation
Unlike other modules, the ReactionWheelArray
component is designed to act as the interface between instances of the ReactionWheel
class and the parent object’s equations of motion (EOM) e.g. the spacecraft. As a result, the ReactionWheel
class does not implement the standard UpdateMassProperties
and UpdateContributions
functions described in the Spacecraft
module. Instead, those methods are implemented here and this module calls reaction wheel specific behaviors. This is to ensure that reaction wheels do not double their contribution to the parent component.
Note
A limitation of this approach is that the reaction wheel module must connected to a reaction wheel array, even if it’s a singleton, to function correctly. The following sections provide high-level pseudo-code illustrating the behaviour of the main ReactionWheelArray
methods.
On Begin
At the beginning of every simulation, this module will attempt to fetch all of the reaction wheels that exist as components attached to the reaction wheel stack. Here it will recursively search through child components for components with Type ReactionWheel
and return an array of ReactionWheel
modules.
Register States
The ReactionWheel
class is an example of a module that has a local StateProperty
variable that requires integration. In its current implementation, it uses the spacecraft’s integrator integrate the reaction wheel speed and rotation angle, where specific ReactionWheel
model's primary task to to specify the derivates of these properties. The pseudo-code provided below gives an example of how the reaction wheel array registers its child ReactionWheel
components with the spacecraft integrator. See the ReactionWheel
module description for more details on how these parameters are used.
- Loop through the reaction wheels and record the important parameters for each wheel, updating a local state array.
- Request new states in the state properties to be integrated during the update call
- Set the initial values of the states to be equal to the values from the reaction wheels.
On Update
At every tick step, the module follows the following procedure:
The module checks for a valid array of torque command messages, which are the primary mechanism required to command reaction wheel speeds. If the message is null, torque requests are zeroed by default.
The input reaction wheel torque command array is distributed amongst attached reaction wheels.
Note
The assumption is that the index of attached children matches the reaction wheel configuration message that’s provided to the flight software. This configuration message is output from the
ReactionWheelArray
object but a command error pattern is to misalign this command array. This must be done manually.Triggers a write output message function on self.
Update Mass Properties
As discussed above, unlike most components, the ReactionWheel
module does not implement an UpdateMassProperties
function. Instead, as shown below, the ReactionWheelArray
component implements this function and calls an RW-specific update mass properties function. It’s important to note, that this function updates the local mass information stored on each reaction wheel as normal.
Assumptions/Limitations
- Reaction wheels are assumed to be added to the reaction wheel array as child components.