주요 콘텐츠

이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.

아폴로 달 착륙선 디지털 오토파일럿 개발

"달 착륙선 디지털 오토파일럿의 설계를 담당했던 일은 제 엔지니어 경력에서 가장 빛나는 순간이었습니다. 닐 암스트롱이 달 착륙선(LM)에서 내려 달 표면에 발을 디뎠을 때, 아폴로 프로그램에 기여한 모든 엔지니어들은 자부심과 성취감을 느꼈다. 우리는 목표를 달성하는 데 성공했다. “우리는 그전까지 존재하지 않았던 기술을 개발했고, 끊임없는 노력과 세심한 주의를 기울여 흠잡을 데 없이 작동하는 시스템을 만들어 냈습니다." Richard J. Gran, The Apollo 11 Moon Landing: Spacecraft Design Then and Now.

이 예제는 1961년에 Simulink®와 Aerospace Blockset™이 있었더라면, 리처드와 아폴로 달 착륙선 디지털 오토파일럿 설계팀에서 일했던 다른 엔지니어들이 이를 어떻게 구현할 수 있었을지를 보여줍니다.

모델 설명

Simulink의 자동 조종 장치를 개발하는 데 걸리는 시간은 아폴로 달 착륙선 오토파일럿의 초기 설계에 소요된 시간의 극히 일부에 불과합니다.

if ~bdIsLoaded("aero_dap3dof")
    open_system("aero_dap3dof");
end

aero_dap3dof_model2.png

Reaction Jet Control 서브시스템은 현재 드레이퍼 연구소(Draper Laboratory)로 불리는 MIT 계측 연구소(MIT IL)에서 제안(및 구현)한 디지털 오토파일럿 설계를 모델링합니다. 모델 내의 Stateflow® 다이어그램은 기술 칼럼 The Apollo 11 Moon Landing: Spacecraft Design Then and Now에 설명된 위상면 제어 알고리즘을 구현하는 논리를 명시합니다. 달 착륙선이 다이어그램의 어느 영역에서 작업을 수행하고 있는지에 따라, Stateflow 다이어그램은 Fire_region 또는 Coast_region 상태가 됩니다. 참고로, 이러한 서로 다른 영역 간의 전환은 특정 파라미터에 따라 달라집니다. Stateflow 다이어그램은 다른 상태로 전환할지 여부를 결정한 다음, 어떤 반동 제트를 발사할지 계산합니다.

DevelopingTheApolloLunarModuleDigitalAutopilotExample_08.png

달 착륙선의 평행 이동 및 회전 역학은 Lunar Module Dynamics 서브시스템에서 근사적으로 모델링됩니다. 모델의 Visualization 영역에서 Simulink 스코프를 비롯해 Simulink 3D Animation™ 및 위상 평면 플롯을 통해 달 착륙선의 상태와 오토파일럿 성능에 대한 애니메이션 및 다양한 시각화 방법을 확인할 수 있습니다.

aero_dap3dof_phaseplane2L.png

aero_dap3dof_viz.png

대화형 컨트롤

달 착륙선 모델과 상호작용하기 위해 Commands 영역에서 오토파일럿 설정과 달 착륙선의 초기 상태를 변경합니다. 예를 들어, 디지털 오토파일럿 설계가 증가한 초기 바디 회전율을 어떻게 처리하는지 확인하려면 Configure LM Attitude의 슬라이더 컴포넌트를 사용하십시오.

Interactive controls for lunar module model

임무 설명

LM 디지털 오토파일럿은 3개의 자유도를 가지고 있습니다. 즉, 반동 제트 추진기는 설계상 비행체의 궤도 궤적에 영향을 주지 않으면서 비행체를 회전시키도록 구성되고 제어됩니다. 따라서, 이 모델의 평행 이동 동역학은 Aerospace Blockset의 Spacecraft Dynamics 블록을 이용한 궤도 전파를 통해 근사화됩니다. 이 블록은 Moon 구면 조화 중력 모델 LP-100K를 사용하도록 구성되어 있습니다.

aero_dap3dof_LunarModuleDynamics.png

디지털 오토파일럿의 설계 동작을 시연하기 위해, 동력 하강(powered descent)이 시작되기 직전에 "Descent Orbit Insertion" 임무 구간이 Apollo 11 Mission Report에서 선택되었습니다.

