SYSTEMS AND METHODS FOR COMBINED CONTROL MOMENT GYROSCOPE AND THRUSTER CONTROL

20240308698 ยท 2024-09-19

Assignee

Inventors

Cpc classification

International classification

Abstract

Systems and methods disclosed provide for attitude control of a body, the body including a plurality of thrusters and a plurality of gimballed rotors. Operations performed include: receiving a command vector representing a desired torque on the body, generating a Jacobian matrix that, when applied to a combined gimbal rate and thrust command vector, generates the command vector, generating components of a weighted pseudo inverse of the Jacobian matrix and using the components with the command vector in order to generate the combined gimbal rate and thrust command vector. Generating components of the weighted pseudo inverse of the Jacobian matrix can include generating a weighting matrix including a plurality of diagonal elements, the plurality of diagonal elements representing at least the plurality of gimballed rotors and the plurality of thrusters.

Claims

1. A system for attitude control of a body, the system comprising: a module for controlling at least one control moment gyroscope array and a plurality of thrusters, wherein the at least one control moment gyroscope array comprises a plurality of gimballed rotors, and wherein the at least one control moment gyroscope array and the plurality of thrusters are configured to provide said attitude control to the body, the module being responsive to a gimbal rate command and a thruster command; a processor; and a non-transitory computer storage medium storing instructions that when executed by the processor cause the processor to perform operations comprising: receiving a command vector representing a desired torque vector on said body associated with said attitude control; generating a Jacobian matrix ? that, when applied to a combined gimbal rate and thrust command vector, generates said command vector; generating components of a weighted pseudo inverse of said Jacobian matrix ? and using said components with said command vector in order to generate said combined gimbal rate and thrust command vector; providing said gimbal rate command to said module based on said generated combined gimbal rate and thrust command vector; and providing said thrust command to said module based on said generated combined gimbal rate and thrust command vector; wherein said generating components of said weighted pseudo inverse of said Jacobian matrix ? comprises generating a weighting matrix W comprising a plurality of diagonal elements, said plurality of diagonal elements representing at least said plurality of gimballed rotors and said plurality of thrusters.

2. The system of claim 1, wherein said plurality of gimballed rotors includes N gimballed rotors (CMG.sub.1, . . . . CMG.sub.N), said plurality of thrusters includes M thrusters (TH.sub.1, . . . . TH.sub.M), said Jacobian matrix ? is a 3?(M+N) matrix, and said weighting matrix W is an (M+N)?(M+N) matrix characterized by a matrix form: W _ = [ w ( CMG 1 ) .Math. ? 1 N ? 1 N + 1 .Math. ? 1 N + M .Math. ? .Math. .Math. ? .Math. ? N 1 .Math. w ( CMG N ) ? N N + 1 .Math. ? N N + M ? N + 1 1 .Math. ? N + 1 N w ( TH 1 ) .Math. ? N + 1 N + M .Math. ? .Math. .Math. ? .Math. ? N + M 1 .Math. ? N + M N ? N + M N + 1 .Math. w ( TH M ) ] ; wherein said diagonal elements w(CMG.sub.1), . . . w(CMG.sub.N), w(TH.sub.1), . . . w(TH.sub.M) and the values ?.sub.IJ with I?{1, . . . , N+M} and J?{1, . . . , N+M} are configured to modulate authority among the plurality of gimballed rotors and the plurality of thrusters.

3. The system of claim 2, wherein the values ?.sub.IJ are selected from a set of: ?.sub.IJ=0 and ?.sub.IJ?0 in comparison to said diagonal elements w(CMG.sub.1), . . . w(CMG.sub.N), w(TH.sub.1), . . . w(TH.sub.M).

4. The system of claim 3, wherein said diagonal elements w(CMG.sub.1), . . . w(CMG.sub.N), w(TH.sub.1), . . . w(TH.sub.M) are non-zero.

5. The system of claim 2, wherein said generating components of said weighted pseudo inverse of said Jacobian matrix ? comprises: transposing said Jacobian matrix ? to obtain an (M+N)?3 matrix custom-character; inverting a first matrix product ? W ?.sup.T to obtain a 3?3 matrix [? W ?.sup.T].sup.?1; and generating a second matrix product: W ?.sup.T [? W ?.sup.T].sup.?1.

6. The system of claim 5, wherein said command vector is characterized by a vector form: [ h . ( 1 ) h . ( 2 ) h . ( 3 ) ] ; and wherein [ h . ( 1 ) h . ( 2 ) h . ( 3 ) ] denotes a desired torque associated with the body, the parenthetical subscripts (1), (2), and (3) denoting orthonormal components in three-dimensional momentum space; and wherein said generating components of said weighted pseudo inverse of said Jacobian matrix ? and using said components with said command vector in order to generate said combined gimbal rate and thrust command vector comprises determining a product: W ?.sup.T [? W ?.sup.T].sup.?1 W _ A _ T [ A _ W _ A _ T ] - 1 [ h . ( 1 ) h . ( 2 ) h . ( 3 ) ] .

7. The system of claim 2, wherein said at least one control moment gyroscope array has an associated momentum envelope representing a bound on momentum values that can be accessed by said at least one control moment gyroscope array; wherein an inverse of a first matrix product, [? W ?.sup.T].sup.?1 exhibits a singularity at and/or near a portion of said associated momentum envelope; and wherein said generating components of said weighted pseudo inverse of said Jacobian matrix ? comprises: transposing said Jacobian matrix ? to obtain an (M+N)?3 matrix ?.sup.T; and applying a singularity avoidance technique to provide a second matrix product corresponding to W ?.sup.T [? W ?.sup.T].sup.?1.

8. The system of claim 7, wherein said singularity avoidance technique comprises: inverting a sum of the first matrix product ? W ?.sup.T and ?? to obtain a 3?3 matrix [? W ?.sup.T+??].sup.?1; and generating the second matrix product: W ?.sup.T [? W ?.sup.T+?? ].sup.?1; wherein ? is characterized by a second matrix form: [ 1 ? ( 12 ) ( t ) ? ( 13 ) ( t ) ? ( 21 ) ( t ) 1 ? ( 23 ) ( t ) ? ( 31 ) ( t ) ? ( 32 ) ( t ) 1 ] wherein each of ?.sub.(12)(t), ?.sub.(13)(t), ?.sub.(21)(t), ?.sub.(23)(t) ?.sub.(31)(t), and ?.sub.(32)(t) are small compared to 1, and are time-varying; and wherein ? is a constant.

9. The system of claim 8, wherein said at least one control moment gyroscope array is operating at or substantially near said portion of said associated momentum envelope; wherein said portion of said associated momentum envelope is associated with a saturation singularity; and wherein the constant ? is scaled to singular values associated with said saturation singularity.

10. A method for attitude control of a body using at least one control moment gyroscope array and a plurality of thrusters, wherein the at least one control moment gyroscope array comprises a plurality of gimballed rotors, and wherein the at least one control moment gyroscope array and the plurality of thrusters provide said attitude control of said body in response to an attitude control instruction set, the method comprising: acquiring a command vector representing a desired torque vector on said body associated with said attitude control; generating a Jacobian matrix ? that, when applied to a combined gimbal rate and thrust command vector, generates said command vector; generating components of a weighted pseudo inverse of said Jacobian matrix ? and using said components with said command vector in order to generate said combined gimbal rate and thrust command vector; determining said attitude control instruction set based on said generated combined gimbal rate and thrust command vector; and providing said attitude control instruction set to said at least one control moment gyroscope array and said plurality of thrusters; wherein said generating components of said weighted pseudo inverse of said Jacobian matrix ? comprises generating a weighting matrix W comprising a plurality of diagonal elements, said plurality of diagonal elements representing at least said plurality of gimballed rotors and said plurality of thrusters.

11. The method of claim 10, wherein said plurality of gimballed rotors includes N gimballed rotors (CMG.sub.1, . . . . CMG.sub.N), said plurality of thrusters includes M thrusters (TH.sub.1, . . . . TH.sub.M), said Jacobian matrix ? is a 3?(M+N) matrix, and said weighting matrix W is an (M+N)?(M+N) matrix characterized by a matrix form: W _ = [ w ( CMG 1 ) .Math. ? 1 N ? 1 N + 1 .Math. ? 1 N + M .Math. ? .Math. .Math. ? .Math. ? N 1 .Math. w ( CMG N ) ? N N + 1 .Math. ? N N + M ? N + 1 1 .Math. ? N + 1 N w ( TH 1 ) .Math. ? N + 1 N + M .Math. ? .Math. .Math. ? .Math. ? N + M 1 .Math. ? N + M N ? N + M N + 1 .Math. w ( TH M ) ] ; wherein said diagonal elements w(CMG.sub.1), . . . w(CMG.sub.N), w(TH.sub.1), . . . w(TH.sub.M) and the values ?.sub.IJ with I?{1, . . . , N+M} and J?{1, . . . , N+M} are configured to modulate authority among the plurality of gimballed rotors and the plurality of thrusters.

12. The method of claim 11, wherein the values ?.sub.IJ are selected from a set of: ?.sub.IJ=0 and ?.sub.IJ?0 in comparison to said diagonal elements w(CMG.sub.1), . . . w(CMG.sub.N), w(TH.sub.1), . . . w(TH.sub.M).

13. The method of claim 12, wherein said diagonal elements w(CMG.sub.1), . . . w(CMG.sub.N), w(TH.sub.1), . . . w(TH.sub.M) are non-zero.

14. The method of claim 11, wherein said generating components of said weighted pseudo inverse of said Jacobian matrix ? comprises: transposing said Jacobian matrix ? to obtain an (M+N)?3 matrix ?.sup.T; inverting a first matrix product ?custom-charactercustom-character to obtain a 3?3 matrix [? W ?.sup.T].sup.?1; and generating a second matrix product: W ?.sup.T [? W ?.sup.T].sup.?1.

15. The method of claim 14, wherein said command vector is characterized by a vector form: [ h . ( 1 ) h . ( 2 ) h . ( 3 ) ] ; and wherein [ h . ( 1 ) h . ( 2 ) h . ( 3 ) ] denotes a desired torque associated with the body, the parenthetical subscripts (1), (2), and (3) denoting orthonormal components in three-dimensional momentum space; and wherein said generating components of said weighted pseudo inverse of said Jacobian matrix ? and using said components with said command vector in order to generate said combined gimbal rate and thrust command vector comprises determining a product: W ?.sup.T [? W ?.sup.T].sup.?1 W _ A _ T [ A _ W _ A _ T ] - 1 [ h . ( 1 ) h . ( 2 ) h . ( 3 ) ] .

16. The method of claim 11, wherein said at least one control moment gyroscope array has an associated momentum envelope representing a bound on momentum values that can be accessed by said at least one control moment gyroscope array; wherein an inverse of a first matrix product [? W ?.sup.T].sup.?1 exhibits a singularity at and/or near a portion of said associated momentum envelope; and wherein said generating components of said weighted pseudo inverse of said Jacobian matrix ? comprises: transposing said Jacobian matrix ? to obtain an (M+N)?3 matrix ?.sup.T; and applying a singularity avoidance technique to provide a second matrix product corresponding to W ?.sup.T [? W ?.sup.T].sup.?1.

17. The method of claim 16, wherein said singularity avoidance technique comprises: inverting a sum of the first matrix product ? W ?.sup.T and ?? to obtain a 3?3 matrix [? W ?.sup.T+??].sup.?1; and generating the second matrix product: W ?.sup.T [? W ?.sup.T+?? ].sup.?1; wherein ? is characterized by a second matrix form: [ 1 ? ( 12 ) ( t ) ? ( 13 ) ( t ) ? ( 21 ) ( t ) 1 ? ( 23 ) ( t ) ? ( 31 ) ( t ) ? ( 32 ) ( t ) 1 ] wherein each of ?.sub.(12)(t), ?.sub.(13)(t), ?.sub.(21)(t), ?.sub.(23)(t) ?.sub.(31)(t), and ?.sub.(32)(t) are small compared to 1, and are time-varying; and wherein ? is a constant.

18. The method of claim 17, wherein said at least one control moment gyroscope array is operating at or substantially near said portion of said associated momentum envelope; wherein said portion of said associated momentum envelope is associated with a saturation singularity; and wherein the constant ? is scaled to singular values associated with said saturation singularity.

19. A non-transitory computer-readable medium storing instructions that when executed by a system for attitude control of a body cause the system to perform a method for attitude control using at least one control moment gyroscope array and a plurality of thrusters, wherein the at least one control moment gyroscope array comprises a plurality of gimballed rotors, the method comprising: acquiring a command vector representing a desired torque vector on said body associated with said attitude control; generating a Jacobian matrix ? that, when applied to a combined gimbal rate and thrust command vector, generates said command vector; generating components of a weighted pseudo inverse of said Jacobian matrix ? and using said components with said command vector in order to generate said combined gimbal rate and thrust command vector; determining an attitude control instruction set based on said generated combined gimbal rate and thrust command vector; and providing said attitude control instruction set to said at least one control moment gyroscope array and said plurality of thrusters; wherein said generating components of said weighted pseudo inverse of said Jacobian matrix ? comprises generating a weighting matrix W comprising a plurality of diagonal elements, said plurality of diagonal elements representing at least said plurality of gimballed rotors and said plurality of thrusters.

