콘텐츠로 건너뛰기
쿼드(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 신뢰성 보장

MAVLINK 신뢰성 보장

4 min read

HEARTBEAT

모든 MAVLink 구성 요소는 주기적으로 HEARTBEAT 메시지를 브로드캐스트하고 다른 시스템의 하트비트를 수신해야 합니다. 시스템은 다른 시스템에서 정기적으로 HEARTBEAT를 받는 한 자신이 다른 시스템에 연결된 것으로 간주합니다 .

메시지 는 생성된 Python 다이알렉트 파일의 HEARTBEAT메시지를 사용하여 보낼 수 있습니다 . MAVLink.heartbeat_send()메서드 정의는 다음과 같습니다.Copy

def heartbeat_send(self, type, autopilot, base_mode, custom_mode, system_status, mavlink_version=3, force_mavlink1=False):
    '''
    The heartbeat message shows that a system is present and responding.
    The type of the MAV and Autopilot hardware allow the
    receiving system to treat further messages from this
    system appropriate (e.g. by laying out the user
    interface based on the autopilot).

    type              : Type of the MAV (quadrotor, helicopter, etc.) (type:uint8_t, values:MAV_TYPE)
    autopilot         : Autopilot type / class. (type:uint8_t, values:MAV_AUTOPILOT)
    base_mode         : System mode bitmap. (type:uint8_t, values:MAV_MODE_FLAG)
    custom_mode       : A bitfield for use for autopilot-specific flags (type:uint32_t)
    system_status     : System status flag. (type:uint8_t, values:MAV_STATE)
    mavlink_version   : MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version (type:uint8_t)
    '''

mavutil.mavlink_connection()에서 반환하는 the_connection 이라는 mavutil 링크를 사용한다고 가정하면 다음과 같이 하트비트를 보낼 수 있습니다.Copy

# Send heartbeat from a GCS (types are define as enum in the dialect file). 
the_connection.mav.heartbeat_send(mavutil.mavlink.MAV_TYPE_GCS,
                                                mavutil.mavlink.MAV_AUTOPILOT_INVALID, 0, 0, 0)

# Send heartbeat from a MAVLink application. 
the_connection.mav.heartbeat_send(mavutil.mavlink.MAV_TYPE_ONBOARD_CONTROLLER,
                                                mavutil.mavlink.MAV_AUTOPILOT_INVALID, 0, 0, 0)

하트비트를 전송해야 하는 속도는 채널에 따라 다르지만 일반적으로 1Hz입니다.

일반적으로 다른 모든 메시지와 동일한 스레드에서 보내야 합니다. 이는 스레드가 정상일 때만 하트비트가 게시되도록 하기 위한 것입니다.

메시지 서명

Pymavlink는 MAVLink 2 를 사용할 때 메시지 서명 (인증)을 지원합니다 .

Pymavlink 라이브러리는 이미 서명 메시지에 대해 예상되는 거의 모든 동작을 구현합니다. 비밀 키와 초기 타임스탬프를 제공하고 선택적으로 발신 메시지의 서명 여부, 링크 ID 및 수락할 서명되지 않은 메시지(있는 경우)를 결정하기 위한 콜백을 지정하기만 하면 됩니다.

이를 수행하는 방법은 mavutil을 사용하여 연결을 관리하는지 또는 MAVLink객체를 직접 사용하는지에 따라 다릅니다.

이 항목에서는 다루지 않지만 다음에 대한 코드도 작성해야 합니다.

  • 영구 저장소에서 키와 마지막 타임스탬프 저장 및 로드
  • 키를 만들고 공유하는 메커니즘을 구현합니다. 자세한 내용은 메시지 서명 > 비밀 키 관리를 참조하십시오 .

MAVLink 클래스를 사용한 서명

MAVLink클래스를 직접 사용하는 경우 MAVLink.signing 속성을사용하여 MAVLinkSigning개체에 액세스 하고 필요한 특성을 설정할 수 있습니다.

example /mavtest.py 스크립트는 임의의 비밀 키를 사용하여 이를 수행하는 방법을 보여줍니다.Copy

# Create a MAVLink instance (in this case on a file object "f")
mav = mavlink.MAVLink(f)

if signing:
    mav.signing.secret_key = chr(42)*32
    mav.signing.link_id = 0
    mav.signing.timestamp = 0
    mav.signing.sign_outgoing = True

클래스는 패킷의 link_id 또는 timestamp이니셜 이 적절한 MAVLink지 확인하지 않습니다 . 초기 타임스탬프는 현재 시스템 시간을 기반으로 해야 합니다. 자세한 내용은 메시지 서명을 참조하십시오 .

mavutil을 사용하여 서명 (MAVLINK V2)

mavutil을 사용하여 연결을 관리하는 경우 아래 표시된 방법을 사용하여 서명을 설정/비활성화할 수 있습니다.Copy

#Setup signing
def setup_signing(self, secret_key, sign_outgoing=True, allow_unsigned_callback=None, initial_timestamp=None, link_id=None)

# Disable signing (clear secret key and all the other settings specified with setup_signing)
def disable_signing(self):

이 메서드는 연결이 소유한 개체를 setup_signing()설정 하고 몇 가지 추가 코드를 제공합니다.MAVLink

  • 지정하지 않으면 link_id내부적으로 값이 반복됩니다.
  • 설정되지 않은 경우 initial_timestamp현재 시간에 대한 적절한 값이 기본 OS에서 채워집니다.

allow_unsigned_callback 사용

메시지 서명 > 서명되지 않은 패킷 수락 및 잘못 서명된 패킷 수락은 메시지 서명 구현이 라이브러리 사용자가 서명되지 않았거나 잘못 서명된 패킷을 조건부로 수락하도록 선택할 수 있는 메커니즘을 제공해야 함을 지정합니다.

Pymavlink는 이 목적을 위해 선택적 allow_unsigned_callback()콜백을 제공합니다. 이 함수의 프로토타입은 다음과 같습니다.Copy

bool allow_unsigned_callback(self, msgId)

서명 구성의 일부로 설정되면 이 함수는 서명되지 않은 패킷(모든 MAVLink 1 패킷 포함) 또는 서명이 잘못된 패킷에서 호출됩니다. 함수가 False 반환하면 메시지가 삭제됩니다(그렇지 않으면 서명된 것처럼 처리됨).

서명되지 않은 패킷을 수락해야 하는 규칙은 구현에 따라 다르지만 구현 시 항상 3DR 라디오(서명을 지원하지 않음)의 피드백을 위해 RADIO_STATUS패킷을 수락하는 것이 좋습니다.

예를 들어:Copy

# Assuming you already have a connection set up
the_connection = mavutil.mavlink_connection(...)

# Create a callback to specify the messages to accept
def my_allow_unsigned_callback(self,msgId):
    #Allow radio status messages
    if msgId==mavutil.mavlink.MAVLINK_MSG_ID_RADIO_STATUS:
        return True
    return False

# Pass the callback  to the connection (here we also pass an arbitrary secret key)
secret_key = chr(42)*32
the_connection.setup_signing(secret_key, sign_outgoing=True, allow_unsigned_callback=my_allow_unsigned_callback)
업데이트된 날짜 2025년 12월 08일

당신의 감정은 어떤가요?

  • Happy
  • 보통
  • 슬픈

이 문서 공유 :

  • Facebook
  • X
  • LinkedIn
  • Pinterest

제공 BetterDocs

답글 남기기 응답 취소

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

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

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