Module: MRP_Feedback

Executive Summary

This module provides a general MRP feedback control law. This 3-axis control can asymptotically track a general reference attitude trajectory. The module is setup to work with or without $N$ reaction wheels with general orientation. If the reaction wheel states are fed into this module, then the resulting RW gyroscopic terms are compensated for. If the wheel information is not present, then these terms are ignored.

Message Connection Descriptions

The following table lists all the module input and output messages. The module msg variable name is set by the user from python. The msg type contains a link to the message structure definition, while the description provides information on what this message is used for.

../../../../_images/moduleIOMrpFeedback.svg

Figure 1: MRP_Feedback() Module I/O Illustration

Module I/O Messages

Msg Variable Name

Msg Type

Description

inputGuidName

attGuidFswMsg

The name of the attitude guidance input message

vehConfigInMsgName

vehicleConfigFswMsg

Name of the vehicle configuration input message

rwParamsInMsgName

rwArrayConfigFswMsg

(Optional) The name of the RW array configuration input message

inputRWSpeedsName

rwSpeedIntMsg

(Optional) The name for the reaction wheel speeds message

rwAvailInMsgName

rwAvailabilityFswMsg

(Optional) The name of the RWs availability message

Detailed Module Description

General Function

The MRP_Feedback module creates the MRP attitude feedback control torque \({\bf L}_{r}\) developed in chapter 8 of Analytical Mechanics of Space Systems. The input and output messages are illustrated in Figure 1: MRP_Feedback() Module I/O Illustration. The output message is a body-frame control torque vector. The required attitude guidance message contains both attitude tracking error states as well as reference frame states. This message is read in with every update cycle. The vehicle configuration message is only read in on reset and contains the spacecraft inertia tensor about the vehicle’s center of mass location.

The MRP feedback control can compensate for Reaction Wheel (RW) gyroscopic effects as well. This is an optional input message where the RW configuration array message contains the RW spin axis \(\hat{\bf g}_{s,i}\) information and the RW polar inertia about the spin axis \(I_{W_{s,i}}\). This is only read in on reset. The RW speed message contains the RW speed \(\Omega_{i}\) and is read in every time step. The optional RW availability message can be used to include or not include RWs in the MRP feedback. This allows the module to selectively turn off some RWs. The default is that all RWs are operational and are included.

Initialization

Simply call the module reset function prior to using this control module. This will reset the prior function call time variable, and reset the attitude error integral measure. The control update period \(\Delta t\) is evaluated automatically.

Algorithm

This module employs the MRP feedback algorithm of Example (8.14) of Analytical Mechanics of Space Systems. This nonlinear attitude tracking control includes an integral measure of the attitude error. Further, we seek to avoid quadratic \(\pmb\omega\) terms to reduce the likelihood of control saturation during a detumbling phase. Let the new nonlinear feedback control be expressed as

(1)\[[G_{s}]{\bf u}_{s} = -{\bf L}_{r}\]

where

(2)\[\begin{split}{\bf L}_{r} = -K \pmb\sigma - [P] \delta\pmb\omega - [P][K_{I}] {\bf z} - [I_{\text{RW}}](-\dot{\pmb\omega}_{r} + [\tilde{\pmb\omega}]\pmb\omega_{r}) - {\bf L} \\ + ([\tilde{\pmb \omega}_{r}] + [\widetilde{K_{I}{\bf z}}]) \left([I_{\text{RW}}]\pmb\omega + [G_{s}]{\bf h}_{s} \right)\end{split}\]

and

(3)\[h_{s_{i}} = I_{W_{s_{i}}} (\hat{\bf g}_{s_{i}}^{T} \pmb\omega_{B/N} + \Omega_{i})\]

with \(I_{W_{s}}\) being the RW spin axis inertia.

The integral attitude error measure \(\bf z\) is defined through

(4)\[{\bf z} = K \int_{t_{0}}^{t} \pmb\sigma \text{d}t + [I_{\text{RW}}](\delta\pmb\omega - \delta\pmb\omega_{0})\]

In the BSK module the vector \(\delta\pmb\omega_{0}\) is hard-coded to a zero vector. This function will work for any initial tracking error, and this assumption doesn’t impact performance. A limit to the magnitude of the \(\int_{t_{0}}^{t} \pmb\sigma \text{d}t\) can be specified, which is a scalar compared to each element of the integral term.

The integral measure \(\bf z\) must be computed to determine \([P][K_{I}] {\bf z}\), and the expression \([\widetilde{K_{I}{\bf z}}]\) is added to \([\widetilde{\pmb\omega_{r}}]\) term.

To analyze the stability of this control, the following Lyapunov candidate function is used:

