28.6.1.2. 요(Yaw) 축의 독립적 궤적(Heading Setpoint) 생성과 회전익 고유의 브레이킹(Braking) 모션 제어

28.6.1.2. 요(Yaw) 축의 독립적 궤적(Heading Setpoint) 생성과 회전익 고유의 브레이킹(Braking) 모션 제어

드론(멀티로터) 비행을 예술의 경지로 끌어올리는 가장 큰 수학적 무기는 바로 ‘요(Yaw, Heading)’ 축의 완벽한 해방이다. 멀티로터는 전진하는 방향과 카메라가 바라보는 방향을 일치시킬 물리적 의무가 없다. PX4-Autopilot은 이 점에 착안하여, 기체의 이동을 지시하는 수평/수직 제어기와는 완전히 별개로, 기수의 방향만을 단독 운영하는 요 궤적 제어기(Yaw Trajectory Controller) 알고리즘을 독립적으로 설계해 두었다.

또한 멀티로터만이 가지는 물리적 특권 중 하나인, ‘이동 관성을 죽이기 위한 급격한 피치/롤 틸팅(Tilting)’ 즉 브레이킹(Braking) 모션이 제어 수준에서 어떻게 역학적으로 구현되고 있는지 본 절에서 상세히 해부한다.


1. Yaw (Heading) 축의 완전한 논리적 분리 (Heading Setpoint)

PX4의 다단 PID 제어 루틴을 거슬러 올라가면 FlightTaskPositionControl 파이프라인 안에서 요(Yaw) 축은 매우 특권적인 대우를 받는다. XY축(수평)과 Z축(수직) 제어기가 추력 벡터(Thrust Vector, 즉 기체의 기울기 각도)를 산출해 내는 산고를 겪는 동안, 요 제어는 단지 “어디를 바라볼 것인가“에 대한 1차원적인 실수 스칼라(Scalar) 값만을 지속적으로 업데이트한다.

1.1 Heading 모드 분기 (Yaw Control Modes)

PX4의 자율 비행(Auto) 모드 내비게이션 로직은 임무(Mission) 수행 중 요(Yaw)를 제어하기 위해 크게 네 가지 방식(Yaw Mode)을 지원한다.

  1. Toward Waypoint (진행 방향 정렬): 기수가 이동하는 목표 웨이포인트를 바라봄. (기본 고정익과 가장 유사한 방식)
  2. Toward Home (홈 방향 유지): RTL(복귀) 모드나 특정 촬영 미션에서, 기체는 어디로 이동하든 항상 이륙 지점(Home)을 주시함.
  3. Hold (헤딩 고정): 조종사가 마지막으로 놔둔 요(Yaw) 각도를 이동 내내 무조건 유지. 스틱으로 수평 이동만 제어할 때 영화 같은 측면 트래킹 샷(Tracking Shot)을 연출할 수 있음.
  4. ROI (Region of Interest) 또는 ROI Tracking: 미리 지정된 3D 좌표 공간 상의 특정 객체(POI)를 카메라(기수)가 지속적으로 바라보도록, 이동하는 내내 실시간으로 역삼각함수(Atan2)를 풀어 요 각도(yaw_sp)를 연속적으로 도출함.

이러한 헤딩 셋포인트(yaw_sp)는 수평 위치 제어기가 만들어낸 롤(Roll) / 피치(Pitch) 기울기 값과 맨 마지막 단계에서 병합(Merge) 되어 완전한 4원수(Quaternion) 자세 셋포인트(vehicle_attitude_setpoint.msg)로 탄생한다.


2. 브레이킹 (Braking) 모션 제어: 회전익의 고유한 예술

멀티로터가 공중에 “멈추는” 행위는 자동차가 브레이크 패드를 밟는 것과 근본적으로 다르다. 공중엔 마찰력이 없으므로, 관성을 가진 드론이 정지하기 위해서는 자신이 날아가던 방향의 정반대 방향으로 기체를 확 뒤집어(역추력 틸팅) 저항 가속도 벡터를 인가해야만 한다.

