제8부 안전·보안·시스템공학
8.28 비행 로봇 시뮬레이션: 물리·센서 모형·SITL·HITL·사진실사 시뮬레이터·sim-to-real
8.28.1 이 장에서 배우는 것 / 선수 지식 / 특히 중요한 독자
이 장은 제8부(안전·보안·시스템공학)에 추가한 장이다. 비행 로봇을 만드는 사람은 실제 비행보다 훨씬 긴 시간을 시뮬레이터 안에서 보낸다. 제어기 이득, 상태 추정기, 경로 계획, 인지 모델, 학습 정책이 모두 시뮬레이터에서 먼저 난다. 이 장은 그 시뮬레이터를 개발 도구로서 해부한다. 무엇을 어떤 모형으로 포함하는지, 비행 소프트웨어를 어떻게 붙이는지, 시뮬레이터에서 된 것이 실제에서 왜 안 되는지를 숫자로 본다. 시뮬레이션을 시험평가와 인증의 증거로 사용하는 일(모형의 검증·확인·인정, VV&A)은 8.19가 맡는다.
배우는 것:
- 시뮬레이터의 층 — 강체 동역학과 적분기, 로터·모터, 공력, 바람·난류, 배터리, 센서, 렌더링, 시간 관리가 각각 무엇을 포함하고 무엇을 빠뜨리는가.
- 적분기와 적분 간격 — 오일러·반암시적 오일러·RK4의 오차 차수와 안정성, 그리고 감쇠 없는 진동에서 적분기가 없던 에너지를 만드는 현상.
- 센서 모형 — IMU 잡음의 연속 밀도를 표본 간격에 맞게 바꾸는 법과 Allan 편차로 검사하는 법, GNSS·기압계·자력계·카메라·LiDAR·이벤트 카메라 모형의 요점.
- SITL·HITL·SIH — PX4와 ArduPilot이 시뮬레이터와 이어지는 방식, 록스텝(lockstep) 동기화, 방식마다 시험할 수 있는 것과 없는 것.
- 시뮬레이터 지형 — Gazebo·AirSim 계열·Flightmare·Isaac Sim 계열 등 주요 시뮬레이터의 2026년 11월 유지 상태.
- 현실 격차(sim-to-real gap) — 격차를 재는 지표와 줄이는 법(시스템 식별·지연 모형·영역 무작위화).
선수 지식: 6자유도 모델과 이 책의 2 kg 쿼드 기준 모델은 2.1(2.1.5), 모델 충실도 계층은 2.1.2, 모델 검증 지표(TIC)는 2.1.12다. 로터 추력과 지면 효과는 1.2(1.2.7.1), 관성 센서와 Allan 편차 읽는 법은 4.3.4, 비행 소프트웨어의 시험 층은 2.10.10.4, 학습 정책의 현실 격차는 7.7.5다. 상미분방정식의 수치해법은 대학 초급 수준이면 따라온다. 물리 엔진 내부와 로봇 시뮬레이션 일반론은 자매서 robotics의 제16부가 맡는다.
특히 중요한 독자: 엔지니어는 8.28.4~8.28.7과 8.28.10의 워크스루를 따라 계산한다. 학습·인지 연구자는 8.28.6·8.28.8·8.28.9를 본다. 인증 담당자는 8.28.9의 격차 지표와 8.28.14를 보고, 시뮬레이션 증거의 자격은 8.19로 간다. 정책·사업 담당자는 8.28.2·8.28.8·8.28.11만 읽어도 된다.
기준 시점과 정직성. 이 장은 2026년 10월을 기준으로 작성한 기술 장이며 집필에 사용한 지식은 2026년 중반까지다. 시뮬레이터의 유지 상태는 2026년 11월 1일에 각 프로젝트의 공식 문서와 GitHub 저장소 정보(보관 여부·마지막 갱신일)로 확인했고, 그 뒤 바뀔 수 있다. 계산은 파이썬 표준 라이브러리(
math·random, 고정 시드)로 돌렸다(mil-uam/fig-src/8.28-calc.py외). 수치 예시의 기체는 2.1의 가상 기체이고, "실기"로 부른 값은 격차를 보이려고 가정한 값이다. 제품의 기능 주장은(공개 주장치), 확인하지 못한 사항은(확인 필요)로 표시했다.
8.28.2 개념·직관 — 시뮬레이터는 비행 소프트웨어가 보는 세계다
시뮬레이터를 "물리를 흉내 내는 프로그램"으로만 보면 절반을 놓친다. 비행 소프트웨어는 물리를 직접 보지 않는다. 센서 값과 시각을 받고 모터 명령을 낸다. 그래서 시뮬레이터의 질은 물리 방정식의 정밀도보다 비행 소프트웨어가 받는 신호가 실제와 얼마나 같은가로 판정된다. 거꾸로 시뮬레이터가 빠뜨린 것은 그대로 소프트웨어의 맹점이 된다. 진동 없는 IMU로 조정한 추정기는 실기의 진동 앞에서 성능이 저하되고, 지연 없는 센서로 맞춘 이득은 실기에서 출렁인다.
개발에서 시뮬레이터가 맡는 일은 다섯이고, 일마다 요구하는 충실도가 다르다.
| 용도 | 무엇을 보나 | 꼭 있어야 할 모형 | 상세 |
|---|---|---|---|
| 제어기 설계·조정 | 안정성·응답·포화 | 동역학·작동기 지연·센서 지연 | 2.2·2.15 |
| 추정기·센서 융합 | 잡음·바이어스·지연에 대한 강건성 | 센서 잡음과 시간 스탬프 | 4.3·4.4 |
| 인지·계획 | 장애물 탐지·지도·경로 | 렌더링·광선 투사·환경 | 7.1·7.12·7.13 |
| 학습 정책 | 수백만 번의 시행 | 속도·병렬성·무작위화 | 7.7 |
| 통합·회귀 시험 | 소프트웨어 변경이 무엇을 깼나 | 실제 비행 소프트웨어 그대로 | 2.10·8.22 |
이 장과 이웃 장의 경계는 이렇다. 이 장은 개발자가 하루에도 수십 번 돌리는 도구의 원리를 다룬다. 시험평가 계획에서 시뮬레이션이 무엇을 입증할 수 있는가(VV&A·인증 크레딧·디지털 트윈·HILS 시험 시설)는 8.19가 다룬다. 시뮬레이터 제품의 현황은 24.35, 연구용 시뮬레이터·데이터셋 목록은 25.5, 운용 훈련 시뮬레이터는 16.16, 모의비행훈련장치(FSTD)의 인증은 20.17, 분산 시뮬레이션 연동 표준(HLA·DIS)은 9.21이 맡는다.
세 축은 시뮬레이터에 거는 기대가 다르다. 군용 드론은 GNSS 거부·전자전 환경과 수십 대 이상의 군집을 실제로 날려 보기 어렵다. 그래서 시뮬레이션의 비중이 크고, 합성 훈련 환경과의 연동(9.21)과 폐쇄망 운용이 따라붙는다. 민간 UAS는 오픈소스 SITL로 값싸게 반복하고, 배송·점검 임무를 펌웨어가 바뀔 때마다 회귀 시험한다. AAM은 시뮬레이터의 결과가 인증 증거의 일부가 될 수 있다. 그래서 모형의 검증과 도구 자격(8.8)이 함께 요구되고, 유인기 모의비행훈련장치와도 중복된다.
8.28.3 시뮬레이터의 층 — 무엇을 어떤 모형으로 포함하는가
비행 로봇 시뮬레이터는 몇 개의 층으로 구성된 구조다. 층마다 흔히 사용하는 모형과 흔히 빠지는 것이 있다. 빠지는 것의 목록이 곧 현실 격차의 후보 목록이다.
| 층 | 포함하는 것 | 흔한 모형 | 흔히 빠지는 것 | 원리 장 |
|---|---|---|---|---|
| 강체 동역학·적분 | 6자유도 운동, 접촉 | 뉴턴–오일러 식, 쿼터니언, 고정 간격 적분 | 구조 탄성, 진동 | 1.1·2.1 |
| 로터·모터 | 추력·반작용 토크·지연·포화 | $k_f\omega^2$, 1차 지연 | 로터 항력·플래핑, 지면·벽 효과, 로터 간섭 | 1.2·1.3·1.7·1.18 |
| 공력 | 몸체 항력, 날개 양력 | 항력 계수, 계수 표 | 천이 구간, 큰 받음각, 후류 간섭 | 1.1·2.1.6 |
| 바람·난류 | 평균풍·난류·돌풍 | 일정 바람과 Dryden·von Kármán 난류 | 건물 후류, 호버 중의 난류 | 1.32 |
| 배터리 | 전압 강하·용량 | 개방 전압 곡선과 내부 저항 | 온도, 노화, 셀 불균형 | 1.21·1.22 |
| 관성·대기 센서 | IMU·GNSS·기압·자력 | 잡음·바이어스·지연 | 진동, 온도, 모터 전류의 자기 간섭 | 2.8·4.2·4.3 |
| 영상 센서 | 카메라·깊이·LiDAR·이벤트 | 래스터화·광선 투사 | 자동 노출, 롤링 셔터, 압축 손상, 비·먼지 | 4.11·6.3·6.6 |
| 시간·연결 | 비행 소프트웨어와의 교환 | 록스텝, MAVLink HIL 메시지 | 실제 지터·버스 지연 | 2.10·9.6 |
2.1.2의 충실도 계층으로 보면 개발용 비행 로봇 시뮬레이터는 대개 ④단(비선형 6자유도와 장치 모델)에 렌더링을 추가한 것이다. 층을 다 높이 쌓을 필요는 없다. 제어기 조정에는 렌더링이 필요 없고, 인지 모델 학습에는 정밀한 모터 모형이 덜 중요하다. 묻는 질문이 필요로 하는 층만 높이 쌓는다는 2.1의 원칙이 여기서도 통한다.
8.28.4 강체 동역학과 적분기 — 간격과 방법이 오차를 정한다
8.28.4.1 원리
결론부터: 같은 모형이라도 시간을 쪼개 푸는 방법이 결과를 바꾼다. 오일러법은 간격에 비례하는 오차를 내고, 감쇠 없는 진동에 없던 에너지를 더한다. RK4는 간격의 네제곱으로 오차가 준다. 다만 실제 시뮬레이터의 오차는 대개 적분이 아니라 모형에서 온다(8.28.9). 적분기는 모형 오차보다 작게만 만들면 된다.
시뮬레이터는 상태 방정식 $\dot{\mathbf x}=f(\mathbf x,\mathbf u,t)$를 고정 간격 $\Delta t$로 푼다. 대표적인 세 방법은 다음과 같다.
$$\text{오일러:}\quad \mathbf x_{k+1}=\mathbf x_k+\Delta t\,f(\mathbf x_k)$$
$$\text{반암시적 오일러:}\quad \mathbf v_{k+1}=\mathbf v_k+\Delta t\,\mathbf a(\mathbf p_k,\mathbf v_k),\qquad \mathbf p_{k+1}=\mathbf p_k+\Delta t\,\mathbf v_{k+1}$$
$$\text{RK4:}\quad \mathbf x_{k+1}=\mathbf x_k+\frac{\Delta t}{6}\left(\mathbf k_1+2\mathbf k_2+2\mathbf k_3+\mathbf k_4\right)$$
| 기호 | 뜻 |
|---|---|
| $\mathbf x$ | 상태(위치·속도·자세·각속도·모터 상태) |
| $\mathbf p,\ \mathbf v$ | 위치류 상태와 속도류 상태 |
| $\Delta t$ | 적분 간격 |
| $\mathbf k_1\ldots\mathbf k_4$ | 한 걸음 안의 네 곳에서 계산한 기울기 $f$ |
| $\lambda$ | 선형화한 계의 고유값 |
| $\omega$ | 진동의 각진동수 |
전역 오차는 오일러와 반암시적 오일러가 $O(\Delta t)$, RK4가 $O(\Delta t^4)$다. 간격을 반으로 줄이면 오일러의 오차는 반이 되고 RK4의 오차는 16분의 1이 된다. RK4는 한 걸음에 $f$를 네 번 계산하므로 계산량은 네 배다.
안정성은 시험 방정식 $\dot x=\lambda x$로 본다. 오일러의 한 걸음 증폭률은 $1+\lambda\Delta t$다. 감쇠 없는 진동($\lambda=i\omega$)에서는 다음과 같다.
$$\left|1+i\omega\Delta t\right|=\sqrt{1+\omega^2\Delta t^2}>1$$
간격이 아무리 작아도 1보다 크다. 오일러는 감쇠 없는 진동을 매 걸음 키운다. 반암시적 오일러는 $\omega\Delta t<2$이면 진폭이 유계로 남는다(변형된 에너지를 보존하는 심플렉틱 성질). RK4는 허수축에서 $\omega\Delta t\le2\sqrt2\approx2.83$까지 안정하고 아주 약하게 감쇠시킨다.
자세는 쿼터니언으로 적분하는 것이 보통이다(특이점 회피, 2.1.3.2). $\dot{\mathbf q}=\tfrac12\,\mathbf q\otimes(0,\boldsymbol\omega)$를 그대로 적분하면 단위 노름이 조금씩 붕괴한다. 매 걸음 정규화하거나, 지수 사상 $\mathbf q_{k+1}=\mathbf q_k\otimes\exp\left(\tfrac12\boldsymbol\omega\Delta t\right)$으로 갱신한다.
8.28.4.2 계산 — 2 kg 쿼드의 자세 계단 응답
2.1.5의 2 kg 쿼드 기준 모델을 피치 평면에서 풀었다. 상태는 앞·위 위치와 속도, 피치각과 피치율, 모터 지연을 거친 피치 토크와 총추력의 여덟 개다. 모터 지연은 30 ms, 자세 제어기는 연속 PD($\omega_n=15$ rad/s, $\zeta=0.7$, 모터 지연 무시 기준)다. 0~1 s에 20° 계단 입력을 주고 1~2 s에 0°로 되돌린다. 기준해는 RK4 0.05 ms다.
| 적분 간격 [ms] | 0.25 | 0.5 | 1 | 2 | 5 | 10 | 20 |
|---|---|---|---|---|---|---|---|
| 오일러 [°] | 0.045 | 0.090 | 0.18 | 0.37 | 0.97 | 2.1 | 5.5 |
| 반암시적 오일러 [°] | 0.045 | 0.089 | 0.18 | 0.36 | 0.94 | 2.0 | 4.7 |
| RK4 [°] | $1.1\times10^{-10}$ | $1.7\times10^{-9}$ | $2.7\times10^{-8}$ | $4.4\times10^{-7}$ | $1.8\times10^{-5}$ | $3.0\times10^{-4}$ | $5.4\times10^{-3}$ |
표는 2 s 동안의 자세 최대 오차다. 읽을 것이 셋이다. 첫째, 1 ms 오일러가 이미 0.18°를 틀린다. 0.1° 안에 들려면 0.5 ms 가까이 줄여야 한다. 둘째, RK4는 20 ms에서도 0.005°다. 계산량을 같게 맞춰 RK4 4 ms와 오일러 1 ms를 비교해도 RK4가 네 자릿수 이상 정확하다. 셋째, 감쇠가 있는 자세 응답에서는 반암시적 오일러가 오일러보다 나을 것이 없다. 둘 다 1차다.
이것이 곧 "오일러를 사용하지 말라"는 뜻은 아니다. 접촉과 관절 구속을 다루는 범용 강체 엔진은 대개 속도 수준의 반암시적 1차 적분을 사용한다. 접촉에서의 안정성을 위한 선택이고, 그 대가로 간격을 작게 둔다. 엔진마다 방식이 다르므로 사용하는 엔진의 적분기와 기본 간격을 문서에서 확인한다.
8.28.4.3 감쇠 없는 진동 — 적분기가 에너지를 만든다
길이 1 m의 진자(현수 하중, 2.4)를 10°에서 놓고 풀었다. 표는 끝의 에너지로 환산한 진폭을 처음 진폭으로 나눈 값이다.
| 적분기 | 10 ms · 10 s | 10 ms · 60 s | 1 ms · 10 s | 1 ms · 60 s |
|---|---|---|---|---|
| 오일러 | 1.63 | 15.2 | 1.05 | 1.34 |
| 반암시적 오일러 | 1.002 | 1.008 | 1.000 | 1.001 |
| RK4 | 1.000 | 1.000 | 1.000 | 1.000 |
10 ms 오일러로는 10° 흔들림이 1분 뒤 150°를 넘는다. 1 ms로 줄여도 1분에 34 % 커진다. 현수 하중·계류줄·약하게 감쇠된 구조 모드처럼 감쇠가 작은 진동을 오일러로 풀면 시뮬레이터가 없는 불안정을 만든다. 개발자가 그것을 잡으려고 제어기를 고치면 실기에는 필요 없는 수정이 들어간다. 반암시적 오일러는 여기서 제 몫을 한다.
8.28.5 로터·공력·바람·배터리 모형
8.28.5.1 로터와 모터
로터 모형의 출발점은 2.1.5의 세 식이다. 추력 $f_i=k_f\omega_i^2$, 반작용 토크 $\tau_i=\kappa f_i$, 회전수의 1차 지연 $\dot\omega_i=(\omega_{c,i}-\omega_i)/\tau_m$이다. 개발용 시뮬레이터에서 자주 빠지는 것은 넷이다.
- 로터 항력. 로터가 공기에 대해 옆으로 움직이면 유도 항력과 깃 플래핑 때문에 그 속도에 비례하는 수평 힘이 생긴다. 근사식은 $\mathbf f_{\mathrm{drag}}\approx-k_d\,\omega_i\,\mathbf v_\perp$이다($\mathbf v_\perp$는 로터 면에 평행한 상대 속도, Mahony·Kumar·Corke 2012). 소형 쿼드에서 이 항은 수평 속도의 감쇠처럼 작용한다. 빠뜨리면 시뮬레이터의 기체가 실기보다 덜 감쇠되고 위치 루프 이득이 어긋난다.
- 지면·벽 효과. 지면 효과는 1.2.7.1의 Cheeseman–Bennett 식으로 넣는다. 로터 반지름 높이($z/R=1$)에서 같은 동력의 추력이 6.7 % 늘고 지름 높이에서 거의 사라진다. 벽·천장 근처의 효과는 공개 모형이 덜 정리돼 있다
(확인 필요). - 명령과 추력의 비선형. 전자 변속기(ESC) 명령과 실제 추력의 관계는 선형이 아니고 배터리 전압에 따라 바뀐다(1.18). 추력대 시험으로 곡선을 재서 넣는다.
- 진동. 기준 모델의 호버 회전수 6,432 rpm(1.7.7.1 표의 기준 로터)은 회전 주파수 107.2 Hz, 두 깃의 깃 통과 주파수(BPF) 214 Hz다. 실기의 IMU는 이 진동을 받지만 대부분의 시뮬레이터는 넣지 않는다. 그래서 IMU 필터와 진동 정류 오차(4.3.9)는 시뮬레이터에서 검증되지 않는다.
8.28.5.2 공력
멀티콥터의 몸체 항력은 $\tfrac12\rho\,C_DA\,\lvert\mathbf v\rvert\,\mathbf v$ 하나로 충분한 경우가 많다(기준 모델의 $C_DA=0.05$ m², 1.7.7.3). 고정익과 하이브리드 VTOL은 받음각·옆미끄럼각·조종면에 대한 계수 표로 공력을 넣는다. JSBSim 같은 비행역학 엔진이 이 방식이다. 가장 부족한 데이터는 천이 구간의 계수다(2.1.6). 로터 후류가 날개에 닿는 간섭, 큰 받음각의 실속 거동은 CFD나 풍동 자료가 없으면 비워 둘 수밖에 없다(1.5).
8.28.5.3 바람과 난류 — Dryden 모형과 호버의 함정
바람은 세 부분으로 넣는다. 평균풍, 난류, 이산 돌풍이다. 난류는 백색잡음을 필터에 통과시켜 만든다. 대표적인 것이 Dryden 모형이고, 기체 속도 $V$로 동결된 난류장을 지나간다는 가정 위에 선다. 앞뒤 성분의 필터는 다음과 같다.
$$H_u(s)=\sigma_u\sqrt{\frac{2L_u}{\pi V}}\;\frac{1}{1+\dfrac{L_u}{V}\,s}$$
MIL-F-8785C의 저고도(1,000 ft 이하) 식에서 길이 척도와 세기는 다음과 같다. $h$는 ft 단위 높이, $W_{20}$은 20 ft 높이의 풍속이다.
$$L_w=h,\qquad L_u=L_v=\frac{h}{(0.177+0.000823\,h)^{1.2}},\qquad \sigma_w=0.1\,W_{20},\qquad \sigma_u=\sigma_v=\frac{\sigma_w}{(0.177+0.000823\,h)^{0.4}}$$
$W_{20}$은 가벼운·보통·심한 난류에서 15·30·45 kt를 관용으로 사용한다. MIL-HDBK-1797은 길이 척도의 정의가 다르다($2L_w=h$, $L_u=2L_v$). 어느 규격의 식을 사용했는지 밝혀야 결과를 비교할 수 있다. 높이 30 m, $W_{20}=15$ kt에서 계산하면 $\sigma_u=\sigma_v=1.33$ m/s, $\sigma_w=0.77$ m/s, $L_u=L_v=152$ m, $L_w=30$ m다.
함정은 호버다. 필터의 시간 상수 $L/V$는 기체 속도로 길이 척도를 나눈 값이다. 10 m/s 순항에서는 $L_u/V=15$ s, $L_w/V=3.0$ s로 사용할 만하다. 1 m/s에서는 152 s·30 s가 되고, 호버($V\to0$)에서는 무한대로 간다. 동결 난류 가정은 평균풍과 난류가 대지속도보다 작아야 성립하기 때문이다. 정지 비행하는 멀티콥터에 이 모형을 그대로 사용하면 난류가 사실상 멈춘다. 한 가지 대안은 평균 풍속을 대류 속도로 사용하는 것이다(바람이 난류장을 기체 쪽으로 실어 온다고 본다). 평균풍 5 m/s이면 $L_u$의 시간 척도는 30 s다. 도심 건물 주변의 바람(1.32.5)은 이런 통계 모형으로 담기지 않는다. CFD로 미리 계산한 바람장을 표로 읽어 넣는 방식이 사용된다.
8.28.5.4 배터리
배터리는 단자 전압 $V=V_{oc}(\mathrm{SoC})-I\,R$로 넣는다. 충전 상태에 따른 개방 전압 곡선과 내부 저항이 핵심이다(1.21·1.22). 전압이 내려가면 같은 명령의 최대 추력이 줄어든다. 비행 후반에 추력 여유와 기동성이 떨어지는 현상, 저전압 대응 로직(2.6)은 이 층이 있어야 시험된다. 온도와 노화, 셀 불균형은 대개 빠진다.
8.28.6 센서 모형 — 잡음·지연·렌더링
8.28.6.1 IMU — 연속 밀도에서 표본으로
자이로 한 축의 모형은 참값 $\omega$에 바이어스 $b$와 백색잡음 $n$을 더한 것이다. 바이어스는 랜덤 워크로 움직인다(ETH의 Kalibr 문서가 정리한 표준적 모형).
$$\tilde\omega=\omega+b+n,\qquad \dot b=\sigma_{bg}\,w(t)$$
데이터시트의 값은 연속 시간의 밀도다. 시뮬레이터는 표본마다 난수를 뽑으므로 표본 간격 $\Delta t$로 바꿔야 한다.
$$\sigma_{w,d}=\frac{N}{\sqrt{\Delta t}},\qquad \sigma_{b,d}=K\sqrt{\Delta t}$$
| 기호 | 뜻 | 단위 |
|---|---|---|
| $N$ | 백색잡음 밀도(각도 랜덤 워크, ARW) | °/s/√Hz, rad/s/√Hz |
| $K$ | 바이어스 랜덤 워크 밀도(각속도 랜덤 워크, RRW) | °/s/√s, rad/s²/√Hz |
| $\sigma_{w,d}$ | 표본마다 더하는 잡음의 표준편차 | °/s |
| $\sigma_{b,d}$ | 표본마다 바이어스가 바뀌는 한 단계 증분의 표준편차 | °/s |
결론부터: 백색잡음은 표본률을 올리면 표본마다 더 커져야 하고, 바이어스의 한 단계 증분은 더 작아져야 한다. 그래야 표본률과 무관하게 같은 센서가 된다. 한 표본률에서 맞춘 표본값을 표본률을 바꾼 뒤에도 사용하면 센서의 성질이 바뀐다. 이 실수는 시뮬레이터 설정에서 흔하다.
자이로를 $N=0.005$ °/s/√Hz(0.3 °/√h), $K=5\times10^{-5}$ °/s/√s(10.8 °/h/√h)로 가정했다. 소비자급 MEMS 범위의 가정이다(4.3.4.1). 표본값은 100 Hz에서 $\sigma_{w,d}=0.050$ °/s, 1,000 Hz에서 0.158 °/s다. 바이어스의 한 단계 증분은 100 Hz에서 $5.0\times10^{-6}$ °/s, 1,000 Hz에서 $1.6\times10^{-6}$ °/s다. 그림처럼 올바르게 바꾼 두 시계열은 이론 곡선에 일치한다. 백색잡음과 랜덤 워크가 만나는 $\tau=\sqrt3N/K=173$ s에서 최저점 1.9 °/h를 지난다. 100 Hz의 표본값을 1,000 Hz에 그대로 사용하면 백색잡음은 $\sqrt{10}$배 작아지고 랜덤 워크는 $\sqrt{10}$배 커져서 교차점이 17 s로 당겨진다. 시뮬레이터 안의 추정기는 실제보다 조용한 자이로와 더 빨리 떠도는 바이어스를 보며 조정된다.
이 검사는 정지한 시뮬레이터 IMU의 출력을 몇 시간 기록해 Allan 편차를 그려 데이터시트와 맞대 보는 것으로 끝난다. 읽는 법은 4.3.4.2에 있다. 단순 모형의 한계도 알아 둔다. 첫째, 데이터시트의 바이어스 불안정성(Allan 곡선의 평탄한 최저점)은 이 모형에 없다. 여러 개의 1차 가우스–마르코프 과정을 더해 흉내 낸다. 둘째, $N/\sqrt{\Delta t}$ 환산은 센서가 표본화 전에 나이퀴스트 대역까지 이상적으로 거른다고 가정한다. 실제 IMU의 내부 저역 필터가 더 좁으면 표본 잡음은 더 작다. 셋째, 환산계수 오차·축 비정렬·온도 의존·포화·양자화·진동은 따로 넣어야 한다.
8.28.6.2 GNSS·기압계·자력계
- GNSS. 갱신은 대개 5~10 Hz이고 위치에 수십~수백 ms의 지연이 있다
(경험 범위). 오차는 백색이 아니라 상관 시간이 긴 과정이다. 1차 마르코프 과정으로 넣고, 위성 가림·다중경로(3.3)·RTK 고정 상실(4.2)을 사건으로 넣는다. 신호 상실과 위치 오차 주입은 대체 항법 전환과 무결성 감시(4.4·4.6)를 시험하는 방어 시험의 기본 도구다. - 기압계. 잡음과 온도 편류 말고도 로터 후류와 몸체 주변 흐름이 정압을 교란한다. 속도와 자세에 따라 고도 오차가 생기고 지면 가까이에서 커진다(2.8). 시뮬레이터에 이 항이 없으면 고도 추정의 약점이 이착륙 때 처음 드러난다.
- 자력계. 기체의 철과 자석(하드·소프트 아이언) 말고도 모터 전류에 비례하는 간섭이 있다. 스로틀에 따라 방위가 휘는 현상은 이 항을 넣어야 시뮬레이터에서 보인다.
8.28.6.3 카메라·LiDAR·이벤트 카메라
카메라. 핀홀 투영과 렌즈 왜곡 위에 노출 시간의 움직임 번짐, 롤링 셔터, 자동 노출과 이득, 광자 잡음(4.11.4), 영상 압축 손상(3.12)이 추가되어야 실제에 가깝다. 사진실사 렌더러(Unreal Engine·Unity·Omniverse RTX)는 외관을 실제처럼 만든다. 그러나 센서 특성은 렌더러가 아니라 센서 모형의 몫이다. 화면이 아름다워도 롤링 셔터가 없으면 빠른 회전에서의 시각 오도메트리 오차는 재현되지 않는다.
LiDAR. 광선 투사(ray casting)로 빔마다 장면과의 교점을 구한다. 16채널·수평 1,800점·10 Hz 회전 센서면 초당 288,000개의 광선이다. 실제 센서와의 차이는 빔 발산, 반사율에 따른 점 탈락, 다중 반사, 비·먼지·연기(4.11.9)다. 한 바퀴를 도는 0.1 s 동안 기체가 10 m/s로 움직이면 1 m를 간다. 이 움직임 왜곡을 넣지 않은 시뮬레이터에서 맞춘 LiDAR 오도메트리는 실기에서 보정 단계를 하나 잃는다(4.10·6.6).
이벤트 카메라. 이벤트 카메라는 화소마다 밝기 변화가 문턱을 넘을 때만 사건을 낸다(4.11.7). 시뮬레이터는 로그 밝기의 변화로 사건을 만든다(ESIM, Rebecq 외 2018).
$$\left|\log I(\mathbf u,t)-\log I(\mathbf u,t_{\mathrm{ref}})\right|\ge C$$
$C$는 대비 문턱, $t_{\mathrm{ref}}$는 그 화소의 마지막 사건 시각이다. 사건의 시간 해상도가 마이크로초 단위라서 렌더링을 아주 촘촘히 하거나 프레임 사이를 보간해야 한다. 화소마다 다른 문턱, 잡음 사건, 불응 시간을 넣어야 실제와 닮는다.
8.28.6.4 시간 스탬프와 지연
시뮬레이터 안에서는 모든 센서가 같은 순간을 완벽하게 잰다. 실기는 그렇지 않다. 카메라 영상의 시각은 노출 중간이고, 전송과 처리에 수십 ms가 걸린다. GNSS와 기압계의 지연도 센서마다 다르다. 2.1.11은 입력 기록이 10 ms 어긋나면 식별한 조종 미계수가 11 % 틀린다는 것을 보였다. 같은 일이 추정기에서도 일어난다. 센서마다 지연과 지터를 넣지 않은 시뮬레이터에서 조정한 추정기는 시간 정렬 문제를 시험받지 못한다.
8.28.7 SITL·HITL·SIH — 비행 소프트웨어를 붙이는 법
SITL(software in the loop)은 실제 비행 소프트웨어를 개발 컴퓨터용으로 빌드해 시뮬레이터에 붙인다. HITL(hardware in the loop)은 실제 비행 제어 컴퓨터를 붙이고 모터 출력을 막는다. 둘 다 시뮬레이터가 센서 값을 보내고 비행 소프트웨어가 모터 명령을 돌려준다.
PX4의 연결은 시뮬레이터에 따라 둘로 구분된다(PX4 개발 문서, 2026-11 확인). 현대 Gazebo는 PX4가 Gazebo API로 직접 붙고 MAVLink를 사용하지 않는다. 나머지 외부 시뮬레이터는 시뮬레이터 MAVLink API를 사용한다. 시뮬레이터가 TCP 4560에서 기다리고 PX4가 접속한다. 메시지는 다음과 같다.
| 방향 | 메시지 | 내용 |
|---|---|---|
| 시뮬레이터 → PX4 | HIL_SENSOR | IMU·기압·자력 센서 값과 시각 |
| 시뮬레이터 → PX4 | HIL_GPS | GNSS 측정 |
| 시뮬레이터 → PX4 | HIL_OPTICAL_FLOW | 광류 센서 값 |
| 시뮬레이터 → PX4 | HIL_STATE_QUATERNION | 참 위치·자세·속도(추정기 검사용) |
| 시뮬레이터 → PX4 | HIL_RC_INPUTS_RAW | 조종기 채널 값 |
| PX4 → 시뮬레이터 | HIL_ACTUATOR_CONTROLS | 모터·작동기 출력 |
지상통제 소프트웨어는 UDP 14550, MAVSDK·ROS 2 같은 오프보드 API는 UDP 14540을 사용한다. 메시지 구조와 보안 한계는 9.5, 오토파일럿 생태계는 9.6이 다룬다.
록스텝은 SITL의 핵심이다. PX4 문서는 그 순서를 세 걸음으로 적고, 그림은 이를 네 칸으로 나눴다. ① 시뮬레이터가 시각(time_usec)을 포함한 HIL_SENSOR를 보낸다. ② PX4가 추정·제어를 한 번 돌린다. ③ PX4가 HIL_ACTUATOR_CONTROLS를 돌려준다. ④ 시뮬레이터는 그 명령을 받을 때까지 기다린 뒤 물리를 한 걸음 진행하고 다음 센서 값을 계산한다. 시각까지 시뮬레이터가 쥐므로 어느 쪽이 느려도 둘이 같이 느려질 뿐 타이밍이 어긋나지 않는다. 그래서 실시간보다 빠르게(PX4_SIM_SPEED_FACTOR) 또는 느리게 돌리거나 멈춰 놓고 코드를 한 줄씩 볼 수 있다. 록스텝을 끄면 둘 다 호스트 시계를 사용하고 서로 기다리지 않는다.
SIH(simulation in hardware)는 PX4 안의 모듈이 물리를 직접 계산하는 방식이다. 외부 의존이 없어 빠르고, 비행 제어 컴퓨터 하드웨어 위에서도 돈다(SYS_HITL=2). 카메라·LiDAR 같은 렌더링 센서는 없다. PX4 문서는 2026년 11월 현재 Gazebo와 SIH를 핵심 지원 시뮬레이터로 두고, Gazebo Classic은 커뮤니티 지원으로 내리는 중이라고 적는다. AirSim·FlightGear·JSBSim·PteroSim·RotorPy·X-Plane은 커뮤니티 지원 목록에 있다. 예전 문서에 있던 jMAVSim은 현재 목록에 없다.
ArduPilot의 SITL 실행 파일에는 기체 종류별 물리 모형이 들어 있어 따로 시뮬레이터가 없어도 돈다. 외부 물리를 붙이는 표준 통로는 JSON 인터페이스다. ArduPilot은 UDP 9002로 서보 PWM 16채널(설정하면 32채널)과 프레임 번호를 이진 패킷으로 보낸다. 물리 쪽은 물리 시각·자이로·가속도·위치·속도·자세를 JSON으로 돌려준다. 입력이 없으면 10초마다 같은 프레임을 다시 보내며 기다린다. 물리 시각을 기준으로 맞추는 구조라 PX4의 록스텝과 같은 효과를 낸다(설명 문서에서 읽은 동작). 물리 간격(SIM_RATE_HZ)은 기체 루프 주기(멀티콥터 기본 400 Hz)보다 높게 두라고 권한다.
| 방식 | 시험되는 것 | 시험되지 않는 것 | 속도 |
|---|---|---|---|
| 모형만의 시뮬레이션 | 알고리즘 | 실제 코드·타이밍 | 매우 빠름 |
| SITL(록스텝) | 실제 코드의 논리·모드 전환·고장 대응·임무 | 실시간성·지터·하드웨어 | 실시간의 몇 배도 가능 |
| SIH | 내장 물리로 빠른 반복, 비행 제어 컴퓨터 위에서도 | 렌더링 센서·복잡한 환경 | 빠름 |
| HITL | 실제 프로세서의 연산 시간·스케줄·링크 | 센서 드라이버·실제 진동·모터 | 실시간 고정 |
| 비행시험 | 전부 | — | 느리고 위험 |
HITL은 비행 제어 컴퓨터가 자기 시계로 돌기 때문에 시뮬레이터가 실시간을 유지해야 한다. 센서 값이 시뮬레이터에서 오므로 실제 센서 드라이버와 버스 타이밍은 시험되지 않는다. PX4 문서는 HITL을 커뮤니티 지원 기능으로 두고, 멀티콥터·VTOL에 Gazebo Classic만을 명시한다. 2.10.10.4가 적은 대로 SITL은 실시간성을 시험하지 못한다. 시간 문제는 HITL과 실기에서 보인다.
8.28.8 시뮬레이터 지형과 유지 상태
연구와 개발에 널리 사용된 시뮬레이터를 기반과 강점, 유지 상태로 정리한다. 상태는 2026년 11월 1일 각 프로젝트의 공식 문서와 GitHub 저장소 정보(보관 표시·마지막 갱신일)로 확인했다. 시뮬레이터는 판이 빨리 바뀌므로 사용하기 전에 다시 확인한다. 제품의 상업적 현황은 24.35가 다룬다.
| 시뮬레이터 | 기반 | 강점 | 상태(2026-11-01 확인) |
|---|---|---|---|
| Gazebo(옛 이름 Ignition) | 자체, 물리 엔진은 플러그인 | PX4·ArduPilot·ROS 2 공식 연동, 센서 플러그인 | 장기 지원판 Harmonic(2023-09 출시, 2029-05 종료 예정)·Jetty(2025-09 출시, 2031-05 종료 예정) |
| Gazebo Classic(11) | ODE 등 | 과거 연구의 표준 | 2025년 1월 말 수명 종료(새 기능·보안 갱신 없음) |
| RotorS | Gazebo Classic | 멀티콥터 모형·센서 플러그인 | 2024-07 이후 갱신 없음, 기반이 수명 종료 |
| AirSim(Microsoft) | Unreal Engine | 사진실사, PX4·ArduPilot 연동 | 2022년 공지로 갱신 중단, 저장소는 보관 표시 없이 남아 있음 |
| Project AirSim | Unreal Engine 5 | AirSim 후속, 고정익·지상 차량 | Microsoft가 중단, IAMAI가 MIT 라이선스 공개판 유지(2025-05 공개) |
| Colosseum | AirSim 포크 | UE5 이전 | 저장소 보관(읽기 전용) |
| Cosys-AirSim | AirSim 포크 | 센서 확장(연구용) | 활동 중 |
| Flightmare | Unity 렌더러와 자체 물리 | 렌더링과 물리 분리, 병렬 학습 | 마지막 코드 갱신 2023-05 |
| FlightGoggles | Unity | 사진실사, 실기 비행과 혼합 | 2024-04 이후 갱신 없음 |
| Isaac Sim·Isaac Lab | NVIDIA Omniverse(PhysX·RTX) | GPU 병렬 학습, 사진실사 센서, 합성 데이터 | Isaac Sim 저장소 GitHub 공개(2025-05), Apache-2.0 표기, v6.2.0(2026-10). Isaac Lab 활동 중 |
| Pegasus Simulator | Isaac Sim | PX4·ArduPilot 연동 다기체 | 활동 중 |
| Aerial Gym Simulator | NVIDIA Isaac Gym | 대규모 병렬 학습, GPU 광선 투사 센서 | 활동 중, BSD-3 |
| gym-pybullet-drones | PyBullet | 가벼운 강화학습 환경 | 활동 중(저장소 이전) |
| RotorPy | 파이썬 | 공력·잡음·바람을 포함한 교육·연구용 | 활동 중, PX4 커뮤니티 지원 |
| JSBSim·FlightGear·X-Plane | 계수 표·깃 요소 이론 | 고정익·VTOL 비행역학 | PX4 커뮤니티 지원 |
몇 가지를 덧붙인다. AirSim은 2022년 Microsoft의 공지로 "즉시 갱신 중단"되었고, 공지가 예고한 보관 처리는 2026-11-01 현재 저장소에 표시되어 있지 않다. Project AirSim은 Microsoft가 상업 제품으로 준비하다 접었고, 개발에 참여한 사람들이 IAMAI에서 공개판을 잇는다고 저장소가 밝힌다. Isaac Sim 저장소의 라이선스 표기는 저장소 코드에 대한 것이며 Omniverse 구성 요소의 조건은 따로 확인한다 (확인 필요). Aerial Gym이 사용하는 Isaac Gym 자체의 지원 상태도 따로 확인한다 (확인 필요).
지형을 읽는 축은 둘이다. 하나는 물리와 비행 소프트웨어 쪽(Gazebo·SIH·ArduPilot 내장 물리·JSBSim)이고, 실제 비행 소프트웨어를 붙이는 회귀 시험에 강하다. 다른 하나는 렌더링과 병렬 학습 쪽(Isaac 계열·AirSim 계열·Flightmare)이고, 인지 모델과 학습 정책에 강하다. 둘을 잇는 다리(Pegasus의 PX4 연동, AirSim의 SITL 연동)가 있지만, 사진실사 렌더링과 록스텝 SITL을 함께 빠르게 돌리기는 여전히 어렵다. 학습의 시간 버짓이 그 이유다. 7.7.9의 사례처럼 $10^8$번 상호작용이 필요하다고 하자. 정책을 100 Hz로 돌린다고 가정하면 시뮬레이션 시간은 $10^6$ s, 곧 278시간이다. 이것을 50분에 끝내려면 실시간의 333배가 필요하다. 실시간 근처에서 도는 SITL 한 개로는 안 되고, GPU 위에서 수천 개의 환경을 함께 돌려야 하는 이유다.
시뮬레이터의 수명은 연구의 재현성 문제이기도 하다. 위 표에서 2020년 전후에 널리 인용된 시뮬레이터의 상당수가 갱신을 멈췄다. 논문의 결과를 다시 내려면 시뮬레이터와 그 의존성(렌더 엔진·운영체제·GPU 드라이버)의 판까지 묶어 보관해야 한다(8.22). 연구 인프라로서의 목록과 데이터셋은 25.5가 모은다.
8.28.9 현실 격차 — 재는 법과 줄이는 법
결론부터: 현실 격차는 "시뮬레이터에서 된 것이 실제에서 안 되는 정도"다. 재지 않으면 줄일 수 없다. 재는 법은 같은 입력으로 시뮬레이터와 실기를 날려 응답을 비교하는 것이다. 줄이는 길은 세 갈래다. ① 시스템 식별로 파라미터를 맞춘다(2.1). ② 빠진 층을 채운다(지연·진동·센서 특성). ③ 영역 무작위화로 소프트웨어가 격차에 둔감해지게 한다(7.7.5). ①②는 시뮬레이터를 실제에 가깝게 하고, ③은 소프트웨어를 시뮬레이터의 틀림에 강하게 한다.
예를 하나 계산했다. 같은 자세 제어기(공칭 관성으로 설계한 PD, 500 Hz 이산 제어)로 10° 피치 계단 입력을 넣었다. "실기"는 관성 15 % 증가(케이블·탑재체), 모터 지연 45 ms, 센서에서 모터까지 8 ms 지연이라고 가정했다.
| 경우 | $I_{yy}$ [kg·m²] | 모터 지연 | 순수 지연 | 오버슈트 | 2 % 정착 | 실기 대비 TIC |
|---|---|---|---|---|---|---|
| 공칭 모형 | 0.0143 | 30 ms | 0 ms | 15.1 % | 0.45 s | 0.060 |
| 실기(가정) | 0.0165 | 45 ms | 8 ms | 41.8 % | 1.93 s | 0 |
| 식별 후 모형 | 0.0160 | 43 ms | 8 ms | 39.3 % | 1.69 s | 0.018 |
| 식별 후, 지연 누락 | 0.0160 | 43 ms | 0 ms | 28.3 % | 0.99 s | 0.036 |
읽을 것이 셋이다. 첫째, 공칭 시뮬레이터에서 오버슈트 15 %로 보이던 이득이 실기에서 42 %다. 정착 시간은 네 배다. 시뮬레이터에서 조정을 끝냈다고 믿으면 첫 비행에서 출렁인다. 둘째, 식별로 관성과 모터 지연을 맞추면 TIC가 0.060에서 0.018로 준다. 그러나 순수 지연을 빠뜨리면 0.036으로 격차의 절반이 남는다. 지연은 식별에서 따로 추정해야 하는 파라미터다(2.1.11). 셋째, 공칭 모형의 TIC 0.060도 2.1.12의 경험 기준(0.25~0.3 이하)으로는 "합격"이다. TIC 하나로 격차를 판정하지 말고 오버슈트·정착 시간 같은 행동 지표를 함께 본다.
격차를 재는 지표는 질문에 따라 고른다.
| 질문 | 지표 | 비고 |
|---|---|---|
| 동역학이 같은가 | 같은 입력에 대한 응답의 TIC·잔차, 주파수 응답 | 2.1.12, 식별에 사용하지 않은 입력으로 |
| 제어 성능이 같은가 | 오버슈트·정착 시간·추적 오차의 분포 | 바람 조건을 맞춘다 |
| 인지 성능이 같은가 | 실제 영상과 합성 영상에서의 탐지 정밀도·재현율 차이 | 7.5.7 |
| 시뮬레이션 순위가 실제 순위를 예측하는가 | 여러 정책의 시뮬레이션 성적과 실제 성적의 상관 | Kadian 외 2020의 "Sim2Real predictivity" |
마지막 지표가 개발자에게는 가장 실용적이다. 시뮬레이터가 절대값을 틀려도 A가 B보다 낫다는 판단을 맞히면 설계 선택의 도구로 사용할 수 있다. 실제로 여러 후보를 날려 상관을 확인해 두면 시뮬레이터를 믿을 범위가 생긴다. 실제 기록으로 시뮬레이터를 고치는 방향(real-to-sim)도 있다. 비행 기록으로 파라미터를 식별하고, 촬영 영상으로 장면을 재구성해 렌더링 환경을 만든다. 신경 장면 표현으로 실제 장소를 시뮬레이터 안에 옮기는 일은 7.13이 다룬다.
8.28.10 수치 예시·워크스루 — 2 kg 쿼드의 SITL 구성을 정한다
2.1의 2 kg 쿼드로 PX4 SITL을 구성한다고 하자. 목표는 자세 제어기·추정기의 조정과 순항 중 바람 대응 시험이다. 가정과 결과를 표로 모은다.
| 단계 | 가정 | 계산 | 결과 |
|---|---|---|---|
| ① 가장 빠른 동역학 | 모터 지연 30 ms, 자세 대역 15 rad/s | 모터 극 $1/\tau_m$ | 33 rad/s |
| ② 적분기·간격 | 자세 오차 0.1° 이하 | 8.28.4.2 표 | RK4 1~5 ms는 오차 무시, 반암시적 오일러는 0.5 ms 이하 |
| ③ IMU 잡음 | 1,000 Hz, $N=0.3$ °/√h, $K=10.8$ °/h/√h | $N/\sqrt{\Delta t}$, $K\sqrt{\Delta t}$ | 0.158 °/s, $1.6\times10^{-6}$ °/s |
| ④ 난류 | 30 m, 가벼운 난류($W_{20}=15$ kt), MIL-F-8785C | 저고도 식 | $\sigma_u=1.33$, $\sigma_w=0.77$ m/s, $L_u=152$ m, $L_w=30$ m |
| ⑤ 난류 시간 척도 | 순항 10 m/s, 호버 | $L/V$ | 순항 15.2 s·3.0 s, 호버는 정의 불가 → 평균풍 5 m/s로 대류하면 30 s·6 s |
| ⑥ 지연 | 센서→모터 8 ms(실측해 넣는다) | 8.28.9 | 넣지 않으면 TIC 격차의 절반이 남는다 |
| ⑦ 실시간 계수 | 록스텝 SITL | — | 느려져도 타이밍은 맞다, 실시간성은 HITL에서 |
②에서 반암시적 오일러를 사용하는 엔진이라면 0.5 ms 이하가 필요하다. 이것은 IMU 1,000 Hz보다 촘촘하므로 물리 한 걸음에 IMU 표본이 하나 이하로 대응한다. ③의 값은 정지 기록의 Allan 편차로 데이터시트와 맞는지 확인한다(그림의 방법). ⑤가 보여 주듯 호버 시험에서 Dryden을 그대로 사용하면 바람이 거의 멈춘다. 이 시험에서는 평균풍의 대류를 사용하고, 그 선택을 시험 기록에 남긴다. ⑥은 비행 기록에서 명령과 자이로 반응의 시간차로 잰다.
이 구성으로 할 수 있는 말과 없는 말을 구분해 둔다. 이 SITL은 제어 논리와 모드 전환, 바람 속 추적 성능의 경향을 시험한다. 진동이 없으므로 IMU 필터 설정은 시험하지 못한다. 실시간성은 HITL과 실기에서 본다. 결과를 인증 증거로 사용하려면 이 표 전체가 8.19의 모형 검증 대상이 된다.
8.28.11 설계 트레이드오프 — 어느 시뮬레이터에 무엇을 맡기나
시뮬레이터 구성은 세 갈래로 나뉜다.
① 가벼운 물리와 대량 병렬. GPU나 단순 모형으로 수천 개의 환경을 함께 돌린다. 학습 정책과 대규모 탐색(설계 공간·시나리오 탐색)에 맞는다. 실제 비행 소프트웨어가 들어가지 않으므로 통합 결함은 보지 못한다. 학습 연구 집단이 주로 사용한다.
② 고충실도 SITL. 실제 비행 소프트웨어를 록스텝으로 붙이고 물리·센서 모형을 공들여 맞춘다. 통합·회귀 시험과 고장 주입(2.5)에 맞는다. 렌더링이 무거워지면 느려지고, 학습에 필요한 시행 수를 감당하지 못한다. 오토파일럿 개발사와 기체 제작사가 주로 사용한다.
③ HITL과 사진실사 렌더링. 실제 컨트롤러·탑재 컴퓨터와 렌더러를 실시간으로 묶는다. 연산 시간과 인지 파이프라인의 지연을 본다. 장비가 비싸고 실시간에 묶여 시험 수가 적다. 인증을 준비하는 조직과 군 체계 개발에서 비중이 크다.
| 구성 | 강점 | 약점 | 누구에게 |
|---|---|---|---|
| ① 병렬 학습 | 속도, 시행 수 | 실제 코드 없음, 충실도 낮음 | 학습·탐색 연구 |
| ② SITL | 실제 코드, 재현성 | 실시간성 없음, 렌더링 부담 | 오토파일럿·기체 개발 |
| ③ HITL·사진실사 | 실제 연산·지연 | 비용, 실시간 고정 | 인증 준비, 군 체계 |
견해: 셋은 경쟁이 아니라 층으로 사용하는 편이 낫다고 본다. 근거는 두 가지다. 첫째, 이 장의 계산이 보이듯 격차의 원천은 층마다 다르다. 적분 오차는 ②에서, 지연은 ③에서, 학습의 강건성은 ①에서 다루는 것이 가장 싸다. 둘째, 각 주장을 그것을 보일 수 있는 가장 싼 층에 묶어 두면 시험 계획이 단순해진다. 예를 들어 "정책이 추력 15 % 부족에서도 성공한다"는 ①에서, "모드 전환이 링크 상실에서 옳다"는 ②에서, "인지 지연이 50 ms 이하"는 ③에서 보인다. 그 대가로 층 사이의 모형 일관성(같은 기체 파라미터·같은 센서 모형)을 형상 관리로 유지해야 한다(8.22). 이 일관성이 깨지면 층마다 다른 기체를 시험하게 된다.
8.28.12 세 축 비교
| 항목 | 군용 드론 | 민간 UAS | AAM |
|---|---|---|---|
| 시뮬레이션의 주된 용도 | GNSS 거부·전자전 환경, 군집, 합성 훈련 연동 | 오픈소스 SITL 회귀 시험, 임무 시나리오 | 비행 법칙·천이·고장 시험, 인증 입증 보조 |
| 중요한 층 | 항법 센서 오차 주입, 통신 두절, 다수 기체 | 바람·배터리·센서 잡음 | 공력(천이)·작동기·고장 모형 |
| 비행 소프트웨어 연결 | SITL·HITL, 체계 시뮬레이터와 HLA·DIS 연동(9.21) | PX4·ArduPilot SITL 중심 | HITL·아이언 버드(iron bird) 시험 설비 |
| 시뮬레이터 자체의 요구 | 폐쇄망·보안 인가, 비공개 위협 모형 | 저비용·개방성 | 모형 검증·도구 자격(8.8·8.19) |
| 사람과의 연결 | 운용자 훈련(16.16) | 원격 조종사 연습 | 모의비행훈련장치 인증(20.17) |
8.28.13 관련 규격·프로토콜
| 문서 | 발행 | 무엇을 정하나 | 상세 |
|---|---|---|---|
MAVLink 2 HIL 메시지(HIL_SENSOR·HIL_GPS·HIL_ACTUATOR_CONTROLS 등) | MAVLink 프로젝트(Dronecode) | SITL·HITL에서 센서 값과 작동기 출력의 교환 | 9.5·9.6 |
| PX4 시뮬레이터 MAVLink API·록스텝 | PX4 개발 문서 | 연결 포트·순서·속도 배율 | 9.6 |
| ArduPilot JSON SITL 인터페이스 | ArduPilot 저장소 문서 | 외부 물리와의 UDP 교환 형식 | 9.6 |
| SDF(Simulation Description Format) | Open Robotics(Gazebo) | 세계·모형·센서의 기술 형식 | 25.5 |
| OpenUSD | Pixar에서 시작, Alliance for OpenUSD | 장면 기술 형식(Omniverse 계열 시뮬레이터) | 24.35 |
| FMI(Functional Mock-up Interface) 3.0 | Modelica Association | 모형 교환과 공동 시뮬레이션 | 9.21 |
| IEEE 1516(HLA)·IEEE 1278(DIS) | IEEE | 분산 시뮬레이션 연동 | 9.21 |
| MIL-F-8785C·MIL-HDBK-1797 | 미 국방부 | Dryden·von Kármán 난류 모형과 파라미터 | 1.32 |
| IEEE Std 952-2020·1293-2018 | IEEE | 관성 센서의 잡음 규정과 Allan 분산 시험 | 4.3 |
| RTCA DO-330 | RTCA | 도구 자격(시뮬레이터가 검증 활동을 대신할 때) | 8.8 |
OpenUSD와 FMI는 판이 계속 개정되므로 사용하는 판을 밝힌다. MIL-HDBK-1797은 개정판(1797B 등)마다 난류 길이 척도의 정의가 다르다. 규격 전체의 지도는 9.1, 색인은 A.6에 있다.
8.28.14 관련 규제·인증 요구와의 연결
시뮬레이션은 개발 도구로 사용하는 한 규제의 대상이 아니다. 증거로 사용하는 순간 요구가 생긴다.
| 용도 | 생기는 요구 | 이 장과의 연결 | 상세 |
|---|---|---|---|
| 적합성 입증의 해석·시뮬레이션 | 모형이 그 조건에서 실제를 대표한다는 검증·확인 | 8.28.9의 격차 지표, 모형의 유효 범위 | 8.19·20.6 |
| 소프트웨어 검증 활동의 대체 | 시뮬레이터의 도구 자격(DO-330) | 시뮬레이터 판·설정의 형상 관리 | 8.8·8.22 |
| 조종사·운용자 훈련 | 훈련 장치의 자격 인정 | 개발 시뮬레이터와 훈련 장치는 요구가 다르다 | 16.16·20.17 |
| 위험 평가·운용 승인 | 시나리오 시뮬레이션의 근거 제시 | 바람·고장 모형의 출처와 한계 | 8.6·20.6 |
| 학습 정책의 보증 | 학습 환경과 무작위화 범위의 기록 | 8.28.8의 판 보관 | 7.4·7.7 |
규제가 시뮬레이션 결과를 얼마나 인정하는지는 기관과 사안마다 다르고, AAM 형식증명에서의 구체적 인정 범위는 공개 자료로 일반화하기 어렵다 (확인 필요). 시뮬레이터가 비행시험을 줄여 주는 몫은 커지고 있지만 대체하지는 않는다(8.20).
8.28.15 함정과 한계
| 오해 | 실제 | 더 볼 곳 |
|---|---|---|
| "1 ms면 어떤 적분기든 충분하다" | 1 ms 오일러는 20° 계단 입력에서 0.18°를 틀리고, 감쇠 없는 진동을 1분에 34 % 키운다 | 8.28.4 |
| "사진실사 렌더링이면 카메라도 실제와 같다" | 외관과 센서 특성(롤링 셔터·노출·압축)은 별개다 | 8.28.6.3 |
| "데이터시트 잡음 값을 표본 표준편차로 넣으면 된다" | 연속 밀도는 표본 간격으로 바꿔야 하고, 표본률을 바꾸면 다시 바꿔야 한다 | 8.28.6.1 |
| "Dryden 난류를 켜면 호버 시험도 바람 속이다" | 동결 난류 가정이 기체 속도에 기대므로 호버에서는 난류가 멈춘다 | 8.28.5.3 |
| "SITL에서 문제없으면 타이밍도 문제없다" | 록스텝은 타이밍 문제를 숨긴다. 실시간성은 HITL과 실기에서 본다 | 8.28.7·2.10 |
| "식별로 파라미터를 맞추면 격차가 닫힌다" | 순수 지연·진동·센서 시간 정렬처럼 층 자체가 빠진 격차는 남는다 | 8.28.9 |
| "TIC가 기준 이하이면 시뮬레이터를 믿어도 된다" | 오버슈트가 세 배 다른 모형도 TIC 0.06이다 | 8.28.9·2.1.12 |
| "유명한 시뮬레이터는 계속 유지된다" | 널리 인용된 시뮬레이터 여럿이 갱신을 멈췄다 | 8.28.8 |
이 장의 한계도 밝혀 둔다.
- 계산은 평면 모형이다. 적분기와 격차 예시는 피치 평면의 단순화 모형으로 원리만 보였다. 3차원 회전의 결합과 접촉은 넣지 않았다.
- "실기" 값은 가정이다. 실제 기체의 격차는 비행 기록으로 재야 하며 이 장의 수치를 일반화하지 않는다.
- 시뮬레이터 상태는 시점 의존이다. 2026-11-01의 저장소 정보이며, 활동 여부는 갱신일로만 판단했다. 품질이나 정확도를 평가한 것이 아니다.
- 벽·천장 근처의 공력, 로터 사이 간섭, 비·눈의 센서 영향은 공개 모형이 부족한 미해결 영역이다.
8.28.16 체크포인트·연구 질문
체크포인트
- 오일러법이 감쇠 없는 진동을 키우는 이유를 증폭률 $\lvert1+i\omega\Delta t\rvert$로 설명하라. 반암시적 오일러와 RK4는 어떻게 다른가?
- 자이로의 백색잡음 밀도 $N=0.005$ °/s/√Hz를 250 Hz 시뮬레이터에 넣을 때 표본 표준편차는 얼마인가? 표본률을 1,000 Hz로 올리면 어떻게 바꿔야 하는가?
- PX4 SITL의 록스텝 세 걸음을 적고, 록스텝이 시험할 수 없게 만드는 것이 무엇인지 말하라.
- Dryden 난류 모형을 호버 시험에 그대로 사용하면 무엇이 잘못되는가? 대안 하나를 제시하라.
- 현실 격차 예시에서 순수 지연 8 ms를 빠뜨리면 TIC와 오버슈트가 어떻게 달라지는가? 왜 TIC만으로 판정하면 안 되는가?
- 시뮬레이터 구성 ①②③에 각각 맡길 주장을 하나씩 들어라.
연구 질문 — 이 장에서 파생되는 열린 주제(25.7에 모은다)
- 격차의 예측력 — 비행 로봇에서 시뮬레이션 성적의 순위가 실제 순위를 얼마나 예측하는가? 제어·인지·학습 정책별로 그 상관을 체계적으로 잰 공개 자료를 만들 수 있는가?
- 호버·저속 난류 모형 — 동결 난류 가정이 깨지는 호버·저속 비행에서 도심 저고도 난류를 재현하는 시간 영역 모형은 무엇이어야 하는가? 측정 자료(1.32)로 어떻게 검증하는가?
- 센서 모형의 표준화 — IMU·기압계·LiDAR·이벤트 카메라 모형의 파라미터와 검사 절차(Allan 편차·움직임 왜곡 등)를 시뮬레이터 사이에 옮길 수 있게 표준화할 수 있는가?
- 시뮬레이터 수명과 재현성 — 갱신이 멈춘 시뮬레이터 위의 연구 결과를 어떻게 보존·재현할 것인가? 컨테이너·판 고정만으로 충분한가?
1차 출처(이 장)
- PX4 개발 문서(docs.px4.io) — Simulation, Gazebo Classic Simulation의 Lockstep 절, HITL Simulation, Community Supported Simulators(2026-11 확인).
- ArduPilot 개발 문서(ardupilot.org/dev) — SITL Simulator, ArduPilot 저장소
libraries/SITL/examples/JSON의 JSON 인터페이스 설명(2026-11 확인). - Gazebo 공식 사이트(gazebosim.org) — Releases 표(2026-11 확인). Open Robotics 공지 "Gazebo Classic End-of-Life"(2025).
- Microsoft AirSim 저장소의 공지 문서(
project_airsim.md), IAMAI Project AirSim 저장소 README(2026-11 확인). - ethz-asl/kalibr 위키 "IMU Noise Model".
- MIL-F-8785C, Flying Qualities of Piloted Airplanes, 미 국방부, 1980. MIL-HDBK-1797.
- IEEE Std 952-2020, IEEE Std 1293-2018.
- Hairer, E.; Nørsett, S. P.; Wanner, G., Solving Ordinary Differential Equations I: Nonstiff Problems, 2nd ed., Springer, 1993.
- Mahony, R.; Kumar, V.; Corke, P., "Multirotor Aerial Vehicles: Modeling, Estimation, and Control of Quadrotor", IEEE Robotics & Automation Magazine, 19(3), 2012.
- Koenig, N.; Howard, A., "Design and Use Paradigms for Gazebo, an Open-Source Multi-Robot Simulator", IROS 2004.
- Shah, S.; Dey, D.; Lovett, C.; Kapoor, A., "AirSim: High-Fidelity Visual and Physical Simulation for Autonomous Vehicles", Field and Service Robotics, 2017.
- Furrer, F. 외, "RotorS—A Modular Gazebo MAV Simulator Framework", Robot Operating System (ROS): The Complete Reference (Volume 1), Springer, 2016.
- Song, Y.; Naji, S.; Kaufmann, E.; Loquercio, A.; Scaramuzza, D., "Flightmare: A Flexible Quadrotor Simulator", CoRL 2020.
- Rebecq, H.; Gehrig, D.; Scaramuzza, D., "ESIM: an Open Event Camera Simulator", CoRL 2018.
- Tobin, J. 외, "Domain Randomization for Transferring Deep Neural Networks from Simulation to the Real World", IROS 2017.
- Kadian, A. 외, "Sim2Real Predictivity: Does Evaluation in Simulation Predict Real-World Performance?", IEEE Robotics and Automation Letters, 2020.
출처를 찾고 판을 추적하는 방법은 0.9에서 다룬다.
다음 장: 제8부는 여기서 끝난다. 목차 순서로는 제9부의 첫 장 9.1로 넘어가 규제·표준·규격·프로토콜이 어떻게 이어지는지와 표준개발기구의 지형을 본다. 이 장에서 본 MAVLink HIL 메시지는 9.5이, 시뮬레이션 연동 표준은 9.21이 규격의 층에서 이어 받는다. 시뮬레이션을 시험평가의 증거로 사용하는 일은 8.19가 맡는다.