**자세 제어**(姿勢制御, attitude control)는 우주비행체가 관성좌표계와 같은 기준 좌표계나 혹은 다른 행성, 특정 영역, 어떤 물체등과 관련하여 상대적으로 어디를 향하고 있는지 하는 방향성을 제어하는 과정이다.

비행체 혹은 운동체의 자세를 제어하려면 센서로 운동체의 방향을 측정해야하고, 구동기는 운동체를 원하는 방향으로 기동하는 돌림힘을 (1) *센서 측정치를 이용한 현재 자세*와 (2) *지향하고자 하는 자세*와 비교하여 계산한다. 자세센서와 구동기, 알고리즘을 통합하여 연구하는 분야가 유도 항법 제어(GN&C; guidance, navigation and control) 분야이다.

항공기 자세 제어
---------

요 (yaw)피치 (pitch)롤 (roll)
항공기 자세는 세 방향으로 정의된다: 항공기의 앞부분(nose)이 좌우로 흔들리는 요(yaw, 항공기 몸체를 수직으로 관통하는 축을 기준으로 회전하는 움직임), 항공기의 앞부분이 위아래로 움직이는 피치(pitch, 항공기 한쪽 날개에서 다른쪽 날개로 관통하는 축을 기준으로 회전하는 움직임), 그리고 항공기의 날개가 위아래로 흔들리는 롤(roll, 항공기 앞쪽에서 꼬리쪽으로 관통하는 축을 기준으로 회전하는 움직임)이다. 엘리베이터(수평꼬리날개에 있는 플랩)가 피치 운동을 제어하고, 수직 꼬리 날개에 있는 러더가 요 운동을 제어하며, 날개에 있는 에일러론(오른쪽 왼쪽 날개에 있는 플랩을 반대 방향으로 움직여서)이 롤 운동을 제어한다.

우주비행체 자세 제어
-----------

여러 가지 이유로 우주비행체의 자세 제어가 필요하다. 인공위성의 고이득 안테나를 통신을 위해 지구로 향하거나, 특정 실험에서(허블 우주망원경이 특정 관측 대상이 위치한 우주로 향하는 등) 데이터를 수집하기 위해, 혹은 태양으로 인한 과열을 막는 열 제어를 위해, 아니면 궤도 조절을 위한 추진체 분사를 위해 자세를 제어해야 한다.

### 자세안정화 방법

자세안정화 방법은 아래와 같이 회전안정화와 3축 안정화 두가지 방법으로 나뉜다:

* **회전안정화**는 우주비행체의 몸체를 회전시켜서 자이로스코프 효과가 우주비행체의 자세를 안정화시키는 방법이다. 추진체 추력을 때때로 사용하여 회전각속도를 변화시키거나 회전축을 변화시킨다. 이런 추력이나 요요 데스핀(yo-yo de-spin)을 이용해 필요할 때 회전을 멈출 수도 있다. 태양계 바깥 탐사 위성인 파이어니어 10호와 파이어니어 11호가 이러한 회전안정화 우주비행체의 예이다.

* **3축 안정화**는 회전안정화와 달리 일정한 각속도로 몸체를 회전시키지 않으면서 우주비행체의 자세를 원하는 방향으로 고정하는 방법이다.
	+ 소형 추력기를 이용하여 자세를 이쪽 저쪽으로 연속적으로 변경시키면서 일정한 자세를 중심으로 느린 각속도로 움직이도록 데드밴드를 추력기 구동 알고리즘에 구현한다. 대표적인 예는 RCS(반동 제어 시스템)이다. 보이저 1호와 보이저 2호가 이 방법을 사용하며, 2015년 7월까지 가지고 있는 추진체의 4분의 3을 사용하였다.
	+ 반작용 휠이라고 불리우는 운동량 휠을 이용하는 3축 안정화 방법이 있다. 이 반작용 휠 세 개를 각각 회전축이 서로 직각되게 세 방향으로 설치한다(세 개 이상의 휠은 다른 형태로 설치한다). 반작용 휠을 이용해 회전운동량을 비행체의 몸체에서 회전휠로, 회전휠에서 비행체의 몸체로 이동시킨다. 비행체의 몸체를 원하는 방향으로 돌리려면 반작용 휠을 그 반대방향으로 회전시켜서 반작용 돌림힘이 비행체의 몸체에 원하는 방향으로 작용하게 한다. 회전휠의 속도를 감소시키면 비행체 몸체는 다시 원래 자세로 돌아온다. 외부 외란 돌림힘으로(예를 들면, 태양광자압력이나 중력장 구배에 의한 돌림힘) 회전휠에 각운동량이 서서히 쌓이게 되는데, 이렇게 쌓인 각운동량은 회전휠이 최대속도에 도달하기 전에 다른 구동기로 제어돌림힘을 가해서 비행체의 자세를 변화시키지 않으면서 원하는 속도로 줄여야 한다. 이러한 과정을 각운동량 버리기(dumping) 기동이라고 한다. 이를 위해서 대부분의 우주비행체는 추력기를 사용한다. 다만 예외로 허블 우주망원경은 추력기 추진제에 민감한 광학장비로 인해 자기장 돌림힘 구동기를 사용한다.

