Chapter 30. 자동 비행 모드(Mission, Hold, Return) 소스 코드 분석
- # 1.
navigator모듈의 시스템 아키텍처 및 스케줄링 모델 - # 1. 스레드 안전성(Thread-safety) 및 이벤트 구동(Event-driven) 폴링 메커니즘 설계 (
navigator_main.cpp) - # 1. uORB 메시지 비동기 수신 및 지연 보상(Latency Compensation) 파이프라인
- # 1.
Navigator베이스 클래스의 유한 상태 머신(Finite State Machine) 계층도 및 다형성(Polymorphism) 구현 - # 1.
FlightTaskAuto인스턴스와의 제어 명령 위임(Delegation) 및 의존성 주입(Dependency Injection) 메커니즘 - # 1. 커맨더(Commander) 모듈과의 비동기 상태 동기화 및 제어권(Control Authority) 전환 핸드셰이킹 로직
- # 1. 설정점 삼중체(Setpoint Triplet) 기반 C2(Continuous Acceleration) 연속성 보장 궤적 계획(Trajectory Planning) 인터페이스
- # 1.
MissionBlock추상화 계층 및 임무 데이터 파이프라인 (mission_block.cpp) - # 1. 가상 함수(Virtual Function)를 활용한 비행 모드별(Mission, Loiter, RTL) 공통 제어 인터페이스 설계
- # 1. Dataman(Data Manager) 계층의 LRU(Least Recently Used) 캐시 교체 알고리즘 기반 SD 카드 I/O 최적화 로직
- # 1. MAVLink 직렬화(Serialization) 데이터의 내부
mission_item_s메모리 레이아웃 역직렬화(Deserialization) 매핑 - # 1.
FeasibilityChecker의 운동학적 제약 조건(Kinematic Constraints) 및 비행 포락선(Flight Envelope) 사전 검증 로직 - # 1. WGS84 타원체(Ellipsoid) 모델 기반 글로벌 좌표계(LLA)와 국소 평면 좌표계(NED) 간의 직교 투영(Orthographic Projection) 변환 알고리즘 적용
- 30.3
Mission모드: 유한 상태 머신 및 자동 비행 실행 로직 (mission.cpp) - 30.3.1. 초기화 상태(
on_activation)에서의 위치 추정기(Estimator) 공분산(Covariance) 수렴 및 글로벌 데이터 유효성 확인 로직 - 30.3.2. 비동기 임무 항목 로드 시의 데드락(Deadlock) 방지 및 타임아웃(Timeout) 예외 처리
- 30.3.3. 항법 명령어(Navigation Commands) 처리의 기하학적 제어 로직 분석
- 30.3.3.1. 이륙(Takeoff): 임계 피치각(Critical Pitch Angle) 제한 및 점근적(Asymptotic) 고도 도달 제어
- 30.3.3.2. 이동(Waypoint): 3차원 공간상의 경로점 간 유클리드 거리(Euclidean Distance) 기반 벡터장(Vector Field) 생성
- 30.3.3.3. 대기(Loiter): 시간 이산화(Time Discretization)에 따른 타이머 인터럽트 및 궤도 이탈 방지 로직
- 30.3.3.4. 고도 변경(Change Alt): 비행 경로 오차를 최소화하기 위한 3차원 활공각(Glide Slope) 비례 제어
- 30.3.3.5. 자동 착륙(Land): 지면 근접 효과(Ground Effect)를 고려한 하강 속도 프로파일 동적 조절 알고리즘
- 30.3.4. 경유지 도달(Acceptance) 판별을 위한 구면 기하학(Spherical Geometry) 및 원통형 허용 오차(Cylindrical Tolerance) 혼합 평가 알고리즘
- 30.3.5. 고정익(FW)의 L1 비선형 유도 로직(L1 Non-linear Guidance Logic) 연동을 위한 크로스 트랙 에러(Cross-track Error) 산출 및 진입각 계산
- 30.3.6. 동시성(Concurrency) 제어를 통한 페이로드(카메라, 짐벌) 트리거 uORB 메시지 발행 및 제어기 동기화
- 30.4.
Loiter(Hold) 모드: 제동 운동학 및 위치 유지 알고리즘 (loiter.cpp) - 30.4.1. 모드 전환 시의 관성 및 운동량(Momentum) 보존을 고려한 초기 설정점(Setpoint) 상태 전이(State Transition) 로직
- 30.4.2. 멀티로터(MC)의 저크 제한 역학 모델(Jerk-limited Kinematic Model) 기반 S-곡선(S-Curve) 감속 궤적 생성 알고리즘
- 30.4.3. 최대 제동 가속도 포화(Saturation) 한계점과 피드포워드(Feed-forward) 보상기의 상호작용 및 오버슈트(Overshoot) 억제 로직
- 30.4.4. 고정익(FW) 체공을 위한 비선형 경로 추종 유도(Nonlinear Path Following Guidance, NPFG) 리아푸노프 안정성(Lyapunov Stability) 기반 궤도 진입 로직
- 30.4.5. 멀티로터의 위치 유지(Position Hold) 시 적분기 와인드업 방지(Anti-windup) 및 외란 관측기(Disturbance Observer) 연동 데이터 역추적
- 30.4.6. VTOL 풍향 최적화(Weathervaning)를 위한 요축(Yaw axis) 각운동량(Angular Momentum) 제어 및 공기역학적 항력(Aerodynamic Drag) 최소화 로직
- 30.5.
RTL(Return To Launch) 모드: 비상 복귀 상태 머신 및 경로 최적화 (rtl.cpp) - 30.5.1. 다중 목적지(Home vs Rally Point) 간의 거리 비용 함수(Cost Function) 평가 및 다익스트라(Dijkstra) 유사 휴리스틱 최단 경로 탐색
- 30.5.2. 상승 단계: 충돌 회피를 위한 안전 고도 확보 시 피치-고도 결합 제어(Pitch-Altitude Coupled Control) 알고리즘
- 30.5.3. 복귀 단계: 수평 이동 간 바람 벡터(Wind Vector) 추정 기반 크랩각(Crab Angle) 보정 및 편류(Drift) 상쇄 로직
- 30.5.4. 하강 및 대기 단계: 목적지 상공 도달 후 강하율(Descent Rate) 제어를 위한 종단 속도(Terminal Velocity) 점진적 감속(Tapering) 로직
- 30.5.5. 원뿔형 복귀(Cone RTL) 메커니즘의 공간 기하학적 교차점(Intersection Point) 산출 및 비행 궤적 고도 클리핑(Altitude Clipping) 알고리즘
- 30.5.6. 충돌 회피 시스템(Obstacle Avoidance) 개입 시 벡터장 히스토그램(Vector Field Histogram, VFH) 기반 우회 경로 세그먼트 생성 및
safepoint배열 병합 - 30.5.7. 정밀 착륙(Precision Landing,
precland) 모듈 연동 시 컴퓨터 비전(IR/Marker) 기반 상대 위치 오차 피드백 제어 루프(Feedback Control Loop) 진입 과정 - 30.6. 자동 비행 중단 및 이중화(Redundancy) 예외 처리 로직
- 30.6.1 지오펜스(Geofence) 위반 감지를 위한 광선 투사 알고리즘(Ray Casting Algorithm) 기반 다각형 내점 판별 및 경계 이탈 인터럽트
- 30.6.2 위치 추정 상실(Navigation Loss) 시 추측 항법(Dead Reckoning) 타임아웃 임계치 평가 및 고도 유지(Altitude Hold) 강제 폴백(Fallback) 상태 전이
- 30.6.3. 임무 수행 중 하드웨어 결함 감지(Failure Detection) 상태 머신과 비행 종료(Flight Termination) 서브루틴의 인터럽트 처리 우선순위
- 30.7. 자동 비행 성능 검증을 위한 분석 엔지니어링 및 디버깅
- 30.7.1. 위치 추정기(EKF2) 혁신(Innovation) 데이터와
position_controller_status간의 제어 루프 지연 시간(Time Lag) 상관관계 분석 - 30.7.2. SITL 가상 환경 메모리 덤프(Memory Dump)를 통한 FSM(Finite State Machine) 교착 상태(Deadlock) 추적 및 레지스터 값 검증 기법
- 30.7.3. 이산 계단형 명령(Discrete Step Command)에 대한 시스템의 과도 응답(Transient Response) 및 제어 오차 포락선(Error Envelope)을 분석하기 위한 ULog 파싱 실무