OpenGoddard 사용법 3-비선형 최적 제어 및 궤도 생성을 위한 파이썬 라이브러리

htps : // 기주 b. 코 m / is s tei r ch / 오펜 고다 rd
h tps : // / s s up ch. 기주 b. 이오/오펜고다 rd/

OpenGoddard 사용법 1
OpenGoddard 사용법 2
OpenGoddard 사용법 3 ←지금 여기
OpenGoddard 사용법 4

로켓의 최적 상승(1단)



지금까지 시도한 정규화(스케일링)과 knotting method의 합치기술로서, 실제의 로켓에 가까운 값으로 추력 제어 최적화를 실시합니다.

참고문제로서 아래의 논문에 적혀 있는 로켓의 최적 상승 문제를 참고로 합니다. 이것도 내용의 알고리즘은 OpenGoddard와 같은 Legendre-Gauss-Lobatto의 의사 스펙트럼법을 이용하고 있습니다.

Rea, Jeremy Ryan. A legendre pseudospectral method for rapid optimization of launch vehicle trajectories. Diss. Massachusetts Institute of Technology, 2001. htp://hdl. 밥 dぇ. 네 t/1721. 1/8608

운동 방정식은 사용법 2과 거의 같습니다.
값만 변경합니다. 값을 변경하면 정규화를 위한 숫자가 필요하므로 정규화를 잊지 않도록 합니다.

그리고는 좋은 느낌에 써서,
SOLVE!



논문과 비슷한 그래프가 되었습니다. (수렴 값을 설정하는 방법 때문에 미묘하게 다릅니다)

로켓의 최적 상승(2단)



knotting method를 이용하여, 2단 로켓의 추력 제어 최적화를 실시합니다.
주로 변경하는 것은 다음과 같습니다. 초기 설정의 해(Guess 부분)도 조금 바꾸고 있습니다.
time_init = [0.0, 300, 600]
n = [25, 25]
num_states = [3, 3]
num_controls = [1, 1]
max_iteration = 30
prob = Problem(time_init, n, num_states, num_controls, max_iteration)
prob.dynamics = [dynamics, dynamics]
prob.knot_states_smooth = [False]

상태 변수(여기에서는 질량)를 불연속으로 정의합니다. 구속조건(equality)에 다음을 추가합니다.
# knotting condition
R1 = prob.states(0, 0)
v1 = prob.states(1, 0)
m1 = prob.states(2, 0)
R2 = prob.states(0, 1)
v2 = prob.states(1, 1)
m2 = prob.states(2, 1)
result.add(R1[-1] - R2[0])
result.add(v1[-1] - v2[0])
result.add(m1[-1] - m2[0] - 1200)

를 넣으면 고도나 속도는 연속으로 분리시의 질량 감소(불연속)를 정의할 수 있습니다.



2차원 좌표에서의 2단 로켓



OpenGoddard의 example에는 2차원(극좌표계)에서의 로켓의 지구 저궤도에의 궤도 투입을 상정한 예를 넣고 있습니다.




OpenGoddard에서는 궤도 투입하려면 상단 로켓은 도중에 멈추고 재발화를 하는 것이 최적이라는 결과를 얻을 수 있습니다.
세계의 우주 공학자는 이러한 최적 궤도의 결과로부터 로켓 등의 개발을 진행하고 있습니다.

그건 그렇고



재발화를 하지 않는 방식을 다이렉트번 방식이라고 합니다만, 다이렉트 번이 필요 기술 레벨은 낮고, 현실에는 지상과의 통신이나 기술의 문제로 다이렉트 번이 채용되는 경우가 있습니다. 현실에서는 다양한 구속조건을 넣어 궤도를 만들어가는 것이 요구됩니다.

좋은 웹페이지 즐겨찾기