PX4의 FlightTaskManualPosition (수동 위치 제어 모드) 내부 알고리즘은 이 브레이킹 상태 머신(State Machine)을 다음과 같이 처리한다.

2.1 상태 전이 (Cruising \rightarrow Braking)

조종사가 전진 스틱(Pitch Forward)을 밀다가 중앙 선(Deadzone)으로 딱 놓는 순간, 코드는 Cruising 상태에서 Braking 상태로 진입한다.
이때 단순히 목표 속도(velocity_setpoint)를 0으로 만들면 기체가 관성에 의해 주르륵 밀려나므로, PX4는 물리적으로 인가 가능한 최대 역가속도 파라미터(MPC_ACC_HOR_MAX 등) 를 사용하여 현재 속도를 죽여나가는 “가속도 제동 궤적(Acceleration Braking Trajectory)” 곡선을 퍼블리싱(Publishing)한다.

결과적으로 기체는 흡사 자동차가 급제동할 때 앞창이 들썩이듯, 가던 방향의 등 뒤로 확 눕는 역동적인 피치업(Pitch Up) 모션을 취하며 브레이크 엔진을 건다.

2.2 제동 중 요(Yaw) 락다운 (Yaw Lockdown) 불문율

기동 중 브레이킹에 돌입할 때 가장 주의해야 할 역학적 문제는 기수(Yaw)의 혼선이다. 기체가 맹렬히 뒤로 눕고 있는 와중에, 요(Yaw) 각도마저 돌아버리면 기체가 회전하면서 추력의 분산 방위각이 뒤틀려 제동 거리가 폭발적으로 늘어나거나 기체가 통제 불능 추락 상태로 빠질 위험이 있다.

때문에 브레이킹 페이즈(Braking Phase) 코드가 실행되는 동안은, “Yaw 궤적 제어 루프를 완전히 동결(Freeze)” 시킨다.
즉 조종사가 브레이크 상황에서 아무리 요 스틱(Rudder)을 치더라도, 내부 논리망은 이 스틱 입력을 완전히 무시하거나 매우 강하게 스무딩 처리(가중치 저하)하여, 기체가 브레이킹 모션 역학(역추력 틸팅)에만 100% 에너지를 집중하도록 통제(Lockdown)한다. 속도가 완전히 0으로 수렴한(Hover) 후에야 다시 기수를 돌릴 권한이 부여된다.


3. ArduCopter의 브레이킹 매커니즘 비교

이러한 제동(Braking)과 요(Yaw) 제어의 분리는 ArduCopter와 유사하지만, 구현 철학에서 약간의 차이가 존재한다.

  • ArduCopter (Loiter / Brake Mode): 애초에 조종간을 놨을 때 제동을 거는 관성을 Loiter 모드 내부의 파라미터(LOIT_BRK_ACCEL, LOIT_BRK_JERK)로 매우 직관적으로 빼놓았다. 또한 아예 모터 출력을 죽이고 역저항을 거는 비상용 “Brake Mode” (독립된 플라이트 모드)를 단축키처럼 별도 배정하여 조종사의 패닉 버튼(Panic Button)으로 지원하는 특징이 있다.
  • PX4-Autopilot: 별도의 “Brake Mode“라는 명칭 대신, 수동 제어 모드(Position Mode 등)의 C++ 알고리즘 체인 맨 마지막 프론트 단에 VelocitySmoothing 클래스와 저크 궤적(Jerky Trajectory) 제한 로직이 깔려 있다. 스틱이 0이 되는 순간 이 스무딩 라이브러리가 자동으로 ’저크 제한 제동 곡선’을 출력값으로 계산해내어 물 흐르는 듯한 감속 모션을 모드 내부 상태 기계(State Machine)에 부드럽게 통합시켰다.