본문 바로가기

전체 글370

Simulink Constant 블록에서 Matlab 구조체를 사용하는 방법 매트랩 구조체형 배열(struc)을 사용하면 관련 데이터를 그룹화하여 동일한 변수 이름으로 관리할 수 있어서 편리하다. 예를 들면 항공기 날개에 관련된 데이터를 다음과 같이 wing이라는 이름으로 관리할 수 있다. wing.b=30; % wing span (ft) wing.S=300; % wing area (ft^2) wing.cbar=11.32;% mean aerodynamic chord (ft) 하지만 시뮬링크에서 Constant 블록의 상수값을 구조체 wing으로 설정하고 사용하면 오류가 생긴다. 예를 들면 wing을 입력으로 받아서 이중 wing.S 만을 출력시키는 간단한 시뮬링크 모델을 만들고, function a = test(wing) a = wing.S; 실행하면 다음과 같은 오류 메시지가 .. 2023. 4. 29.
[Continuous-Time] LQR 예제 : 비례항법유도 법칙 이전 포스트(https://pasus.tistory.com/259)와 동일한 문제를 풀어본다. 다만 최종시간에서 \(y(t_f )\) 는 주어지지만 \(\theta (t_f )\) 에 관한 제약조건은 없는 경우이다. 편의상 비행체의 선형화된 운동 방정식을 다시 쓴다. \[ \begin{align} & \dot{x} \approx V \tag{1} \\ \\ & \dot{y} \approx V \theta \\ \\ & \dot{\theta}= \frac{a}{V} \end{align} \] 여기서 \(a\) 는 비행체의 가속도로서 제어변수, \(\theta\) 는 x-축과 비행체의 속도벡터 사이의 비행 방향각으로서 매우 작다고 가정한 것이다. 비용함수와 제약조건은 다음과 같다. \[ \begin{alig.. 2023. 4. 23.
[Continuous-Time] LQR 예제 : 타격각 제어 일정한 속력 \(V\) 로 움직이는 비행체가 있다. 제어 목적은 출발지에서 출발하여 비행 시간 \(t_f\) 가 경과한 후 목적지에 최소의 에너지를 사용하여 특정한 방향각 \(\theta_f\) 로 비행체를 목적지 \((x_f, \ y_f)\) 에 도착시키는 것이다. 비행체가 미사일이라면 \(\theta_f\)를 타격각(impact angle)이라고 한다. 아래 그림에 비행체와 목적지, 출발지 간의 기하학적인 관계가 나와 있다. 비행체의 운동 방정식은 다음과 같다. \[ \begin{align} & \dot{x}= V \cos \theta \tag{1} \\ \\ & \dot{y} =V \sin \theta \\ \\ & \dot{\theta}= \frac{a}{V} \end{align} \] 여기서 \.. 2023. 4. 22.
[Continuous-Time] 고정최종상태 (Fixed-final-state) LQR 다음과 같이 선형 시스템이 있다. \[ \dot{\mathbf{x}}=A \mathbf{x}+B \mathbf{u} \tag{1} \] 이 시스템의 초기 시간 \(t_0\) 와 초기 상태변수 \(\mathbf{x}(t_0)\) 는 주어졌다고 가정한다. 또한 최종 시간 \(t_f\) 와 최종 상태변수 \(\mathbf{x}(t_f)\) 도 미리 원하는 값 \(\mathbf{x}_f\) 로 설정되었다고 가정한다. 따라서 \(dt_0=0\), \(d\mathbf{x}(t_0 )=0\), \(dt_f=0\), \(d\mathbf{x}(t_f )=0\) 이 되기 때문에 최적제어의 필요조건을 정리한 표에 의하면 경계조건은 자동으로 만족된다. 이 시스템의 비용함수도 다음과 같이 고정된 시간 구간 \([t_0, \ t.. 2023. 4. 13.
[Continuous-Time] 최종상태제약 (Final-state-constrained) LQR 다음과 같이 선형 시스템이 주어지고, \[ \dot{\mathbf{x}}=A\mathbf{x}+B \mathbf{u} \tag{1} \] 이 시스템의 목적함수도 다음과 같이 고정된 시간 구간 \([t_0, \ t_f]\) 에서 이차함수로 주어졌다고 하자. \[ J=\frac{1}{2} \mathbf{x}^T (t_f ) S_f \mathbf{x}(t_f )+ \frac{1}{2} \int_{t_0}^{t_f} \left( \mathbf{x}^T Q \mathbf{x}+ \mathbf{u}^T R \mathbf{u} \right) dt \tag{2} \] 최종 상태변수의 제약조건은 다음과 같이 설정되었다고 가정하자. \[ \psi (\mathbf{x}(t_f ), t_f )=C \mathbf{x}(t_f .. 2023. 4. 8.
OKID (Observer Kalman Filter Identification) OKID(Observer Kalman Filter Identification)는 시간 영역에서 비선형 시스템의 입력-출력 데이터를 이용하여 상태공간 이산시간(discrete-time) 선형 모델을 식별(identification)하는 알고리즘이다. OKID는 1990년대 초 NASA의 Juang에 의해 처음 개발된 이래 다양한 항공기 모델을 식별하는 데 이용되어 왔으며, 완벽한 트림 조건이 아닌 경우나 센서 노이즈가 있는 경우에도 매우 효과적으로 모델을 식별할 수 있는 것으로 알려졌다. OKID는 ERA(eigensystem realization algorithm)의 확장판으로서 ERA 알고리즘이 가진 두 가지 기본 제한 사항을 해결했다. 제한 사항이란 시스템의 초기값이 \(0\) 이어야 한다는 것과 시.. 2023. 3. 25.
ERA (Eigensystem Realization Algorithm) Ho-Kalman 식별 알고리즘에서는 임펄스 반응(impulse response)을 이용하여 마코프 파라미터(Markov parameters)를 측정하였다. 그렇다면 일반적인 입출력 데이터를 이용하여 마코프 파라미터를 획득하는 방법은 없을까. 다음과 같이 미지의 이산시간(discrete-time) 선형 시스템이 있다고 하자. \[ \begin{align} & \mathbf{x}_{k+1}=A \mathbf{x}_k+B \mathbf{u}_k \tag{1} \\ \\ & \mathbf{y}_k=C \mathbf{x}_k+D \mathbf{u}_k \end{align} \] 여기서 \(\mathbf{x}_k \in \mathbb{R}^n\), \(\mathbf{u}_k \in \mathbb{R}^p\), \.. 2023. 3. 25.
Ho-Kalman 식별 알고리즘 다음과 같이 미지의 이산시간(discrete-time) 선형 시스템이 있다고 하자. \[ \begin{align} & \mathbf{x}_{k+1}=A \mathbf{x}_k+B \mathbf{u}_k \tag{1} \\ \\ & \mathbf{y}_k=C \mathbf{x}_k+D \mathbf{u}_k \end{align} \] 여기서 \(\mathbf{x}_k \in \mathbb{R}^n\), \(\mathbf{u}_k \in \mathbb{R}^p\), \(\mathbf{y}_k \in \mathbb{R}^q\), \(A \in \mathbb{R}^{n \times n}\), \(B \in \mathbb{R}^{n \times p}\), \(C \in \mathbb{R}^{q \times n}\.. 2023. 3. 24.
마코프 파라미터 (Markov Parameters) 다음과 같이 이산시간(discrete-time) 선형 시스템이 있다고 하자. \[ \begin{align} & \mathbf{x}_{k+1}=A \mathbf{x}_k+B \mathbf{u}_k \tag{1} \\ \\ & \mathbf{y}_k=C \mathbf{x}_k+D \mathbf{u}_k \end{align} \] 여기서 \(\mathbf{x}_k \in \mathbb{R}^n\), \(\mathbf{u}_k \in \mathbb{R}^p\), \(\mathbf{y}_k \in \mathbb{R}^q\), \( A \in \mathbb{R}^{n \times n}\), \(B \in \mathbb{R}^{n \times p}\), \(C \in \mathbb{R}^{q \times n}\), .. 2023. 3. 22.
쿼터니언 기반 자세제어 질량중심을 기준으로 강체의 회전 운동방정식은 다음과 같다 (https://pasus.tistory.com/191). \[ \vec{M}_G= \bar{I}_G \cdot \frac{ ^b d ^i \vec{\omega}^b}{dt} + {^i \vec{\omega}^b} \times (\bar{I}_G \cdot { ^i \vec{\omega}^b }) \tag{1} \] 여기서 \(\{i\}\) 는 관성좌표계, \(\{b\}\) 는 강체좌표계, \(^i \vec{\omega}^b\) 는 강체좌표계의 각속도 벡터, \(G\) 는 강체의 질량중심, \(\bar{I}_G\) 는 질량중심점에 대한 관성 다이아딕, \(\vec{M}_G\) 는 강체에 작용하는 질량 중심점에 대한 모멘트이다. 식 (1)을 강체좌표.. 2023. 3. 18.
항공기의 질점 (Point Mass) 운동 모델 전투기 교전 운동 모델, 비행기 성능(performance) 해석 모델, 그리고 단거리 미사일 운동 모델로서 다음과 같이 평평한 지구(flat Earth) 가정 하에서 유도된 질점(point mass) 운동 모델을 많이 사용한다 (https://pasus.tistory.com/181). \[ \begin{align} & \dot{x} =V \cos \psi \cos \gamma \tag{1} \\ \\ & \dot{y}=V \sin \psi \cos \gamma \\ \\ & \dot{h}=V \sin \gamma \\ \\ & \dot{V}= -\frac{D}{m}+ \frac{T \cos \epsilon }{m} -g \sin \gamma \\ \\ & \dot{\psi} = \frac{ (L+T \.. 2023. 3. 12.
비례항법유도 (Proportional Navigation Guidance) 1940년대에 경험적 유도법칙(guidance law)으로 시작된 이래 비례항법유도(PNG, proportional navigation guidance) 법칙은 현재 운용 중인 많은 전술 유도 미사일의 중기(midcourse) 및 종말단계(terminal phase)에서 가장 널리 사용되는 유도법칙일 뿐만 아니라 랑데부와 같은 우주임무의 유도 법칙으로도 사용되고 있다. 이와 같이 비례항법유도 법칙이 아직까지 각광을 받는 이유는 표적(target)에 관해 필요한 정보량이 적어서 온보드 센서요구 사항이 단순하므로 구현이 상대적으로 쉽고 신뢰성과 견고성이 뛰어나기 때문이다. PNG가 경험적 유도법칙으로 시작하였다지만 여기서는 논문 "Fundamentals of proportional navigation by .. 2023. 3. 11.
상대 궤도요소의 섭동 (Perturbed Relative Orbital Elements) Clohessy-Wiltshire(CW) 방정식을 \[ \begin{align} & \ddot{x}-3n^2 x-2n \dot{y}=f_1 \tag{1} \\ \\ & \ddot{y}+2n \dot{x}=f_2 \\ \\ & \ddot{z}+n^2 z=f_3 \end{align} \] 벡터 행렬식으로 표현하면 다음과 같다. \[ \begin{align} & \begin{bmatrix} \dot{x} \\ \dot{y} \\ \dot{z} \\ \ddot{x} \\ \ddot{y} \\ \ddot{z} \end{bmatrix} =\begin{bmatrix} 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 \\ 3n^2 & 0 .. 2023. 3. 6.
[PX4] 멀티콥터 자세 명령 PX4의 위치 제어기에서는 원하는 궤적(desired trajectory) 정보를 이용하여 추력 벡터를 계산한다. 관성 좌표계 \(\{i\}\) 로 표현된 추력 벡터는 별도로 주어지는 방위각(azimuth angle) 명령 \(\psi_{cmd}\) 와 함께 자세 명령(attitude command) 계산 모듈로 보내져서 쿼터니언 \(\mathbf{q}_{cmd}\) 로 파라미터화된 자세 명령을 생성하게 된다. 쿼터니언 \(\mathbf{q}_{cmd}\) 를 계산하기 위해서는 먼저 관성 좌표계 \(\{i\}\) 에 대해서 동체 좌표계 \(\{b\}\) 가 취해야 할 목표 좌표계를 구해야 하는데 이 좌표계를 \(\{d\}\) 라고 하자. 그러면 \(\mathbf{q}_{cmd}=\mathbf{q}_d^i.. 2023. 2. 25.