PX4 MAVLink-Python 프로그래밍 : 1. MAVLink 개요

MAVLink 개요

안녕하세요. 마케팅팀 에이든(Aiden)입니다.

오늘은PX4 MAVLink-Python 프로그래밍 그 중에서도 MAVLink 개요에 대해 소개해드리려 합니다. 해당 내용은 저희 QUAD 드론 연구소의 저작권으로 등록되어있는 내용이며 무단 배포는 양해주시길 부탁 드립니다.


유튜브 강좌

하단의 유튜브 영상과 함께 순차적으로 작업해주시길 바랍니다.

재생

가. MAVLink 프로토콜

MAVLink 는 드론과 지상국(GCS) 간에 데이터 및 명령을 전송하는 데 가장 일반적으로 사용되는 직렬 프로토콜입니다.

이 프로토콜은 common.xml 및 ardupilot.xml 에서 찾을 수 있는 대규모 메시지 집합을 정의합니다.

MAVLink 메시지는 거의 모든 직렬 연결을 통해 전송될 수 있으며 기본 기술(WiFi, 900MHz 라디오 등)에 의존하지 않습니다.

메시지 전달이 보장되지 않으므로 지상국 또는 컴패니언 컴퓨터는 종종 차량의 상태를 확인하여 명령이 실행되었는지 확인해야 합니다.

  • 메시지는 263바이트를 넘지 않습니다.
  • 발신자는 수신자가 패킷의 출처를 알 수 있도록 항상 System ID 와 Component ID 필드를 채웁니다. System ID는 각각의 차량 또는 지상국에 대해 유니크한 ID를 가져야 합니다. 지상국은 일반적으로 높은 수의 System ID (255)를 가지고 차량은 기본 “1”의 값을 가집니다. 이 값은 변경 가능합니다. Component ID 는 지상국과 차량 모두 “1”의 기본값을 가집니다. 같은 차량의 여러가지 다른 MAVLink 장치(컴패니언컴퓨터, 짐벌..)는 같은 System ID와 다른 Component ID를 가져야 합니다.
  • Message ID 필드 는 메시지 이름 옆의 common.xml 및 ardupilot.xml 에서 볼 수 있습니다 . 예를 들어 HEARTBEAT 메시지 ID는 “0” 입니다.
  • Data 부분은 전송되는 개별 필드 값을 보유합니다 .
  • 새로운 MAVLink 메시지에 대한 지원을 추가하는 방법에 대한 조언은 이 페이지를 참조하십시오.

나. 통신 플로우

연결이 열리면 각 장치(“시스템”이라고도 함)는 1Hz로 HEARTBEAT 메시지를 보냅니다.

지상국 또는 컴패니언 컴퓨터는 다음 유형의 메시지를 전송하여 원하는 데이터 (및 속도) 를 요청합니다.

REQUEST_DATA_STREAM은 메시지 그룹의 속도 설정을 지원합니다.

SET_MESSAGE_INTERVAL 명령을 포함하는 COMMAND_LONG 은 전송되는 메시지(및 속도)를 정확하게 제어하지만 ArduPilot 4.0 이상에서만 지원됩니다.

지상국 또는 컴패니언 컴퓨터가 차량에 명령을 보냅니다.

다. MAVLink1 대 MAVLink2

MAVLink2는 기존 MAVLink1 메시지에 새 필드를 추가할 수 있도록 MAVLink1을 확장하고 Message ID “255” 이상의 새 메시지를 지원하며 서명 메시지에 대한 지원을 추가합니다.

MAVLink2는 MAVLink1과 이전 버전과 호환됩니다.

MAVLink1만 이해할 수 있는 장치가 추가 필드(MAVLink2에 추가됨)를 포함하는 메시지를 수신하는 경우 장치는 원래 필드만 볼 수 있습니다. 즉, 장치는 메시지를 읽을 수 있지만 추가 필드를 볼수 없습니다.

SERIALx_PROTOCOL 파라메터에 비행 컨트롤러의 직렬 포트(아마도 원격 측정 라디오에 연결됨)는 매개 변수를 “2”로 설정하여 MAVLink2 를 사용하도록 설정할 수 있습니다.

MAVLink 1 vs. MAVLink 2 패킷 비교

아래는 MAVLink 2 패킷 의 유선 형식입니다 (메모리 내 표현은 다를 수 있음)

MAVLINK v2 packet

