# PX4 'OFFBOARD" 와 Ardupilot 'GUIDED' 모드 차이

{% embed url="<https://www.youtube.com/watch?v=BXQGb-istqE>" %}

### ✈️ 1. 공통점 요약

<table><thead><tr><th width="171">항목</th><th>설명</th></tr></thead><tbody><tr><td>목적</td><td>외부에서 실시간으로 위치/속도/자세/명령을 줘서 드론을 제어</td></tr><tr><td>인터페이스</td><td>MAVLink로 GCS 또는 Companion Computer와 통신</td></tr><tr><td>활용</td><td>VIO, SLAM, AI 경로 계획, 비주얼 서보잉 등</td></tr></tbody></table>

***

### ⚙️ PX4 - **Offboard Mode**

#### 특징

* **\*\*“외부에서 제어 루프 전체를 맡는다”\*\***&#xB294; 철학
* Companion PC에서 **모든 제어 명령(위치, 속도, 가속도 등)을 직접 주기적으로 송신**
* **20Hz 이상 주기적으로 명령을 보내야 함** (타이밍 엄격)
* 명령이 중단되면 **failsafe (hover → RTL 등)** 발동

#### 주요 포인트

<table><thead><tr><th width="165">항목</th><th>설명</th></tr></thead><tbody><tr><td>요구사항</td><td>매 50ms 이내로 <code>SET_POSITION_TARGET_LOCAL_NED</code> 등을 지속 송신</td></tr><tr><td>제어 단위</td><td>위치 / 속도 / 가속도 / 자세(quaternion)까지 직접 제어 가능</td></tr><tr><td>권한</td><td><strong>자세한 제어 가능하나 책임도 큼</strong> (Failsafe 설정 중요)</td></tr><tr><td>안전장치</td><td>명령 끊기면 자동 failsafe (hover, land, RTL 등) 작동</td></tr></tbody></table>

***

### ⚙️ ArduPilot - **Guided Mode**

#### 특징

* **명령 기반 방식**: "이 위치로 가라", "이 속도로 움직여라" 같은 단일 명령 송신
* Companion PC나 GCS는 **명령만 주고 제어 루프는 FCU 내부에서 처리**
* 명령이 멈춰도 FCU가 마지막 명령을 계속 유지 → **유지성이 강함**

#### 주요 포인트

<table><thead><tr><th width="115">항목</th><th>설명</th></tr></thead><tbody><tr><td>요구사항</td><td><code>GUIDED</code> 모드 진입 후, <code>SET_POSITION_TARGET_GLOBAL_INT</code>, <code>NAV_COMMAND</code>, <code>DO_*</code> 등을 송신</td></tr><tr><td>제어 단위</td><td>고수준: Waypoint, ROI, Takeoff, Land, Velocity 등</td></tr><tr><td>권한</td><td>PX4보다 <strong>더 추상화된 제어</strong> (제어는 FCU가 수행)</td></tr><tr><td>안전장치</td><td>명령 중단 시 → FCU가 마지막 상태를 계속 유지 (failsafe 반응은 별도 설정)</td></tr></tbody></table>

***

### 🎯 비유로 이해하기

<table><thead><tr><th width="199">비유</th><th>설명</th></tr></thead><tbody><tr><td>PX4 Offboard</td><td><strong>드론을 RC처럼 직접 실시간 조종</strong> (타이밍과 정확도 책임은 외부가 짐)</td></tr><tr><td>ArduPilot Guided</td><td><strong>드론에게 “어디로 가라”고 명령만 주고 나머지는 드론이 알아서 처리</strong></td></tr></tbody></table>

***

### ✅ 선택 기준

<table><thead><tr><th width="453">상황</th><th>추천 모드</th></tr></thead><tbody><tr><td>AI 비전 기반 자세 제어, VIO 기반 SLAM 등 <strong>고주파수 제어 필요</strong></td><td>PX4 Offboard</td></tr><tr><td>Mission-like 사용, 명령 중심 제어, <strong>고수준 제어가 중심</strong></td><td>ArduPilot Guided</td></tr><tr><td>실시간 안전성(failsafe) 엄격히 요구</td><td>PX4 Offboard (엄격한 설계 요구)</td></tr><tr><td>유연하고 편하게 명령만 주고 싶은 경우</td><td>ArduPilot Guided</td></tr></tbody></table>

***

### ✍️ 요약 비교표

| 항목    | PX4 Offboard       | ArduPilot Guided     |
| ----- | ------------------ | -------------------- |
| 명령 방식 | 지속적 실시간 명령 스트림     | 고수준 단발성 명령           |
| 제어 주체 | Companion Computer | FCU (비행 컨트롤러)        |
| 제어 범위 | 위치, 속도, 자세, 가속도 등  | 위치, 속도, Mission 명령 등 |
| 안전성   | 명령 중단 시 failsafe   | 명령 중단 시 유지됨          |
| 복잡성   | 더 복잡하고 유연함         | 더 단순하고 추상화됨          |

***

