MAVLINK 개요
저작권: 쿼드(QUAD) 드론연구소 https://smartstore.naver.com/maponarooo
Last updated
저작권: 쿼드(QUAD) 드론연구소 https://smartstore.naver.com/maponarooo
Last updated
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 이상에서만 지원됩니다.
지상국 또는 컴패니언 컴퓨터가 차량에 명령을 보냅니다.
MAVLink2는 기존 MAVLink1 메시지에 새 필드를 추가할 수 있도록 MAVLink1을 확장하고 Message ID "255" 이상의 새 메시지를 지원하며 서명 메시지에 대한 지원을 추가합니다.
MAVLink2는 MAVLink1과 이전 버전과 호환됩니다.
MAVLink1만 이해할 수 있는 장치가 추가 필드(MAVLink2에 추가됨)를 포함하는 메시지를 수신하는 경우 장치는 원래 필드만 볼 수 있습니다. 즉, 장치는 메시지를 읽을 수 있지만 추가 필드를 볼수 없습니다.
SERIALx_PROTOCOL 파라메터에 비행 컨트롤러의 직렬 포트(아마도 원격 측정 라디오에 연결됨)는 매개 변수를 "2"로 설정하여 MAVLink2 를 사용하도록 설정할 수 있습니다.
0
uint8_t magic
Packet start marker
0xFD
새 패킷의 시작을 나타내는 데 사용되는 프로토콜별 텍스트 시작(STX) 마커입니다. 프로토콜 버전을 이해하지 못하는 시스템은 패킷을 건너뜁니다.
1
uint8_t len
Payload length
0 - 255
2
uint8_t incompat_flags
MAVLink 호환성을 위해 이해해야 하는 플래그(플래그를 이해하지 못하는 경우 구현은 패킷을 버립니다).
3
uint8_t compat_flags
이해하지 못하는 경우 무시할 수 있는 플래그(플래그를 이해하지 못하더라도 구현은 여전히 패킷을 처리할 수 있음).
4
uint8_t seq
Packet sequence number
0 - 255
패킷 손실을 감지하는 데 사용됩니다. 구성 요소는 전송된 각 메시지의 값을 증가시킵니다.
5
uint8_t sysid
System ID (sender)
1 - 255
메시지를 보내는 시스템 (차량) 의 ID입니다 . 네트워크에서 시스템을 구별하는 데 사용됩니다. 브로드캐스트 주소 0은 유효하지 않은 소스 주소 이므로 이 필드에 사용할 수 없습니다 .
6
uint8_t compid
Component ID (sender)
1 - 255
7 to 9
uint32_t msgid:24
Message 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]
메시지 데이터. 메시지 유형(예: 메시지 ID) 및 내용에 따라 다릅니다.
(n+10) to (n+11)
uint16_t checksum
(n+12) to (n+25)
uint8_t signature[13]
(선택 사항) 링크 변조 방지를 위한 서명.
페이로드가 없는 승인 패킷의 경우 최소 패킷 길이는 12바이트입니다.
전체 페이로드를 사용하는 서명된 메시지의 최대 패킷 길이는 280바이트입니다.
아래는 MAVLink 1 패킷의 유선 형식입니다(메모리 내 표현은 다를 수 있음).
0
uint8_t magic
Packet start marker
0xFE
새 패킷의 시작을 나타내는 데 사용되는 프로토콜별 텍스트 시작(STX) 마커입니다. 프로토콜 버전을 이해하지 못하는 시스템은 패킷을 건너뜁니다.
1
uint8_t len
Payload length
0 - 255
다음 payload
섹션의 길이를 나타냅니다(특정 메시지에 고정됨).
2
uint8_t seq
Packet sequence number
0 - 255
패킷 손실을 감지하는 데 사용됩니다. 구성 요소는 전송된 각 메시지의 값을 증가시킵니다.
3
uint8_t sysid
System ID
1 - 255
메시지를 보내는 시스템 (차량) 의 ID입니다 . 네트워크에서 시스템을 구별하는 데 사용됩니다. 브로드캐스트 주소 0은 유효하지 않은 소스 주소 이므로 이 필드에 사용할 수 없습니다.
4
uint8_t compid
Component ID
1 - 255
5
uint8_t msgid
Message ID
0 - 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 checksum
페이로드가 없는 승인 패킷의 경우 최소 패킷 길이는 8바이트입니다.
최대 패킷 길이는 전체 페이로드의 경우 263바이트입니다.
패킷 의 유선 형식입니다 (메모리 내 표현은 다를 수 있음).
다음 payload
섹션의 길이를 나타냅니다. 의 영향을 받을 수 있습니다 .
메시지를 보내는 구성 요소 의 ID입니다 . 시스템 에서 구성 요소를 구별하는 데 사용됩니다 (예: 자동 조종 장치 및 카메라). 에서 적절한 값을 사용하십시오 . MAV_COMP_ID_ALL
브로드캐스트 주소는 유효하지 않은 소스 주소 이므로 이 필드에 사용할 수 없습니다 .
(low byte, high byte)
메시지용 CRC-16/MCRF4XX( magic
바이트 제외). 바이트를 포함합니다.
메시지를 보내는 구성 요소 의 ID입니다 . 시스템 에서 구성 요소를 구별하는 데 사용됩니다 (예: 자동 조종 장치 및 카메라). 에서 적절한 값을 사용하십시오 . 브로드캐스트 주소는 유효하지 않은 소스MAV_COMP_ID_ALL
주소 이므로 이 필드에 사용할 수 없습니다.
(low byte, high byte)
메시지용 CRC-16/MCRF4XX( magic
바이트 제외). 바이트를 포함합니다.