Guidance, Navigation & Control (GNC)
Level: 5 — Mastery (cross-domain: math + physics + coding, build/prove, open-ended) Time limit: 3 hours Total marks: 100
Instructions: Answer all three questions. Show all derivations. Where code is requested, pseudocode or Python/NumPy is acceptable but must be dimensionally and algorithmically correct. State all assumptions.
Question 1 — Attitude Kinematics, Quaternions & Gimbal Lock (34 marks)
A spacecraft has body angular velocity (rad/s) measured in the body frame:
(a) Starting from the definition of the direction cosine matrix (body-from-inertial) and the requirement that a body-fixed vector has constant components, derive the DCM kinematic equation . Explicitly justify the sign. (6)
(b) Write the quaternion kinematic equation in full component form for the scalar-first convention . Prove that this kinematics preserves the unit-norm constraint (i.e. ). (8)
(c) For the 3-2-1 (yaw–pitch–roll) Euler sequence, the body-rate to Euler-rate map is Explain quantitatively what happens at (gimbal lock): identify the singular quantity, show which Euler rates diverge, and state which physical rotational degree of freedom becomes unobservable in Euler-angle space. (6)
(d) Given the current attitude quaternion and the above (assumed constant), write a self-contained code routine that propagates for using RK4 with step s, renormalizing each step, and returns the final quaternion and the equivalent 3-2-1 Euler angles. State the exact analytic final quaternion (rotation about the fixed axis ) and use it to argue your code is correct. (8)
(e) Modified Rodrigues Parameters (MRP) are for principal rotation angle . State the value of at which the standard MRP set becomes singular, and describe the shadow-set switching rule that keeps the representation bounded. (6)
Question 2 — INS/GPS Sensor Fusion & Kalman Filtering (34 marks)
Consider a 1-D inertial navigation problem: a vehicle moves along one axis. An accelerometer measures specific force where is a slowly-varying bias (random walk) and is white noise. A GPS receiver provides noisy position fixes.
State vector: (position, velocity, accelerometer bias).
(a) Write the continuous-time INS mechanization / error model in state-space form , treating the measured acceleration input as and the bias as a random-walk driven by process noise. Give , , explicitly. (6)
(b) GPS measures position: , . Write . Test observability of the pair using the observability matrix rank test. Is the accelerometer bias observable from position measurements alone? Prove your answer. (8)
(c) Derive the Kalman gain from first principles as the matrix that minimizes , the trace of the a-posteriori covariance, starting from the standard update and the Joseph-form covariance. Show . (10)
(d) A complementary filter blends a high-rate integrated-IMU estimate with low-rate GPS. Write the scalar complementary-filter transfer functions from (i) true signal and (ii) each sensor to the output, and show the two sensor paths sum to unity across all frequencies. Explain in one line why the crossover frequency is chosen near the point where IMU drift power equals GPS noise power. (6)
(e) State the separation principle (LQG) precisely and explain why observability (part b) and controllability are the two conditions that make an LQG controller well-posed. (4)
Question 3 — Control Design & Proportional Navigation Guidance (32 marks)
A single-axis rocket pitch model (rigid, thrust-vector-controlled) linearizes to the double-integrator-with-instability plant: where is pitch angle, is the TVC gimbal angle command, and .
(a) Design a PD controller to place the closed-loop poles at . Solve for . Give the resulting undamped natural frequency and damping ratio . (8)
(b) Put the closed-loop system in state-space form with , write , compute its eigenvalues, and confirm they match (a). Then propose a Lyapunov function and state the condition on that proves asymptotic stability. (8)
(c) The real TVC actuator has finite bandwidth modelled as a first-order lag with s, plus a pure transport delay , s. For the PD-compensated loop, estimate the phase margin degradation contributed by the lag and delay at the gain-crossover frequency rad/s. Comment on stability-margin risk. (8)
(d) Derive proportional navigation guidance: for a constant-bearing collision geometry, show the commanded lateral acceleration is , defining every symbol. Explain the geometric meaning of "driving " and state the typical range of the navigation constant . Then state the augmentation term added for a maneuvering/gravity target and why. (8)
Answer keyMark scheme & solutions
Question 1
(a) DCM kinematics derivation (6)
- A vector fixed in the body has constant body components: when expressed... more carefully: for a vector fixed in inertial space, const, and , so . (1)
- Physically, in the body frame an inertially-fixed vector appears to rotate with (relative rotation), so . (2)
- Substitute : for all . (2)
- Hence . The minus sign arises because maps inertial→body and the body sees inertial vectors rotate the opposite way to the body's own rotation. (1)
(b) Quaternion kinematics + norm preservation (8) Component form (scalar-first): (4) Norm proof: . (2) The key identity : the four rows of dotted with each give , etc. (each column of is orthogonal to ). Hence . (2)
(c) Gimbal lock (6)
- The map contains ; at , , so the matrix is singular. (2)
- and terms diverge (blow up) because they carry factors; only stays finite. (2)
- At the roll and yaw axes become collinear — one rotational DOF is lost in the representation; and become indistinguishable (only their sum/difference is defined). The physical DOF still exists but is unobservable in Euler coordinates. (2)
(d) RK4 quaternion propagation (8) Analytic result: constant ⇒ rotation about fixed axis by angle . ; rad. ; vector part . ; vector part . So . (3)
import numpy as np
def Xi(q):
q0,q1,q2,q3=q
return 0.5*np.array([[-q1,-q2,-q3],[q0,-q3,q2],
[q3,q0,-q1],[-q2,q1,q0]])
def qdot(q,w): return Xi(q)@w
def propagate(q0,w,T=10.0,h=0.01):
q=np.array(q0,float); n=int(T/h)
for _ in range(n):
k1=qdot(q,w); k2=qdot(q+h/2*k1,w)
k3=qdot(q+h/2*k2,w); k4=qdot(q+h*k3,w)
q=q+h/6*(k1+2*k2+2*k3+k4); q/=np.linalg.norm(q)
return q
def quat_to_euler321(q):
q0,q1,q2,q3=q
phi=np.arctan2(2*(q0*q1+q2*q3),1-2*(q1**2+q2**2))
theta=np.arcsin(2*(q0*q2-q3*q1))
psi=np.arctan2(2*(q0*q3+q1*q2),1-2*(q2**2+q3**2))
return phi,theta,psi
qf=propagate([1,0,0,0],np.array([0.1,-0.2,0.05]))Correctness argument: RK4 output should match the analytic axis-angle quaternion to ~1e-8; renormalization keeps . (5)
(e) MRP singularity (6)
- Standard MRP becomes singular at (full rotation), where . (3)
- Shadow-set rule: whenever (equivalently ), switch to . The two sets describe the same attitude; switching at () keeps always, avoiding the singularity. (3)
Question 2
(a) Mechanization/error model (6) , , . With : (6)
(b) Observability (8) . Observability matrix: , . ⇒ rank 3 = full. (6) Therefore the system is fully observable; the bias IS observable from position alone, because position curvature (2nd derivative) reveals acceleration error, which after integration exposes the bias. (2)
(c) Kalman gain derivation (10) Estimate error . Sub update and : . (2) Joseph form: . (2) Minimize . Using (A symmetric): $\frac{\partial J}{\partial K_k}=-