396.65 GCS 기반 임무 명령 수신 및 상태 보고
1. 개요
지상 통제 시스템(Ground Control System, GCS)과 로봇 탑재 임무 관리자 간의 명령 수신 및 상태 보고 체계는 원격 관제 임무 운용의 근간을 이루는 핵심 메커니즘이다. GCS에서 발행된 임무 명령이 로봇에 정확하고 신뢰성 있게 전달되고, 로봇의 임무 수행 상태가 GCS로 적시에 보고되는 양방향 정보 교환 구조는 안전하고 효율적인 임무 수행을 위한 필수 요건이다. 본 절에서는 GCS 기반의 명령 수신 프로토콜, 상태 보고 메커니즘, 그리고 이들의 신뢰성 보장 전략을 체계적으로 분석한다.
2. 임무 명령 수신 체계
2.1 명령 메시지의 분류
GCS에서 임무 관리자로 전달되는 명령 메시지는 그 성격과 긴급도에 따라 다음과 같이 분류된다.
| 명령 유형 | 설명 | 우선순위 | 응답 요구 |
|---|---|---|---|
| 임무 업로드(Mission Upload) | 경유점 시퀀스, 행동 파라미터를 포함하는 전체 임무 계획의 전송 | 중간 | 필수 |
| 즉시 명령(Immediate Command) | 즉각적 실행이 요구되는 단일 행동 지시 | 높음 | 필수 |
| 파라미터 변경(Parameter Change) | 실행 중인 임무의 파라미터 동적 수정 | 중간 | 필수 |
| 비상 명령(Emergency Command) | 귀환, 즉시 착륙, 비상 정지 등의 안전 관련 지시 | 최고 | 필수 |
| 조회 요청(Query Request) | 특정 상태 정보나 데이터의 반환 요청 | 낮음 | 필수 |
2.2 명령 수신 파이프라인
임무 관리자의 명령 수신 파이프라인은 다음의 순차적 처리 단계로 구성된다.
단계 1: 메시지 수신 및 역직렬화(Message Reception and Deserialization)
통신 계층으로부터 수신된 원시 바이트 스트림을 프로토콜 사양에 따라 구조화된 메시지 객체로 변환한다. MAVLink 프로토콜의 경우, 시작 바이트(STX = 0xFD) 감지 후 헤더 파싱, 페이로드 추출, CRC 검증의 순서로 진행된다.
\text{Raw Bytes} \xrightarrow{\text{Parse}} \text{Header} + \text{Payload} \xrightarrow{\text{CRC Check}} \text{Valid Message}
단계 2: 메시지 인증 및 무결성 검증(Authentication and Integrity Verification)
수신된 메시지의 발신자 인증과 데이터 무결성을 확인한다. MAVLink v2에서는 SHA-256 기반 메시지 서명(Message Signing)을 통해 이를 수행한다. 서명 검증 과정은 다음과 같다.
\text{Signature}_{\text{expected}} = \text{SHA-256}(\text{Secret Key} \| \text{Header} \| \text{Payload} \| \text{Link ID} \| \text{Timestamp})_{[0:6]}
여기서 \|는 바이트 열의 연결(Concatenation)을 의미하며, 결과의 최초 6바이트를 서명으로 사용한다. 수신된 서명과 기대 서명의 일치 여부로 인증을 판정한다.
단계 3: 명령 유효성 검사(Command Validation)
인증을 통과한 명령에 대해 다음의 유효성 검사를 수행한다.
- 시퀀스 검증: 명령의 시퀀스 번호가 기대 순서에 부합하는지 확인하여, 재생 공격(Replay Attack) 및 중복 수신을 방지한다.
- 권한 검증: 발신 GCS의 시스템 ID와 컴포넌트 ID를 기반으로 해당 명령의 발행 권한을 확인한다.
- 파라미터 범위 검증: 명령에 포함된 수치 파라미터가 허용 범위 내에 있는지 검사한다. 예를 들어, 경유점 좌표의 위도는 [-90°, +90°], 경도는 [-180°, +180°] 범위 이내이어야 한다.
- 상태 호환성 검증: 현재 로봇의 운용 상태에서 해당 명령의 실행이 가능한지 판단한다. 예를 들어, 비행 중이 아닌 상태에서 착륙 명령은 무효하다.
단계 4: 명령 큐잉 및 우선순위 배정(Command Queuing and Prioritization)
유효성 검사를 통과한 명령은 우선순위 큐(Priority Queue)에 삽입된다. 우선순위 배정 함수는 다음과 같이 정의된다.
P(cmd) = w_1 \cdot U(cmd) + w_2 \cdot \frac{1}{T_{\text{elapsed}}(cmd)} + w_3 \cdot S(cmd)
여기서 P(cmd)는 명령의 최종 우선순위, U(cmd)는 명령 유형에 따른 기본 긴급도, T_{\text{elapsed}}(cmd)는 명령 수신 후 경과 시간, S(cmd)는 안전 연관도(Safety Relevance)이며, w_1, w_2, w_3는 각각의 가중치이다.
비상 명령은 상기 우선순위 산출 과정을 우회하여 즉시 처리 경로로 진입한다.
단계 5: 명령 실행 및 확인 응답(Command Execution and Acknowledgement)
우선순위 큐에서 추출된 명령은 임무 관리자의 실행 엔진에 의해 처리되며, 처리 결과에 대한 확인 응답(Acknowledgement)이 GCS로 반환된다.
2.3 명령 확인 응답 프로토콜
MAVLink 프로토콜에서 명령 확인 응답은 COMMAND_ACK 메시지(MSG ID: 77)를 통해 수행된다. 응답에 포함되는 결과 코드는 다음과 같다.
| 결과 코드 | 의미 | 설명 |
|---|---|---|
MAV_RESULT_ACCEPTED (0) | 수락 | 명령이 정상적으로 수락되어 실행이 개시되었다 |
MAV_RESULT_TEMPORARILY_REJECTED (1) | 일시 거부 | 현재 상태에서는 실행 불가하나, 추후 재시도 가능하다 |
MAV_RESULT_DENIED (2) | 영구 거부 | 명령이 영구적으로 거부되었다 |
MAV_RESULT_UNSUPPORTED (3) | 미지원 | 해당 명령이 지원되지 않는다 |
MAV_RESULT_FAILED (4) | 실패 | 명령 실행이 시도되었으나 실패하였다 |
MAV_RESULT_IN_PROGRESS (5) | 진행 중 | 명령이 수락되어 실행 진행 중이다 |
GCS는 명령 전송 후 일정 제한 시간(Timeout) 내에 확인 응답이 수신되지 않을 경우, 재전송을 수행한다. 재전송 전략은 다음의 지수 백오프(Exponential Backoff) 알고리즘을 따른다.
T_{\text{retry}}(k) = T_{\text{base}} \cdot 2^{k-1} + \epsilon
여기서 T_{\text{retry}}(k)는 k번째 재전송까지의 대기 시간, T_{\text{base}}는 기본 대기 시간, \epsilon은 지터(Jitter)로서 동시 재전송 충돌을 회피하기 위한 임의 지연이다. 최대 재전송 횟수 k_{\text{max}}를 초과할 경우, 명령 전달 실패로 판정한다.
3. 임무 업로드 프로토콜
3.1 MAVLink 임무 업로드 시퀀스
MAVLink 기반 임무 업로드는 임무 항목을 개별적으로 요청·전송하는 핸드셰이크(Handshake) 방식을 채택한다. 전체 시퀀스는 다음과 같다.
- GCS → 로봇:
MISSION_COUNT메시지를 전송하여 업로드할 임무 항목의 총 개수 N을 통보한다. - 로봇 → GCS:
MISSION_REQUEST_INT메시지를 전송하여 인덱스 i = 0인 첫 번째 임무 항목을 요청한다. - GCS → 로봇:
MISSION_ITEM_INT메시지로 인덱스 i에 해당하는 임무 항목을 전송한다. - 로봇 → GCS: 다음 인덱스 i + 1에 대한
MISSION_REQUEST_INT메시지를 전송한다. - 단계 3~4를 i = N - 1까지 반복한다.
- 로봇 → GCS: 모든 항목의 수신이 완료되면
MISSION_ACK메시지로 트랜잭션을 종결한다.
이 프로토콜의 시간 복잡도는 O(N)이며, 각 항목에 대해 하나의 요청-응답 왕복(Round-Trip)이 필요하므로 전체 업로드 소요 시간은 다음과 같이 산출된다.
T_{\text{upload}} = N \cdot (T_{\text{RTT}} + T_{\text{process}}) + T_{\text{overhead}}
여기서 T_{\text{RTT}}는 왕복 지연 시간, T_{\text{process}}는 항목당 처리 시간, T_{\text{overhead}}는 초기 핸드셰이크 및 종결 오버헤드이다.
3.2 임무 항목의 데이터 구조
MAVLink MISSION_ITEM_INT 메시지에 포함되는 주요 필드는 다음과 같다.
| 필드 | 자료형 | 설명 |
|---|---|---|
seq | uint16 | 임무 시퀀스 번호 |
frame | uint8 | 좌표 참조 프레임 (예: MAV_FRAME_GLOBAL_RELATIVE_ALT_INT) |
command | uint16 | MAV_CMD 열거형 값 (예: MAV_CMD_NAV_WAYPOINT = 16) |
current | uint8 | 현재 활성 항목 여부 플래그 |
autocontinue | uint8 | 자동 연속 실행 플래그 |
param1~param4 | float | 명령별 파라미터 |
x | int32 | 위도 (× 10⁷) |
y | int32 | 경도 (× 10⁷) |
z | float | 고도 (미터) |
mission_type | uint8 | 임무 유형 (임무, 펜스, 집결지) |
좌표 값은 정수 형식으로 전송되어 부동소수점 정밀도 손실을 방지한다. 예를 들어, 위도 37.5665°N은 375665000으로 인코딩된다.
4. 상태 보고 체계
4.1 상태 보고 메시지의 분류
임무 관리자에서 GCS로 전송되는 상태 보고 메시지는 다음의 범주로 분류된다.
주기적 상태 보고(Periodic Status Report): 고정 주기로 자동 발행되는 상태 정보이다.
| 메시지 유형 | MSG ID | 갱신 주기 | 내용 |
|---|---|---|---|
HEARTBEAT | 0 | 1 Hz | 시스템 유형, 자동조종 유형, 비행 모드, 시스템 상태 |
SYS_STATUS | 1 | 1~4 Hz | 센서 건전성, 배터리 잔량, 통신 오류율 |
GLOBAL_POSITION_INT | 33 | 4~10 Hz | 위치(위도, 경도, 고도), 속도 |
ATTITUDE | 30 | 10~50 Hz | 자세(롤, 피치, 요), 각속도 |
MISSION_CURRENT | 42 | 이벤트 구동 | 현재 활성 임무 항목 인덱스 |
MISSION_ITEM_REACHED | 46 | 이벤트 구동 | 경유점 도달 통지 |
이벤트 구동 상태 보고(Event-Driven Status Report): 특정 이벤트 발생 시에만 전송되는 비동기적 상태 정보이다.
STATUSTEXT(MSG ID: 253): 인간 가독성 텍스트 형태의 상태 메시지로, 심각도 수준(Severity Level)이 포함된다.MISSION_ITEM_REACHED(MSG ID: 46): 특정 경유점에 도달하였음을 통지한다.COMMAND_ACK(MSG ID: 77): 명령 실행 결과를 보고한다.
4.2 텔레메트리 스트림 관리
GCS는 필요한 텔레메트리 스트림의 종류와 갱신율을 REQUEST_DATA_STREAM(MSG ID: 66) 또는 MAVLink v2의 SET_MESSAGE_INTERVAL(MSG ID: 511) 메시지를 통해 구성한다. 이를 통해 통신 대역폭의 효율적 활용이 가능하다.
SET_MESSAGE_INTERVAL 메시지의 핵심 파라미터는 다음과 같다.
message_id: 갱신 주기를 설정할 대상 메시지의 ID이다.interval_us: 메시지 발행 간격을 마이크로초 단위로 지정한다. 값이 0이면 기본 주기를 사용하며, -1이면 해당 메시지의 발행을 중지한다.
4.3 임무 진행 상태 보고 모델
임무 진행 상태는 다음의 다차원 상태 벡터로 모델링된다.
\mathbf{s}_{\text{mission}}(t) = \begin{bmatrix} i_{\text{current}} \\ N_{\text{total}} \\ p_{\text{progress}} \\ \hat{T}_{\text{remaining}} \\ \sigma_{\text{status}} \end{bmatrix}
여기서 i_{\text{current}}는 현재 실행 중인 임무 항목 인덱스, N_{\text{total}}은 전체 임무 항목 수, p_{\text{progress}}는 진행률(0 \leq p \leq 1), \hat{T}_{\text{remaining}}은 예상 잔여 시간, \sigma_{\text{status}}는 현재 임무 상태 코드(실행 중, 일시 정지, 완료, 오류 등)이다.
진행률 p_{\text{progress}}는 다음과 같이 산출된다.
p_{\text{progress}} = \frac{i_{\text{current}} + \delta_{\text{intra}}}{N_{\text{total}}}
여기서 \delta_{\text{intra}} \in [0, 1)는 현재 항목 내부의 세부 진행률로서, 경유점 간 거리 비율 등으로 산정된다.
\delta_{\text{intra}} = 1 - \frac{\|\mathbf{p}_{\text{current}} - \mathbf{p}_{\text{target}}\|}{\|\mathbf{p}_{\text{start}} - \mathbf{p}_{\text{target}}\|}
여기서 \mathbf{p}_{\text{current}}, \mathbf{p}_{\text{target}}, \mathbf{p}_{\text{start}}는 각각 현재 위치, 목표 경유점, 출발 경유점의 위치 벡터이다.
5. 신뢰성 보장 메커니즘
5.1 연결 상태 감시
GCS와 임무 관리자 간의 연결 상태는 HEARTBEAT 메시지의 주기적 교환을 통해 상호 감시된다. 연결 단절의 판정 기준은 다음과 같다.
\text{Connection Lost} \iff T_{\text{now}} - T_{\text{last\_heartbeat}} > T_{\text{timeout}}
여기서 T_{\text{timeout}} = n \cdot T_{\text{heartbeat}}이며, 통상적으로 n = 5, T_{\text{heartbeat}} = 1\text{s}이므로 T_{\text{timeout}} = 5\text{s}이다.
연결 단절이 감지되면, 임무 관리자는 사전 정의된 비상 행동(Failsafe Action)을 개시한다. 대표적인 비상 행동은 다음과 같다.
- 현위치 대기(Loiter): 현재 위치에서 선회하며 통신 복구를 대기한다.
- 자동 귀환(Return to Launch, RTL): 이륙 지점 또는 사전 지정된 귀환 지점으로 자동 복귀한다.
- 자동 착륙(Auto Land): 현재 위치에서 즉시 착륙 절차를 수행한다.
5.2 메시지 손실 복구
통신 채널의 불안정성으로 인한 메시지 손실에 대비하여 다음의 복구 메커니즘이 적용된다.
- 시퀀스 번호 기반 손실 감지: MAVLink 메시지의 시퀀스 번호(SEQ)를 추적하여, 연속성이 깨진 경우 메시지 손실을 감지한다. 손실률 L은 다음과 같이 계산된다.
L = \frac{N_{\text{lost}}}{N_{\text{expected}}} \times 100\%
- 재요청 메커니즘: 임무 업로드 중 특정 항목의 수신이 실패한 경우, 해당 인덱스에 대한
MISSION_REQUEST_INT메시지를 재발행한다. - 상태 동기화: 통신 복구 후 GCS와 임무 관리자 간의 상태 불일치를 해소하기 위해, 전체 상태의 재동기화(Resynchronization) 절차를 수행한다.
5.3 QoS(Quality of Service) 관리
DDS 기반 통신 환경에서는 다음의 QoS 정책을 통해 명령 수신 및 상태 보고의 신뢰성을 확보한다.
| QoS 정책 | 명령 채널 설정 | 상태 보고 채널 설정 |
|---|---|---|
| 신뢰성(Reliability) | RELIABLE | BEST_EFFORT |
| 내구성(Durability) | TRANSIENT_LOCAL | VOLATILE |
| 기한(Deadline) | 500 ms | 100 ms |
| 이력(History) | KEEP_ALL | KEEP_LAST (depth=1) |
| 수명(Lifespan) | 10 s | 1 s |
명령 채널에는 모든 명령의 전달을 보장하는 RELIABLE 정책을 적용하고, 상태 보고 채널에는 최신 데이터의 신속한 전달을 우선하는 BEST_EFFORT 정책을 적용한다.
6. 다중 GCS 환경에서의 명령 중재
6.1 제어권 관리
다중 GCS 환경에서 명령 충돌을 방지하기 위해 제어권(Control Authority) 관리 체계가 필요하다. 제어권은 다음의 세 가지 수준으로 구분된다.
- 주 제어(Primary Control): 임무 명령의 발행 및 변경 권한을 보유한다. 동시에 하나의 GCS만이 주 제어권을 가질 수 있다.
- 부 제어(Secondary Control): 감시 및 제한적 명령(예: 비상 명령) 발행 권한만을 보유한다.
- 감시 전용(Monitor Only): 상태 수신만 가능하며, 어떠한 명령 발행도 불가하다.
제어권 이양(Handover) 프로토콜은 다음의 3단계로 구성된다.
- 이양 요청: 이양을 요청하는 GCS가 현재 주 제어 GCS 및 임무 관리자에 이양 요청 메시지를 전송한다.
- 이양 승인: 현재 주 제어 GCS가 이양을 승인하거나 거부한다.
- 이양 완료: 승인 시, 임무 관리자가 새로운 주 제어 GCS의 시스템 ID를 등록하고, 이양 완료를 양측 GCS에 통보한다.
6.2 명령 충돌 해결
동일 시간대에 복수의 GCS로부터 상충하는 명령이 수신될 경우, 다음의 해결 전략을 적용한다.
cmd_{\text{selected}} = \arg\max_{cmd \in \mathcal{C}} \left[ \alpha \cdot A(cmd) + \beta \cdot P(cmd) + \gamma \cdot T^{-1}(cmd) \right]
여기서 \mathcal{C}는 수신된 명령의 집합, A(cmd)는 발신 GCS의 제어 권한 수준, P(cmd)는 명령의 우선순위, T(cmd)는 명령의 수신 시각이며, \alpha, \beta, \gamma는 각각의 가중치이다. 비상 명령은 제어 권한 수준에 관계없이 최우선으로 처리된다.
7. 참고 문헌
- MAVLink Developer Guide. (2024). MAVLink Mission Protocol. Retrieved from https://mavlink.io/en/services/mission.html
- Koubaa, A., Allouch, A., Alajlan, M., Javed, Y., Belghith, A., & Khalgui, M. (2019). Micro Air Vehicle Link (MAVLink) in a Nutshell: A Survey. IEEE Access, 7, 87658–87680.
- Object Management Group (OMG). (2015). Data Distribution Service (DDS) Specification, Version 1.4. OMG Document formal/2015-04-10.
- Dronecode Foundation. (2024). PX4 Autopilot: Mission Protocol Documentation. Retrieved from https://docs.px4.io
- ArduPilot Development Team. (2024). ArduPilot Mission Upload Protocol. Retrieved from https://ardupilot.org
본 절은 로봇공학 Volume 9, Part 53, Chapter 396의 일부로서, GCS 기반 임무 명령 수신 및 상태 보고의 프로토콜과 메커니즘을 서술한다. v1.0