콘텐츠로 건너뛰기
쿼드(QUAD) 드론연구소

쿼드(QUAD) 드론연구소

  • 👨‍✈️ 초보 파일럿
  • 🎖️ 개발자
  • 🥇 전문가
  • 💎 다이아몬드
  • 🛠️ Tech-Tip
  • 📝 블로그
  • ⚠️ 저작권
login
쿼드(QUAD) 드론연구소
쿼드(QUAD) 드론연구소

🕰️PX4와 ArduPilot의 개발 배경

4
  • ArduPilot 주요 개발자
  • ArduPilot
  • PX4 주요 개발자
  • PX4

📚드론 개발 라이브러리

10
  • 1.드론 개발자 로드맵(Load-Map)
  • 2.드론 개발 소프트웨어 개요
  • 3.MAVLINK
  • 4.PyMAVLink
  • 5.MavProxy
  • 6.MAVSDK
  • 7.MAVROS
  • 8.PX4 uORB with ROS 2
  • 9.자율주행드론 개발 프로세스
  • 10.학습 로드맵(Road-map)

🧩자율주행드론 시스템 아키텍처

4
  • Smart UAV is Robot!
  • PX4 System 아키텍쳐
  • PX4 Software 아키텍쳐
  • 쿼드(QUAD) 자율주행드론 UAV 시스템 아키텍처

🐧Linux (Ubuntu) 기초

14
  • Ubuntu 22.04 설치 (PC에 직접 설치)
  • Windows 10/11 WSL2 설치
  • Linux 개요
  • 리눅스 쉘 기본 명령어
  • 자주쓰는 명령어 정리 (Ubuntu 사용)
  • 자주 사용하는 터미널 명령어
  • Linux Package 에 대한 이해
  • su와 sudo 명령어 활용법
  • 리눅스 파일 시스템 이해하기
  • 리눅스 권한에 대한 이해
  • 빌드 시스템에 대한 이해
  • Make(Makefile) 사용 가이드
  • CMake 의 이해
  • CMake 사용 가이드

픽스호크(Pixhawk) 기초

29
  • 쿼드(QUAD) 자율주행 드론(UAV) 개발 키트
  • 픽스호크 드론의 기초 개요
  • 드론에 사용되는 물리학
  • 멀티콥터의 동작 원리
  • ArduPilot vs. PX4 선택
  • PX4 시스템 아키텍처
  • 지상국(Ground Control System) 선택
  • Pixhawk 6C 비행 컨트롤러
  • Pixhawk 6X 비행 컨트롤러
  • 드론에서 사용되는 센서간 통신제어 방식
  • Pixhawk 배선
  • Pixhawk 전원 공급
  • GPS/나침반
  • 거리 측정기 (LiDAR)
  • 고도(Altitude) 이해
  • 컴패니언 컴퓨터
  • 오프보드(Offboard) 제어
  • 컴패니언 컴퓨터 GPIO를 이용한 FC 제어
  • ESC(전자속도제어기)
    • ESC (전자속도제어기)
    • BLHeli32 및 BLHeli_S ESC
    • DShot ESC
    • DroneCAN ESC
    • PWM, OneShot 및 OneShot125 ESC
  • 무선제어시스템(Radio)
    • 무선 제어 시스템 (Radio)
    • 조종기/수신기
    • 수신기 RSSI 강도 표시
  • Telemetry 라디오
    • Telemetry 라디오
    • SiK Radio 설정
    • 다중 Point-to-Point 설정

Q250 사용 가이드

17
  • Q250 빠른 시작 가이드
  • QGroundControl 설치
  • Q250 펌웨어 재설치 (선택)
  • Q250 파라메터 설정
  • FS-i6x 조종기와 수신기 설정
  • 비행 모드
  • 전원 설정
  • Actuators (모터) 설정
  • Flight Behavior 설정
  • 텔레메트리 연결
  • GPS 연결
  • 컴패니언컴퓨터 전원 공급장치(UBEC) 사용 가이드
  • LED 컨트롤러 사용 가이드
  • 컴패니언 컴퓨터와 FC의 UART 케이블 연결
  • Optical-Flow & LiDAR 설정
  • 지자계 간섭 문제 해결
  • fake_gps (가상 GPS)

Q500 사용 가이드

10
  • Q500 사용 가이드 개요
  • QGroundControl 설치
  • Q500 펌웨어 설정
  • Q500 파라메터 설정
  • Radiomaster 조종기 설정
  • 수신기의 전파 수신 강도(RSSI) 설정
  • Pixhawk 6X Ethernet 설정
  • 컴패니언 컴퓨터와 FC 연결 설정
  • 시뮬레이터 사용 가이드
  • fake_gps (가상 GPS)

Q650 사용 가이드

9
  • Q650 사용 가이드 개요
  • QGroundControl 설치
  • Q650 펌웨어 설정
  • Q650 파라메터 설정
  • 조종기 설정
  • 수신기의 전파 수신 강도(RSSI) 설정
  • Pixhawk 6X Ethernet 설정
  • 컴패니언 컴퓨터와 FC 연결 설정
  • H-Flow 설정 가이드

