30.5.3. 복귀 단계: 수평 이동 간 바람 벡터(Wind Vector) 추정 기반 크랩각(Crab Angle) 보정 및 편류(Drift) 상쇄 로직
RTL(Return To Launch) 과정에서 기체가 안전 고도(RTL_RETURN_ALT)에 도달한 후 목적지 상공을 향해 직선으로 날아가는 단계를 **수평 복귀 단계(RTL_STATE_RETURN)**라고 한다. 이 구간은 배터리와 시간을 가장 많이 소모하는 핵심 구간이다.
이상적인 무풍 환경이라면 기수는 목적지(Waypoint)를 정면으로 바라보고 대지 속도(Ground Speed)와 대기 속도(Airspeed)가 일치한 채 비행하면 된다. 하지만 현실에서는 강력한 측풍(Crosswind)이 존재하며, 이에 대한 보정 없이 산출된 헤딩(Heading)만 유지할 경우 기체는 바람에 밀려 목적지에서 벗어나는 편류(Drift) 트랙을 그리게 된다. PX4-Autopilot은 이 편류 현상을 상쇄하고 최단 직선 궤적(Shortest Ground Track)을 사수하기 위해, EKF2의 바람 벡터 추정(Wind Vector Estimation) 데이터와 위치 제어기의 크랩각(Crab Angle) 보정 로직을 유기적으로 연동한다.
1. 바람 벡터(Wind Vector) 추정과 EKF2의 역할
PX4의 센서 융합 모듈인 EKF2(Extended Kalman Filter)는 기체의 속도 삼각형(Velocity Triangle) 역학을 활용해 실시간으로 현재 고도의 풍향과 풍속(Wind Vector)을 3차원 상태 변수(wind_estimate 토픽)로 추정해낸다.
- 속도 삼각형 모델:
\vec{V}_{Ground} = \vec{V}_{Air} + \vec{V}_{Wind}- \vec{V}_{Ground}: GPS(RTK)를 통해 계측되는 관성계 기준 절대 지상 속도.
- \vec{V}_{Air}: 대기속도계(Pitot Tube)나 기체의 공기역학 모델(Drag Model)로 추정되는 공기 중 상대 속도.
- \vec{V}_{Wind}: 위 두 벡터의 오차(Residual)로부터 도출되는 북동(NED) 좌표계의 순수 바람 벡터.
만약 대기속도계 센서가 장착되어 있지 않더라도(멀티로터의 경우 특히), EKF2는 GPS 지상 속도와 IMU가 감지한 현재 기울기(Attitude)에 의한 예상 추진력을 비교하는 이노베이션(Innovation) 연산을 통해 수학적으로 바람 벡터를 정밀하게 역해석해낸다.
2. 크랩각(Crab Angle) 보정 알고리즘 구조
RTL 복귀 중 네비게이터는 단순히 Heading = arctan2(\Delta Y, \Delta X)의 공식을 위치 제어기로 넘기지 않는다. 측풍이 불어 기체가 의도치 않게 직선 경로를 이탈(Cross-track Error)하려 하면, 제어기는 바람이 불어오는 쪽으로 기수를 살짝 틀어서 전진하는 이른바 게걸음(Crabbing) 비행을 수행하도록 유도 각도(Guidance Angle)를 생성한다.
2.1 고정익(Fixed-wing)의 NPFG 및 TECS 편류 보상
고정익 항공기가 RTL 복귀 궤도에 오르면 NPFG(Nonlinear Path Following Guidance) 알고리즘이 개입한다.
- 강한 측풍이 감지되면, NPFG는 목적지로 향하는 직선 궤적에 기체가 계속 머물게 하기 위해 의도적으로 기수를 바람 방향으로 들이미는 **크랩각(Crab Angle)**을
fw_att_control모듈로 퍼블리싱한다. - 즉, 비행기의 코(Nose)는 목적지보다 10^\circ \sim 20^\circ 바람 방향을 향하고 있지만, 측풍에 밀려 실제 땅 위를 훑고 지나가는 궤적(Ground Track)은 완벽하게 목적지를 향하는 직선이 된다.
2.2 멀티로터(Multi-rotor)의 위치/속도 캐스케이드(Cascade) 편류 보상
멀티로터의 mc_pos_control은 P-PID 캐스케이드 구조를 가지며, 측풍 보상은 속도 루프 계층에서 자연스럽게 통합된다.
- Cross-track 오차 극복: 기체가 설정된 RTL 복귀 라인(Line Segment)에서 측풍으로 인해 밀려나게 되면, 위치 P 제어기는 원래 라인으로 되돌아가려는 직교 방향의 속도 설정점(Velocity Setpoint) 항을 추가로 생성해낸다.
- 그 결과, 드론은 목적지를 향한 전진 롤/피치 입력 외에도, 바람의 반대 방향으로 버티기 위한 추가적인 기울기를 합성(Vector Addition)하게 되며, 이 역시 결과적으로 동체 자체의 3D 공간 상 이동 궤적을 직선으로 사수하는 크랩형 버티기 거동으로 나타난다.
graph TD
A[RTL: 목적지 직선 궤적 생성] --> B[EKF2: Wind Vector 추정 결합]
B --> C{Crosswind / Drift 현상 감지}
C --> |고정익 (FW)| D[NPFG: 경로 이탈량 비례 Crab Angle 계산]
C --> |멀티로터 (MC)| E[Pos Ctrl: Cross-track 추종 보상 속도 생성]
D --> F[기수를 바람 쪽으로 돌림 (Heading Offset 적용)]
E --> G[바람 반대쪽으로 기체를 기울이며 밀고 나감 (Attitude 합성)]
F --> H[지상 궤적(Ground Track)이 목적지 직선 라인에 고정됨]
G --> H
H --> I[최단 거리 및 최소 배터리 소비로 목적지 순항 달성]
3. 에너지 보존과 배터리 효율 파라미터
RTL 복귀 간 편류 보상은 드론의 직진성(Straignt-line tracking)을 높여 총 비행 거리를 단축시키지만, 모터 출력을 바람을 이겨내는데 소모하므로 속도 설정이 잘못될 경우 배터리가 조기 급감할 수 있다.
- 고정익 Cruise 속도(
FW_AIRSPD_TRIM): 측풍을 뚫고 갈 때 가장 에너지가 덜 들며 체공 효율(L/D Ratio)이 최적화된 순항 속도(통상 실속 속도의 1.3~1.5배)로 세팅해야 RTL 귀환 성공률이 높아진다. - 풍속에 맞춘 기어비 조절: GCS의 발전된 스크립팅은 측풍이 지나치게 강해 기체가 크랩 각을 아무리 틀어도 (Ground Speed \approx 0) 전진하지 못하는 비상 상황 시, 크루즈 스피드(
FW_AIRSPD_MAX) 한계를 임시로 열어주어 에너지를 소모하더라도 어떻게든 바람의 벽을 돌파하게 조치하는 것이 권장된다.
4. Ardupilot 편류 보상 로직과의 비교
- Ardupilot의 고정익
L1_Controller구조에서도 Cross-track 오차를 0으로 만들기 위한 횡방향 가속도 계산 로직이 내재되어 있어 크래빙 비행이 동일하게 구현된다. - 그러나 최신 PX4의 NPFG 알고리즘은 바람 벡터의 사전 추정 데이터(
wind_estimate)를 피드포워드(Feed-forward) 변수로 유도 제어 방정식에 선제 편입하는 설계(Wind Compensation feed-forward)가 더 적극적이다. 즉, 기체가 바람에 휩쓸려 경로를 이탈(Error)한 뒤에야 캐치업하는 P-Control 방식보다 더 미세하게 선반응하므로 궤적의 헌팅(Hunting/Weaving)이 현저히 적다.
결론
RTL 발동 시 “수평 복귀 단계(RTL_STATE_RETURN)“는 관제 화면에서 단순한 점의 이동으로 보이지만, 내부 통신망에서는 EKF2 모듈의 바람 모델링 데이터와 포지션 제어 모듈간의 수백 Hz 단위 삼각 함수 보정 결합이 일어난다. 이 고도화된 크랩각 연산 메커니즘을 통해 돌풍이 난무하는 악천후 비상 상황 속에서도 UAS 기체는 기계적으로 가장 완벽한 직선 홈(Home) 귀환 궤적을 그리게 되는 것이다.