20. The non-transitory computer-readable medium of claim 19, wherein said plurality of gimballed rotors includes N gimbals (CMG.sub.1, . . . . CMG.sub.N), said plurality of thrusters includes M thrusters (TH.sub.1, . . . . TH.sub.M), said Jacobian matrix ? is a 3?(M+N) matrix, and said weighting matrix W is an (M+N)?(M+N) matrix characterized by a matrix form: W _ = [ w ( CMG 1 ) .Math. ? 1 N ? 1 N + 1 .Math. ? 1 N + M .Math. ? .Math. .Math. ? .Math. ? N 1 .Math. w ( CMG N ) ? N N + 1 .Math. ? N N + M ? N + 1 1 .Math. ? N + 1 N w ( TH 1 ) .Math. ? N + 1 N + M .Math. ? .Math. .Math. ? .Math. ? N + M 1 .Math. ? N + M N ? N + M N + 1 .Math. w ( TH M ) ] ; wherein said diagonal elements w(CMG.sub.1), . . . w(CMG.sub.N), w(TH.sub.1), . . . w(TH.sub.M) and the values ?.sub.IJ with I?{1, . . . , N+M} and J?{1, . . . , N+M} are configured to modulate authority among the plurality of gimballed rotors and the plurality of thrusters.

21. The non-transitory computer-readable medium of claim 20, wherein the values ?.sub.IJ are selected from a set of: ?.sub.IJ=0 and ?.sub.IJ?0 in comparison to said diagonal elements w(CMG.sub.1), . . . w(CMG.sub.N), w(TH.sub.1), . . . w(TH.sub.M).

22. The non-transitory computer-readable medium of claim 21, wherein said diagonal elements w(CMG.sub.1), . . . w(CMG.sub.N), w(TH.sub.1), . . . w(TH.sub.M) are non-zero.

23. The non-transitory computer-readable medium of claim 20, wherein said generating components of said weighted pseudo inverse of said Jacobian matrix custom-character comprises: transposing said Jacobian matrix ? to obtain an (M+N)?3 matrix ?.sup.T; inverting a first matrix product ? W custom-character to obtain a 3?3 matrix [? W ?.sup.T].sup.?1; and generating a second matrix product: W ?.sup.T [? W ?.sup.T].sup.?1.

24. The non-transitory computer-readable medium of claim 23, wherein said command vector is characterized by a vector form: [ h . ( 1 ) h . ( 2 ) h . ( 3 ) ] ; and wherein [ h . ( 1 ) h . ( 2 ) h . ( 3 ) ] denotes a desired torque associated with the body, the parenthetical subscripts (1), (2), and (3) denoting orthonormal components in three-dimensional momentum space; and wherein said generating components of said weighted pseudo inverse of said Jacobian matrix custom-character and using said components with said command vector in order to generate said combined gimbal rate and thrust command vector comprises determining a product: W ?.sup.T [? W ?.sup.T].sup.?1 W _ A _ T [ A _ W _ A _ T ] - 1 [ h . ( 1 ) h . ( 2 ) h . ( 3 ) ] .

25. The non-transitory computer-readable medium of claim 20, wherein said at least one control moment gyroscope array has an associated momentum envelope representing a bound on momentum values that can be accessed by said at least one control moment gyroscope array; wherein an inverse of a first matrix product [? W ?.sup.T].sup.?1 exhibits a singularity at and/or near a portion of said associated momentum envelope; and wherein said generating components of said weighted pseudo inverse of said Jacobian matrix ? comprises: transposing said Jacobian matrix ? to obtain an (M+N)?3 matrix ?.sup.T; and applying a singularity avoidance technique to provide a second matrix product corresponding to W ?.sup.T [? W ?.sup.T].sup.?1.

26. The non-transitory computer-readable medium of claim 25, wherein said singularity avoidance technique comprises: inverting a sum of the first matrix product ? W ?.sup.T and ?? to obtain a 3?3 matrix [? W ?.sup.T+?? ].sup.?1; and generating the second matrix product: W ?.sup.T [? W ?.sup.T+?? ].sup.?1; wherein ? is characterized by a second matrix form: [ 1 ? ( 12 ) ( t ) ? ( 13 ) ( t ) ? ( 21 ) ( t ) 1 ? ( 23 ) ( t ) ? ( 31 ) ( t ) ? ( 32 ) ( t ) 1 ] wherein each of ?.sub.(12)(t), ?.sub.(13)(t), ?.sub.(21)(t), ?.sub.(23)(t) ?.sub.(31)(t), and ?.sub.(32)(t) are small compared to 1, and are time-varying; and wherein ? is a constant.

27. The non-transitory computer readable medium of claim 26, wherein said at least one control moment gyroscope array is operating at or substantially near said portion of said associated momentum envelope; wherein said portion of said associated momentum envelope is associated with a saturation singularity; and wherein the constant ? is scaled to singular values associated with said saturation singularity.

Description

BRIEF DESCRIPTION OF THE DRAWINGS

[0033] The accompanying drawings, which are incorporated in and constitute a part of this specification, illustrate exemplary embodiments and together with the description, serve to explain the principles of the disclosure. In the figures:

[0034] FIG. 1 is a view of a body configured for attitude control consistent with this disclosure;

[0035] FIG. 2 depicts a single-gimballed flywheel (or rotor) and gimbal axis consistent with a component of a CMG array in this disclosure, including vector orientations of momentum and torque;

[0036] FIGS. 3 and 4 depicting aspects of a 4 CMG pyramid array consistent with this disclosure;

[0037] FIG. 5 illustrates a momentum plane, skew angle, and clocking angle consistent with single-gimballed CMG arrays as disclosed herein;

[0038] FIGS. 6-8 depict aspects of CMG arrays consistent with this disclosure;

[0039] FIGS. 9A-E illustrate singularities where the angular momentum vectors all lie in a single plane;

[0040] FIGS. 10A-B depicts an orientation of momentum vectors in the 4 CMG pyramid array of FIGS. 6, 9A, and 9B which results in a 4 h singularity consistent with this disclosure;

[0041] FIGS. 11 and 12 depict orientations of momentum vectors in the 4 CMG pyramid array of FIGS. 6 and 10A, both of which result in a 2 h singularity consistent with this disclosure;

[0042] FIG. 13 depicts a 4 h saturation singularity surface for the 4 CMG pyramid array of FIGS. 6, 9A, and 9B in three-dimensional momentum space consistent with this disclosure;

[0043] FIG. 14 depicts a 2 h singularity surface for the 4 CMG pyramid array of FIGS. 6 and 9 in three-dimensional momentum space consistent with this disclosure;

[0044] FIG. 15 depicts a composite 4 h and 2 h singularity surface for the 4 CMG pyramid array of FIG. 6 in three-dimensional momentum space consistent with this disclosure;

[0045] FIG. 16 depicts a 4 h singularity surface for the 4 CMG roof array of FIG. 7 in three-dimensional momentum space consistent with this disclosure;

[0046] FIG. 17 depicts a further aspect of the 5 CMG pyramid array of FIG. 8 consistent with this disclosure;

[0047] FIG. 18 depicts an orientation of momentum vectors in the 5 CMG pyramid array of FIGS. 8 and 17 which results in a 5 h saturation singularity consistent with this disclosure;

[0048] FIGS. 19 and 20 depict orientations of momentum vectors in the 5 CMG pyramid array of FIGS. 8 and 17, which result in a 3 h and 1 h singularity, respectively, consistent with this disclosure;

[0049] FIG. 21 depicts a composite 5 h and 3 h singularity surface for the 5 CMG pyramid array of FIGS. 8 and 17 in three-dimensional momentum space consistent with this disclosure;

[0050] FIG. 22 depicts a 3 h singularity surface for a 5 CMG pyramid array with a skew angle of 50? in three-dimensional momentum space consistent with this disclosure;

[0051] FIG. 23 depicts a composite 6 h and 4 h singularity surface for the 6 CMG roof array according to the depicted table of skew angles and clocking angles in three-dimensional momentum space consistent with this disclosure;

[0052] FIG. 24 depicts an exemplary control unit for attitude control of a body consistent with this disclosure;

[0053] FIG. 25 depicts an exemplary control loop for attitude control consistent with this disclosure;

[0054] FIG. 26 depicts an exemplary flowchart for attitude control consistent with this disclosure;

[0055] FIGS. 27-28 depicts torque applied to an exemplary system as a function of time, transitioning from CMG-only control to thruster-only control, consistent with this disclosure; and

[0056] FIG. 29 depicts Eigen angle displacement as a function of time of the system depicted in FIGS. 27 and 28.

DESCRIPTION OF THE EMBODIMENTS

[0057] Reference will now be made in detail to the disclosed embodiments of the disclosure, examples of which are illustrated in the accompanying drawings. Wherever possible, the same reference numbers will be used throughout the drawings to refer to the same or like parts.

[0058] FIG. 1 depicts body 100 configured for attitude control consistent with this disclosure. Body 100 can include CMG array 130 and a plurality of thrusters 140. The plurality of thrusters 140, moreover, can include thrusters 141, 142, 143, 144, 145, 146, 147, 148, and 149. One of ordinary skill in the art would appreciate that additional thrusters (such as thrusters, not shown, directed to expel propellant in the opposite direction of thrusters 145 and 146 on the opposite side of body 100, as well as a further thruster providing opposite thrust to thruster 149) can also be affixed to body 100 in order to provide complete three-dimensional momentum capability using the plurality of thrusters 140. Moreover, additional thrusters (providing, for example, a range of differing momentum transfer value capabilities, a range of differing momentum transfer rates, and/or a range of differing momentum transfer periods) can also be affixed to body 100 without a loss of generality. Furthermore, although the thrusters depicted in FIG. 1 appear configured to provide fixed torque values about axes of rotation of body 100, one of ordinary skill in the art would appreciate that the plurality of thrusters 140 can include thrusters positioned at other non-centered points on body 100 (such as at an edge-point or other corner of body 100), or centered about body 100 so as to efficiently generate other torque or force on body 100 by selectively generating thrust from a subset of the plurality of thrusters 140. Further still, each thruster of the plurality of thrusters 140 can be commanded individually or in concert with others to provide the commanded thrust from thruster controller 160. The complete plurality of thrusters 140 can be under control of thruster controller 160. Body 100 can also include sensor 120 (or sensors 120, without loss of generality), where sensor(s) 120 can include, among other things, star trackers, rate gyroscopes, and/or other devices capable of measuring the motion, orientation, and rate of body 100. Body 100 can also include control unit 110, which can include an interface to sensor(s) 120, CMG array 130 and thruster controller 160. Control unit 110 can also have access to information representing a desired orientation and motion (i.e., attitude and rate) of body 100 at a given time. Accordingly, consistent with this disclosure, control unit 110 can be configured to compute a difference between body 100 motion and orientation in real-time or a difference expected at some future time (absent a disturbance, or with an expected disturbance) as determined by sensor(s) 120, and a desired motion and orientation of body 100 at that time or a future time. Taking the computed difference between a measured attitude and rate of body 100 and a desired attitude and rate of body 100 as an error, control unit 110 can be configured to provide appropriate commands or instruction set to thruster controller 160 and CMG array 130 in order to apply forces and torques to body 100 in real-time to arrive at the desired attitude and rate for body 100 at that time or at a time in the future.

[0059] Details associated with CMG array 130 consistent with this disclosure are provided below in FIGS. 2-23. A CMG array, for example, can include a plurality of single gimbal control moment gyroscopes (SGCMG). Although this disclosure addresses certain mechanics associated with SGCMGs, one of ordinary skill in the art will appreciate that aspects of the disclosure and claims can be implemented with CMGs other than SGCMGs, such as, without limitation, double gimbal control moment gyroscopes (DGCMGs).

[0060] FIG. 2 depicts a single-gimballed flywheel 205 (a spinning rotor) and gimbal axis 280 consistent with this disclosure. Flywheel angular frequency ?(t) 290 can be a constant rate (such as in units of radians/second). Gimbal angle ?(t) 260 can be a function of time, consistent with this disclosure. Angular momentum direction 270 (where angular momentum is denoted by the variable {right arrow over (h)}) will be orthogonal to both the gimbal axis 280 and the torque direction 250, as depicted by three-dimensional axes 201. For single-gimballed flywheel 205 depicted in FIG. 2, rotating at a constant angular frequency ?, which generates angular momentum {right arrow over (h)}, a rotation rate about gimbal axis 280 by an amount

[00020] ? ? = ? ? ? t

yields a torque: {right arrow over (T)}={dot over (?)}{right arrow over (g)}?{right arrow over (h)}/|{right arrow over (g)}|, where {right arrow over (g)}/|{right arrow over (g)}| is a unit vector in the direction of the gimbal axis 280. Generally, rotation about gimbal axis 280 through gimbal angle ? 260 is accomplished using a motorized gimbal (not shown). As used herein, each SGCMG device, or equivalent, in a CMG array that generates torque through the rotation of a single-gimballed flywheel 205 about a gimbal axis 280 through gimbal angle ? 260 will be referred to as a gimballed rotor, a CMG gimbal, and/or gimballed CMG.sub.i (where i can take on integer values). It is understood that the term gimballed rotor, as used herein, can corresponds to a gimballed momentum wheel, gimballed reaction wheel, gimballed flywheel, or any gimballed device with rotating inertial mass capable of storing angular momentum.