회전안정화 위성은 특정 관측 영역을 지속적으로 훑어보는 기능을 자연스럽게 제공하지만, 통신 안테나를 지속적으로 지상 관제소를 향하거나 광학장비를 이용하는 데 복잡한 과정이 필요하다. 3축안정화 우주비행체는 이러한 제약 없이 특정 방향을 향하는 자세를 유지할 수 있지만 특별한 자세 구동기와 제어 알고리즘이 필요하다. 추력기를 이용하여 자세를 원하는 지향점 주변을 서서히 회전하는 방법은 때때로 예측치 못한 기동을 발생시키기도 한다. 반작용 휠은 이런 문제없이 자세 제어를 가능하게 하지만 회전하는 기계부품이 때때로 고장나는 경우가 있고(가장 자주 고장나는 인공위성 부품에 속한다), 앞에서 말한 각운동량 버리기 기동을 때때로 해야 한다.

자세운동학
-----

자세운동학은 3차원 강체가 3차원 공간에서 기준좌표계에 대하여 상대적으로 어떤 방향을 향하고 있는지 기술한다. 대표적인 방법으로는 오일러 각, 회전행렬, 쿼터니언(quaternion, 사원수), 로드리게스 변수(Rodrigues Parameters), 변형된 로드리게스 변수(MRP; Modified Rodrigues Parameters) 등이 있다. 롤, 피치, 요 각으로 표현되는 오일러 각은 직관적으로 이해할 수 있는 자세값을 제공하지만 김벌잠김이라고 불리우는 현상으로 특정 자세각에서 해당 미분 방정식이 영으로 나눠지는 특이현상이 발생한다. 회전행렬은 이러한 특이현상 없이 회전을 표현하지만 아홉 개의 변수를 사용해야하고, 이 아홉 개의 변수로 구성되는 3x3 행렬이 직교성(직교행렬)을 항상 만족시키도록 수치적으로 유지하는 것이 어려운 점이다. 쿼터니언은 특이점 없이 네 개의 변수만으로 자세를 표현한다. 다만, 한 개의 추가적인 변수로 인해 네 개의 변수로 표현된 벡터는 항상 단위길이 조건을 만족시키도록 해야 한다. 로드리게스 변수는 세 개만으로 자세를 표현하는 대신 180도 회전에서 특이점이 발생하고, 변형된 로드리게스 변수는 360도 회전에서 특이점이 발생한다. 회전을 표현하는 최소 갯수의 변수는 세 개이고, 수학적으로 변수갯수가 세 개일때는 항상 특이점이 발생하는 것이 증명되어 있다. 그러므로, 특이점이 없는 최소갯수의 변수로 자세를 표현하는 쿼터니언이 우주비행체 자세를 표현하는데 가장 널리 사용된다.

센서
--

### 상대적 자세 센서

대부분의 자세 센서 출력은 자세의 변화율이다. 자세 변화율로 현재 자세를 계산하려면 초기 자세 정보가 필요하고 이를 다른 외부 정보에 의존하여 얻는다. 이러한 자세센서 출력에는 잡음이 섞여있어서 절대 자세 정보를 주는 센서의 측정치로 오차를 수정하지 않으면 부정확한 자세 결정을 유발한다.

