# OFFBOARD 모드 이해하기

OFFBOARD 모드에서 드론은 컴패니언 컴퓨터와 같이 비행 스택(FC) 외부에 있는 소스에서 제공하는 위치, 속도, 가속도, 자세, 자세 속도 또는 추력/토크 설정점(Setpoint)을 따릅니다. 설정점은 MAVLink(또는 MAVSDK 와 같은 MAVLink API)를 사용하여 제공될 수 있습니다. (또는 ROS 2를 사용합니다.)

PX4에서는 외부 컨트롤러가 지원되는 MAVLink setpoint 메시지 또는 ROS 2 [OffboardControlMode ](https://docs.px4.io/main/en/msg_docs/OffboardControlMode.html)메시지를 스트리밍하여 연속 2Hz "Heart-beat" 신호를 제공해야 합니다. PX4는 1초 이상 신호를 수신한 후에만 오프보드 제어를 활성화하고 신호가 중지되면 제어권을 다시 얻습니다.

#### 메모

* 이 모드에는 위치 또는 자세 정보가 필요합니다(예: GPS, Optical-Flow, VIO, Mocap 센서로  부터).
* 모드 변경을 제외하고는 RC 제어가 비활성화됩니다( COM\_RC\_IN\_MODE 매개변수를 4 스틱 입력 비활성화로 설정하면 수동 컨트롤러 없이도 비행할 수 있습니다).
* 차량은 오프보드 모드로 무장하거나 비행 시 오프보드 모드로 전환하기 전에 이미 MAVLink 설정점(Setpoint) 메시지 또는 ROS 2 OffboardControlMode 메시지 스트림을 수신하고 있어야 합니다 .
* `OffboardControlMode`MAVLink 메시지가 2Hz보다 큰 속도로 수신되지 않으면 차량은 오프보드 모드를 종료합니다 .
* MAVLink가 허용하는 모든 좌표 프레임과 필드 값이 모든 설정점 메시지와 차량에 지원되는 것은 아닙니다. 지원되는 값만 사용되도록 아래 섹션을 주의 깊게 읽어보세요.

## 전제 사항 <a href="#description" id="description"></a>

OFFBOARD 모드는 위치, 속도, 가속도, 자세, 자세 속도 또는 추력/토크 설정점을 설정하여 차량 이동 및 자세를 제어하는 ​​데 사용됩니다.

PX4는 외부 컨트롤러가 정상이라는 증거로 MAVLink 설정점 메시지 스트림 또는 2Hz의 ROS 2 OffboardControlMode 메시지를 수신해야 합니다. PX4가 오프보드 모드로 활성화되거나 비행 시 오프보드 모드로 전환되기 전에 스트림이 최소 1초 동안 전송되어야 합니다. 외부 제어 중에 속도가 2Hz 아래로 떨어지면 PX4는 시간 초과( [COM\_OF\_LOSS\_T](https://docs.px4.io/main/en/flight_modes/offboard.html#COM_OF_LOSS_T) ) 후 오프보드 모드에서 전환하고 착륙을 시도하거나 다른 안전 조치를 수행합니다. 동작은 RC 제어 가능 여부에 따라 달라지며 [COM\_OBL\_RC\_ACT](https://docs.px4.io/main/en/flight_modes/offboard.html#COM_OBL_RC_ACT) 매개변수에 정의됩니다.

MAVLink를 사용할 때 설정점 메시지는 외부 소스가 "활성"임을 나타내는 신호와 설정점 값 자체를 모두 전달합니다. 이 경우 위치를 유지하려면 차량이 현재 위치에 대한 Setpoint 스트림을 수신해야 합니다.

ROS 2를 사용할 때 외부 소스가 살아 있다는 증거는 OffboardControlMode 메시지 스트림을 통해 제공되는 반면, 실제 설정점은 [TrajectorySetpoint](https://docs.px4.io/main/en/msg_docs/TrajectorySetpoint.html) 와 같은 설정점 uORB 항목 중 하나에 게시하여 제공됩니다. 이 경우 위치를 유지하려면 차량이 `OffboardControlMode`스트림을 수신해야 합니다.

오프보드 모드는 매우 제한된 MAVLink 명령 및 메시지 세트만 지원합니다. 이륙, 착륙, RTL 같은 작업은 적절한 모드를 사용하여 가장 잘 처리될 수 있습니다. 업로드, 다운로드 미션과 같은 작업은 모든 모드에서 수행할 수 있습니다.

## MAVLink 메시지 <a href="#mavlink-messages" id="mavlink-messages"></a>

다음 MAVLink 메시지와 특정 필드 및 필드 값은 지정된 프레임에 허용됩니다.

### Copter/VTOL <a href="#copter-vtol" id="copter-vtol"></a>

* [SET\_POSITION\_TARGET\_LOCAL\_NED](https://mavlink.io/en/messages/common.html#SET_POSITION_TARGET_LOCAL_NED)
  * 다음 입력 조합이 지원됩니다.
    * 위치 지정치( `x`, `y`, `z`에만 해당 )
    * 속도 설정값( `vx`, `vy`, `vz`에만 해당 )
    * 가속도 설정값( `afx`, `afy`, `afz`에만 해당 )
    * 위치 설정점 **및** 속도 설정점(속도 설정점은 피드포워드로 사용되며 위치 컨트롤러의 출력에 추가되고 결과는 속도 컨트롤러의 입력으로 사용됩니다.)
    * 위치 지령치 **및** 속도 지령치 **및** 가속도(속도 및 가속도 지령치는 피드포워드로 사용됩니다. 속도 지령치는 위치 제어기의 출력에 추가되고 결과는 속도 제어기에 대한 입력으로 사용됩니다. 가속도 지령치는 피드포워드에 추가됩니다. 속도 컨트롤러의 출력과 추력 벡터를 계산하는 데 사용되는 결과).
  * PX4는 다음 `coordinate_frame`값만 지원합니다: [MAV\_FRAME\_LOCAL\_NED ](https://mavlink.io/en/messages/common.html#MAV_FRAME_LOCAL_NED)및 [MAV\_FRAME\_BODY\_NED](https://mavlink.io/en/messages/common.html#MAV_FRAME_BODY_NED)
* [SET\_POSITION\_TARGET\_GLOBAL\_INT](https://mavlink.io/en/messages/common.html#SET_POSITION_TARGET_GLOBAL_INT)
  * 다음 입력 조합이 지원됩니다.
    * 위치 지령치( `lat_int`, `lon_int`, `alt`에만 해당 )
    * 속도 설정값( `vx`, `vy`, `vz`에만 해당 )
    * *추력* 설정값( `afx`, `afy`, `afz`에만 해당 )

      **메모**

      가속도 설정점 값은 정규화된 추력 설정점을 생성하기 위해 매핑됩니다(즉, 가속도 설정점은 "적절하게" 지원되지 않습니다).
    * 위치 설정점 및 속도 설정점(속도 설정점은 피드포워드로 사용되며 위치 컨트롤러의 출력에 추가되고 결과는 속도 컨트롤러의 입력으로 사용됩니다.)
  * PX4는 다음 `coordinate_frame`값만 지원합니다: [MAV\_FRAME\_GLOBAL ](https://mavlink.io/en/messages/common.html#MAV_FRAME_GLOBAL)
* [SET\_ATTITUDE\_TARGET](https://mavlink.io/en/messages/common.html#SET_ATTITUDE_TARGET)
  * 다음 입력 조합이 지원됩니다.
    * `SET_ATTITUDE_TARGET.q`추력 설정값( )을 사용한 자세/방향( `SET_ATTITUDE_TARGET.thrust`).
    * 추력 설정값(SET\_ATTITUDE\_TARGET.thrust)을 사용한 Body\_Rate( `SET_ATTITUDE_TARGET` `.body_roll_rate` ,`.body_pitch_rate`, `.body_yaw_rate` )입니다&#x20;

## OFFBOARD 관련 PX4 파라메터 <a href="#offboard-parameters" id="offboard-parameters"></a>

오프보드 모드는 다음 파라메터의 영향을 받습니다.

<table data-header-hidden><thead><tr><th width="224"></th><th></th></tr></thead><tbody><tr><td>파라메터</td><td>설명</td></tr><tr><td><a href="https://docs.px4.io/main/en/advanced_config/parameter_reference.html#COM_OF_LOSS_T">COM_OF_LOSS_T</a></td><td>오프보드 연결이 끊어졌을 때 오프보드 손실 안전 장치를 트리거하기 전에 기다리는 시간 초과(초)( <code>COM_OBL_RC_ACT</code>)</td></tr><tr><td><a href="https://docs.px4.io/main/en/advanced_config/parameter_reference.html#COM_OBL_RC_ACT">COM_OBL_RC_ACT</a></td><td>오프보드 제어가 상실된 경우 전환할 비행 모드(값: - <code>0</code>: <em>위치</em> , <code>1</code>: <em>고도</em> , <code>2</code>: <em>수동</em> , <code>3</code>: *복귀, <code>4</code>: *Land*).</td></tr><tr><td><a href="https://docs.px4.io/main/en/advanced_config/parameter_reference.html#COM_RC_OVERRIDE">COM_RC_OVERRIDE</a></td><td>멀티콥터(또는 MC 모드의 VTOL)에서 스틱을 움직이면 모드가 <a href="https://docs.px4.io/main/en/flight_modes_mc/position.html">위치 모드</a> 로 변경되는지 여부를 제어합니다 . 기본적으로 오프보드 모드에서는 활성화되어 있지 않습니다.</td></tr><tr><td><a href="https://docs.px4.io/main/en/advanced_config/parameter_reference.html#COM_RC_STICK_OV">COM_RC_STICK_OV</a></td><td><a href="https://docs.px4.io/main/en/flight_modes_mc/position.html">위치 모드</a> 로 전환되는 스틱 이동량입니다 ( <a href="https://docs.px4.io/main/en/flight_modes/offboard.html#COM_RC_OVERRIDE">COM_RC_OVERRIDE가</a> 활성화된 경우).</td></tr><tr><td><a href="https://docs.px4.io/main/en/advanced_config/parameter_reference.html#COM_RCL_EXCEPT">COM_RCL_EXCEPT</a></td><td>RC 손실이 무시되고 비상 안전 조치가 트리거되지 않는 모드를 지정합니다. <code>2</code>오프보드 모드에서 RC 손실을 무시하도록 비트를 설정합니다 .</td></tr></tbody></table>
