28.6.1. 멀티로터(Multicopter, MC): 전방위(Omnidirectional) 궤적 제어 중심의 모드 설계

28.6.1. 멀티로터(Multicopter, MC): 전방위(Omnidirectional) 궤적 제어 중심의 모드 설계

비행 로봇 중 가장 대중적인 형태인 멀티로터(Quadcopter, Hexacopter 등)는 비행기나 헬리콥터와 비교할 때 매우 독특한 물리적 자유도(Degree of Freedom)를 지닌다. 멀티로터는 기수(Nose)의 방향(Yaw)과 이동하는 궤적(Trajectory)의 방향이 일치할 필요가 없으며, 이론적으로 3차원 공간상의 어느 방향으로든 멈추거나 움직일 수 있는 전방위(Omnidirectional) 홀로노믹(Holonomic)에 가까운 특성을 보여준다(엄밀히는 언더액추에이티드 시스템이다).

PX4-Autopilot의 멀티로터 전용 모드 아키텍처는 이러한 물리적 특이성을 십분 활용하여 설계되었다. 본 절에서는 mc_pos_control 모듈을 중심으로 멀티로터형(MC) 기체의 모드가 어떻게 코딩되어 있는지 근본적인 궤적 제어 철학을 파헤쳐본다.


1. 개요: 3D 위치 제어와 ’기수(Yaw)’의 공간적 분리

고정익 비행기는 우측으로 가려면 반드시 기수를 우측으로 돌려야(Yaw/Roll 결합) 하지만, 멀티로터는 기수를 북쪽으로 고정한 채로 동쪽(오른쪽)으로 미끄러지듯 날아갈 수 있다.

이러한 특성 때문에 PX4의 멀티로터 모드 아키텍처는 제어 목표(Setpoint)를 파싱(Parsing)할 때 XY 좌표 제어(어디로 갈 것인가)Yaw 제어(어디를 볼 것인가) 를 수학적으로 완전히 분리(Decoupling)하여 처리한다.

예를 들어, “Mission 모드“로 웨이포인트(Waypoint)를 따라갈 때, 멀티로터 제어기는 다음과 같은 두 개의 개별적인 궤적(Trajectory) 생성기를 독립적으로 가동한다.

  1. Translational Trajectory: 출발지에서 목적지까지 부드럽게 가속도와 속도를 제한하며 이어지는 3D 위치 직선/곡선 궤적
  2. Heading Trajectory: 이동하는 동안 카메라나 센서가 어느 쪽을 주시해야 하는지에 대한 1D(Yaw 축) 회전 궤적

2. 멀티로터 제어 모델의 논리 흐름 (mc_pos_control)

일반적인 자율 비행 모드(Position, Mission, RTL)에서 mc_pos_control 모듈이 작동하는 파이프라인은 다음과 같다.

2.1 궤적 생성기(Trajectory Generator) 파이프라인

조종사가 조종기 스틱을 치거나, 미션 경로가 설정되면, 이것이 목표 좌표(\mathbf{p}_{sp})로 즉시 변형되는 것은 아니다. 갑배하게 0점에서 100m로 목표를 주면 제어기가 무한대의 가속도를 내려고 발악하다 기체가 뒤집히기 때문이다.
PX4는 목표 거점을 향해 저크(Jerk, 가속도의 미분) 가 제한된 부드러운 고스트 궤적(Virtual Target)을 매 틱마다 프론트엔드에서 생성해낸다.

\mathbf{p}_{target}(t), \mathbf{v}_{target}(t), \mathbf{a}_{target}(t) = f_{Slewing}(\mathbf{p}_{sp}, Constraints)

이 과정에서 멀티로터의 물리적 한계치 파라미터(예: MPC_XY_VEL_MAX, MPC_ACC_HOR_MAX, MPC_JERK_MAX) 들이 철저하게 개입하여 기체가 감당할 수 있는 부드러운 전방위 궤적 프로파일을 깎아낸다.

2.2 하위 역학 변환 (Kinematic Conversion)

