# 1. 설정점 삼중체(Setpoint Triplet) 기반 C2(Continuous Acceleration) 연속성 보장 궤적 계획(Trajectory Planning) 인터페이스
PX4-Autopilot의 자동 비행 모드가 단순한 ’점과 점 사이의 직선 비행’을 넘어서 상업용 유인 비행기 수준의 매끄러운 기동(Smooth Maneuver) 성능을 뽐낼 수 있는 근본적인 이유는 기하학적 궤적의 연속성(Continuity)을 보장하는 특유의 아키텍처 설계 덕분이다. 그 핵심에 자리한 소프트웨어 인터페이스가 바로 설정점 삼중체(Setpoint Triplet) 메시지 구조이다.
본 절에서는 navigator 모듈이 경로를 계획하고 하달할 때 단일 목표점이 아닌 세 가지 시점(이전, 현재, 다음)의 궤적 맥락(Context)을 한 번에 전달함으로써, 하위 제어기(mc_pos_control, fw_pos_control)가 কীভাবে C2 수준(가속도의 연속성)의 궤적 평활화(Trajectory Smoothing) 연산을 수행하는지 소스 코드 데이터 파이프라인 관점에서 분석한다.
1.1 설정점 삼중체(position_setpoint_triplet_s) 메시지 패러다임
초창기 모델이나 일부 경량화된 비행 제어기(Legacy Architecture)의 경로 이동 유도 방식은 단순히 ‘다음 목적지(Target Position)’ 하나만을 향해 PID의 P(비례) 제어기 스티어링을 꺾는 L1 가이던스(L1 Guidance) 모델에 국한되어 있었다. 그러나 목적지에 도달하는 순간 기체는 급제동(Hard Braking)을 걸거나, 속도 벡터의 관성으로 인해 목적지를 크게 오버슛(Overshoot)한 뒤 되돌아오는 제어의 파동성(Oscillation)을 겪어야 했다.
이러한 불연속적인 가속도 튀임(Jerk) 현상을 구조적으로 타파하기 위해 PX4는 uORB 토픽으로 **position_setpoint_triplet_s**라는 독창적인 3구간 동시 포장 구조체를 정의해 활용하고 있다.
// msg/position_setpoint_triplet.msg
uint64 timestamp # 토픽 동기화 기준 타임스탬프
position_setpoint_s previous # 기체가 방금 지나쳐 온 [이전 경로점]
position_setpoint_s current # 기체가 현재 돌진하고 있는 [현 목표 경로점]
position_setpoint_s next # 현재 경로점을 달성한 뒤 나아갈 [다음 경로점]
navigator 로직(Mission, RTL 등)은 이 메시지에 단순히 위도/경도/고도 좌표만 담는 것이 아니라, 각 정점에서의 요구 크루즈 속도(cruising_speed), 통과 시 허용되는 수용 반경(acceptance_radius), 궤적 곡률 반경 피드포워드 정보 등을 정교하게 매핑하여 퍼블리시한다.
1.2 궤적 형상 연산: 코너링(Cornering) 및 선외삽(Extrapolation)의 진화
설정점 삼중체가 하위 위치 제어 모듈인 멀티로터의 FlightTaskAuto나 고정익의 유도(Guidance) 시스템으로 위임되면, 기구학적 연산은 목적지와 목적지 부근에서의 선회 반경 곡률(Cornering Radius)을 선제적으로 예지(Look-ahead)할 수 있게 된다.
- Previous -> Current 방향성 평가:
previous좌표에서 시작해current를 향하는 유클리드 공간상의 3D 직선 방향 성분 비율 벡터를 계산해 낸다. 이 직선 선분을 X-Track(크로스 트랙, 항로 이탈률 보정) 오차 계산의 기준 선(Baseline)으로 차용하여 바람으로 인한 편류 현상 보정에 사용한다. - Current -> Next 곡률 계산: 기체가
current반경에 근접했을 때, 궤적 제어기는current를 통과한 후next로 향하기 위해 기체를 얼마만큼 꺾어야 하는지 내적(Dot Product) 연산으로 사이각(Angle)을 산출한다. - 선회 필터 및 스무딩: 여기서 기체가 직각으로 꺾이지 않게끔, C2 연속성(가속도가 단절되지 않고 미분 가능함)을 보장하는 베지어 곡선(Bézier Curve) 혹은 정교한 매끄러운 궤적 스무딩(Smooth Trajectory) 수식을 적용한다. 이 지점에서 가속도의 순간 변화율(Jerk)이 지정된 파라미터
MPC_JERK_AUTO를 초과하지 않도록 타겟 궤적 점들이 시공간상에 수학적으로 재배치된다.
graph TD
A[Waypoint n-1 <br/> (Previous)] -->|바람 외란 보정선 <br/> Cross-Track 기준| B(Waypoint n <br/> (Current))
B -->|코너각 내적 계산| C[Waypoint n+1 <br/> (Next)]
subgraph FlightTaskAuto Position Controller
B-.->|경관통과 시점 <br/> 급제동 회피| D((Smooth Cornering <br/> 제동 가속도 분할))
D-.->C
end
style B fill:#f9f,stroke:#333,stroke-width:2px;
따라서 PX4-Autopilot이 탐재된 드론은 연속된 웨이포인트 임무 비행 시 목적지 하나 다다를 때마다 속도를 ’0’으로 죽이는 정적(Static) 비행이 아니라, 카레이서의 아웃-인-아웃(Out-In-Out) 코너링과 흡사하게 유속을 잃지 않으면서 다음 목표지점 연장선을 향해 감가속을 융합하는 부드러운 순항 통과 작전을 전개할 수 있다.
1.3 고정익(Fixed-wing) 플랫폼 L1 Non-Linear Guidance 응용
설정점 삼중체의 아키텍처적 유연성은 멀티로터 동역학에 국한되지 않고, 전진 기동력과 양력을 타협해야 하는 고정익(Fixed-wing / VTOL) 기체 제어기(fw_pos_control_l1)에서도 극명한 장점을 발휘한다.
고정익의 유도 연산 알고리즘인 비선형 L1 유도 시스템(Non-linear L1 Guidance Algorithm)은 previous와 current 점포를 잇는 절대 선형 궤도(Track)에 얼마나 빨리 점근적으로 수렴(Asymptotic Convergence)할 것인지를 제어한다. 이때 삼중체의 next 필드 존재 여부는 L1 유도 모장이 선회 시작 시점(Turn Anticipation)을 결정하는 결정적 파라미터로 작용한다.
고정익은 기체 특성상 멀티로터처럼 공간에 멈출 수 없기 때문에 목적지 반경에 들어온 뒤 회전을 시작하면 궤도를 한참 벗어나게 된다. 따라서 next 좌표가 삼중체 내에 활성화되어 존재할 경우, 하위 제어기는 기체의 선회 반경 리미트와 현재 대기 속도 단위(Airspeed)를 참조하여 current에 도달하기 수 미터 혹은 수십 미터 전에 미리 비행기 뱅크(Bank) 각도를 틀입시키기 시작한다(Turn-anticipation Roll). 삼중체 구조가 없다면 이러한 비행 궤적의 ‘미래 예지(Foresight)’ 로직은 물리적으로 불가능하다.
1.4 상태 머신 연계와 미션 페일세이프(Failsafe) 시너지
navigator가 하위 제어 모듈에 위임하는 설정점 삼중체 메시지는 상태 머신에 예기치 못한 인터럽트가 발생했을 때도 훌륭한 안전 장치로 역할한다.
예를 들어, Mission 모드가 한참 진행되던 중 지상 관제망에서 “Pause(일시정지)” 지시가 내려올 경우, navigator 인스턴스는 즉각 current 좌표를 기체가 현재 체공 중인 동일한 GPS 좌표점 공간으로 리셋시켜 발행한다(Loiter 전환). 이때 previous나 next는 무효(Invalid) 마스킹 처리되어, 위치 제어기는 즉각적인 전방위 3축 브레이킹(Braking) 운동학을 전개하고, 궤적이 흐트러지는 일 없이 완벽히 락킹(Locking)된 제자리 호버링(Hovering) 모드로 치환된다.
결론적으로, 설정점 삼중체는 **‘궤적의 기하학적 형태’, ‘미래 예지 기반 속도-가속도 매핑’, ‘모드 전환 시의 충격 완화(Smooth Transition)’**라는 세 마리 토끼를 단일 uORB 트랜잭션으로 응집시켜 달성해 내는 PX4 자율 항법의 아키텍처적 걸작이자 정수이다.