시뮬링크에서 트림과 선형화하기
F.1 시뮬링크 trim 명령 사용하기
시뮬링크는 트림 상태를 계산하는 루틴을 제공하는데, help trim 으로 사용방법을 확인할 수 있습니다. 5.3장에서 봤던것 처럼 $V_a^*$, $\gamma^*$, $R^*$가 주어지면, $x^*$, $u^*$를 찾는것이 목표가 됩니다. $\dot{x^*}$ = f($x^*$, $u^*$ 로 여기서 x, u는 식 (5.17)과 (5.18)로 정의 됩니다. $\dot{x^*}$는 식 (5.21)에서 주어지며 f(x, u)는 식 (5.1) - (5.12)로 정의됩니다.
트림 명령의 형식은
[x, u, y, dx] = trim('sys', x0, u0, y0, ix, iu, uy, dx0, idx);
여기서 x는 계산된 트림상태 $x^*$, u는 계산됨 트림 입력 $u^*$, y는 계산된 트림 출력 $y^*$, dx는 계산된 상태의 미분 $\dot{x^*}$, 시뮬링크 모델은 sys.mdl에 명시되는데 모델의 상태들은 서브시스템 내 상태로 되어있고, 입력과 출력은 시뮬링크에서 inports, outports로 정의됩니다.
그림 F.1은 비행체 트림 계산하는 시뮬링크 모델로 입력은 4개의 inports로 서보 명령인 delta_e, delta_a, delta_r, delta_t 가 있습니다. 이 블록의 상태들은 시뮬링크 상태로 우리는 $\zeta$ = ($p_n$, $p_e$, $p_d$, u, u, w, $\phi$, $\theta$, $\psi$, p, q, r)$^T$가 됩니다. 출력은 세개의 outports이며 대기속도 $V_a$, 받음각 $\alpha$, $\beta$이며 이 아웃풋을 트림 명령에다가 전달하여 $V_a$ = $V_a^*$가 유지되도록 하겠습니다.
러더도 사용가능하면 $\beta^*$=0으로 유지시키는 트림 명령을 주어 정상선회 하도록 할수 있씁니다. 러더가 없는 경우 0상태로 만들수 없습니다.
트림 계산에서 문제는 시스템의 비선형 방정식을 풀어야 하는데, 많은 경우 시뮬링크 트림 명령에는 초기화 추정 값으로 상태 x0, 입력 u0, 출력 y0, 상태 미분 dx0이 필요합니다. 우리가 일부 상태나 입력, 출력 또는 미분 상태같은 시작 상태를 알아서 초기 상태를 쓸수 있으면, 사용가능한 값들을 인덱스 벡터 ix, iu, iy, idx로 전달할 수 있습니다.
우리의 상태가 아래와 같다면
이렇게 작성할 수 있습니다.
비슷하게 초기 상태, 입력, 출력들을 다음처럼 정의할수 있습니다.
F.2 트림 수치 계산 Numerical Computation of Trim
시뮬링크 말고 다른환경에서 시뮬레이션이 개발된다면, 트림 루틴을 따로 작성해야합니다. 이번 장에서는 어떻게 하는지 간단히 설명하고 $V_a^*$, $\gamma^*$, $R^*$ 파라미터들로 상승 선회 트림 제어에 대해 살펴보고, 트림 찾기 알고리즘에서 입력으로 사용하겠습니다. 입력 파라미터 $V_a^*$, $\gamma^*$, $R^*$와 $\alpha$, $\beta$, $\phi$로 트림 상태와 입력 구하는 계산과정을 살펴보겠습니다. 주어진 $V_a^*$, $\gamma^*$, $R^*$값으로 트림값 $\alpha^*$, $\beta^*$, $\phi^*$을 찾아낸다면 이제 트림 상태와 입력같을 구할수 있게됩니다.
첫 단계는 상태 변수들을 $V_a^*$, $\gamma^*$, $R^*$로, 입력을 $\alpha^*$, $\beta^*$, $\phi^*$로 나타내는데 $V_a^*$, $\gamma^*$, $R^*$는 사용자 지정 입력이 되어 알고리즘은 최적의 트림 상태를 구할수 있는 $\alpha^*$, $\beta^*$, $\phi^*$ 계산합니다. 이 값으로 트림 상태 $x^*$, $u^*$를 찾는데 사용됩니다.
동체 좌표계 속도 $u^*$, $v^*$, $w^*$
식 (2.7)에서 동체 좌표계상 속도들은 $V_a^*$, $\alpha^*$, $\beta^*$ 를 이용해서 나타낼 수있습니다.
피치각 $\theta^*$
비행경로각의 정의로 다음과 같이 정리할 수있습니다.
각 변화율 p, q, r
각 변화율은 식 (3.2)로 오일러각으로 나타낼수 있습니다.
엘리베이터 $\delta_e$
$p^*$, $q^*$, $r^*$, $\delta_e^*$에 대해서 식 (5.11)을 풀면
에일러론 $\delta_a$과 러더 $\delta_r$
에일러론과 러더 명령은 식 (5.10), 식(5.12)을 풀어서 구할 수 있습니다.
F.2.1 트림 알고리즘
모든 관심변수와 제어입력은 $V_a^*$, $\gamma^*$, $R^*$, $\alpha^*$, $\beta^*$, $\phi^*$입니다. 트림 알고리즘의 입력은 $V^*$, $\gamma^*$, $R^*$이며, $\alpha^*$, $\beta^*$, $\phi^*$값을 찾기위해 다음의 최적화 알고리즘을 사용합니다.
이는 다음장에서 설명할 경사 하강 알고리즘으로 수치적으로 구할 수있습니다. 트림 알고리즘은 알고리즘 13에서 정리하였습니다.
F.2.2 경사하강법 수학적 구현
이번 장의 목표는 최적화 문제를 풀수있는 단순한 경사 하강 알고리즘을 살펴보겠습니다.
알고리즘 13 트림
1. 입력 : 희망 대기속도 $V_a^*$, 희망 비행경로각 $\gamma^*$, 희망 선회 반지름 $R_*$
2. 계산 : ($\alpha^*$, $\beta^*$, $\theta^*$) = arg min || $\dot{x^*}$- f($x^*$, $u^*$) $||^2$
3. 트림 상태를 계산합시다.
4. 트림 입력
기본 아이디어는 초기 시작 값 $\xi^{(0)}$에서 음수 기울기 방향으로 따라가는데, 이를 정리하면 다음과 같습니다. 이때 k는 양의 상수 값으로 하강 비율을 나타냅니다.
식 (F.4)를 이산 추정으로 한다면, 다음과 같고 $k_d$는 이산 스탭 크기를 의미합니다.
트림 계산을 위해서, 편미분 $\frac{\vartheta J} {\vartheta \xi}$는 해석적으로 구하기는 힘들지만 수치적인 방법으로 효율적으로 구할수 있습니다.
이는 수치적으로 추정해서 구하면 다음과 같습니다. 이때 $\epsilon$은 작은 상수값이 됩니다.
F.3 시뮬링크 linmod 명령을 사용하여 상태공간 모델을 만들기
시뮬링크는 다이어그램을 이용해서 선형 상태공간을 만들어내는 내장 기능을 제공하고 있습니다. 사용 방법에대해서 매트랩 프롬프트 상에 help linmod로 얻을 수있습니다. linmod 명령의 포맷은 다음과 같습니다.
여기서 X, U는 상태와 입력값으로 선형화 될 값들이며, [A, B, C, D]는 상태공간 모델이 됩니다. 12 상태, 4입력인 F.1 그림에서 linmod 명령을 사용하면 결과 상태공간 모델 방정식은 식 (5.43)의 모델과 식 (5.50)을 포함해서 나오게 됩니다.
알고리즘 14. J = || $\dot{x^*}$ - f($x^*$, $u^*$) $||^20$
1. 입력 : $\alpha^*$, $\beta^*$, $\phi^*$, $V_a^*$, $R^*$, $\gamma^*$
2. $\dot{x^*}$계산하기 :
3. 트림 상태 계산 :
4. 트림 입력 계산 :
5. f($x^*$, $u^*$) 계산 :
6. J 계산 :
식 (5.43)을 얻기 위해서 다음 과정을 거치면 됩니다.
'로봇 > 제어' 카테고리의 다른 글
소형 무인 비행체 6 - 정리 (0) | 2020.06.05 |
---|---|
소형 무인 비행체 5 - 과제 2 (0) | 2020.06.05 |
소형 무인 비행체 4 - 과제 2 (0) | 2020.06.04 |
소형 무인 비행체 3 - 과제 (0) | 2020.06.04 |
시뮬링크에서 s 함수로 모델링하기 (0) | 2020.06.04 |