30.4. `Loiter` (Hold) 모드: 제동 운동학 및 위치 유지 알고리즘 (`loiter.cpp`)

30.4. Loiter (Hold) 모드: 제동 운동학 및 위치 유지 알고리즘 (loiter.cpp)

PX4-Autopilot에서 Loiter 모드(기체 종류나 GCS에 따라 Hold 모드로도 불린다)는 비행 중인 기체가 현재의 3차원 공간 좌표(고도 포함)를 유지하며 정지하는 자동 비행 모드이다. 조종자가 조종 스틱을 중앙에 놓거나 지상 관제 시스템(GCS)에서 정지(Pause) 명령을 내렸을 때 주로 활성화된다. 본 장에서는 loiter.cpp 소스 코드를 중심으로 기체가 동적인 이동 상태에서 정적 유지 상태로 전환될 때 적용되는 제동 운동학(Braking Kinematics)과 위치 유지 제어기(Position Controller)의 작동 원리를 심층 분석한다.

1. PX4와 Ardupilot의 Loiter 제어 철학 비교

PX4-Autopilot과 Ardupilot 모두 위치 유지를 지원하지만, 기본 아키텍처와 제어 철학에서 차이를 보인다.

  • 제동 프로파일 차이: PX4는 승차감과 관성(Inertia) 관리를 최우선으로 고려한다. 따라서 FlightTask 구조 내에서 저크(Jerk, 가속도의 시간에 따른 변화율) 한계치를 두어 부드럽게 감속하는 S-곡선(S-Curve) 속도 프로파일을 생성한다. 반면, Ardupilot의 AC_Loiter 제어기는 조종사의 스틱 입력에 더 빠르고 직관적인 브레이킹 반응을 제공하는 데 중점을 두는 경향이 있어 설정에 따라 상대적으로 이산적인 제동 특성을 보일 수 있다.
  • 아키텍처 구조: PX4는 상태 머신(State Machine) 구조를 철저히 분리하여, Loiter 모드가 navigator 모듈 내에서 비행 임무(Mission Block)의 한 상태로서 추상화된다. 이는 하위의 위치 제어기(position_controller)와 명확하게 분리되어 소프트웨어 모듈성을 강화한다.

2. loiter.cpp 소스 코드 구조 및 생명주기

src/modules/navigator/loiter.cppNavigatorMode 추상 클래스를 상속받아, 기체가 특정 위치에 고정되도록 상위 수준의 제어 명령을 하달하는 클래스이다.

2.1 주요 생명주기 메서드(Lifecycle Method)

  • on_activation(): 모드가 활성화되는 시점에 최초 1회 호출된다. 기체의 현재 속도와 가속도를 기반으로 운동학적으로 안전하게 멈출 수 있는 가상의 정지 지점(Braking Point)을 계산하거나, 현재 위치를 목표 좌표(Position Setpoint)로 초기화한다.
  • on_active(): 메인 루프에서 주기적으로(예: 50Hz) 호출된다. EKF2(Extended Kalman Filter 2)로부터 vehicle_local_position uORB 토픽을 지속 구독(Subscribe)하여 현재 위치와 목표 위치 간의 거리를 모니터링한다. 정지 위치에 도달할 경우, 외부 교란(바람 등)에 저항하기 위해 목표 좌표가 담긴 position_setpoint_triplet_s 메시지를 하위 제어기에 지속해서 퍼블리싱(Publishing)한다.
  • on_inactivation(): RTL이나 Mission과 같이 다른 시스템 모드로 전환될 때, 내부 타이머 및 관련 리소스를 초기화하고 제어권을 반환한다.

3. 제동 운동학(Braking Kinematics) 및 궤적 생성 알고리즘

기체가 고속으로 이동 중일 때 즉각적으로 현재 위치에 정지하도록 명령하면 큰 오버슈트(Overshoot)와 역학적인 자세 불안정을 초래하게 된다. 따라서 PX4는 현재의 선운동량(Linear Momentum)을 계산에 포함하여 예측 제동을 수행한다.

3.1 제동 거리 예측 모델

초기 속도(v_0)로 수평 비행 중인 멀티로터가 목표 정지점에 도달하기 위한 필요 거리(d)는 기체의 최대 수평 가속도 파라미터(MPC_ACC_HOR_MAX)에 의해 제한받는다. 제동 가속도(a_{max})를 고려한 기본 물리 근사 모델은 다음과 같다.

d \ge \frac{\vert v_0 \vert^2}{2 \cdot a_{max}}