[0061] FIG. 3 depicts a 4 CMG pyramid array 330 consistent with the disclosure. 4 CMG pyramid array 330 includes single-gimballed flywheel 305-1 with gimbal axis {right arrow over (g.sub.1)} 381, single-gimballed flywheel 305-2 with gimbal axis {right arrow over (g.sub.2)} 382, single-gimballed flywheel 305-3 with gimbal axis {right arrow over (g.sub.3)} 383, and single-gimballed flywheel 305-4 with gimbal axis {right arrow over (g.sub.4)} 384. Each of the flywheels that make up 4 CMG pyramid array 330 contribute an angular momentum vector. Specifically, single-gimballed flywheel 305-1 contributes angular momentum {right arrow over (h.sub.1)} 371, single-gimballed flywheel 305-2 contributes angular momentum {right arrow over (h.sub.2)} 372, single-gimballed flywheel 305-3 contributes angular momentum {right arrow over (h.sub.3)} 373, and single-gimballed flywheel 305-4 contributes angular momentum {right arrow over (h.sub.4)} 374. Because each of the respective gimbal axes associated with each gimbal for each single-gimballed flywheel is orthogonal to the respective angular momentum contributed by the single-gimballed flywheel, the resulting torque from each gimballed flywheel, due to rotation about each gimbal axis, is orthogonal to both each gimbal axis and the respective flywheel angular momentum direction. Accordingly, the combination of the direction of the torque and the angular momentum vector for each CMG gimbal defines a plane perpendicular to the gimbal axis. As depicted in FIG. 3, this plane, referred to as a momentum plane for each CMG gimbal, will be the four planes forming each of the four sides of the square pyramid solid depicted in FIG. 3.

[0062] FIG. 4 depicts further aspects of the 4 CMG pyramid array of FIG. 3 consistent with this disclosure. While the flywheels are not explicitly depicted, the gimbal axes 381, 382, 383, and 384 are shown, as are the angular momentum vectors 371, 372, 373, and 374. For reference, yaw axis 403, roll axis 401, and pitch axis 402 are shown in FIG. 4. Each of the gimbal axes has an associated gimbal angle, shown in FIG. 4 as: gimbal angle ?.sub.1 461, gimbal angle ?.sub.2 462, gimbal angle ?.sub.3 463, and gimbal angle ?.sub.4 464. Where 4 CMG pyramid array 330 exhibits momentum planes that coincide with the sides of a square pyramid solid, then the momentum plane for each CMG gimbal will have the same skew angle ? 431 shown in FIG. 4 (where the depicted angle is for the momentum plane associated with angular momentum {right arrow over (h.sub.2)} 372 and is the angle the momentum plane makes with the roll/pitch plane).

[0063] FIG. 5 provides further clarification to the relevant momentum plane geometry of single-gimballed CMG arrays consistent with this disclosure, relative to yaw axis 403, roll axis 401, and pitch axis 402. Specifically, momentum plane 555 is orthogonal to gimbal axis {right arrow over (g.sub..Math.)} 580 (representing, for example, the ith CMG gimbal in an array of 1 to N CMG gimbals). Furthermore, momentum plane 555 is defined by the ith torque 550

[00021] ( h .Math. .fwdarw. . = ? ? i ? t g .Math. .fwdarw. ? h .Math. .fwdarw. / .Math. "\[LeftBracketingBar]" g .Math. .fwdarw. .Math. "\[RightBracketingBar]" )

and the orthogonal ith momentum vector 570 (or {right arrow over (h.sub..Math.)}). Clocking angle ? 532 is the angle that a line-determined by the intersection of the momentum plane 555 with the plane determined by the roll axis 401 and the pitch axis 402makes with roll axis 401. Skew angle ? 531 is the angle that momentum plane 555 makes with the plane determined by the roll axis 401 and the pitch axis 402.

[0064] Based on the notation used in FIG. 5, FIG. 6 provides a view of 4 CMG pyramid array 330 and table 606 provides exemplary momentum plane geometry variables (i.e., skew angle ? and clocking angles ?) associated with each gimballed CMG.sub.i in the 4 CMG pyramid array 330. One of ordinary skill in the art will appreciate, for example, that skew angle ? in table 606 can take on values other than 53? in any 4 CMG pyramid array geometry consistent with this disclosure. (Although, where the momentum planes form the sides of a regular solid, the skew angle ? for each momentum plane will be the same.) Moreover, one of ordinary skill in the art would appreciate that the clocking angles ? in table 606, being defined relative to roll axis 401 in the plane determined by roll axis 401 and pitch axis 402, can also take on other values consistent with this disclosurethe relevant clocking angle relationship for a 4 CMG pyramid geometry being only the 90? difference value between subsequent clocking angles ?.

[0065] FIGS. 3, 4, and 6 depicted 4 CMG pyramid array 330, where the geometry associated the 4 CMG pyramid array is a commonly studied CMG array geometry. Generally, CMG arrays include at least 3 CMG gimballed rotors in order to access momentum vectors in all three-dimensions of momentum space. In practice, CMG arrays will include 4 or more CMG gimballed rotors in order to both (i) access momentum vectors in all three-dimensions of momentum space; and (ii) to provide for some null control of the CMG gimballed rotors (i.e., control of a plurality of CMG gimbals in CMG array 130 affixed to body 100 that produces no net momentum exchange with body 100). One of ordinary skill in the art would appreciate that there can be a variety of reasons for ensuring that a CMG array allows for null manipulation of gimballed rotors. Accordingly, the 4 CMG pyramid array geometry provides a convenient model for study. Consistent with this disclosure, however, CMG array 130 can be a CMG array with any number of CMG gimballed rotors-preferably 3 or more. FIG. 7, for example, depicts 4 CMG roof array 730 and table 706 presents an exemplary geometry for the gimballed rotor momentum planes in a 4 CMG roof array configuration. Again, one of ordinary skill in the art will appreciate that skew angle ? in table 706 can take on values other than 45? in any 4 CMG roof array geometry consistent with this disclosure. Moreover, one of ordinary skill in the art would appreciate that the clocking angles ? in table 706 can also take on other values consistent with this disclosurethe relevant clocking angle relationship for a 4 CMG roof array geometry being the 180? difference value between the clocking angles ? associated with the momentum planes for gimbal CMG.sub.2 and gimbal CMG.sub.3, and the 0? difference value between the clocking angles ? associated with the momentum planes for gimbal CMG.sub.1 and gimbal CMG.sub.2, and the 0? difference value between the clocking angles ? associated with the momentum planes for gimbal CMG.sub.3 and gimbal CMG.sub.4.

[0066] Further still, FIG. 8 depicts 5 CMG pyramid array 830 and table 806 presents an exemplary geometry for a 5 CMG pyramid array configuration. Again, one of ordinary skill in the art will appreciate that skew angle ? in able 806 can take on values other than 53? in any 5 CMG pyramid array geometry consistent with this disclosure. Moreover, one of ordinary skill in the art would appreciate that the clocking angles ? in table 806 can also take on other values consistent with this disclosurethe relevant relationship for a 5 CMG pyramid array geometry being the 72? difference value between subsequent clocking angles ?.

[0067] Returning to the 4 CMG pyramid array 330, FIGS. 9-12 relate to the classification of singularities in three-dimensional momentum space. FIGS. 9A-E present 4-CMG configuration that is simplified in order to introduce the concept of singularities. In particular, FIG. 9A depicts the orientation of the gimbal axes {right arrow over (g.sub.1)}, {right arrow over (g.sub.2)}, {right arrow over (g.sub.3)}, and {right arrow over (g.sub.4)} of the 4 CMG array 330 of FIG. 4 when the skew angle ? 431 is equal to 0?. Specifically, each of the gimbal axes {right arrow over (g.sub.1)}, {right arrow over (g.sub.2)}, {right arrow over (g.sub.3)}, and {right arrow over (g.sub.4)} (i.e., reference numbers 381, 382, 383, and 384, respectively) will all be oriented in the direction of the yaw axis 403 when the skew angle ? 431 is equal to 0?. This orientation of gimballed flywheels is depicted as configuration 930 in FIG. 9A, and yaw/roll/pitch axes 901A depicts the relative orientation of yaw axis 403 with the gimbal axes. FIG. 9B depicts the orientation of the angular momentum vectors {right arrow over (h.sub.1)}, {right arrow over (h.sub.2)}, {right arrow over (h.sub.3)}, and {right arrow over (h.sub.4)} of the 4 CMG array 330 of FIG. 4 in configuration 930 (that is, when the skew angle ? 431 is equal to 0?). Each of the angular momentum axes {right arrow over (h.sub.1)}, {right arrow over (h.sub.2)}, {right arrow over (h.sub.3)}, and {right arrow over (h.sub.4)} (i.e., reference numbers 371, 372, 373, and 374, respectively) are depicted in FIG. 9B as having the orientation (at least initially) that these vectors have in FIG. 4. Again yaw/roll/pitch axes 901B depicts the relative orientation of the roll and pitch axes with the angular momentum vectors {right arrow over (h.sub.1)}, {right arrow over (h.sub.2)}, {right arrow over (h.sub.3)}, and {right arrow over (h.sub.4)}. Because the sum of the vectors {right arrow over (h.sub.1)}, {right arrow over (h.sub.2)}, {right arrow over (h.sub.3)}, and {right arrow over (h.sub.4)} in FIG. 9B equal 0 (that is, {right arrow over (h.sub.1)}+{right arrow over (h.sub.2)}+{right arrow over (h.sub.3)}+{right arrow over (h.sub.4)}=0), the configuration 930 depicted FIG. 9B is known as a 0 h singularity,