#### 자이로스코프

자이로스코프는 외부의 다른 기준 물체를 관측하지 않고 3차원 공간에서 회전을 감지한다. 고전적인 자이로스코프는 회전하는 질량으로 구성되지만, 링 레이저 자이로스코프와 같이 닫힌 경로를 따라서 반사되는 빛을 이용하는 것도 있다.

#### 움직임 기준 장치(MRU: Motion reference units)

MRU는 관성측정장치의 일종으로 일축 또는 다축 센서가 있고, MEMS 자이로스코프를 사용한다. 롤, 피치, 요 운동을 측정하는 다축 MRU도 있으며, 이 센서는 항공분야 외에 다음과 같은 분야에 사용되고있다.

* 안테나 움직임 보상과 안정화
* 동적 위치 보정
* 해양크레인 수직운동(heave) 보상
* 고속 운행체 운동 제어와 감쇄 시스템

### 절대 자세 센서

이 종류의 센서는 우주비행체 외부의 물체나 별 행성등을 직접 측정하여 자세 정보를 제공한다.

#### 수평 센서(Horizon sensor)

수평 센서는 지구 대기에서 발산되는 빛을 수평선에서 감지한다. 적외선이나 열감지 센서가 여기에 이용되는데, 대기와 대기 바깥 부분의 차이를 감지한다. 수평센서는 지구에 상대적인 두 개의 서로 수직인 축에 대한 자세를 측정한다. 수평 센서는 별 센서에 비해 덜 정확하고, 지구 센서라고 불리기도 한다.

#### 태양 센서

태양 센서는 태양의 방향을 측정한다. 간단한 태양전지셀로 구성할 수 있다.

#### 별 센서

별 센서는 광학장비로써 별의 위치를 광학셀이나 카메라로 측정한다. 별센서는 별의 크기와 밝기, 주변의 별자리 모양으로 어떤 별이 관측되고 있는지 알아낸다. 이렇게 알아낸 별자리를 저장하고 있는 별자리 데이터와 비교하여 현재 어느방향으로 별 센서가 향하고 있는지 측정한다. 우주비행체의 몸체에 설치되어있는 별 센서의 상대적 자세를 알면 별 센서의 측정을 통해 우주비행체의 자세를 계산할 수 있다.

#### 자기장센서(Magnetometer)

지구 근궤도에서 이용되는 자기장센서는 지구자기장을 측정하여 자기장 방향을 알려준다. 측정된 지구자기장은 지구자기장 모델(예를 들면 IGRF13)과 비교하여 자기장센서가 향하고 있는 현재 방향을 지구자기장 방향에 대하여 측정할 수 있다.

자세결정
----

자세 제어를 위해서는 현재 자세를 알아야 한다. 각종 센서 정보와 동역할 모델을 통해 현재 자세를 계산하는 것을 자세결정이라고 한다. 자세 정보를 측정하는 센서의 잡음 특성을 고려한 통계적 방법을 통해 자세를 추정한다. 예를 들면 칼만 필터는 현재 추정된 자세와 측정된 자세를 조합하여 최적의 현재 자세를 계산한다.

자기장 센서와 같이 어떤 센서는 자세를 측정하기 위해서 위치 정보가 필요한데, 우주비행체의 경우 위치는 궤도결정을 통해 계산된다. 위성항법장치(GPS)의 발달로 지구 내에서 운용되는 운동체나 근지구궤도에서 운용되는 위성은 위치정보를 알기 쉽지만, 심우주탐사 비행체나 위성항법신호가 도달하지 않는 환경(바닷속, 장애물이 많은 환경, 실내 환경)같은 경우는 위치결정이 매우 어려운 문제이다.

### 정적인 자세 추정 방법

