30.3.4. 경유지 도달(Acceptance) 판별을 위한 구면 기하학(Spherical Geometry) 및 원통형 허용 오차(Cylindrical Tolerance) 혼합 평가 알고리즘
자율 비행의 이동(Waypoint) 명령 수행 중 가장 중요하면서도 미묘한 오류를 유발할 수 있는 시점은, 기체가 “목표점에 도달했다(Reached)“고 선언하고 다음 임무(Mission Item)로 넘어가는 찰나의 순간이다. PX4-Autopilot의 내부 판별 함수 is_mission_item_reached()는 단순한 2차원 평면상의 거리 비교를 넘어, 센서 통계학적 특성(기압계의 수직 오차 등)을 반영한 **구면 기하학(Spherical Geometry)**과 원통형 허용 오차(Cylindrical Tolerance) 영역의 혼합 평가(Hybrid Evaluation) 모델을 채택하고 있다. 이 장에서는 해당 수용(Acceptance) 알고리즘의 수학적/시스템적 로직을 심층 분석한다.
1. 수학적 관점에서의 도달 판별(Acceptance) 딜레마
만일 기체가 목표 웨이포인트 \mathbf{P}_{target}(x_t, y_t, z_t) 를 향해 날아갈 때, 완벽한 0 오차로 점 공간에 도달하는 것은 불가능하다. 바람, 센서 노이즈, 기체의 관성력 등으로 인해 항상 동적인 잔류 오차(Residual Error)가 존재하기 때문이다.
제어 공학적으로 이를 해결하기 위해 허용 반경(Acceptance Radius, 통상 NAV_ACC_RAD 파라미터 적용) R 을 설정한다.
1.1 ) 3차원 유클리드 거리 기반 구면(Spherical) 모델
가장 직관적인 방법은, 기체와 목표점 사이의 3차원 유클리드 거리(Euclidean Distance)가 허용 반경 R 보다 작아지면 도달한 것으로 간주하는 것이다.
\sqrt{(x - x_t)^2 + (y - y_t)^2 + (z - z_t)^2} \le R
이 수식은 기체의 물리적 허용 오차 존이 완벽한 구형(Sphere) 형태임을 의미한다.
30.3.4.2. 원통형 허용 오차(Cylindrical Tolerance)의 도입 배경
위와 같은 직관적인 구면(Spherical) 평가 방식은 드론 환경에서 치명적인 결함을 내포하고 있다. GNSS(GPS) 센서는 위성 배치 스펙트럼의 한계상 수평 오차(HDOP)에 비해 수직 오차(VDOP)가 2배 이상 떨어지는 경향이 있으며, 보조 센서인 기압계(Barometer) 역시 대기 온도 변화와 바람의 동압(Dynamic Pressure)에 의해 심한 Z축 수직 표류(Drift) 현상을 겪는다.
즉, 기체는 위도/경도 상으로는 목표점 정중앙에 완벽히 도달했지만, 수직 Z축 오차가 수렴하지 않아서 통과 반경 R 에 들어가지 못하고 그 자리에서 교착 상태(Deadlock)로 맴돌게 되는 경우가 잦다. PX4는 이러한 문제점을 극복하기 위해 원통형 허용 오차(Cylindrical Tolerance) 평가 방식을 도입하였다.
원통형 제약 수식 (수평과 수직의 분리 검증)
멀티로터의 경우 수평 반경과 수직 반경의 독립적인 비교 연산을 수행한다.
- 수평 도달(XY Plane): \sqrt{(x - x_t)^2 + (y - y_t)^2} \le R_{xy} (
NAV_ACC_RAD) - 수직 도달(Z Axis): |z - z_t| \le R_{z} (
NAV_MC_ALT_RAD)
두 조건이 AND 논리로 모두 참(True)이 되었을 때 비로소 is_mission_item_reached()가 활성화된다. 즉, 오차 한계존(Tolerance Zone)이 구형이 아니라 목표점을 중심으로 한 거대한 원통(Cylinder) 형태가 됨으로써, Z축 오차가 다소 나쁘더라도 통과 판정을 부드럽게 용인해 주는 강건함(Robustness)을 획득한다.
30.3.4.3. 허용 오차존 기하학 도식화 (Mermaid Diagram)
다음은 구면 기하학과 원통형 허용 오차의 형상 차이 및 기체 진입 판별 조건을 나타낸 다이어그램이다.
graph TD
A[Waypoint Target P_t] -->|3D Distance Check| B{Euclidean Distance < R?}
B -- Yes --> C[Spherical Acceptance: Valid for Fixed Wing trajectory]
B -- No --> D[Check Fails]
A -->|2D XY Distance Check| E{Horizontal Error < NAV_ACC_RAD?}
A -->|1D Z Distance Check| F{Vertical Error < NAV_MC_ALT_RAD?}
E -- Yes --> G{Check Z Error}
G -- "Yes (Vertical Error valid)" --> H[Cylindrical Acceptance: Valid for Multirotor]
H --> I[Execute advance_mission]
30.3.4.4. 고정익(Fixed-wing) 비행체를 위한 벡터 내적 판별 로직
원통형 판별 방식이 회전익(Multirotor)에 이상적이라면, 시속 60~100km/h로 비행하는 고정익 항공기(Fixed-wing)에게는 또 다른 판별 로직이 요구된다. 고정익은 선회 반경 한계로 인해 원통 안으로 들어가지 못하고 스쳐 지나가는(Fly-by) 상황이 흔히 발생하기 때문이다.
PX4 mission_block.cpp 내의 판별 로직은 점(Point) 기준의 거리가 아니라, 선(Line) 기준의 **투영면(Projection Plane) 통과(Crossing)**를 추가적으로 검사한다.
목표 웨이포인트 \mathbf{P}_t 에 도달하기 직전, 비행 궤적에 수직으로 교차하는 가상의 무한 평면(Plane)을 설정하고, 기체의 비행 벡터 파생 방향(Dot Product)이 음수(-)에서 양수(+)로 뒤집히는 순간, 즉 평면을 관통(Crossing)하는 순간 거리에 상관없이 자동으로 도달 판정(Target Acceptance) 처리를 내려준다.
30.3.4.5. 시스템 관점의 디버깅 이슈와 결론
Ardupilot을 포함한 전통적인 GCS 환경 사용자들은 드론이 웨이포인트 상공을 완전히 통과하지 않고 모서리를 둥글게 깎아먹으며(“Cutting corners”) 지나가는 현상에 의문을 품곤 한다. 하지만 이는 시스템 결함이 아니라, 유클리드 혼합 평가 모델(원통형 판별 + 비행면 투영 판별)이 기체의 동역학적 효율성을 극대화하기 위해 의도적으로 연출한 궤적 통과 기여(Contribution)이다.
자율 비행 서비스 개발자는 QGroundControl 등에서 단순히 웨이포인트를 찍는 행위를 넘어, 기체가 어떠한 **공간적 모양의 허용 볼륨(Tolerance Volume)**을 수식적으로 갱신해 나가며 비행하는지를 인지해야 한다. 특정 건물을 매우 근접하게 맴돌아야 하는 검사(Inspection) 임무와 같은 경우, 이러한 원통 반경 변수(NAV_ACC_RAD)를 매우 엄격하게 조이고 비행 속도를 조절하는 식의 세밀한 관제 테크닉이 동반되어야만 의도된 정밀 타격 궤적 산출이 보장될 수 있다.