Graphic of descent orbit insertion

(이미지 출처: NASA)

"Descent Orbit Insertion" 연소는 발사 후 101시간 36분 14초에 시작되어 30초 동안 지속되었습니다. 이 연소 작업으로 인해 달 착륙선은 약 1시간에 걸쳐 궤도를 약 60해리에서 50,000피트 상공으로 낮추는 궤도에 진입하게 되었습니다. 고도 50,000 피트에서 모듈은 동력 하강을 시작했습니다.

하강 궤도 진입 연소 직후 달 착륙선의 근사 궤적을 사용하여 aero_dap3dof 모델을 초기화합니다.

mission.t_rangeZero             = datetime(1969,7,16,13,32,0); % lift-off
mission.t_descentInsertionStart = mission.t_rangeZero + hours(101) + minutes(36) + seconds(14);
mission.t_descentInsertion      = mission.t_descentInsertionStart + seconds(30);
mission.t_poweredDescentStart   = mission.t_rangeZero + hours(102) + minutes(33) + seconds(5.2);

disp(timetable([mission.t_rangeZero, mission.t_descentInsertionStart, ...
    mission.t_descentInsertion, mission.t_poweredDescentStart]', ...
    {'Range Zero (lift-off)', 'Descent Orbit Insertion (Engine ignition)', ...
    'Descent Orbit Insertion (Engine cutoff)', 'Powered Descent (Engine ignition)'}', VariableNames="Mission Phase"));
            Time                            Mission Phase                
    ____________________    _____________________________________________

    16-Jul-1969 13:32:00    {'Range Zero (lift-off)'                    }
    20-Jul-1969 19:08:14    {'Descent Orbit Insertion (Engine ignition)'}
    20-Jul-1969 19:08:44    {'Descent Orbit Insertion (Engine cutoff)'  }
    20-Jul-1969 20:05:05    {'Powered Descent (Engine ignition)'        }

"Descent Orbit Insertion (Engine cutoff)" 및 "Powered Descent Initiation (Engine ignition)" 시점의 모듈 궤적은 Apollo 11 Mission Report(Table 7-II.- Trajectory Parameters)에 제시되어 있습니다.

mission.Latitude_deg  = [-1.16, 1.02]';    % [deg]
mission.Longitude_deg = [-141.88, 39.39]'; % [deg]
mission.Altitude_mi   = [57.8, 6.4]';      % [nautical miles]
mission.Altitude_ft   = convlength(mission.Altitude_mi, 'naut mi', 'ft');
mission.Velocity_fps  = [5284.9, 5564.9]'; % [ft/s] (in Inertial frame)
mission.FlightPathAngle_deg = [-0.06, 0.03]'; % [deg] (measured upward from local horizontal plane)
mission.HeadingAngle_deg = [-75.19 -101.23]'; % [deg] (measured East of North)
disp(table({'Range Zero (lift-off)'; 'Descent Orbit Insertion (Engine ignition)'}, ...
    mission.Latitude_deg, mission.Longitude_deg, mission.Altitude_mi, ...
    mission.Velocity_fps, mission.FlightPathAngle_deg, mission.HeadingAngle_deg, ...
    VariableNames=["Mission Phase", ...
    "Latitude (deg)", "Longitude (deg)", "Altitude (mi)", ...
    "Velocity (ft/s)", "Flight path angle (deg)", "Heading (deg)"]));
                    Mission Phase                    Latitude (deg)    Longitude (deg)    Altitude (mi)    Velocity (ft/s)    Flight path angle (deg)    Heading (deg)
    _____________________________________________    ______________    _______________    _____________    _______________    _______________________    _____________

    {'Range Zero (lift-off)'                    }        -1.16             -141.88            57.8             5284.9                  -0.06                 -75.19   
    {'Descent Orbit Insertion (Engine ignition)'}         1.02               39.39             6.4             5564.9                   0.03                -101.23   

모델 초기화

위에서 정의한 데이터를 사용하여 "Descent Orbit Insertion (Engine cutoff)" 임무 단계에 대한 모델 파라미터를 초기화합니다.

initialization 함수인 aero_dap3dofdata는 달의 방향에 대한 정보가 필요하며, 이 정보는 Aerospace Toolbox 함수인 moonLibration을 사용하여 계산할 수 있습니다. 이 함수를 사용하려면 "Ephemeris Data for Aerospace Toolbox"가 필요합니다. 이 데이터가 아직 설치되어 있지 않다면 aeroDataPackage를 사용하여 설치하십시오.

mission.LibrationAngles_deg = moonLibration(juliandate(mission.t_descentInsertion), "405");

이 예제에서는 t_descentInsertion에 해당하는 저장된 칭동(libration) 각도 데이터를 사용합니다. 필요한 ephemeris 데이터를 설치한 후 위의 명령어를 실행하십시오.

mission.LibrationAngles_deg = [0.006379917345247; 0.382328074214300; 6.535718297208969];

initialization 함수를 실행합니다:

[moon, ic, vehicle, rcs] = aero_dap3dofdata(...
    mission.Latitude_deg(1), mission.Longitude_deg(1), mission.Altitude_ft(1), ...
    mission.Velocity_fps(1), mission.FlightPathAngle_deg(1), ...
    mission.HeadingAngle_deg(1), mission.LibrationAngles_deg)
moon = struct with fields:
    r_moon_eq: 5702428
       f_moon: 0.0012

ic = struct with fields:
       t_runtime: 120
    pos_inertial: [-3.6488e+06 -4.4381e+06 -1.9070e+06]
    vel_inertial: [4.0625e+03 -3.3792e+03 86.4867]
         euler_0: [-30 -10 -60]

vehicle = struct with fields:
    inertia_0: [3×3 double]
       mass_0: 33296

rcs = struct with fields:
     Force: 100
     L_arm: 5.5000
        DB: 0.0060
      tmin: 0.0140
     alph1: 0.0550
     alph2: 0.0039
     alph3: 0.0050
     alphu: 0.0063
     alphv: 7.8553e-04
    alphs1: 0.0055
    alphsu: 6.2855e-04
    alphsv: 7.8553e-05
    clockt: 0.0050
      delt: 0.1000

마무리 발언

1961년 당시 디지털 오토파일럿을 개발하는 것은 막막한 과제였는데, 이를 뒷받침할 산업 인프라가 거의 없었기 때문입니다. 이 기술과 관련된 모든 것이 막 발명되는 과정에 있었습니다. 다음은 기술 칼럼 The Apollo 11 Moon Landing: Spacecraft Design Then and Now에서 발췌한 내용입니다:

"[오토파일럿의 기계어 코드]가 그토록 복잡했던 이유 중 하나는, 조종 축을 중심으로 한 회전을 제어하는 데 사용할 수 있는 제트 노즐의 수가 많았기 때문입니다. 오토파일럿이 제어하던 축을 aero_dap3dof에 표시된 "제트 축"으로 변경하기로 결정했습니다. 이러한 변경으로 인해 코드 라인 수가 대폭 줄어들었고, 기존 컴퓨터에서 오토파일럿을 프로그래밍하는 것이 훨씬 쉬워졌습니다. 이러한 개선이 없었다면, 오토파일럿이 2000 워드의 저장 공간만 사용하도록 하는 것은 불가능했을 것입니다. 이러한 변화에서 얻을 수 있는 교훈은, 엔지니어들이 자신이 설계하는 시스템에 맞춰 컴퓨터 코드를 작성할 기회를 얻게 되면, 설계를 수정하여 코드의 품질을 크게 향상시킬 수 있다는 점입니다."

참고 문헌

[1] National Aeronautics and Space Administration Manned Spacecraft Center, Mission Evaluation Team. (November 1969). Apollo 11 Mission Report MSC-00171. 출처: https://www.nasa.gov/specials/apollo50th/pdf/A11_MissionReport.pdf

[2] Richard J. Gran, MathWorks. (2019). The Apollo 11 Moon Landing: Spacecraft Design Then and Now. 출처: https://www.mathworks.com/company/technical-articles/the-apollo-11-moon-landing-spacecraft-design-then-and-now.html

[3] USGS Astrogeology Science Center. (2009). Moon Clementine UVVIS Global Mosaic 118m. 출처: https://astrogeology.usgs.gov/search/map/moon_clementine_uvvis_global_mosaic_118m

참고 항목

|

외부 웹사이트