| name | attitude-control |
| description | Spacecraft attitude determination and control system (ADCS) — Euler equations of rigid body rotation, reaction wheels (momentum exchange), magnetorquers (magnetic dipole), thrusters (torque arm), attitude sensors (star tracker, sun sensor, magnetometer, gyroscope), attitude representations (quaternions, direction cosines, Euler angles), control law (PD, PID), detumbling algorithm (B-dot), pointing budget, and ECSS/NASA standards for ADCS design. |
| metadata | {"priority":7,"promptSignals":{"phrases":["attitude control","ADCS","reaction wheel","spacecraft attitude","attitude determination","spacecraft pointing"],"minScore":3}} |
Spacecraft Attitude Determination and Control (ADCS) — Complete Skill
Euler's Equations of Motion
Rigid Body Rotational Dynamics
Euler's equations (body frame):
I_x × ω̇_x − (I_y − I_z) × ω_y × ω_z = T_x [x-axis; T = external torque]
I_y × ω̇_y − (I_z − I_x) × ω_z × ω_x = T_y
I_z × ω̇_z − (I_x − I_y) × ω_x × ω_y = T_z
For small angular rates (linearized):
I × ω̇ ≈ T [decoupled; each axis; valid for ω_body << ω_orbital]
Angular momentum:
H = I × ω [H = angular momentum vector; I = inertia tensor; ω = angular velocity]
For symmetric satellite: H = [I_xx 0 0; 0 I_yy 0; 0 0 I_zz] × ω
Euler instability:
If I_x ≠ I_y ≠ I_z (all different): rotation about intermediate axis (I_y) is unstable
Rotation about major (I_z max) or minor (I_x min) axis: stable
Practical: use spin stabilization about major axis; or 3-axis control to avoid Euler instability
Attitude Representations
Quaternions (Preferred for Flight Software)
Unit quaternion:
q = [q₁ q₂ q₃ q₄]ᵀ [q₄ = scalar; q₁q₂q₃ = vector; q₁²+q₂²+q₃²+q₄² = 1]
q₄ = cos(φ/2); [q₁ q₂ q₃] = sin(φ/2) × ê [φ = rotation angle; ê = unit axis vector]
Advantages: no singularities (vs. Euler angles); compact; numerically efficient kinematics
Quaternion kinematics:
q̇ = 0.5 × Ω(ω) × q [Ω = 4×4 skew-symmetric matrix from ω]
⎡q̇₁⎤ 0.5 × ⎡ 0 ω₃ -ω₂ ω₁⎤ ⎡q₁⎤
⎣q̇₄⎦ ⎣-ω₁ -ω₂ -ω₃ 0 ⎦ ⎣q₄⎦
Euler angles (roll φ, pitch θ, yaw ψ) — intuitive but singularities:
Gimbal lock at θ = ±90° for 3-2-1 sequence
Attitude matrix (DCM) from Euler 3-2-1: C = C₃(ψ) × C₂(θ) × C₁(φ)
Actuators
Reaction Wheels (Momentum Exchange)
Operation: electric motor spins flywheel; spacecraft counter-rotates (angular momentum conservation)
H_wheel + H_spacecraft = constant [no external torques]
Torque on spacecraft: T_sc = −T_wheel = −I_w × α_w [I_w = wheel inertia; α_w = wheel angular acceleration]
Wheel momentum capacity:
H_max = I_w × ω_max [storage; spacecraft rotates until wheel hits speed limit → "saturation"]
Desaturation: use magnetorquers or thrusters to dump momentum
Typical reaction wheel:
Small CubeSat RW: H_max = 30 mN·m·s; torque = 1 mN·m; mass = 130 g; power = 0.3 W
Medium satellite: H_max = 4 N·m·s; torque = 100 mN·m; mass = 1.8 kg; power = 5 W
Large GEO platform: H_max = 40–100 N·m·s; for stationkeeping momentum storage
Redundancy: 4 wheels in skewed configuration (tetrahedral) → any 3 provide full 3-axis control
Magnetorquers (Magnetic Torque Rods)
Operation: current through coil generates magnetic dipole m; Earth's field B → torque T = m × B
Limitation: torque is always perpendicular to B → cannot control about B direction (need ≥2 orbits for full attitude control)
Used for: detumbling, momentum dumping
Torque magnitude:
T = m × B [m = magnetic dipole moment [A·m²]; B = Earth field [Tesla]]
At 400 km LEO: B ≈ 50 μT; m = 0.1 A·m² → T = 5 μN·m
Moment of typical magnetorquer: 1–5 A·m² for 6U CubeSat to small satellite
B-dot detumbling algorithm:
m_cmd = −k_B × Ḃ [k_B = gain; Ḃ = rate of change of measured B-field in body frame]
Effective and robust: automatically reduces angular rate; requires no attitude knowledge; standard for initial detumbling
Thrusters (Torque from Moment Arms)
Torque from thruster:
T = F_thrust × d [d = moment arm from center of mass to thruster; F = thrust force]
Bipropellant thruster pair: 5 N each; moment arm 0.5 m → T = 2.5 N·m (large satellite maneuvers)
Cold gas thrusters: 0.1–1 N; GN₂ or butane; simple; for fine attitude control
Attitude Sensors
Sensor Summary
| Sensor | Accuracy | Update Rate | Power |
|---|
| Star tracker | 5–50 arcsec | 1–10 Hz | 3–10 W |
| Sun sensor (coarse) | 0.1–2° | 10 Hz | 0.05 W |
| Sun sensor (fine) | 0.01° | 100 Hz | 0.2 W |
| Magnetometer | 1–2° | 10 Hz | 0.1 W |
| Gyroscope (MEMS) | 0.1–1°/hr drift | 100 Hz | 0.5 W |
| Gyroscope (FOG) | 0.001°/hr drift | 1000 Hz | 5–10 W |
| Earth horizon sensor | 0.1–0.5° | 5 Hz | 1 W |
| GPS receiver | position ±10 m | 1 Hz | 2 W |
Star tracker — most accurate:
Measures: vector directions to multiple stars → compares to star catalog → full attitude solution
Exclusion angle from Sun: 30–60° typically (bright source blinds detector)
Accuracy: 5 arcsec (1σ) per axis → < 0.002° absolute pointing
Sensor fusion (Kalman filter):
Extended Kalman Filter (EKF) for nonlinear attitude estimation:
x̂_k+1 = f(x̂_k, u_k) + K × (z_k − h(x̂_k)) [K = Kalman gain; z = measurement; h = measurement model]
State vector: quaternion (4) + gyro bias (3) = 7 states
Typical: gyro propagation at 100 Hz; star tracker update at 1–10 Hz; magnetometer at 10 Hz
Control Laws
PD Control (Standard 3-Axis)
Attitude error (quaternion error):
q_err = q_cmd ⊗ q_meas⁻¹ [quaternion multiplication; small q_err → small angle error]
θ_err ≈ 2 × [q_err_1; q_err_2; q_err_3] [for small angles; vector part ≈ half-angle-axis]
PD control law:
T_cmd = −K_P × θ_err − K_D × ω_err [K_P = proportional gain; K_D = derivative gain; ω_err = angular rate error]
Closed-loop natural frequency: ω_n = √(K_P/I); damping ratio: ζ = K_D/(2×√(K_P×I))
Target: ω_n = 0.1 × orbit rate (avoids orbital resonance); ζ = 0.7 (critically damped)
Example CubeSat:
I_z = 0.01 kg·m² (10 cm × 10 cm × 20 cm); target ω_n = 0.05 rad/s
K_P = ω_n² × I = (0.05)² × 0.01 = 2.5×10⁻⁵ N·m/rad
K_D = 2×ζ×ω_n×I = 2×0.7×0.05×0.01 = 7×10⁻⁴ N·m·s/rad
Pointing Budget
Error Sources
Pointing error budget (3σ, all sources RSS'd):
| Error Source | Magnitude [arcsec] |
|---|
| Star tracker measurement noise | ±15 |
| Gyro noise during propagation | ±10 |
| Structural thermal flex | ±20 |
| Alignment calibration residual | ±30 |
| Control bandwidth limitation | ±40 |
| Total (RSS) | ±55 arcsec ≈ 0.015° |
APE (Absolute Pointing Error): total 3σ pointing error wrt inertial frame
RPE (Relative Pointing Error): pointing stability over short time window (often tighter requirement than APE)
Standards and References
| Standard | Scope |
|---|
| ECSS-E-ST-60-30C | Attitude and orbit control (AOCS) |
| ECSS-E-ST-60-10C | Control engineering |
| NASA-RP-1288 | Orbital mechanics for engineering students |
| MIL-STD-1540D | Environmental test methods for launch vehicles |
| ISO 26900 | Space systems — attitude control |
| SMAD (Wertz) | Space Mission Analysis and Design, Chapter 11 |
Output
Provide: mission requirements (orbit: LEO/GEO/HEO; pointing requirement APE [arcsec]; stabilization mode: 3-axis/spin/gravity-gradient; mission: imaging/comms/science), inertia properties (I_xx/I_yy/I_zz [kg·m²]; products of inertia; stability check: rotating about max inertia axis?), actuators (reaction wheels: torque [mN·m]; momentum [N·m·s]; count; configuration; wheel saturation check with max disturbance torque × orbit period [N·m·s]; magnetorquers if: LEO, low-power, detumble; thrusters if: GEO, large maneuvers), sensors (star tracker accuracy [arcsec]; gyro type; drift rate [°/hr]; sensor fusion: EKF states), control law (PD or LQR; K_P = ω_n²×I; K_D = 2ζω_n×I; natural frequency ω_n [rad/s]; damping ζ; settling time [s]; control bandwidth vs. orbit rate), pointing budget (table: each error source [arcsec]; RSS total APE [arcsec]; meets requirement?), detumbling (B-dot algorithm; time to detumble from ω_0 = [rad/s] to ω_final < [rad/s]; requires [orbits]), and applicable standard (ECSS-E-ST-60-30C; ISO 26900; SMAD Chapter 11 for sizing).