앞서 살펴본 TRIAD는 두 개의 측정 단위벡터를 이용하여 우주비행체의 자세를 결정하였다 (https://pasus.tistory.com/302). 만약 두 개 이상의 단위벡터를 측정할 수 있다면 모든 측정 벡터를 이용할 수 있도록 TRIAD 방법을 개선해야 할 것이다. 예를 들면 많은 항성을 동시에 추적할 수 있는 별센서를 사용한다면 다수의 단위벡터가 측정된다.

Wahba는 센서의 불확실성으로 인해 발생하는 오류를 최소화하는 방식으로 다수의 측정 단위벡터를 처리하는 방법에 대한 문제를 정립했다.
여기서
Wahba는 기준좌표계에서 측정된 단위벡터와 동체좌표계에서 기준좌표계로 변환된 측정 단위벡터의 차이를 최소화하는 DCM
여기서
측정값에 오류가 없이 완벽하다면
Wahba의 문제를 해결하기 위한 여러가지 방법이 제안되었는데, 예를 들면 Davenport의 q-방법, QUEST(QUaternion Estimator), SVD(Singular Value Decomposition) 방법, FOAM(Fast Optimal Attitude Matrix) 알고리즘 등이 있다. 여기서는 Wahba의 문제를 쿼터니언 기반으로 푼 Davenport의 q-방법에 대해서 알아본다.
먼저 식 (2)의
여기서
위 식 우변의 첫번째 항은
Davenport는 DCM 대신에 쿼터니언을 사용하였다. DCM과 쿼터니언 사이에는 변환 관계식이 있기 때문에 식 (5)를 다음과 같이 쓸 수 있다.
여기서
방향코사인행렬, 오일러각, 그리고 쿼터니언 | 박성수 | 딥웨이브- 교보ebook
이 책에서는 방향코사인행렬, 오일러각, 쿼터니언과 이들의 시간 변화율에 대해서 공부합니다. 모두 3차원 공간 상에서 어떤 기준 좌표계에 대해서 운동하는 강체의 상대적인 자세의 변화를 표
ebook-product.kyobobook.co.kr
쿼터니언
쿼터니언을 이용한 좌표 변환 식에 의하면 식 (6)의
여기서
식 (11)을 식 (6)에 대입하면 다음과 같이 된다.
여기서
이다. 계산량을 줄이기 위해서 행렬
행렬
식 (15)를 식 (13)에 대입하면
쿼터니언은 단위 길이 제약,
라그랑지 곱수(Lagrange multiplier)
식 (19)는 고유값 문제이므로 이제 최대화 문제는 고유값 문제가 되었으며
마지막으로
Davenport의 q-방법을 요약하면 다음과 같다.
우선
Davenport의 q-방법은 최적화 문제를 고유값 문제로 변환하여 풀기 때문에 계산 요구량 측면에서 단점이 될 수 있다.
예를 들어본다. 두 개 이상의 측정 벡터를 처리할 수 있는 q-방법으로는 적당한 예제가 아닐 수 있지만, TRIAD에서 들었던 예와 동일한 문제(https://pasus.tistory.com/302)를 풀어보겠다.
먼저 기준좌표계
좌표계
그러면 동체좌표계
이제 식 (21)과 (23)을 측정 단위벡터로 간주하고 q-방법을 사용하여 DCM
식 (16)에 의해서 행렬
행렬
식 (7)을 이용하여 DCM으로 변환하면 다음과 같아서 식 (22)로 주어지는 참값 DCM과 일치함을 알 수 있다.
다음은 q-방법을 매트랩 코드로 작성한 것이다.
function q = davenport(weight, S_a, S_b)
% Davenport's q-method: static attitide determination
% input:
% weight: weights of each vector
% S_a = [s_a_1, ..., s_a_n] of s_hat_k, k=1,...,n in frame {a}
% S_b = [s_b_1, ..., s_b_n] of s_hat_k, k=1,...,n in frame {b}
% output:
% quaternion q^a_b
%
% coded by st.watermelon
% size
[m,n] = size(S_a);
% B
B = zeros(3,3);
for k=1:n
B = B + weight(k)*S_a(:,k)*S_b(:,k)';
end
% K
K11 = trace(B);
K21 = [B(3,2)-B(2,3);
-B(3,1)+B(1,3);
B(2,1)-B(1,2)];
K22 = B + B' - K11 * eye(3);
K = [K11 K21';
K21 K22];
% eigevnalue
[V, D] = eig(K);
% max quarternion
[m_lam, m_idx] = max(diag(D));
q = V(:, m_idx);
'항공우주 > 우주역학' 카테고리의 다른 글
궤도의 비행각과 비행시간 (0) | 2023.11.16 |
---|---|
정적 자세결정: QUEST (0) | 2023.11.01 |
정적 자세결정 (Static attitude determination): TRIAD (0) | 2023.10.19 |
[CR3BP] 주기궤도의 매니폴드 계산 (0) | 2023.08.01 |
궤도요소 (COE)로 부터 위치 및 속도벡터 계산 (0) | 2023.07.31 |
댓글