필요하시면 PX4와 ArduPilot에서 실제 Offboard/Guided 명령을 보내는 Python 예제도 제공해 드릴 수 있습니다.\
또는 VIO 기반 자율비행을 어떤 모드에서 구현하는 게 적절한지도 함께 정리해드릴 수 있어요.

### Ardupilot은 offboard 같은 제어 방식으로 프로그래밍은 할수 없나?

> **ArduPilot은 PX4의 Offboard 모드와 같은 방식으로 “완전한 실시간 외부 제어”는 기본적으로 지원하지 않지만,**\
> **일정 수준까지는 "유사한 방식"으로 제어 가능**하며, 특정 확장을 통해 Offboard에 가까운 기능도 구현할 수 있습니다.

***

### ✅ 기본 철학 차이

| 항목       | PX4 Offboard              | ArduPilot Guided         |
| -------- | ------------------------- | ------------------------ |
| 제어 루프 위치 | **외부 Companion Computer** | **내부 Flight Controller** |
| 목표       | 빠르고 정밀한 외부 제어             | 고수준 명령 기반 자율비행           |

***

### 1. **ArduPilot에서 Offboard 유사 제어 가능성**

#### ✅ 가능:

* **GUIDED 모드 + `SET_POSITION_TARGET_*` 메시지**를 반복적으로 전송하면, → 실시간 속도/위치 제어가 가능합니다.
* 특히 \*\*velocity control (`SET_POSITION_TARGET_LOCAL_NED`의 `vx, vy, vz`)\*\*를 반복 송신하면 → **유사한 Offboard 비행 구현 가능**

```python
# pymavlink 예시: ArduPilot에서 반복적인 속도 제어
master.mav.set_position_target_local_ned_send(
    time_boot_ms,
    target_system,
    target_component,
    mavutil.mavlink.MAV_FRAME_LOCAL_NED,
    type_mask,  # 예: 위치 무시하고 속도만 사용
    x, y, z,
    vx, vy, vz,  # ← 속도 제어
    0, 0, 0,  # 가속도
    0, 0
)
```

* 단, **반복 주기 제한은 없음** → PX4처럼 20Hz 강제는 아님
* 명령이 끊겨도 드론은 마지막 속도를 유지함 → 이것도 장점

***

### 2. **제한점**

| 항목                           | 설명                               |
| ---------------------------- | -------------------------------- |
| ❌ FCU에서 failsafe가 즉각 작동하지 않음 | 마지막 명령 유지되기 때문에 안전성 보완 필요        |
| ❌ 자세(quaternion) 제어 불가능      | yaw는 가능하지만 roll/pitch 직접 제어는 어려움 |
| ❌ 가속도 제어 불가                  | PX4처럼 a\_x, a\_y, a\_z 직접 제어 불가능 |
| ❌ 실시간 폐루프 제어 어려움             | 모터 제어 수준까지의 접근은 제한적              |

***

### 3. **그럼 완전 Offboard처럼 하려면?**

#### ✅ 가능한 시나리오:

1. **ArduPilot + GUIDED + 지속적 SET\_POSITION\_TARGET\_LOCAL\_NED**
   * 유사 Offboard 방식 가능
2. **ArduPilot + Lua Script + MAVLink 연결**
   * FCU 내부에서 외부 명령을 처리하도록 Lua 스크립트 작성
   * Companion PC는 단순 명령만 전달, 내부에서 실시간 루프 처리 가능
3. **ArduPilot의 DroneKit (Python SDK)**
   * 고수준 명령 제어 (`vehicle.velocity = ...`) 가능하지만, 실시간성은 낮음
4. **Custom Firmware 또는 PR 변경**
   * ArduPilot 소스코드 수정으로 Offboard-style API 삽입도 가능

***

### ✍️ 정리 요약

<table><thead><tr><th width="223">항목</th><th>설명</th></tr></thead><tbody><tr><td>완전한 Offboard 모드</td><td>ArduPilot에는 없음</td></tr><tr><td>대안</td><td><code>GUIDED</code> 모드 + 반복적 <code>SET_POSITION_TARGET_*</code></td></tr><tr><td>실시간 루프</td><td>가능하지만 PX4보다 제어 주기 제한 없음</td></tr><tr><td>고급 제어</td><td>자세/가속도 제어는 PX4가 더 유리</td></tr><tr><td>현실적 해결책</td><td>Lua 스크립트 활용 또는 MAVProxy 모듈 개발</td></tr></tbody></table>

***

### 🔧 결론

<table><thead><tr><th width="277">목적</th><th>추천</th></tr></thead><tbody><tr><td>완전한 고정밀 자세/속도 제어</td><td>PX4 Offboard</td></tr><tr><td>미션 + 일부 실시간 경로 제어</td><td>ArduPilot GUIDED + 반복 명령</td></tr><tr><td>고급 자율비행 로직 내장</td><td>ArduPilot + Lua 스크립트</td></tr><tr><td>SLAM 기반 자율주행</td><td>PX4 + VIO + Offboard or ArduPilot + 외부 노드 설계</td></tr></tbody></table>