(5)\[V(\delta\pmb\omega, \pmb\sigma, {\bf z}) = \frac{1}{2} \delta\pmb\omega^{T} [I_{\text{RW}}] \delta\pmb\omega + 2 K \ln ( 1 + \pmb\sigma^{T} \pmb\sigma) + \frac{1}{2} {\bf z} ^{T} [K_{I}]{\bf z}\]

provides a convenient positive definite attitude error function. The attitude feedback gain $K$ is positive, while the integral feedback gain \([K_{I}]\) is a symmetric positive definite matrix. The resulting Lyapunov rate expression is given by

(6)\[\dot V = (\delta\pmb\omega + [K_{I}]{\bf z})^{T} \left ( [I_{\text{RW}}] \frac{{}^{\mathcal{B \!}}\text{d}}{\text{d}t} (\delta\pmb\omega) + K \pmb \sigma \right )\]

Substituting the equations of motion of a spacecraft with \(N\) reaction wheels (see Eq.~(8.160) in Analytical Mechanics of Space Systems, results in

(7)\[\begin{split}\dot V = (\delta\pmb\omega + [K_{I}]{\bf z} )^{T} \left ( - [\tilde{\pmb\omega}] ([I_{\text{RW}}] \pmb\omega +[G_{s}]{\bf h}_{s}) \\ - [G_{s}] {\bf u}_{s} + {\bf L} - [I_{\text{RW}}] ( \dot{\pmb \omega}_{r} - [\tilde{\pmb\omega}]\pmb\omega_{r}) + K \pmb\sigma \right)\end{split}\]

Substituting the control expression in Eq. (1) and making use of \(\pmb \alpha = \pmb\omega_{r} - [K_{I}]{\bf z}\) leads to

(8)\[\begin{split}\dot V &= (\delta\pmb\omega + [K_{I}]{\bf z} )^{T} \Big ( - ([\tilde{\pmb\omega}] - [\tilde{\pmb\omega}_{r}] + [\widetilde{K_{I}{\bf z}}]) ([I_{\text{RW}}] \pmb\omega + [G_{s}]{\bf h}_{s}) +( K \pmb\sigma - K \pmb\sigma) \\ & \quad - [P]\delta\pmb\omega - [P][K_{I}]\pmb z + [I_{\text{RW}}](\dot{\pmb\omega}_{r} - [\tilde{\pmb\omega}]\pmb\omega_{r}) - [I_{\text{RW}}](\dot{\pmb\omega}_{r} - [\tilde{\pmb\omega}]\pmb\omega_{r}) + ( {\bf L} - {\bf L}) \Big) \\ &= (\delta\pmb\omega + [K_{I}]{\bf z} )^{T} \Big ( - ([\widetilde{\delta\pmb\omega}] + [\widetilde{K_{I}{\bf z}}] ) ([I_{\text{RW}}] \pmb\omega + [G_{s}]{\bf h}_{s}) - [P] (\delta\pmb\omega + [K_{I}]{\bf z}) \Big )\end{split}\]

Because \((\delta\pmb\omega + [K_{I}]{\bf z} )^{T} ([\widetilde{\delta\pmb\omega}] + [\widetilde{K_{I}{\bf z}}] ) = 0\), the Lyapunov rate reduces the negative semi-definite expression

(9)\[\dot V = - (\delta\pmb\omega + [K_{I}]{\bf z} )^{T} [P] (\delta\pmb\omega + [K_{I}]{\bf z} )\]

This proves the new control is globally stabilizing. Asymptotic stability is shown following the same steps as for the nonlinear integral feedback control in Eq. (8.104) in Analytical Mechanics of Space Systems.

One of the goals set forth at the beginning of the example was avoiding quadratic $bmomega$ feedback terms to reduce the odds of control saturation during periods with large \(\pmb\omega\) values. However, the control in Eq. (1) contains a product of \(\bf z\) and \(\pmb\omega\). Let us study this term in more detail. The \(\pmb\omega\) expression with this product terms is found to be

(10)\[[\widetilde{K_{I}{\bf z}}] ([I_{\text{RW}}]\pmb \omega) \quad \Rightarrow \quad - ( [\widetilde{I_{\text{RW}} \pmb \omega}] ) ([K_{I}] [I_{\text{RW}}] \pmb \omega + \cdots )\]

If the integral feedback gain is a scalar \(K_{I}\), rather than a symmetric positive definite matrix \([K_{I}]\), the quadratic \(\pmb\omega\) term vanishes. If the full \(3\times 3\) gain matrix is employed, then quadratic rate feedback terms are retained.

Module Assumptions and Limitations

This module assumes the main spacecraft is a rigid body. If RW devices are installed, their wheel speeds are assumed to be fed into this control solution.

User Guide

This module requires the following variables from the required input messages:

  • \({\pmb\sigma}_{B/N}\) as guidCmdData.sigma_BR

  • \(^B{\pmb\omega}_{B/R}\) as guidCmdData.omega_BR_B

  • \(^B{\pmb\omega}_{R/N}\) as guidCmdData.omega_RN_B

  • \(^B\dot{\pmb\omega}_{R/N}\) as guidCmdData.domega_RN_B

  • \([I]\), the inertia matrix of the body as vehicleConfigOut.ISCPntB_B

The gains \(K\) and \(P\) must be set to positive values. The integral gain \(K_i\) is optional, it is a negative number by default. Setting this variable to a negative number disables the error integration for the controller, leaving just PD terms. The integrator is required to maintain asymptotic tracking in the presence of an external disturbing torque. The integralLimit is a scalar value applied in an element-wise check to ensure that the value of each element of the \(\int_{t_{0}}^{t} \pmb\sigma \text{d}t\) vector is within the desired limit. If not, the sign of that element is persevered, but the magnitude is replaced by integralLimit.

If the rwParamsInMsgName is specified, then the associated inputRWSpeedsName is required as well.

The rwAvailInMsgName is optional and is used to selectively include RW devices in the control solution.


Functions

void SelfInit_MRP_Feedback(MRP_FeedbackConfig *configData, int64_t moduleID)

This method sets up the module output message of type CmdTorqueBodyIntMsg

Return

void

Parameters
  • configData: The configuration data associated with this module

  • moduleID: The ID associated with the configData

void CrossInit_MRP_Feedback(MRP_FeedbackConfig *configData, int64_t moduleID)

This method performs the second stage of initialization for this module. Its primary function is to link the input messages that were created elsewhere. The required input messages are the attitude tracking error message of type AttGuidFswMsg and the vehicle configuration message of type VehicleConfigFswMsg. Optional messages are the RW configuration message of type RWArrayConfigFswMsg, the RW speed message of type RWSpeedIntMsg and the RW availability message of type :RWAvailabilityFswMsg.

Return

void

Parameters
  • configData: The configuration data associated with this module

void Update_MRP_Feedback(MRP_FeedbackConfig *configData, uint64_t callTime, int64_t moduleID)

This method takes the attitude and rate errors relative to the Reference frame, as well as the reference frame angular rates and acceleration, and computes the required control torque Lr.

Return

void

Parameters
  • configData: The configuration data associated with the MRP Steering attitude control

  • callTime: The clock time at which the function was called (nanoseconds)

void Reset_MRP_Feedback(MRP_FeedbackConfig *configData, uint64_t callTime, int64_t moduleID)

This method performs a complete reset of the module. Local module variables that retain time varying states between function calls are reset to their default values.

Return

void

Parameters
  • callTime: The clock time at which the function was called (nanoseconds)

  • configData: The configuration data associated with the MRP steering control

struct MRP_FeedbackConfig
#include <MRP_Feedback.h>

Data configuration structure for the MRP feedback attitude control routine.

Public Members

double K

[rad/sec] Proportional gain applied to MRP errors

double P

[N*m*s] Rate error feedback gain applied

double Ki

[N*m] Integration feedback error on rate error

double integralLimit

[N*m] Integration limit to avoid wind-up issue

uint64_t priorTime

[ns] Last time the attitude control is called

double z[3]

[rad] integral state of delta_omega

double int_sigma[3]

[s] integral of the MPR attitude error

double knownTorquePntB_B[3]

[N*m] known external torque in body frame vector components

double ISCPntB_B[9]

[kg m^2] Spacecraft Inertia

RWArrayConfigFswMsg rwConfigParams

[-] struct to store message containing RW config parameters in body B frame

char rwParamsInMsgName[MAX_STAT_MSG_LENGTH]

The name of the RW array configuration input message.

int32_t rwParamsInMsgId

[-] ID for the RWArrayConfigFswMsg ingoing message

char vehConfigInMsgName[MAX_STAT_MSG_LENGTH]

[-] Name of the vehicle configuration input message

int32_t vehConfigInMsgId

[-] Msg ID of vehicle configuration message

char rwAvailInMsgName[MAX_STAT_MSG_LENGTH]

[-] The name of the RWs availability message

int32_t rwAvailInMsgId

[-] ID for the incoming RWs availability data

char outputDataName[MAX_STAT_MSG_LENGTH]

[-] The name of the output message

char inputGuidName[MAX_STAT_MSG_LENGTH]

[-] The name of the attitude guidance input message

char inputRWSpeedsName[MAX_STAT_MSG_LENGTH]

[-] The name for the reaction wheel speeds message

int32_t rwSpeedsInMsgId

[-] ID for the reaction wheel speeds message

int32_t attControlTorqueOutMsgId

[-] ID for the outgoing attitude control torque message

int32_t attGuidInMsgId

[-] ID for the incoming attitude guidance errors

BSKLogger *bskLogger

BSK Logging.