Byte IndexC versionContentValueExplanation
0uint8_t magicPacket start marker0xFD새 패킷의 시작을 나타내는 데 사용되는 프로토콜별 텍스트 시작(STX) 마커입니다. 프로토콜 버전을 이해하지 못하는 시스템은 패킷을 건너뜁니다.
1uint8_t lenPayload length0 – 255다음 payload섹션의 길이를 나타냅니다. 이는 페이로드 잘림 의 영향을 받을 수 있습니다 .
2uint8_t incompat_flagsIncompatibility FlagsMAVLink 호환성을 위해 이해해야 하는 플래그(플래그를 이해하지 못하는 경우 구현은 패킷을 버립니다).
3uint8_t compat_flagsCompatibility Flags이해하지 못하는 경우 무시할 수 있는 플래그(플래그를 이해하지 못하더라도 구현은 여전히 ​​패킷을 처리할 수 있음).
4uint8_t seqPacket sequence number0 – 255패킷 손실을 감지하는 데 사용됩니다. 구성 요소는 전송된 각 메시지의 값을 증가시킵니다.
5uint8_t sysidSystem ID (sender)1 – 255메시지를 보내는 시스템 (차량) 의 ID입니다 . 네트워크에서 시스템을 구별하는 데 사용됩니다. 브로드캐스트 주소 0은 유효하지 않은 소스 주소 이므로 이 필드에 사용할 수 없습니다 .
6uint8_t compidComponent ID (sender)1 – 255메시지를 보내는 구성 요소 의 ID입니다 . 시스템 에서 구성 요소를 구별하는 데 사용됩니다 (예: 자동 조종 장치 및 카메라). MAV_COMPONENT 에서 적절한 값을 사용하십시오 . MAV_COMP_ID_ALL브로드캐스트 주소는 유효하지 않은 소스 주소 이므로 이 필드에 사용할 수 없습니다 .
7 to 9uint32_t msgid:24Message ID (low, middle, high bytes)0 – 16777215페이로드의 메시지 유형 ID입니다 . 데이터를 메시지 개체로 다시 디코딩하는 데 사용됩니다.
For n-byte payload:
n=0: NA, n=1: 10, n>=2: 10 to (9+n)
uint8_t payload[max 255]Payload메시지 데이터. 메시지 유형(예: 메시지 ID) 및 내용에 따라 다릅니다.
(n+10) to (n+11)uint16_t checksumChecksum (low byte, high byte)메시지용 CRC-16/MCRF4XX( magic바이트 제외). CRC_EXTRA 바이트를 포함합니다.
(n+12) to (n+25)uint8_t signature[13]Signature(선택 사항) 링크 변조 방지를 위한 서명.
  • 페이로드가 없는 승인 패킷의 경우 최소 패킷 길이는 12바이트입니다.
  • 전체 페이로드를 사용하는 서명된 메시지의 최대 패킷 길이는 280바이트입니다.

MAVLink 1 패킷 형식

아래는 MAVLink 1 패킷의 유선 형식입니다(메모리 내 표현은 다를 수 있음).

MAVLINK v1 packet

Byte IndexC versionContentValueExplanation
0uint8_t magicPacket start marker0xFE새 패킷의 시작을 나타내는 데 사용되는 프로토콜별 텍스트 시작(STX) 마커입니다. 프로토콜 버전을 이해하지 못하는 시스템은 패킷을 건너뜁니다.
1uint8_t lenPayload length0 – 255다음 payload섹션의 길이를 나타냅니다(특정 메시지에 고정됨).
2uint8_t seqPacket sequence number0 – 255패킷 손실을 감지하는 데 사용됩니다. 구성 요소는 전송된 각 메시지의 값을 증가시킵니다.
3uint8_t sysidSystem ID1 – 255메시지를 보내는 시스템 (차량) 의 ID입니다 . 네트워크에서 시스템을 구별하는 데 사용됩니다. 브로드캐스트 주소 0은 유효하지 않은 소스 주소 이므로 이 필드에 사용할 수 없습니다.
4uint8_t compidComponent ID1 – 255메시지를 보내는 구성 요소 의 ID입니다 . 시스템 에서 구성 요소를 구별하는 데 사용됩니다 (예: 자동 조종 장치 및 카메라). MAV_COMPONENT 에서 적절한 값을 사용하십시오 . 브로드캐스트 주소는 유효하지 않은 소스MAV_COMP_ID_ALL 주소 이므로 이 필드에 사용할 수 없습니다.
5uint8_t msgidMessage ID0 – 255페이로드의 메시지 유형 ID입니다 . 데이터를 메시지 개체로 다시 디코딩하는 데 사용됩니다.
For n-byte payload:
n=0: NA, n=1: 6, n>=2: 6 to (5+n)
uint8_t payload[max 255]Payload data메시지 데이터. 내용은 메시지 유형(예: 메시지 ID)에 따라 다릅니다.
(n+6) to (n+7)uint16_t checksumChecksum (low byte, high byte)메시지용 CRC-16/MCRF4XX( magic바이트 제외). CRC_EXTRA 바이트를 포함합니다.
  • 페이로드가 없는 승인 패킷의 경우 최소 패킷 길이는 8바이트입니다.
  • 최대 패킷 길이는 전체 페이로드의 경우 263바이트입니다.

이상으로 PX4 MAVLINK-Python 프로그래밍의 첫 번째 단계인 MAVLINK 개요에 대해서 알아보았습니다. 다음 글은 Python MAVLINK 라이브러리 사용에 대한 글로 돌아오겠습니다. 첫 단계인 만큼 꼼꼼히 살펴봐주시면 감사드리겠습니다.


작성자: 에이든(Aiden), 쿼드(QUAD) 드론연구소 마케팅팀

기고일: 2026.02.23

Similar Posts

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다