정적인 자세 추정 문제는 흔히 와바의\_문제(Wahba's problem)라고 불린다. 이 문제에 대해 다양한 해법이 제시되었으며, 데이븐포트 q-방법, 퀘스트 (QUEST: 와바의\_문제), TRIAD, Singular Value Decomposition 방법 등이 있다.

### 순차적 자세 추정 방법

자세와 각속도를 순차적 방법으로 추정하기 위해 칼만 필터가 사용된다. 자세동역학(강체 오일러 방정식과 자세운동학의 조합)은 비선형이므로 선형 칼만 필터를 사용할 수 없다. 반면, 자세동역학의 비선형성은 각속도가 빠르지 않은 대부분의 실제 위성의 경우 그렇게 강하지 않으므로 확장 칼만 필터라고 불리우는 시스템을 선형화하여 선형 칼만 필터를 적용하여도 충분하다. 하지만 초기 오차가 클 때 이런 선형화를 적용한 필터는 오차가 0으로 수렴하지 않을 수도 있다. 크래시디스(Crassidis)와 마클리(Markely)는 이러한 경우 무취 칼만 필터(Unscented Kalman filter)를 사용하여 초기 오차 발산 문제를 해결할 수 있음을 보였다. 자세를 추정할 때 쿼터니언(사원수)을 사용하면 오차 자세를 계산할 때 크게 두 가지 다른 방법이 초기에 제시되었다. 단순하게 4차원 벡터의 차이를 뺄셈으로 계산하는 방법과 오차 자세도 자세이므로 그 오차 자세를 표현하는 쿼터니언을 계산하는 방법(MEKF; Multiplicative 확장 칼만 필터라고도 불린다.)이다. 이 논의는 현재 오차자세를 표현하는 쿼터니언을 계산하는 방법이 더 효율적이라는 합의에 도달했다.

자세 제어 방법
--------

제어알고리즘은 최종적으로는 대부분 컴퓨터 프로그램으로 구현된다. 자세 제어 알고리즘은 원하는 자세에 도달하기 위해 우주비행체를 회전시키는 돌림힘을 센서 측정값을 받아서 적절히 결정하여 이 명령을 구동기로 보낸다. 자세 제어 알고리즘은 비례제어같이 가장 간단한 것에서 복잡한 비선형 추정기/제어기까지 우주비행체의 임무 요구 조건에 따라 다양한 형태가 존재한다. 자세 제어 알고리즘은 크게 보았을 때 우주비행체의 비행소프트웨어의 한부분이다. 비행소프트웨어는 지상관제소에서 명령자세를 받고, 각종 데이타를 텔레메트리 (원격 측정법)로 지상관제소로 보낸다.

자세 제어 알고리즘은 사용하는 구동기 성능과 특정 자세 기동이 요구하는 조건을 만족하도록 구현된다. 중력구배안정화와 같은 수동적인 자세 제어방법도 있지만, 대부분의 우주비행체는 능동 자세 제어법을 사용한다. 하지만, 대부분의 능동제어의 경우 간단한 PID 피드백 제어로 요구되는 성능 조건을 만족시키는 자세 제어 알고리즘을 구현할 수 있다.

자세 제어 알고리즘은 구동기로 입력되는 제어 돌림힘을 측정된 자세와 원하는 자세의 오차를 이용하여 계산한다. 오차는 롤, 피치, 요 ((Φ, θ, Ψ)로 표현되는 오일러 각으로 계산할 수도 있고, 방향코사인행렬, 쿼터니언(사원수)로 계산하기도 한다. 가장 많이 사용되는 PID 제어기는 다음과 같은 형태를 가진다.

{\displaystyle T\_{c}(t)=K\_{\text{p}}e(t)+K\_{\text{i}}\int \_{0}^{t}e(\tau )\,d\tau +K\_{\text{d}}{\dot {e}}(t),}
여기서 {\displaystyle T\_{c}}는 제어 돌림힘이고, {\displaystyle e}는 오차 자세이고, and {\displaystyle K\_{\text{p}},K\_{\text{i}},K\_{\text{d}}}는 설계될 PID 제어기의 이득 변수이다.

지구근궤도 인공위성에서 흔히 요구되는 지구지향 (nadir pointing) 자세를 얻기위해서 간단한 PD제어기를 구현하고, 이 명령 돌림힘은 반작용휠과 같은 구동기로 발생시킨다. 인공위성 몸통 좌표계에서 {\displaystyle x,y,z} 각 방향에 대해 다음과 같이 명령 돌림힘을 계산한다.

{\displaystyle T\_{c}x=-K\_{\text{q1}}q\_{1}+K\_{\text{w1}}{w\_{x}},}
{\displaystyle T\_{c}y=-K\_{\text{q2}}q\_{2}+K\_{\text{w2}}{w\_{y}},}
{\displaystyle T\_{c}z=-K\_{\text{q3}}q\_{3}+K\_{\text{w3}}{w\_{z}},}
여기서 {\displaystyle q\_{1},q\_{2},q\_{3}}는 인공위성의 상대적 자세를 지구지향방향에 대해 표현한 오차 쿼터니언의 각 축방향 값이고, {\displaystyle w\_{x},w\_{y},w\_{z}}는 해당 오차자세 각 축방향 각속도오차이고, {\displaystyle K\_{\text{q1}},K\_{\text{q2}},K\_{\text{q3}}}는 비례제어 이득값이고, {\displaystyle K\_{\text{w1}},K\_{\text{w2}},K\_{\text{w3}}}는 미분제어 이득값이다. 이와같이 각축을 분리하여 명령 돌림힘을 계산하는 제어알고리즘은 각속도가 매우 느리고 기동 각도가 작은 대부분의 위성에 적합하지만, 빠른 각속도나 큰 자세 기동을 하는 위성에는 적합하지 않고, 다음과 같이 3개의 명령힘을 벡터로 보고 이득값은 행렬 형태로 놓고 제어기를 설계하는 것이 적합하다.

{\displaystyle {\bf {T}}\_{c}=-K\_{\text{q}}{\bf {q}}\_{13}+K\_{\text{w}}{\bf {w}},}
여기서

{\displaystyle {\bf {T}}\_{c}={\begin{bmatrix}T\_{cx}\\T\_{cy}\\T\_{cz}\end{bmatrix}},{\bf {q}}\_{13}={\begin{bmatrix}q\_{1}\\q\_{2}\\q\_{3}\end{bmatrix}},{\bf {w}}={\begin{bmatrix}w\_{x}\\w\_{y}\\w\_{z}\end{bmatrix}},}
이고, {\displaystyle K\_{\text{q}}} 와 {\displaystyle K\_{\text{w}}}는 3x3 행렬이다. 이러한 제어기 설계법으로는 쿼터니언피드백이 있으면 안정성을 랴프노프함수로 증명할 수 있다. 한가지 흥미로운 점은 쿼터니언피드백에서 오차쿼터니언은 뺄셈 연산으로 계산된다는 것이다. 이와같이 계산된 오차쿼터니언을 궤환 자세 제어루프에 사용했을 때 최단거리 기동, 즉, 고유치 기동을 한다는 것이 증명되어있다. 

인공위성의 자세 제어에서 중요한 임무 중 하나는 각속도를 원하는 범위 이내로 줄이는 것이다. 빠른 자세회전은 구조적, 지상관제소와 통신, 태양전지판을 이용한 위성 전지 충전 등등에 문제를 일으킨다. 그러므로, 대부분의 3축 능동자세 제어 인공위성은 각속도를 일정범위 이내에 유지해야 한다. 빠른 각속도를 줄이는 기동을 디텀블링 (detumbling)이라고 부른다. 이 기동은 특히 인공위성이 발사체와 분리될 때 비정상적인 빠른 회전이 일어날때 필요하다. 디텀플링 제어기에는 지구 자기장을 이용한 비-도트 (B-Dot) 제어기가 널리 사용된다. 이 제어기를 구현하는데는 지구 자기장을 측정할 자기장센서와 계산된 돌림힘을 발생시킬 자기장 돌림힘 구동기가 필요하다. 제어 돌림힘은 다음과 같이 계산된다.

{\displaystyle m=-K{\dot {B}}}
m은 자기장 돌림힘 구동기에 입력될 명령 자기 쌍극자 모멘트 (자기 모멘트) 이고, K는 비례 이득값이고, {\displaystyle {\dot {B}}}는 지구 자기장의 변화율이고, 다음과 같이 계산된다.
{\displaystyle {\dot {B}}\approx {\dfrac {B(t)-B(t-\Delta t)}{\Delta t}}}
여기서, {\displaystyle B(t)}는 자기장센서가 측정한 현재 지구 자기장값이고, {\displaystyle B(t-\Delta t)}는 \Delta t 이전에 측정된 자기장센서값이다.