이 거리 모델에 따라 위치 제어기 내부의 궤적 생성기(Trajectory Generator, 주로 FlightTaskAutoMapper)는 속도를 점진적으로 감속시키기 위해 다항식 기반의 S-Curve를 생성한다. 이를 통해 저크 임계값을 넘지 않는 매끄러운 제동 궤적 설정점(Setpoint)이 산출된다.

graph TD
    A[조종기 조작 스틱 중앙 복귀] --> B{Loiter 진입 플래그 활성화}
    B --> C[현재 속도 및 관성 벡터 수집]
    C --> D[최대 제동 가속도 MPC_ACC_HOR 적용]
    D --> E[저크 한계치 MPC_JERK_AUTO를 반영한 S-Curve 산출]
    E --> F[목표 정지 궤적 Setpoint 갱신 및 지속 퍼블리싱]
    F --> G[Position Controller 피드백 루프 진입]

4. 위치 유지(Position Hold) 제어 및 센서 융합

제동 구간을 마치고 기체의 위치를 기준점에 안정적으로 고정시키는 역할은 위치 및 자세의 다단 PID 피드백 제어 루프와 EKF2 센서 융합기에 의존한다.

  • 외부 외란 방어 (Anti-Disturbance): 위치 제어기는 설정점 오차에 비례하는 속도 명령을 생성하고, 속도 제어기는 이를 기반으로 가속도 추력 및 목표 자세를 산출한다. 측풍이 불어 기체가 밀릴 경우, 적분기(Integrator) 트림이 오차를 서서히 누적하여 바람을 이기는 역방향 기울임(Pitch/Roll) 힘을 발생시킨다. 이때 과도한 적분기 포화를 억제하기 위한 안티 와인드업(Anti-Windup) 로직이 필수적으로 작동한다.
  • 센서 융합 연동성: GPS/GNSS 좌표와 기압계(Barometer), IMU(관성 측정 장치) 데이터를 EKF2가 융합하여 3차원 로컬 좌표계 데이터를 생성한다. VIO(Visual Inertial Odometry)나 옵티컬 플로우(Optical Flow) 카메라가 연동될 경우, GPS 음영 지역(Denied Environment)에서도 센서 드리프트(Sensor Drift)를 억제하여 정밀한 위치 고정이 가능해진다.

5. MAVLink 및 ROS2 환경에서의 Offboard 인터페이스 연동

지상 관제 시스템(QGroundControl 등)과의 관제 인터페이스에서 Loiter 모드는 주로 MAVLink 명령셋인 MAV_CMD_DO_PAUSE_CONTINUE 메시지를 수신했을 때 내부망의 vehicle_command uORB 토픽으로 매핑되어 호출된다.

  • QGroundControl 연동 관제: GCS상에서 사용자 또는 자동화된 비행 전 단계 점검(Pre-flight Check) 시스템, 지오펜스(Geofence) 시스템이 위험 징후를 감지하면 즉시 기체에 대기(Pause) 명령을 전송하여 수동 개입을 할 수 있는 여유를 확보한다.
  • ROS2 및 XRCE-DDS 자율 비행 관제: 최신 자율 무인기 개발에서는 ROS2와 DDS 기반 프로토콜(Micro XRCE-DDS)을 이용하여 미션 컴패니언 컴퓨터(Companion Computer)가 직접 Offboard 모드로 제어한다. 만일 충돌 회피 알고리즘(Obstacle Avoidance) 로봇 비전 노드에서 경로 전방 장애물을 감지한 경우, ROS2 단에서 속도 제어 목표값 지시(Velocity Setpoint)를 0 벡터로 퍼블리싱하거나, 모드 전환을 강제하여 PX4-Autopilot의 내부 상태를 Loiter로 전이시킴으로써 회피 경로가 재설정될 때까지 제자리에서 호버링(Hovering)하며 안전을 보장한다.

6. 핵심 설정 파라미터 (Parameters) 요약

  • MPC_HOLD_DZ: Loiter 모드 전환 후 위치 난조 방지를 위해 수용 가능한 위치 오차 반경 데드존(Deadzone).
  • MPC_ACC_HOR: 일반적인 수평 가속도 및 감속도 최대 한계.
  • MPC_JERK_AUTO: 자동 비행 모드에서 활용되는 최대 저크(가속도의 미분) 제한 파라미터로, 제동의 부드러움을 결정한다.

결론적으로 PX4의 Loiter 모드 알고리즘은 목표점의 위치 좌표를 단순히 현재 좌표로 치환하는 1차원적인 로직을 넘어서, 기체의 동역학적 가속 제한 점퍼(Saturation), 운동 에너지의 안전한 소산(Energy Dissipation), 그리고 외력에 저항하기 위한 적분기 밸런스를 통합 제어하는 핵심적인 자동 제어 기전이다.