[0068] FIGS. 9C, 9D, and 9E depict, respectively, a 4 h singularity (configuration 931, a 2 h singularity (configuration 932), and another 0 h singularity (configuration 933). The 4 h singularity configuration 931 can be obtained from the configuration 930 of FIG. 9B by: rotating angular momentum {right arrow over (h.sub.2)} about gimbal axis {right arrow over (g.sub.2)} (from FIG. 9A) by a gimbal angle ?.sub.2 of ?90?; rotating angular momentum {right arrow over (h.sub.3)} about gimbal axis {right arrow over (g.sub.3)} (from FIG. 9A) by a gimbal angle ?.sub.3 of 180?; and rotating angular momentum {right arrow over (h.sub.4)} about gimbal axis {right arrow over (g.sub.4)} (from FIG. 9A) by a gimbal angle ?.sub.4 of 90?. The 4 h singularity is understood to be a saturation singularity, as it represents the maximum amount of angular momentum that can be exhibited by the 4 CMG array 330 (with a skew angle ? 431 equal to 0?) in any particular direction: it is on the saturation boundary of the available momentum values.

[0069] Similarly, the 2 h singularity configuration 932 can be obtained from the configuration 930 of FIG. 9B by: rotating angular momentum {right arrow over (h.sub.2)} about gimbal axis {right arrow over (g.sub.2)} (from FIG. 9A) by a gimbal angle ?.sub.2 of ?90?; and rotating angular momentum {right arrow over (h.sub.4)} about gimbal axis {right arrow over (g.sub.4)} (from FIG. 9A) by a gimbal angle ?.sub.4 of 90?. The 0 h singularity configuration 933 can be obtained from the configuration 930 of FIG. 9B by: rotating angular momentum {right arrow over (h.sub.2)} about gimbal axis {right arrow over (g.sub.2)} (from FIG. 9A) by a gimbal angle ?.sub.2 of ?90?; and also rotating angular momentum {right arrow over (h.sub.4)} about gimbal axis {right arrow over (g.sub.4)} (from FIG. 9A) by a gimbal angle ?.sub.4 of ?90?. Also shown in FIGS. 9D and 9E is an example of a hung gyro 941: that is a gimballed flywheel whose angular momentum vector opposes one or more angular momentum vectors of the remaining array components. In the case of a 4 CMG array, a hung gyro condition can occur in a 0 h state or a 2 h state. One or ordinary skill in the art would appreciate that, for a 4 CMG array, 0 h singularity configurations are always escapable, 2 h singularity configurations are escapable using various techniques, and 4 h singularity configurations are not escapable (because, for example, such a configuration corresponds to a saturation singularity).

[0070] With the above background considered in the case when the skew angle ? 431 is set to 0?, we next consider the case where the skew angle ? 431 is greater than 0? (but less than 90?). This is depicted in FIG. 10A, which includes an alternate view of the yaw/roll/pitch axis 1001A associated with 4 CMG pyramid array 330 of FIG. 6. For example, consistent with the 4 CMG pyramid array geometry of table 606, 4 CMG pyramid array 330 of FIG. 10A depicts angular momentum {right arrow over (h.sub.1)} parallel to the roll axis, angular momentum {right arrow over (h.sub.3)} anti-parallel to the roll axis, angular momentum {right arrow over (h.sub.2)} parallel to the pitch axis, and angular momentum {right arrow over (h.sub.4)} antiparallel to the pitch axis. As is clear from the relative orientation of the angular momentum vectors in FIG. 10A, the net angular momentum value of 4 CMG pyramid array 330 in FIG. 10A is zero: {right arrow over (h.sub.1)}+{right arrow over (h.sub.2)}+{right arrow over (h.sub.3)}+{right arrow over (h.sub.4)}=0. Accordingly, 4 CMG pyramid array 330 with gimbals oriented as depicted in FIG. 10A is referred to as a 0 h state.

[0071] Suppose that one wanted to re-orient the angular momentum vectors of 4 CMG pyramid array 330 in order to access the maximum angular momentum in the positive roll-axis direction. As shown by the swivel arrows in FIG. 10A, one could re-orient angular momentum {right arrow over (h.sub.3)} by 180?, as well as re-orient angular momentum {right arrow over (h.sub.2)} by 90? in a clockwise direction, and re-orient angular momentum {right arrow over (h.sub.4)} by 90? in a counter-clockwise direction (from the perspective shown in FIG. 10A). (According to the relevant gimbal angles, i.e., gimbal angle ?.sub.1 461, gimbal angle ?.sub.2 462, gimbal angle ?.sub.3 463, and gimbal angle ?.sub.4 464 from FIG. 4, such a re-orientation corresponds to a change from (?.sub.1, ?.sub.2, ?.sub.3, ?.sub.4)=(0?, 0?, 0?, 0?) to (?.sub.1, ?.sub.2, ?.sub.3, ?.sub.4)=(0?, ?90?, 180?, 90?).) One must also consider the impact of each of the four momentum planes that make up the 4 CMG pyramid array 330. For example, because of skew angle ? and clocking angle ? associated with each the momentum planes for gimbal CMG.sub.2 and gimbal CMG.sub.4, the decision to re-orient angular momentum {right arrow over (h.sub.2)} by 90? in a clockwise direction will cause {right arrow over (h.sub.2)} to point away from the apex of the square pyramid shape in three-dimension momentum space (and therefore acquire skew angle ? towards the negative yaw axis, away from the roll/pitch plane), and the decision to re-orient angular momentum {right arrow over (h.sub.4)} by 90? in a counter-clockwise direction will cause {right arrow over (h.sub.4)} to point towards the apex of the square pyramid shape in three-dimensional momentum space (and therefore acquire skew angle ? towards the yaw axis, away from the roll/pitch plane). Moreover, re-orienting angular momentum {right arrow over (h.sub.3)} by 180? means that {right arrow over (h.sub.3)} does not acquire any skew angle in three-dimensional momentum space in its new orientation towards the positive roll axis.

[0072] The net angular momentum that is available to 4 CMG pyramid array 330 with all of the angular momentum vectors oriented (as much as possible) towards the positive roll-axis is shown in FIG. 10B, along with the relevant perspective of yaw/roll/pitch axis 1001B, where the pitch axis is directed into the page and the yaw axis is directed towards the top of the page. Lining up all angular momentum vectors as much as possible, subject to the constraint that each is confined to its respective momentum plane, produces the vector sum 1095 depicted in FIG. 10B. Note that the skew angle ? 431, reduces the contributions available from angular momentum {right arrow over (h.sub.2)} and angular momentum {right arrow over (h.sub.4)} in the direction of the positive roll axis. The extent of this vector sum 1095 in three-dimensional momentum space lands this sum on the surface referred to as the 4 h saturation singularity surface. One of ordinary skill in the art will appreciate that, although it is referred to as a 4 h singularity, the vector sum can be less than the magnitude 4 h due to the constraints imposed by each of the momentum planes associated with gimbals CMG.sub.1, CMG.sub.2, CMG.sub.3, and CMG.sub.4. In addition, one of ordinary skill in the art would appreciate that such saturation singularities are classified as external singularities.

[0073] FIGS. 11 and 12 depict alternate states where at least one of the gimbal orientations, in the roll-axis direction, is counter to another of the gimbal orientations. Suppose that one wanted to re-orient the angular momentum vectors of 4 CMG pyramid array 330 shown in FIG. 10A such that angular momentum {right arrow over (h.sub.1)} and angular momentum {right arrow over (h.sub.3)} were left unchanged (and so produced no net angular momentum), but both angular momentum h.sub.2 and angular momentum {right arrow over (h.sub.4)} were re-oriented to pointas much as possiblein the direction of the positive roll-axis. The net angular momentum that is available to 4 CMG pyramid array 330 in such a configuration is shown in FIG. 11, along with the relevant perspective of yaw/roll/pitch axis 1001, where the pitch axis is directed into the page and the yaw axis is directed towards the top of the page. (Again, according to the relevant gimbal angles, i.e., gimbal angle ?.sub.1 461, gimbal angle ?.sub.2 462, gimbal angle ?.sub.3 463, and gimbal angle ?.sub.4 464 from FIG. 4, such a re-orientation corresponds to a change from (?.sub.1, ?.sub.2, ?.sub.3, ?.sub.4)=(0?, 0?, 0?, 0?) to (?.sub.1, ?.sub.2, ?.sub.3, ?.sub.4)=(0?, ?90?, 0?, 90?).) Accordingly, keeping angular momentum {right arrow over (h.sub.1)} and angular momentum {right arrow over (h.sub.3)} unchanged from FIG. 9 (i.e., the 0 h state), but re-orienting angular momentum {right arrow over (h.sub.2)} and angular momentum {right arrow over (h.sub.4)} towards the positive roll-axis, subject to the constraint that each is confined to its respective momentum plane, produces the vector sum 1195 depicted in FIG. 11. Again, the effect of skew angle ? reduces the contributions available from angular momentum {right arrow over (h.sub.2)} and angular momentum {right arrow over (h.sub.4)} in the direction of the positive roll axis. The extent of this vector sum 1195 in three-dimensional momentum space lands this sum on a surface referred to as a 2 h singularity surface. Again, one of ordinary skill in the art will appreciate that, although it is referred to as a 2 h singularity, the vector sum can be less than the magnitude 2 h due to the constraints imposed by each of the momentum planes associated with gimbals CMG.sub.1, CMG.sub.2, CMG.sub.3, and CMG.sub.4.

[0074] Alternatively, suppose that one wanted to re-orient the angular momentum vectors of 4 CMG pyramid array 330 shown in FIG. 10 such that angular momentum {right arrow over (h.sub.1)}, angular momentum {right arrow over (h.sub.3)}, and angular momentum {right arrow over (h.sub.4)} are left unchanged from the 4 h configuration depicted in FIG. 10B, but angular momentum h.sub.2 is re-oriented to pointas much as possiblein the direction of the negative roll-axis. (According to the relevant gimbal angles, i.e., gimbal angle ?.sub.1 461, gimbal angle ?.sub.2 462, gimbal angle ?.sub.3 463, and gimbal angle ?.sub.4 464 from FIG. 4, such a re-orientation corresponds to a change from (?.sub.1, ?.sub.2, ?.sub.3, ?.sub.4)=(0?, ?90?, 180?, 90?) to (?.sub.1, ?.sub.2, ?.sub.3, ?.sub.4)=(0?, 90?, 180?, 90?).) The net angular momentum that is available to 4 CMG pyramid array 330 in such a configuration is shown in FIG. 12, along with the relevant perspective of yaw/roll/pitch axis 1001, where the pitch axis is directed into the page and the yaw axis is directed towards the top of the page. Keeping angular momentum {right arrow over (h.sub.1)}, angular momentum {right arrow over (h.sub.3)}, and angular momentum {right arrow over (h.sub.4)} unchanged from the 4 h configuration depicted in FIG. 10, but re-orienting angular momentum {right arrow over (h.sub.2)} to pointas much as possiblein the direction of the negative roll-axis, subject to the constraint that each is confined to its respective momentum plane, produces the vector sum 1295 depicted in FIG. 12. Again, the extent of this vector sum 1295 in three-dimensional momentum space also lands this sum on a surface referred to as a 2 h singularity surface. One of ordinary skill in the art would appreciate that the singularities associated with the gimbal orientations shown in FIGS. 11 and 12 are referred to as internal singularities.

[0075] FIG. 13 depicts a complete 4 h saturation singularity surface associated with 4 CMG pyramid array 330 with the momentum plane geometry shown in table 606. Likewise, FIG. 14 depicts a complete 2 h singularity surface associated with 4 CMG pyramid array 330 with the momentum plane geometry shown in table 606. A composite of the 4 h surface of FIG. 13 and the 2 h surface of FIG. 14 is shown in FIG. 15.

[0076] According to a similar analysis, one can determine a 4 h saturation singularity surface for the 4 CMG roof array 730 of FIG. 7. In this regard, FIG. 16 depicts a 4 h saturation singularity surface associated with 4 CMG roof array 730 with the momentum plane geometry shown in table 706. One of ordinary skill in the art would appreciate, for example, that the three-dimensional momentum space inside surface 1699 of FIG. 16 is more open than the three-dimensional momentum space enclosed within surface 1399 of FIG. 13.

[0077] FIGS. 10-16 relate to CMG arrays with an even number of gimbals. Similarly, in the circumstance where a CMG array includes 2N gimbals (with integer N>2), then such a CMG array would have an associated 2Nh saturation singularity surface in three-dimensional momentum space. Further still, there would also be manifolds associated internal singularities of order (2N?2)h, and (2N?4)h, etc.

[0078] The case where a CMG array includes N single-gimballed CMG flywheels and Nis an odd number can be analyzed in a similar manner. FIG. 17 depicts an alternate view of the yaw/roll/pitch axis 901 associated with 5 CMG pyramid array 830 of FIG. 8. For example, consistent with the 5 CMG pyramid array geometry of table 806, 5 CMG pyramid array 830 of FIG. 17 depicts angular momentum {right arrow over (h.sub.1)} parallel to the roll axis, angular momentum {right arrow over (h.sub.2)} at an angle of 72? to the positive roll axis, angular momentum {right arrow over (h.sub.3)} at an angle of 144? to the positive roll axis, angular momentum {right arrow over (h.sub.4)} at an angle of 36? to the negative roll axis, and angular momentum {right arrow over (h.sub.5)} at an angle of ?72? to the positive roll axis, Again, as is clear from the relative orientation of the angular momentum vectors in FIG. 17, the net angular momentum value of 5 CMG pyramid array 830 in FIG. 17 is zero: {right arrow over (h.sub.1)}+{right arrow over (h.sub.2)}+{right arrow over (h.sub.3)}+{right arrow over (h.sub.4)}+{right arrow over (h.sub.5)}=0. Accordingly, a 5 CMG pyramid array 830 with gimbals oriented as depicted in FIG. 17 is referred to as a 0 h state.

[0079] Suppose that one wanted to re-orient the angular momentum vectors of 5 CMG pyramid array 830 in order to access the maximum angular momentum in the positive roll-axis direction. As shown by the swivel arrows in FIG. 17, one could re-orient angular momentum {right arrow over (h.sub.3)} by 144? in a clockwise direction, re-orient angular momentum {right arrow over (h.sub.4)} by 144? in a counter-clockwise direction, as well as re-orient angular momentum {right arrow over (h.sub.2)} by 72? in a clockwise direction, and re-orient angular momentum {right arrow over (h.sub.5)} by 72? in a counter-clockwise direction (from the perspective shown in FIG. 17). Again, one must consider the impact of each of the five momentum planes that make up the 5 CMG pyramid array 830. In this case, each of the angular momentum vectors {right arrow over (h.sub.2)}, {right arrow over (h.sub.3)}, {right arrow over (h.sub.4)}, and {right arrow over (h.sub.5)} will acquire some orientation towards or away from the yaw axis as a result of the skew angle ?.

[0080] The net angular momentum that is available to 5 CMG pyramid array 830 with all of the angular momentum vectors oriented (as much as possible) towards the positive roll-axis is shown in FIG. 18, along with the relevant perspective of yaw/roll/pitch axis 1001, where the pitch axis is directed into the page and the yaw axis is directed towards the top of the page. Lining up all angular momentum vectors as much as possible, subject to the constraint that each is confined to its respective momentum plane, produces the vector sum 1895 depicted in FIG. 18. Note that the skew angle ?, reduces the contributions available from angular momentum {right arrow over (h.sub.2)}, angular momentum {right arrow over (h.sub.3)}, angular momentum {right arrow over (h.sub.4)}, and angular momentum {right arrow over (h.sub.5)} in the direction of the positive roll axis. The extent of this vector sum 1895 in three-dimensional momentum space lands this sum on the surface referred to as the 5 h saturation singularity surface. Again, one of ordinary skill in the art will appreciate that, although it is referred to as a 5 h singularity, the vector sum can be less than the magnitude 5 h due to the constraints imposed by each of the momentum planes associated with gimbals CMG.sub.1, CMG.sub.2, CMG.sub.3, CMG.sub.4, and CMG.sub.5.

[0081] FIGS. 19 and 20 depict alternate states where at least one of the gimbal orientations, in the roll-axis direction, is counter to another of the gimbal orientations in a 5 CMG pyramid array. Specifically, suppose that one wanted to re-orient the angular momentum vectors of 5 CMG pyramid array 330 shown in FIG. 18 such that angular momentum {right arrow over (h.sub.1)}, angular momentum {right arrow over (h.sub.2)}, angular momentum {right arrow over (h.sub.4)}, and angular momentum {right arrow over (h.sub.5)} are left unchanged, but that angular momentum {right arrow over (h.sub.3)} was re-oriented to pointas much as possiblein the direction of the negative roll-axis. The net angular momentum that is available to 5 CMG pyramid array 830 in such a configuration is shown in FIG. 19, along with the relevant perspective of yaw/roll/pitch axis 1001, where the pitch axis is directed into the page and the yaw axis is directed towards the top of the page. Again, the effect of skew angle ? reduces the contributions available from angular momenta {right arrow over (h.sub.2)}, {right arrow over (h.sub.4)}, and {right arrow over (h.sub.5)} in the direction of the positive roll axis, and the angular momentum {right arrow over (h.sub.3)} in the direction of the negative roll axis. The extent of this vector sum 1995 in three-dimensional momentum space lands this sum on a surface referred to as a 3 h singularity surface. Again, one of ordinary skill in the art will appreciate that, although it is referred to as a 3 h singularity, the vector sum can be less than the magnitude 3 h due to the constraints imposed by each of the momentum planes associated with gimbals CMG.sub.1, CMG.sub.2, CMG.sub.3, CMG.sub.4, and CMG.sub.5.

[0082] Additionally, suppose that one wanted to further re-orient the angular momentum vectors of 5 CMG pyramid array 830 shown in FIG. 19 such that angular momenta {right arrow over (h.sub.1)}, {right arrow over (h.sub.2)}, {right arrow over (h.sub.3)}, and {right arrow over ({right arrow over (h.sub.4)} )} are left unchanged from the 3 h configuration depicted in FIG. 19, but angular momentum {right arrow over (h.sub.5)} is re-oriented to pointas much as possiblein the direction of the negative roll-axis. The net angular momentum that is available to 5 CMG pyramid array 830 in such a configuration is shown in FIG. 20, along with the relevant perspective of yaw/roll/pitch axis 1001, where the pitch axis is directed into the page and the yaw axis is directed towards the top of the page. Keeping angular momenta {right arrow over (h.sub.1)}, {right arrow over (h.sub.2)}, {right arrow over (h.sub.3)}, and {right arrow over ({right arrow over (h.sub.4)} )} unchanged from the 3 h configuration depicted in FIG. 19, but re-orienting angular momentum {right arrow over (h.sub.5)} to pointas much as possiblein the direction of the negative roll-axis, subject to the constraint that each is confined to its respective momentum plane, produces the vector sum 2095 depicted in FIG. 20. Here, the extent of this vector sum 2095 in three-dimensional momentum space lands this sum on a surface referred to as a 1 h singularity surface. Again, one of ordinary skill in the art would appreciate that the singularities associated with the gimbal orientations shown in FIGS. 19 and 20 are referred to as internal singularities.

[0083] FIG. 21 depicts a composite 5 h and 3 h singularity surface associated with 5 CMG pyramid array 830 with the momentum plane geometry shown in table 806. FIG. 22 depicts a complete 3 h singularity surface associated with 5 CMG pyramid array 830, but with a skew angle ? of 50? (rather than the skew angle 53? cited in table 806).

[0084] In the circumstance where a CMG array includes 2N+1 gimbals (with integer N>2), then such a CMG array would have an associated (2N+1)h saturation singularity surface in three-dimensional momentum space. Further still, there would also be manifolds associated internal singularities of order (2N?1)h, and (2N?3)h, etc.

[0085] As a further example, FIG. 23 depicts a composite 6 h and 4 h singularity surface associated with a 6 CMG roof array according to the momentum plane geometry shown in table 2306.

[0086] FIGS. 15, 16, 21, and 23 depict saturation surfaces in three-dimensional momentum space for, respectively, a 4 CMG pyramid array, a 4 CMG roof array, a 5 CMG pyramid array, and a 6 CMG roof array. The value of the vectors {right arrow over (h.sub..Math. )} for each of the gimbals CMG.sub.i determines the overall size of the momentum envelope that a CMG array can access. Generally, CMG array 130 for a given body 100 is desired to be configured such that the saturation surface associated with CMG array 130 extends well beyond the three-dimensional momentum space the body 100 is expected to access for attitude control. Control of CMG array 130 can also involve control laws designed to access as much of the momentum space within the momentum envelope while avoiding and/or escaping singularities that occur within the momentum envelope. In the examples provided above, for example, control laws can be developed to avoid and/or escape the manifold(s) in three-dimensional momentum space representing 2 h singularities within the overall momentum space bounded by the 4 h saturation surface of 4 CMG pyramid array 330. Similarly, control laws can be developed to avoid and/or escape the manifolds in three-dimensional momentum space representing 3 h and 1 h singularities within the overall momentum space bounded by the 5 h saturation surface of 5 CMG pyramid array 830.

[0087] Notwithstanding the issues of singularity avoidance and escape, one would prefer that the saturation surface of CMG array 130 for body 100 extends well beyond the three-dimensional momentum space body 100 is expected to access for attitude control. However, for a massive body 100 and/or for rapid attitude control, the inertial mass required of CMG array 130 in order to size the momentum envelope of the CMG array so as to encompass a relatively large desired attitude control momentum space can be a limiting factor, and can make a desired momentum envelope impractical or unattainable due to practical limits on the inertial mass of CMG array 130 as part of body 100 to be controlled.

[0088] Suppose, for example, that one desired to rotate body 100 (which can be a spacecraft) at a rate of 3?/see, and that one is using 4 CMG roof array 730 with a particular mass, but the momentum envelope of 4 CMG roof array 730 at that mass is not able to exchange sufficient torque with body 100 to achieve a rate of 3?/sec. Rather, suppose that, if 4 CMG roof array 730 (at a specified mass) is operating at or near its saturation surface (such as surface 1699 in FIG. 16), the most torque that 4 CMG roof array 730 can exchange with body 100 would achieve a rotation rate of body 100 of 1?/sec.

[0089] In order to achieve a desired rotation rate for body 100 (or other operation on body 100) that exceeds the momentum envelope of CMG array 730, consistent with this disclosure, one can operate CMG array 730 and the plurality of thrusters 140 from the 0 h state (for example) such that the momentum trajectory followed by body 100 (through momentum exchange with CMG array 730 and the plurality of thrusters 140) in three-dimensional momentum space at starts the origin point (0,0,0) of the roll/pitch/yaw coordinate system, moves to a point at or near the saturation surface of 4 CMG roof array 730 (such as saturation surface 1699 of FIG. 16), and then moves beyond the momentum envelope associated with the saturation surface in order to access a region of three-dimensional momentum space associated with the desired rotation rate (or other operation) of body 100 outside the momentum envelope.

[0090] FIG. 24 is a schematic diagram of control unit 110 consistent with this disclosure. Control unit 110 can include a processor 2405, a memory module 2411, a storage device 2412, an input interface 2413, a display device 2416, an attitude command interface 2415, a CMG array and thruster control module 2450, a CMG array interface 2430, a thruster interface 2460, and a sensor interface 2420. The control unit 110 can include additional, fewer, and/or different components than those listed above. The type and number of listed devices are exemplary only and not intended to be limiting.

[0091] The processor 2405 can be a central processing unit (CPU) or a graphic processing unit (GPU). The processor 2405 can execute sequences of computer program instructions to perform various processes that will be explained in greater detail below. Although represented as a single unitary processor, one of ordinary skill in the art would appreciate that the operations and functions of processor 2405 can be implemented on any number of processors. The memory module 2411 can include, among other things, a random access memory (RAM) and a read-only memory (ROM). Generally, memory module 2411 can be a non-transitory computer readable medium. The computer program instructions can be accessed and read from the ROM, or any other suitable memory location, and loaded into the RAM for execution by the processor 2405. The processor 2405 can include one or more printed circuit boards, and/or a microprocessor chip.

[0092] The storage device 2412 can include any type of mass storage suitable for storing information. For example, the storage device 2412 can include one or more hard disk devices, optical disk devices, or any other storage devices that provide data storage space. The storage device 2412 can store data related to a data processing process, such as the processing of data received from sensor(s) 120, and any intermediate data created during the data processing process. The storage device 2412 can also include analysis and organization tools for analyzing and organizing data and/or information contained therein.

[0093] In an embodiment, control unit 110 can be configured for access by a user using the input interface 2413. The input interface 2413 can be available for the user to input information into control unit 110, and can include, for example, a keyboard, a mouse, a touch screen and/or optical or wireless computer input devices. The user can input control instructions via the input interface 2413 to control the operation of, among other components, for example, sensor(s) 120, thruster controller 160, CMG array 130, processor 2405, CMG array and thruster control module 2450, as well as the operation of attitude command interface 2415.

[0094] Control unit 110 can also be configured to provide visualized information to the user via the display 2416. For example, the display 2416 can include a computer screen and make available a graphical user interface (GUI) to the user. The display 2416 can display an image of a commanded trajectory in three-dimensional momentum space relative to momentum space associated with CMG array 130 and the plurality of thrusters 140. Consistent with another embodiment, the display 2416 can also display an abbreviated inspection report, or a simple indicator, to the user indicating certain characteristics of CMG array 130, plurality of thrusters 140, and/or body 100.

[0095] Attitude command interface 2415 can be configured to access inertial variables associated with a desired trajectory, attitude, or other operation for body 100. Attitude command interface 2415 can be configured to access stored information regarding a desired attitude and rate for body 100, or it can be configured to receive (such as through wireless signal means) a desired attitude and rate for either immediate attitude adjustment, or delayed attitude adjustment (i.e., attitude adjustment planned at some point in the future).

[0096] CMG array interface 2430 can be configured to provide a current measure of the state of CMG array interface 130 so that processor 2405 (using, for example, information from sensor interface 2420 and attitude command interface 2415 or user input interface 2413) and CMG array and thruster control module 2450 are able to determine what, if any, correction or instruction set needs to be provided to the CMG array 130 so as to re-orient body 100 to a desired attitude and/or rate. CMG array interface 2430 can also be configured to convey the appropriate commands to CMG array 130 (from processor 2405 and/or from CMG array and thruster control module 2450) to achieve a desired attitude and/or rate.

[0097] Likewise, thruster interface 2460 can be configured to provide a current measure of the state of the plurality of thrusters 140 (and/or the state of any individual thruster 141, 142, 143, 144, 145, 146, 147, 148, 149, etc.) so that processor 2405 (using, for example, information from sensor interface 2420 and attitude command interface 2415 or user input interface 2413) and CMG array and thruster control module 2450 are able to determine what, if any, correction or instruction needs to be provided to the thruster controller 160 so as to re-orient body 100 to a desired attitude and/or rate. Thruster interface 2460 can also be configured to convey the appropriate commands to thruster controller 160 (from processor 2405 and/or from CMG array and thruster control module 2450) to achieve a desired attitude and/or rate.

[0098] CMG array and thruster control module 2450, by itself, or in combination with one or more of: processor 2405, CMG array 130, and thruster controller 160 can be configured to manage the appropriate instruction set provided to and ultimately implemented by CMG array 130 and the plurality of thrusters 140 for attitude control of body 100. CMG array and thruster control module 2450 can also be configured to translate the appropriate state of, and settings associated with, CMG array 130 and the plurality of thrusters 140 to form the appropriate gimbal angle vector and thruster command vector at a given time. It will be understood that CMG array and thruster control module 2450 (when operating by itself, or in combination with one or more of: processor 2405, CMG array 130, and thruster controller 160) may be implemented in hardware, in software, or a combination of the two. When implemented in hardware, CMG array and thruster control module 2450 can be implemented as one or more hardware modules, such as one or more application specific integrated circuits. When implemented in software, CMG array and thruster control module 2450 can be implemented as one or more computer programs that are executed on one or more processors.

[0099] FIG. 25 depicts an exemplary control loop consistent with this disclosure, and FIG. 26 depicts an exemplary flow chart of a method consistent with this disclosure. As depicted in FIG. 26, one can acquire an attitude and rate measure of body 100 using sensor(s) 120 (step 2620). A corresponding point in the control loop of FIG. 25 is the acquisition of a measured orientation and rate 2521 of body 100 (variables {right arrow over (Q)}.sub.m and {right arrow over (?)}.sub.m) from sensor(s) 120. The orientation variable {right arrow over (Q)}.sub.m can be in the form of a quaternion, an Euler angle, or some other manner of parametrizing the attitude of body 100. The rate variable {right arrow over (?)}.sub.m can be an appropriate variable (which can be time dependent) associated with the body rate of body 100. Next, one can compare the acquired body 100 attitude and rate 2521 ({right arrow over (Q)}.sub.m and {right arrow over (?)}.sub.m) with a desired or commanded attitude and rate of body 100 at that time (step 2625). In the control loop of FIG. 25, this is depicted where the measured orientation and rate 2521 ({right arrow over (Q)}.sub.m and {right arrow over (?)}.sub.m) are input into the comparison node 2505, and the measured orientation and rate 2521 (variables {right arrow over (Q)}.sub.m and {right arrow over (?)}.sub.m) are compared with a commanded orientation and rate 2501 (variables {right arrow over (Q)}.sub.c and {right arrow over (?)}.sub.c). In terms of the control unit 110 depicted in FIG. 24, the command orientation and rate 2501 (variables {right arrow over (Q)}.sub.c and {right arrow over (?)}.sub.c) may be provided (or acquired) through attitude command interface 2415. The output from comparison node 2505 is error orientation and rate values 2506 for body 100 (variables {right arrow over (Q)}.sub.e and {right arrow over (?)}.sub.e). According to the flowchart of FIG. 26, if the error measure is zero (step 2626), then one can return to step 2620, and acquire an updated attitude and rate measure of body 100 using sensor(s) 120.

[0100] One of ordinary skill in the art would appreciate that even though the control loop of FIG. 25 and flowchart of FIG. 26 are presented in terms of a real-time measurements from sensor(s) 120 (variables {right arrow over (Q)}.sub.m and {right arrow over (?)}.sub.m) that are compared with a commanded or desired orientation and rate (variables {right arrow over (Q)}.sub.c and {right arrow over (?)}.sub.c) such that the error computation (variables {right arrow over (Q)}.sub.e and {right arrow over (?)}.sub.e) also relates to a substantially real-time difference, one could use measured values of orientation and rate from sensor(s) 120 to project expected measured values of orientation and rate of body 100 at a future time, which could then be compared with commanded or desired orientation and rate (variables {right arrow over (Q)}.sub.c and {right arrow over (?)}.sub.c) at that future time also. The resulting error computation (variables {right arrow over (Q)}.sub.e and {right arrow over (?)}.sub.e) would also then correspond to an expected error in the orientation and rate of body 100 at that future time.

[0101] If the error measure of the orientation and rate 2506 of body 100 (variables {right arrow over (Q)}.sub.e and {right arrow over (?)}.sub.e) is not zero (step 2626), then the error measure is analyzed to generate a command torque (step 2630). In the control loop of FIG. 25, this is depicted in attitude control block 2510. One of ordinary skill in the art would appreciate that there can be two operations that translate error measure 2506 to a command torque. First error analyzer 2511 can compute a command acceleration {right arrow over ({dot over (?)})}.sub.c 2512 (where a dot over a variable or vector denotes a time derivative). A command torque {right arrow over ({dot over (h)})}.sub.c 2550 can be obtained from the command acceleration {right arrow over ({dot over (?)})}.sub.c 2512 using the inertia matrix 2513 (J) of body 100: {right arrow over ({dot over (h)})}.sub.c=J{right arrow over ({dot over (?)})}.sub.c.

[0102] With the command torque {right arrow over ({dot over (h)})}.sub.c 2550 associated with body 100 determined, consistent with this disclosure, one can generate a Jacobian matrix ? that, when applied to a combined gimbal rate and thrust command vector, generates said command torque vector {right arrow over ({dot over (h)})}.sub.c 2550 of body 100. This corresponds to block 2535 in the control loop of FIG. 25, and step 2635 in the flowchart of FIG. 26.

[0103] With the exception of the Jacobian matrix ?, and the just-referenced combined gimbal rate and thrust command vector, the variables discussed above in connection with FIGS. 25 and 26 (i.e., {right arrow over (Q)}.sub.m, {right arrow over (Q)}.sub.c, {right arrow over (Q)}.sub.e, {right arrow over (?)}.sub.m, {right arrow over (?)}.sub.c, {right arrow over (?)}.sub.e, {right arrow over ({dot over (?)})}.sub.c{right arrow over ({dot over (h)})}.sub.c) as well as the variables discussed earlier in connection with FIGS. 2-5, 9-12, and 17-20 (i.e., {right arrow over (h)}.sub.i, {right arrow over (g)}.sub.i, {right arrow over (T)}, {right arrow over ({dot over (h)})}.sub.i) are all conventional three-dimensional vectors. Specifically, each of these vectors (indicated with boldface type and accented with a left-to-right arrow) has a magnitude and direction in three-dimensional momentum space. Indeed, three-dimensional momentum space was represented in FIGS. 4-23 through the use of the orthonormal bases: roll, pitch, and yaw. Moreover, inertia matrix 2513 (J) discussed above, would be understood by one of ordinary skill in the art to be a 3?3 matrix, as it carries the three-dimensional command acceleration {right arrow over ({dot over (?)})}.sub.c vector 2512 over to the three-dimensional command torque {right arrow over ({dot over (h)})}.sub.c vector 2550. (Other conventional reference frames can include a gimbal-based orthonormal reference frame which uses the labels: reference, quad, and gimbal axes).

[0104] Consistent with this disclosure, however, the combined gimbal rate and thrust command vector, referenced above, is not a conventional vector in three-dimensional momentum space. Rather, it is a vector that operates on the space of available gimbal rates {dot over (?)}.sub.i. (which is commensurate with the space of gimbal angles ?.sub.i) and effective thruster values TH.sub.j (where the effective thruster values TH.sub.j are understood to be normalized to gimbal rates, i.e., {dot over (?)}.sub.j). Suppose that there are N gimballed rotors, and M effective thrusters (where each effective thruster can contribute an associated fixed torque value). Accordingly, the space of available gimbal rates {dot over (?)}.sub.j is an N-dimensional space described by the vector: {right arrow over ({dot over (?)})}=[{dot over (?)}.sub.1, {dot over (?)}.sub.2, . . . , {dot over (?)}.sub.N].sup.T, and the space of available effective thruster values TH.sub.j is an M-dimensional space described by the vector: TH=[TH.sub.1, TH.sub.2, . . . , TH.sub.M].sup.T. Here, the superscript T is a short-hand notation for the transpose operation, as the vectors {right arrow over ({dot over (?)})} and {right arrow over (TH)} are commonly utilized as column vectors rather than row vectors. Accordingly, the space described by a combined gimbal rate and thrust command vector consistent with this disclosure, for a CMG array 130 with N available gimballed rotors and a plurality of thrusters 140 under control of thruster controller 160, yielding M effective thrusters is an (N+M)-dimensional space described by the vector: [{right arrow over ({dot over (?)})},{right arrow over (TH)}].sup.T=[{dot over (?)}.sub.1, {dot over (?)}.sub.2, . . . , {dot over (?)}.sub.N, TH.sub.1, TH.sub.2, . . . , TH.sub.M].sub.T.

[0105] As used herein, parenthetical subscripts will be used to denote orthonormal components of three-dimensional momentum space (i.e., [{right arrow over ({dot over (h)})}].sup.T=[{dot over (h)}.sub.(1), {dot over (h)}.sub.(2), {dot over (h)}.sub.(3)].sup.T, where the subscripts (1), (2), and (3) can denote the orthonormal bases associated with roll, pitch, and yaw, or a conventional x, y, and z bases, or other orthonormal bases) and subscripts that are not parenthetical will be used to denote the vector space associated with independent gimbals and thrusters (i.e., [{right arrow over ({dot over (?)})}, {right arrow over (TH)}].sup.T=[{dot over (?)}.sub.1, {dot over (?)}.sub.2, . . . , {dot over (?)}.sub.N, TH.sub.1, TH.sub.2, . . . , TH.sub.M].sup.T as discussed above).

[00022] A _ [ ? .fwdarw. . c , TH .fwdarw. c ] T h .fwdarw. . c A _ = [ ( ? h ) ( 1 ) ? ? 1 .Math. ( ? h ) ( 1 ) ? ? N ( ? h ) ( 1 ) ? ( TH 1 ? t ) .Math. ( ? h ) ( 1 ) ? ( TH M ? t ) ( ? h ) ( 2 ) ? ? 1 .Math. ( ? h ) ( 2 ) ? ? N ( ? h ) ( 2 ) ? ( TH 1 ? t ) .Math. ( ? h ) ( 2 ) ? ( TH M ? t ) ( ? h ) ( 3 ) ? ? 1 .Math. ( ? h ) ( 3 ) ? ? N ( ? h ) ( 3 ) ? ( TH 1 ? t ) .Math. ( ? h ) ( 3 ) ? ( TH M ? t ) ]

Accordingly, consistent with this disclosure, a Jacobian matrix that, when applied to a combined gimbal rate and thrust command vector, generates said command torque vector 2550 will correspond to a 3?(N+M) matrix:

[00023] A _ [ ? .fwdarw. . c , TH .fwdarw. c ] T h .fwdarw. . c A _ = [ ? h ( 1 ) ? ? 1 .Math. ? h ( 1 ) ? ? N ? h ( 1 ) ? ( T H 1 ? t ) .Math. ? h ( 1 ) ? ( T H M ? t ) ? h ( 2 ) ? ? 1 .Math. ? h ( 2 ) ? ? N ? h ( 2 ) ? ( T H 1 ? t ) .Math. ? h ( 2 ) ? ( T H M ? t ) ? h ( 3 ) ? ? 1 .Math. ? h ( 3 ) ? ? N ? h ( 3 ) ? ( T H 1 ? t ) .Math. ? h ( 3 ) ? ( T H M ? t ) ] h .fwdarw. ? .fwdarw. TH .fwdarw. ? t ? t h .fwdarw. ? .fwdarw. ? t T H .fwdarw. ? ( T H ? ? t ) ? t = TH .fwdarw. h .fwdarw. . c h .fwdarw. c . = A ? [ ? .fwdarw. . c T H .fwdarw. c ] = [ ? h ( 1 ) ? ? 1 .Math. ? h ( 1 ) ? ? N ? h ( 1 ) ? ( T H 1 ? t ) .Math. ? h ( 1 ) ? ( T H M ? t ) ? h ( 2 ) ? ? 1 .Math. ? h ( 2 ) ? ? N ? h ( 2 ) ? ( T H 1 ? t ) .Math. ? h ( 2 ) ? ( T H M ? t ) ? h ( 3 ) ? ? 1 .Math. ? h ( 3 ) ? ? N ? h ( 3 ) ? ( T H 1 ? t ) .Math. ? h ( 3 ) ? ( T H M ? t ) ] [ ? .fwdarw. . c T H .fwdarw. c ] [ ? .fwdarw. . c T H .fwdarw. c ] = [ d ? c 1 dt .Math. d ? c N dt ? ( TH c 1 ? t ) dt .Math. ? ( TH c M ? t ) dt ] = [ d ? c 1 dt .Math. d ? c N dt TH c 1 .Math. TH c M ]

Formally, the Jacobian is based on partial derivatives of the angular momentum with respect to the gimbal angle as well as an effective partial derivative with respect to a fixed torque contribution associated with the effective thruster vectorrepresented above as: (the variable is discussed below). Because the mapping of the torque from the CMGs is dependent on their instantaneous gimbal angle, the partial derivative of the angular momentum with respect to the gimbal angle can be derived based upon the known state of CMG array 130. In addition, one of ordinary skill in the art will appreciate that one or more thrusters providing a fixed thrust force on body 100 will, necessarily, provide a fixed thrust force on CMG array 130. These fixed thrust forces from the plurality of thrusters can be configured to be on/off-style events (where the on portion persists for a short time) that provide known fixed torque contributions to body 100 (and to CMG array 130). Accordingly, a time derivative of the fixed torque contribution associated with the effective thruster vector can be written as: and, consistent with this disclosure, the command torque vector satisfies:

[00024] h .fwdarw. ? .fwdarw. TH .fwdarw. ? t ? t h .fwdarw. ? .fwdarw. ? t T H .fwdarw. ? ( TH .fwdarw. ? t ) ? t = TH .fwdarw. h .fwdarw. . c h .fwdarw. . c = A ? [ ? .fwdarw. . c T H .fwdarw. c ] = [ ? h ( 1 ) ? ? 1 .Math. ? h ( 1 ) ? ? N ? h ( 1 ) ? ( T H 1 ? t ) .Math. ? h ( 1 ) ? ( T H M ? t ) ? h ( 2 ) ? ? 1 .Math. ? h ( 2 ) ? ? N ? h ( 2 ) ? ( T H 1 ? t ) .Math. ? h ( 2 ) ? ( T H M ? t ) ? h ( 3 ) ? ? 1 .Math. ? h ( 3 ) ? ? N ? h ( 3 ) ? ( T H 1 ? t ) .Math. ? h ( 3 ) ? ( T H M ? t ) ] [ ? .fwdarw. . c T H .fwdarw. c ] [ ? .fwdarw. . c T H .fwdarw. c ] = [ d ? c 1 dt .Math. d ? c N dt ? ( TH c 1 ? t ) dt .Math. ? ( TH c M ? t ) dt ] = [ d ? c 1 dt .Math. d ? c N dt TH c 1 .Math. TH c M ] where : h .fwdarw. ? .fwdarw. TH .fwdarw. ? t ? t h .fwdarw. ? .fwdarw. ? t T H .fwdarw. ? ( TH .fwdarw. ? t ) ? t = TH .fwdarw. h .fwdarw. . c h .fwdarw. . c = A ? [ ? .fwdarw. . c T H .fwdarw. c ] = [ ? h ( 1 ) ? ? 1 .Math. ? h ( 1 ) ? ? N ? h ( 1 ) ? ( T H 1 ?t ) .Math. ? h ( 1 ) ? ( T H M ?t ) ? h ( 2 ) ? ? 1 .Math. ? h ( 2 ) ? ? N ? h ( 2 ) ? ( T H 1 ?t ) .Math. ? h ( 2 ) ? ( T H M ?t ) ? h ( 3 ) ? ? 1 .Math. ? h ( 3 ) ? ? N ? h ( 3 ) ? ( T H 1 ?t ) .Math. ? h ( 3 ) ? ( T H M ?t ) ] [ ? .fwdarw. . c T H .fwdarw. c ] [ ? .fwdarw. c . T H .fwdarw. c ] = [ d ? c 1 dt .Math. d ? c N dt ? ( TH c 1 ? t ) dt .Math. ? ( TH c M ? t ) dt ] = [ d ? c 1 dt .Math. d ? c N dt TH c 1 .Math. TH c M ]

[0106] Because the torque contributions from each of the plurality of thrusters can be configured to be fixed torque contributions, the contribution to the Jacobian from the thrusters ?{right arrow over (h)}/?({right arrow over (TH)}?t) will be the configured change in angular momentum to the CMG array 130 as a result of the fixed torque command/demand values from the thrusters. The torque command/demand values are the command/demand values parsed to the individual thrusters from thruster controller 160. Accordingly, the contributions to the Jacobian from the thrusters can be derived based upon the known state of CMG array 130 and upon the known fixed torque contributions from the thrusters to the CMG array 130.

[0107] The subscript c denotes a command vector (i.e., the gimbal rates and thruster commands that will generate the command torque when operated on by Jacobian matrix ?). The angular momentum vector {right arrow over (h)} in Jacobian matrix ? represents the angular momentum of the components of the CMG array 130; the parenthetical subscripts denote an orthonormal bases in three-dimensional momentum space; the subscripts 1 to N associated with the gimbal angles ?.sub.i denote the ith gimbal CMG.sub.i in a CMG array with N gimballed rotors; and the subscripts 1 to M associated with the command thruster values TH.sub.j denote the jth effective command thruster value in a plurality of M effective thrusters. As indicated above, the jth thruster can have an associated force per unit time value (which can be a function of the reaction mass controllably expelled from the jth effective thruster), and that force per unit time value can provide a net fixed torque per unit time value to body 100 (and CMG array 130) depending on the position of the jth effective thruster on body 100 and also depending on the inertia matrix 2513 (J) of body 100. The product of a time increment ?t during which the jth effective thruster operates (i.e., the on/off time period associated with the thrusters) with the net torque per unit time value TH.sub.j, or TH.sub.j?t, can yield a net fixed torque contribution.

[0108] Where the maximum gimbal rates {dot over (?)}.sub.i are known, the gimbal rate commands {dot over (?)}.sub.i can be normalized to a maximum to ensure rotation about the commanded axis. Furthermore, where the maximum fixed torque contributions from the thrusters are known, the thruster commands TH.sub.j can also be normalized to a maximum to ensure acceleration limits are respected. Accordingly, the gimbal rate commands {dot over (?)}.sub.i and the thruster commands TH.sub.j can be sized to maintain respect of those limits.

[0109] As discussed above, because the effects of the N gimbal angles ?.sub.i from the CMG array 130 on the angular momentum of body 100 {right arrow over (h)} is known through the internal transfer of angular momentum from the CMG array 130 to body 100, the partial derivative of the angular momentum of body 100 {right arrow over (h)} with respect to the N gimbal angles ?.sub.i can be constructed. Moreover, because the effects of the M effective thruster commands TH.sub.j on the angular momentum of body 100 {right arrow over (h)} is known through the known effects of the transfer of momentum from each of the plurality of thrusters 140 (under the control of thruster controller 160) to body 100, the partial derivative of the angular momentum of body 100 {right arrow over (h)} with respect to the M effective thruster commands TH.sub.j can also be constructed. Accordingly, the contents of Jacobian matrix ? can be determined depending on the details of the CMG array 130, the inertia matrix 2513 (J) of body 100, and the plurality of thrusters 140. Again, this corresponds to block 2535 in the control loop of FIG. 25, and step 2635 in the flowchart of FIG. 26.

[0110] To determine the contents of the command vector [{right arrow over ({dot over (?)})}.sub.c,{right arrow over (TH)}.sub.c].sup.T using the known Jacobian matrix ? and the known command torque {right arrow over ({dot over (h)})}.sub.c, where the Jacobian matrix ? is not a square matrix, one can construct a pseudo inverse of Jacobian matrix ? consistent with this disclosure. Prior to computing a pseudo inverse, however, one can determine whether CMG array 130 is operating at or near a saturation singularity (decision 2516 in FIG. 25, and decision 2639 in FIG. 26). To determine the answer to this question, information regarding the current state of the CMG array 130 and the plurality of thrusters 140 can be accessed. In the control loop of FIG. 25, this is depicted by the arrow leading from block 2565 (CMG & Thruster Array) to block 2535 (Jacobian ?) just prior to decision 2516, which has an associated vector of measured gimbal angle settings and effective thruster commands 2536 [{right arrow over (?)}.sub.m,{right arrow over (TH)}.sub.m].sup.T. (Note that the Jacobian matrix ? is determined, in part, by the values of [{right arrow over (?)}.sub.m,{right arrow over (TH)}.sub.m].sup.T.) If the vector of measured gimbal angle settings and effective thruster commands 2536 [{right arrow over (?)}.sub.m,{right arrow over (TH)}.sub.m].sup.T indicate that CMG array 130 is not operating near a saturation surface, then control passes to block 2530 in FIG. 25. In the flowchart of FIG. 26, control passes to step 2641. (The alternative situation, where it is determined that the CMG array is operating in a high momentum state, will be considered further below). In the context of control unit 110 of FIG. 24, CMG array interface 2430 and thruster interface 2460 can provide the information associated with [{right arrow over (?)}.sub.m,{right arrow over (TH)}.sub.m].sup.T to processor 2405 and/or CMG array and thruster control module 2450.

[00025] A _ [ ? .fwdarw. . c , T H .fwdarw. c ] T W _ = [ w ( CMG 1 ) .Math. ? 1 N ? 1 N + 1 .Math. ? 1 N + M .Math. ? .Math. .Math. ? .Math. ? N 1 .Math. w ( CMG N ) ? N N + 1 .Math. ? N N + M ? N + 1 1 .Math. ? N + 1 N w ( TH 1 ) .Math. ? N + 1 N + M .Math. ? .Math. .Math. ? .Math. ? N + M 1 .Math. ? N + M N ? N + M N + 1 .Math. w ( TH M ) ]

To construct a pseudo inverse of Jacobian matrix in order to determine the contents of the command vector, consistent with this disclosure, a weighting matrix is constructed:

[00026] A _ [ ? .fwdarw. . c , TH .fwdarw. c ] T W _ = [ w ( CMG 1 ) .Math. ? 1 N ? 1 N + 1 .Math. ? 1 N + M .Math. ? .Math. .Math. ? .Math. ? N 1 .Math. w ( CMG N ) ? N N + 1 .Math. ? N N + M ? N + 1 1 .Math. ? N + 1 N w ( TH 1 ) .Math. ? N + 1 N + M .Math. ? .Math. .Math. ? .Math. ? N + M 1 .Math. ? N + M N ? N + M N + 1 .Math. w ( TH M ) ]

[0111] The diagonal elements w(CMG.sub.1), . . . w(CMG.sub.N), w(TH.sub.1), . . . w(TH.sub.M) of the weighting matrix W correspond to the plurality of gimballed rotors (i.e., CMG.sub.i) and the plurality of effective thrusters TH.sub.j. Accordingly, the weighting matrix W is a (N+M)?(N+M) matrix.

[0112] The diagonal elements w(CMG.sub.1), . . . w(CMG.sub.N), w(TH.sub.1), . . . w(TH.sub.M) and the values ?.sub.IJ with I?{1, . . . , N+M} and J?{1, . . . , N+M} are configured to modulate authority among the plurality of gimballed rotors in CMG array 130 and the plurality of thrusters 140. For example, if it is determined that the angular momentum of CMG array 130 is well within the saturation surface associated with CMG array 130, then weighting matrix W can be configured to allocate primary authority to the N gimbals CMG.sub.i (over authority granted to the plurality of M effective thrusters TH.sub.j).

[00027] AWW _ A T _ [ A _ W _ A T _ ] - 1 [ ? .fwdarw. . c , TH .fwdarw. ] T [ ? .fwdarw. . c TH .fwdarw. ] = W _ A T _ [ A _ W _ A T _ ] - 1 h .fwdarw. . c

The pseudo inverse of Jacobian matrix subject to weighting matrix has the form: Accordingly, block 2530 in the control loop of FIG. 25 generates the command vector 2537 according to the operation:

[00028] AWW _ A T _ [ A _ W _ A T _ ] - 1 [ ? .fwdarw. . c , TH .fwdarw. ] T [ ? .fwdarw. . c TH .fwdarw. ] = W _ A T _ [ A _ W _ A T _ ] - 1 h .fwdarw. . c

[0113] In the flowchart of FIG. 26, this operation is performed at step 2641. Once the command vector 2537 [{right arrow over ({dot over (?)})}.sub.c,{right arrow over (TH)}.sub.c].sup.T is obtained, control unit 110 is configured to send the appropriate instructions to CMG array interface 2430 and thruster interface 2460 so that the command gimbal rate {right arrow over ({dot over (?)})}.sub.c is applied to the N gimbals CMG.sub.i of CMG array 130, and the effective thruster commands {right arrow over (TH)}.sub.c are implemented by the plurality of thrusters 140 through thruster controller 160. In the flowchart of FIG. 26, this is depicted at step 2650, and in the control loop of FIG. 25, this is implemented at block 2565. As depicted in FIG. 25, this will generate a torque 2555 {right arrow over ({dot over (h)})} on body 100, which will also result in a body rate 2580 {right arrow over (?)}, at which time sensor(s) 120 can provide an updated measure of orientation and rate 2521 of body 100 (variables {right arrow over (Q)}.sub.m and {right arrow over (?)}.sub.m). Again, in the flowchart of FIG. 26, this is depicted by the flow returning to step 2620.

[0114] Returning to decision 2516 in the control loop of FIG. 25, and decision 2639 in the flowchart of FIG. 26, we now consider the case where the vector of measured gimbal angle settings and effective thruster commands 2536 [?.sub.m, {right arrow over (TH)}.sub.m].sup.T indicate that CMG array 130 is operating at or near a saturation surface. Under these conditions, control passes to block 2531 in FIG. 25, and control passes to step 2640 in the flowchart of FIG. 26. Again, in the context of control unit 110 of FIG. 24, CMG array interface 2430 and thruster interface 2460 can provide the information associated with [{right arrow over (?)}.sub.m,{right arrow over (TH)}.sub.m].sup.T to processor 2405 and/or CMG array and thruster control module 2450 in order to make this determination.

[00029] A .Math. [ ? .fwdarw. . c , T H .fwdarw. c ] T W _ = [ w ( CMG 1 ) .Math. ? 1 N ? 1 N + 1 .Math. ? 1 N + M .Math. ? .Math. .Math. ? .Math. ? N 1 .Math. w ( CMG N ) ? N N + 1 .Math. ? N N + M ? N + 1 1 .Math. ? N + 1 N w ( TH 1 ) .Math. ? N + 1 N + M .Math. ? .Math. .Math. ? .Math. ? N + M 1 .Math. ? N + M N ? N + M N + 1 .Math. w ( TH M ) ]

As discussed above, to construct a pseudo inverse of Jacobian matrix in order to determine the contents of the command vector, consistent with this disclosure, a weighting matrix is constructed:

[00030] A .Math. [ ? .fwdarw. . c , T H .fwdarw. c ] T W _ = [ w ( CMG 1 ) .Math. ? 1 N ? 1 N + 1 .Math. ? 1 N + M .Math. ? .Math. .Math. ? .Math. ? N 1 .Math. w ( CMG N ) ? N N + 1 .Math. ? N N + M ? N + 1 1 .Math. ? N + 1 N w ( TH 1 ) .Math. ? N + 1 N + M .Math. ? .Math. .Math. ? .Math. ? N + M 1 .Math. ? N + M N ? N + M N + 1 .Math. w ( TH M ) ]

[0115] Again, the diagonal elements w(CMG.sub.1), . . . w(CMG.sub.N), w(TH.sub.1), . . . w(TH.sub.M) of the weighting matrix W correspond to the plurality of gimballed rotors (i.e., CMG.sub.i) and the plurality of effective thrusters TH.sub.j. Accordingly, the weighting matrix W is a (N+M)?(N+M) matrix.

[0116] As before, the diagonal elements w(CMG.sub.1), . . . w(CMG.sub.N), w(TH.sub.1), . . . w(TH.sub.M) and the values ?.sub.IJ with I?{1, . . . , N+M} and J?{1, . . . , N+M} are configured to modulate authority among the plurality of gimballed rotors in CMG array 130 and the plurality of thrusters 140. In this instance, however, where it is determined that the angular momentum stored in CMG array 130 is at or near the saturation surface associated with CMG array 130, then weighting matrix W can be configured to allocate primary authority to the M effective thrusters TH.sub.j (over authority granted the N gimbals CMG.sub.i in CMG array 130.)

[00031] AWW _ A T _ [ A _ W _ A T _ + ? ? _ ] - 1 ? _ ? _ = ? [ 1 ? ( 1 2 ) ( t ) ? ( 1 3 ) ( t ) ? ( 2 1 ) ( t ) 1 ? ( 2 3 ) ( t ) ? ( 3 1 ) ( t ) ? ( 3 2 ) ( t ) 1 ] ? ( 1 2 ) ( t ) ? ( 1 3 ) ( t ) ? ( 2 1 ) ( t ) ? ( 2 3 ) ( t ) ? ( 3 1 ) ( t ) ? ( 3 2 ) ( t ) ? W _ A T _ [ A _ W _ A T _ + ? ? _ ] - 1 AWW _ A T _ [ A _ W _ A T _ ] - 1

Moreover, the pseudo inverse of Jacobian matrix subject to weighting matrix can include singularity avoidance, of the form: where is a matrix of the form:

[00032] AWW _ A T _ [ A _ W _ A T _ + ? ? _ ] - 1 ? _ ? _ = ? [ 1 ? ( 1 2 ) ( t ) ? ( 1 3 ) ( t ) ? ( 2 1 ) ( t ) 1 ? ( 2 3 ) ( t ) ? ( 3 1 ) ( t ) ? ( 3 2 ) ( t ) 1 ] ? ( 1 2 ) ( t ) ? ( 1 3 ) ( t ) ? ( 2 1 ) ( t ) ? ( 2 3 ) ( t ) ? ( 3 1 ) ( t ) ? ( 3 2 ) ( t ) ? W _ A T _ [ A _ W _ A T _ + ? ? _ ] - 1 AWW _ A T _ [ A _ W _ A T _ ] - 1 , AWW _ A T _ [ A _ W _ A T _ + ? ? _ ] - 1 ? _ ? _ = ? [ 1 ? ( 1 2 ) ( t ) ? ( 1 3 ) ( t ) ? ( 2 1 ) ( t ) 1 ? ( 2 3 ) ( t ) ? ( 3 1 ) ( t ) ? ( 3 2 ) ( t ) 1 ] ? ( 1 2 ) ( t ) ? ( 1 3 ) ( t ) ? ( 2 1 ) ( t ) ? ( 2 3 ) ( t ) ? ( 3 1 ) ( t ) ? ( 3 2 ) ( t ) ? W _ A T _ [ A _ W _ A T _ + ? ? _ ] - 1 AWW _ A T _ [ A _ W _ A T _ ] - 1

where each of , , , and are small compared to 1, and are time-varying, and where is a constant. One of ordinary skill in the art will appreciate that while one method of avoiding singularities is to solve an equation of the form as discussed above, there are many other methods known to one of ordinary skill in the art that can be used to avoid singularities when constructing a pseudo inverse of Jacobian matrix subject to weighting matrix: (i.e., avoiding a singularity in). All of the known methods of avoiding singularities can be used consistent with this disclosure in block 2531 of FIG. 25 and step 2640 of FIG. 26. (That is, all methods applicable to avoiding singularities in unweighted Jacobians are applicable to the weighted Jacobians constructed consistent with this disclosure.)

[00033] [ ? .fwdarw. . c , T H .fwdarw. c ] T [ ? .fwdarw. . c TH .fwdarw. c ] = W _ A T _ [ A _ W _ A T _ + ? ? _ ] - 1 h .fwdarw. . c

Returning to the method discussed above, block 2531 in the control loop of FIG. 25 can generate the command vector 2539 according to the operation:

[00034] [ ? .fwdarw. . c , T H .fwdarw. c ] T [ ? .fwdarw. . c TH .fwdarw. c ] = W _ A T _ [ A _ W _ A T _ + ? ? _ ] - 1 h .fwdarw. . c

[0117] Again, in the flowchart of FIG. 26, this operation is performed at step 2640. Consistent with this disclosure, the values of the diagonal elements of the weighting matrix W can be selected to naturally transition from CMG-only control within the momentum envelope and thruster-only control beyond the saturation singular surface (momentum limit). The weighting matrix W can also be used to ensure that the thruster-only control is used until the system momentum is back within the CMG momentum envelope. Consistent with this disclosure, the use of the plurality of thrusters 140 is in concert with the use of CMG array 130 such that the plurality of thrusters 140 do not fight with the CMG array 130. For example, if one fires thrusters 140 independent of CMG array 130 control, body 100 will remain fixed in inertial space, and the CMG array 130 would rotate until it hits a saturation/singularity surface. An application of the weighting matrix W in combined control consistent with this disclosure allows the plurality of thrusters 140 and the CMG array 130 to work together instead of being equal and opposite. One of ordinary skill in the art would also appreciate consistent with this disclosure, that any of the diagonal elements of W can be set to zero, turning off that particular CMG rotor or turning off (not using) one or more thrusters. Consistent with this aspect of the disclosure, one could select, say the weighting factors for the thrusters as zero and this would perform maneuvers with only CMGs. Similarly one could set the CMG weighting factors to zero and the system would transition to thruster-only control. The initial values of the weighting matrix W can be selected such that the CMGs have full authority until the momentum is close to the singularity. Close to a singularity, where the thruster weighting factors are non-zero, CMG control will likely dominate until the momentum is being reduced. Accordingly, consistent with this disclosure, once the system is above the momentum singularity limit, the CMG values in the weighting matrix W can be set to a value near or at zero. This approach can be a preferred use to limit fuelthat is, it can be considered a best practice, but it is not required.

[0118] For example, once the CMG are saturated, one could zero out (or substantially reduce in relation to the thruster diagonal elements) the diagonal elements of the weighting matrix corresponding to the CMGs, until the system momentum falls back below the saturation surface. This approach would produce thruster commands to increase the momentum beyond the CMG saturation singularity surface, and this approach would continue to use thrusters to remove momentum until the level returns to a value below the saturation singularity surface. (An approach consistent with this is discussed below in connection with FIGS. 27-29.) When below the saturation surface, one could restore the CMG elements of the weighting matrix and CMGs would operate normally.

[0119] In another aspect, one could zero out the thruster elements of the weighting matrix (or substantially reduce in relation to the CMG elements of the weighting matrix) when the momentum levels are below the saturation singularity and thereby limit the torque onto the platform to only what the CMGs can contribute. This can preserve fuel, but can limit platform angular acceleration. Also, because thrusters produce linear acceleration, one might want to limit thruster usage at times to preserve orbit, so setting the weighting matrix elements for thrusters to zero can accomplish that.

[0120] Once the command vector 2539 [{right arrow over ({dot over (?)})}.sub.c,{right arrow over (TH)}.sub.c].sup.T is obtained, control unit 110 is configured to send the appropriate instructions to CMG array interface 2430 and thruster interface 2460 so that the command gimbal rate {right arrow over ({dot over (?)})}.sub.c is applied to the N gimbals CMG.sub.i of CMG array 130, and the effective thruster commands {right arrow over (TH)}.sub.c are implemented by the plurality of thrusters 140 through thruster controller 160. In the flowchart of FIG. 26, again, this is depicted at step 2650, and in the control loop of FIG. 25, this is implemented at block 2565. As depicted in FIG. 25, this will generate a torque 2555 {right arrow over ({dot over (h)})} on body 100, which will also result in a body rate 2580 {right arrow over (?)}, at which time sensor(s) 120 can provide an updated measure of orientation and rate 2521 of body 100 (variables {right arrow over (Q)}.sub.m and {right arrow over (?)}.sub.m). Again, in the flowchart of FIG. 26, this is depicted by the flow returning to step 2620.

[0121] Consistent with this disclosure, we consider an exemplary maneuver of a body 100 that is large compared to the momentum capacity of CMG array 130. In the exemplary maneuver described in connection with FIGS. 27-29, a combined CMG-Thruster control law, consistent with this disclosure, automatically distributes control commands between commands to the CMG array 130 only, to mixed control commands to both CMG array 130 and the plurality of thrusters 140, and then control commands to the plurality of thrusters 140 only. This distribution of control commands occurs throughout the exemplary maneuver.

[00035] J ? = [ 20 , 000 0 0 0 178 , 000 0 0 0 188 , 000 ]

For purposes of illustration only, we consider a CMG array 130 that is only capable of producing angular momentum of [357.9, 640.0, 530.6] ft-lb-s in the Roll/Pitch/Yaw directions, and a body 100 with a body inertia matrix:

[00036] J ? = [ 20 , 000 0 0 0 178 , 000 0 0 0 188 , 000 ] ft - lb - s 2 J ? = [ 20 , 000 0 0 0 178 , 000 0 0 0 188 , 000 ]

Where the exemplary maneuver is an 180? maneuver reaching a peak body rate of ?3?/s in the Yaw axis, the angular momentum of body 100 would reach approximately 9,844 ft-lb-s, far exceeding the capability of exemplary CMG array 130 as introduced above.

[0122] An exemplary torque from CMG array 130 and the plurality of thrusters 140 are depicted in FIGS. 27 and 28. Lines 2701, 2702 and 2705 represent torque contributions from an exemplary CMG array 130 as discussed above. Line 2705 in FIGS. 27 and 28 (representing torque in the Yaw direction associated with CMG array 130) is depicted as contributing torque for approximately the first 16 seconds, where it reaches a saturation singularity (i.e., all the gimballed rotors from CMG array 130 have contributed as much momentum in the commanded direction as they can). At that point, the plurality of thrusters 140 take over (as can be seen, for example, in Line 2725 in FIGS. 27 and 28, representing the contribution to torque in the Yaw direction from the thrusters.) In FIG. 27, it can be seen that the reverse happens close to the end of the maneuver, as the body 100 approaches 180?. That is, combined CMG-Thruster control law, consistent with this disclosure, automatically distributes control commands between commands to the plurality of thrusters 140 only, to mixed control commands to both CMG array 130 and the plurality of thrusters 140, and then control commands to CMG array 130 only in a smooth manner.

[0123] FIG. 28 provides an enlarged view of the transition from CMG-only to thruster-only control from FIG. 27. As depicted in FIG. 28, a large portion of the handoff from CMG-only to thruster-only control takes place at approximately 17.7 seconds. However, it can be seen that the hand-off starts even before 12 seconds and ramps up quickly as CMG array 130 approaches the saturation point. After that, the plurality of thrusters 140 do all the work. The difference in the torque command (Line 2745) and the thruster torque in Yaw (Line 2725) is due to the choice in proportional control here; one of ordinary skill in the art would appreciate that the difference and could be improved (i.e., the difference reduced) with more sophisticated control than that implemented in this exemplary maneuver. This is discussed further below.

[00037] WWW _ = [ 1. 0 0 0 0 0 0 0 1. 0 0 0 0 0 0 0 1. 0 0 0 0 0 0 0 1. 0 0 0 0 0 0 0 0.1 0 0 0 0 0 0 0 0.1 0 0 0 0 0 0 0 0.1 ]

In the exemplary maneuver depicted in FIGS. 27-29, the weighting matrix is configured to favor the CMG array 130 when the momentum is within the CMG capability. Specifically, in the exemplary maneuver depicted in FIGS. 27-29, the weighting matrix is configured as

[00038] WWW _ = [ 1. 0 0 0 0 0 0 0 1. 0 0 0 0 0 0 0 1. 0 0 0 0 0 0 0 1. 0 0 0 0 0 0 0 0.1 0 0 0 0 0 0 0 0.1 0 0 0 0 0 0 0 0.1 ]

when the body momentum is less than [357.9, 640.0, 530.6] ft-lb-s in the Roll/Pitch/Yaw directions.

[0124] In this example, CMG array 130 corresponds to the first four columns of the Jacobian ?, so the matrix multiplication with the weighting matrix W utilizes the first four elements of the diagonal to weight the commanding to CMG array 130. Similarly, the last three elements of the weighting matrix W control the utilization of the plurality of thrusters 140.

[00039] WW _ = [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1. 0 0 0 0 0 0 0 1. 0 0 0 0 0 0 0 1. ]

When the momentum gets close to the maximum levels, the weighting matrix can zero out the diagonal elements corresponding to CMG array 130, effectively turning them off:

[00040] WW _ = [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1. 0 0 0 0 0 0 0 1. 0 0 0 0 0 0 0 1. ] W _ = [ 0.001 0 0 0 0 0 0 0 0.001 0 0 0 0 0 0 0 0.001 0 0 0 0 0 0 0 0.001 0 0 0 0 0 0 0 10. 0 0 0 0 0 0 0 10. 0 0 0 0 0 0 0 10. ]

Alternatively, the weighting matrix in this same situation could allow some contribution from CMG array 130 until the least-squares solution completes the zeroing-out of the CMG commands, or:

[00041] W _ = [ 0.001 0 0 0 0 0 0 0 0.001 0 0 0 0 0 0 0 0.001 0 0 0 0 0 0 0 0.001 0 0 0 0 0 0 0 10. 0 0 0 0 0 0 0 10. 0 0 0 0 0 0 0 10. ]

[0125] The weighting matrix W can also utilize characteristics of the Jacobian ? itself where the weighting factors are a function of the singular values or determinant of the matrix for example, for a pre-determined value of k, as CMG array 130 approaches saturation, the value of the determinant of the Jacobian ? becomes small and the weighting factor for the thrusters can be scaled by a function, for example: k/(det ?).

[0126] FIG. 29 depicts the smooth rotation of body 100 through a 180? maneuver under the influence of the combined CMG-thruster torque. Specifically, FIG. 29 depicts a plot of the Yaw axis rotating from a 0? orientation to 180? (Line 2910).

[0127] As discussed above, the choice of control depicted here is a proportional control only, so the rates slow as the error approaches zero. A more sophisticated control would include integral control and feed-forward such that the end of the maneuver would be more of a mirror of the start and the CMG gimbal angles would return almost completely to their original set. In FIG. 29, one can see that, in the exemplary maneuver depicted, the CMG gimbal angles are approaching that state:

[0128] One of ordinary skill in the art would appreciate that, consistent with this disclosure, the plurality of thrusters 140 will look like additional CMG gimbals to the control law as disclosed herein. Moreover, singularities are avoided using the weighted Jacobian disclosed herein. For example, the null space is maintained throughout maneuvers due to the presence of thrustersthey look like ghost (or virtual) CMG gimbals. Further still, the CMG gimbal capability can be utilized up to the CMG gimbal capacity, and the pseudo inverse procedure (which can be interpreted as the minimum error solution to a least-squares estimate) can provide for continuous control through the CMG array saturation singularity surface.

[0129] As disclosed herein, the weighting matrix assures that the plurality of thrusters are not utilized until they are needed, and that is after the CMG array authority is exhausted. In addition, utilizing the weighting matrix disclosed herein ensures that the CMG authority dominates until it reaches saturation, so thruster propellant is only consumed when the CMG array can no longer contribute If a momentum bias were present when the saturation singularity is encountered, it can managed/maintained via the single control law throughout maneuver. Furthermore, combining CMG array and thruster control in a single, continuous, deterministic control law eliminates non-linearity of individual CMG array/thruster control. For example, destabilizing momentum states that can be created by thrusters when a CMG array is operating on a saturation singularity surface can be avoided due to continuous control in the single Jacobian.

[0130] Other embodiments of the invention will be apparent to those skilled in the art from consideration of the specification and practice of the embodiment disclosed herein. It is intended that the specification and examples be considered as exemplary only, with a true scope and spirit of the invention being indicated by the following claims.