In [5]:
%%HTML
<LINK rel=stylesheet type="text/css" href="files/defense.css">
In [6]:
from IPython.display import IFrame
import TSatPyViz
from TSatPy import State
%load_ext autoreload
%autoreload 2
Master's Thesis
Daniel R. Couture
University of New Hampshire Mechanical Engineering
Prof. May-Win Thein
June 5th, 2014
NASA Goddard Space Flight Center
@MathYourLife
github.com/MathYourLife
vimeo.com/search?q=mathyourlife
Physical model to capture and quantify boom dynamics.
Analytical and Experimental ADCS
Feature Set
Quaternon Propagation:
Issues in:
In [7]:
TSatPyViz.dq_adjust()
Section | Given | Problem |
---|---|---|
Propagation | Position $\boldsymbol{q}(k)$ and velocity $\boldsymbol{\omega}(k)$ | Predict $\boldsymbol{q}(k+1)$ |
Estimator/Controller | Where we are $\boldsymbol{\hat{q}}$ and where we should be $\boldsymbol{q}, \boldsymbol{q}_d$ | Calculate $k(\boldsymbol{q}^* \otimes \boldsymbol{\hat{q}})$ where $0 < k < 1$ |
Controller | Estimated attitude $\boldsymbol{\hat{q}}$ | Quantify nutation $\boldsymbol{q}_n$ where $\boldsymbol{\hat{q}} = \boldsymbol{q}_n \otimes \boldsymbol{q}_r$ |
Nutation $\boldsymbol{q}_n$ | Calculate nutation correction $\boldsymbol{M}$ |
Operation | Does |
---|---|
$$ \boldsymbol{q} = \boldsymbol{a} \otimes \boldsymbol{b} = \boldsymbol{a}_v b_0 + \boldsymbol{b}_v a_0 + \boldsymbol{a}_v \times \boldsymbol{b}_v + a_0 b_0 - \boldsymbol{a}_v \cdot \boldsymbol{b}_v $$ | "Add" rotation $\boldsymbol{a}$ onto rotation $\boldsymbol{b}$ |
$$\boldsymbol{q}_e = \boldsymbol{q}^* \otimes \boldsymbol{\hat{q}}$$ | Gives the rotation that will move $\boldsymbol{\hat{q}}$ to $\boldsymbol{q}$ |
Taylor Series Expansion:
Luenberger Observer
In [8]:
q = State.Quaternion(vector=[1, 1, 0], radians=1)
TSatPyViz.show_tmqvb(q)
In [9]:
TSatPyViz.show_pid()
Section | Given | Problem |
---|---|---|
Controller | Estimated attitude $\boldsymbol{\hat{q}}$ | Quantify nutation $\boldsymbol{q}_n$ where $\boldsymbol{\hat{q}} = \boldsymbol{q}_n \otimes \boldsymbol{q}_r$ |
In [10]:
from TSatPy.State import Quaternion
yaw = 0.2
pitch = 0.1
print("Creating an attitude with %g rad yaw and %g rad pitch.\n" % (yaw, pitch))
q = Quaternion([0,1,0], radians=pitch) * Quaternion([0,0,1], radians=yaw)
print("Estimator reports an attitude quaternion of:")
print("q: %s\n" % (q))
q_r, q_n = q.decompose()
print("Controller decomposes the attitude and ignores the rotational component")
print("q_r: %s" % (q_r))
print("q_n: %s" % (q_n))
Section | Given | Problem |
---|---|---|
Controller | Attitude error $\boldsymbol{q}_e$ | Calculate nutation correction $\boldsymbol{M}$ |
TableSat controller should only care about nutation $\boldsymbol{q}_n$:
The proportional moment correction term is