첫 비행 및 튜닝

12
  • 첫 비행 및 튜닝 개요
  • 첫 비행 지침
  • 수동비행 지침
  • 임무 비행
  • 지오펜스
  • 안전지점(Rally Points)
  • 비행 모드
  • 지형 추적/유지
  • PID 튜닝
  • 비행 기록 분석
    • 비행 기록 분석
    • Flight Review를 이용한 로그 분석
    • 비행기록 분석 실습

PX4-Toolchain 개발환경 구성

4
  • Windows 10/11 WSL2 설치
  • ROS(1) + PX4 Toolchain 구성
  • Gazebo Classic 시뮬레이터 사용하기
  • ROS2 + PX4 Toolchain 구성

MAVLink-Python 프로그래밍

17
  • MAVLINK 개요
  • Python MAVLink 라이브러리 사용
  • 드론에 연결하기(Connect)
  • MAVLINK 메시지 주고받기
  • 비행 모드 (PX4 멀티콥터)
  • MAV_CMD
  • PX4 ‘OFFBOARD” 와 Ardupilot ‘GUIDED’ 모드 차이
  • PX4 Offboard 모드에서만 유효한 주요 MAV_CMD
  • 드론에 시동걸기(MAV_CMD_COMPONENT_ARM_DISARM)
  • 이륙하기(MAV_CMD_NAV_TAKEOFF)
  • 이동하기(SET_POSITION_TARGET_GLOBAL_INT)
  • 이동하기(SET_POSITION_TARGET_LOCAL_NED)
  • 기수 방향과 속도 변경
  • [별첨]참고 자료
  • MAVLINK 신뢰성 보장
    • MAVLINK 신뢰성 보장
    • MAVLINK 2 메시지 서명
    • [참고]HMAC-SHA256이란?

🛠️Tech-Tip

2
  • MAVLink Router
  • 쿼드(QUAD) 자율주행 드론용 컴패니언컴퓨터 소프트웨어 – Jetson Orin-Nano 용 (Ver.3.1-Ubuntu 22.04)
카테고리 보기
  • Home
  • Docs
  • MAVLink-Python 프로그래밍
  • MAVLINK 개요

MAVLINK 개요

3 min read

가. 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 Index

C version

Content

Value

Explanation

0

uint8_t magic

Packet start marker

0xFD

새 패킷의 시작을 나타내는 데 사용되는 프로토콜별 텍스트 시작(STX) 마커입니다. 프로토콜 버전을 이해하지 못하는 시스템은 패킷을 건너뜁니다.

1

uint8_t len

Payload length

0 – 255

다음 payload섹션의 길이를 나타냅니다. 이는 페이로드 잘림 의 영향을 받을 수 있습니다 .

2

uint8_t incompat_flags

Incompatibility Flags

MAVLink 호환성을 위해 이해해야 하는 플래그(플래그를 이해하지 못하는 경우 구현은 패킷을 버립니다).

3

uint8_t compat_flags

Compatibility 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

메시지를 보내는 구성 요소 의 ID입니다 . 시스템 에서 구성 요소를 구별하는 데 사용됩니다 (예: 자동 조종 장치 및 카메라). MAV_COMPONENT 에서 적절한 값을 사용하십시오 . MAV_COMP_ID_ALL브로드캐스트 주소는 유효하지 않은 소스 주소 이므로 이 필드에 사용할 수 없습니다 .

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]

Payload

메시지 데이터. 메시지 유형(예: 메시지 ID) 및 내용에 따라 다릅니다.

(n+10) to (n+11)

uint16_t checksum

Checksum (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 Index

C version

Content

Value

Explanation

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

메시지를 보내는 구성 요소 의 ID입니다 . 시스템 에서 구성 요소를 구별하는 데 사용됩니다 (예: 자동 조종 장치 및 카메라). MAV_COMPONENT 에서 적절한 값을 사용하십시오 . 브로드캐스트 주소는 유효하지 않은 소스MAV_COMP_ID_ALL 주소 이므로 이 필드에 사용할 수 없습니다.

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

Checksum (low byte, high byte)

메시지용 CRC-16/MCRF4XX( magic바이트 제외). CRC_EXTRA 바이트를 포함합니다.

  • 페이로드가 없는 승인 패킷의 경우 최소 패킷 길이는 8바이트입니다.
  • 최대 패킷 길이는 전체 페이로드의 경우 263바이트입니다.
업데이트된 날짜 2025년 12월 08일

당신의 감정은 어떤가요?

  • Happy
  • 보통
  • 슬픈

이 문서 공유 :

  • Facebook
  • X
  • LinkedIn
  • Pinterest

제공 BetterDocs

답글 남기기 응답 취소

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

© 2025 쿼드(QUAD) 드론연구소 - Kadence WP의 워드프레스 테마

  • 👨‍✈️ 초보 파일럿
  • 🎖️ 개발자
  • 🥇 전문가
  • 💎 다이아몬드
  • 🛠️ Tech-Tip
  • 📝 블로그
  • ⚠️ 저작권
Korean
English