매 틱(Tick)마다 산출된 부드러운 목표 위치/속도는 앞 장에서 살펴본 P-PID 제어 루프를 통과하여 최종 요구 가속도 벡터(\mathbf{a}_{req}) 로 바뀐다.
멀티로터는 이 수평 가속도를 만들기 위해 중력을 상쇄하는 Hover Thrust(T_z) 벡터를 기울여야(Tilt) 한다. 역학 법칙에 따라 멀티로터의 요구 자세(Attitude Setpoint) 방향은 이 가속도 벡터 공간의 기하학적 매핑만으로 결정될 수 있다.

  • 제어 루프는 기수를 어디로 볼지(Yaw_sp)라는 별도의 상태와, 어디로 기울일지(Tilt)를 합성하여 \rightarrow 최종 Vehicle_Attitude_Setpoint (쿼터니언) 메시지를 조립하여 출력한다.

이러한 직관적인 1:1 역학 매핑은 오직 모든 방향으로 대칭적인 로터(Rotor)를 가진 멀티로터 모형에서만 통용되는, 가장 직관적이고 퓨어(Pure)한 비행 제어 모델에 속한다.


3. Position 모드의 호버링(Hovering) 최적화 : 브레이크(Braking) 모션

멀티로터 조종에서 가장 고난이도의 체감 성능 지표 중 하나가 바로 “전속력으로 날다가 조종기 스틱을 딱 놓았을 때(중립), 기체가 얼마나 깔끔하게 제동에 걸려 그 자리에 멈추는가(Braking & Hold)“이다.

PX4의 멀티로터 Position 모드는 이를 구현하기 위해 정교한 가속도 기반 브레이킹 상태 머신(State Machine) 을 모드 내부에 탑재하고 있다.

  1. Cruising (순항): 스틱 조작 시 부드럽게 한계 속도까지 전방향 이동.
  2. Braking (제동): 스틱이 중앙으로 돌아온 순간(Deadzone), 이전의 이동 관성(속도) 벡터의 정반대 방향으로 MPC_ACC_HOR 수준의 강한 가속도(역추력 틸팅)를 인가하여 기체를 뒤로 확 젖혀 제동력을 발생시킴.
  3. Hold (정지 유지): 속도가 충분히 0에 수렴하면(Tolerance 이내), 남은 미세 오차를 지우기 위해 브레이킹 로직에서 Hold 위치 셋포인트 고정 모드로 천이하여 그 자리에 콱 박히듯(Lock) 위치 오차를 0으로 유지함.

이 정지 제어는 오직 공중에 가만히 머물 수 있는 액추에이션 특성(Multirotor Dynamics)을 띄고 있는 기체에서만 의미가 있으며, 이것이 멀티로터 전용 모드 아키텍처의 꽃이라 불린다.


4. ArduCopter와의 모드 컨트롤 차이 (Loiter)

  • PX4 (단일 mc_pos_control 기반 분기): Position 모드는 물론이거니와, Mission, RTL, Offboard 등 기체가 공간을 이동하는 모든 논리적 모드가 결국 mc_pos_control 이라는 하나의 동일한 PID 파이프라인 클래스를 태우도록 깔때기 형태로 설계되어 있다.
  • ArduPilot (별도 모드 클래스화): 조종기 스틱에 반응하는 GPS 제동 모드를 Loiter(모드 번호 5), 반자동 위치 제어를 PosHold(모드 번호 16), 순수 자동 경로 추종을 Auto(모드 번호 3) 등으로 분리하여 각각의 C++ Mode 하위 클래스가 자신들만의 궤적(Target) 가공 로직 모디파이어(Modifier)를 무겁게 얹고 있는 객체 지향 상속 구조에 좀 더 가깝다.

두 시스템 모두 내부적으로는 L1 계열과 PID 제어를 쓰지만, PX4의 멀티로터 스택이 수학적 본질(Velocity Vector Mapping)을 중심으로 코드를 더 간결하게 하나로 뭉쳐놓은 형태(Unified Pipeline)를 띤다.