상세 컨텐츠

본문 제목

[드론 만들기] MAVLink

만들기/드론

by kwangpil 2020. 7. 11. 11:00

본문

 

이전 글...

 

드론 만들기

  

   하드웨어

      기본부품

         비행 제어기(FC)

            Pixhawk 시리즈

               Pixhawk의 GPS

               Pixhawk의 텔레메트리(Telemetry)              

               Pixhawk의 변속기(ESC)

                  QGroundControl에서 변속기(ESC) 교정하기 

               Pixhawk 4의 Power Management Board              

               Pixhawk 4

                  QGroundControl에서 Pixhawk 4 펌웨어 설치

                  QGroundControl에서 Pixhawk 4 설정하기 1/2

                  QGroundControl에서 Pixhawk 4 설정하기 2/2       

         모터

         배터리

            리튬 폴리머 배터리 팩

         변속기 (ESC)

         프로펠러 (Propeller)

         파워 분배기(PDB, Power Distribution Board)

         조종기(Radio Control)          

 

   소프트웨어

      MissionPlanner와 QGroundControl

      QGroundControl 설치

         QGroundControl 사용방법 1/4

         QGroundControl 사용방법 2/4

         QGroundControl 사용방법 3/4      

         QGroundControl 사용방법 4/4 

         QGroundControl에서 Pixhawk 4 펌웨어 설치

         QGroundControl에서 Pixhawk 4 설정하기 1/2

         QGroundControl에서 Pixhawk 4 설정하기 2/2

         QGroundControl에서 Pixhawk 파라미터 변경하기  

      VMware Workstation Pro 설치하기

         VMware Workstation Player에 Virtaul Machine 만들기

         VMware Workstation Player에 Ubuntu 설치하기

            Ubuntu(우분투) 터미널 명령어

            Ubuntu(우분투) 주요 디렉터리

            Ubuntu(우분투) 기초용어

 

   조립

      모터, 변속기에 커넥터 연결하기

      Power Management Board에 커넥터 연결하기

      변속기(ESC)와 Power Management Board 연결하기

      모터와 변속기(ESC) 연결하기

      QGroundControl에서 변속기(ESC) 교정하기

      GPS, Telemetry Pixhawk 4에 연결하기

  

   통신

      MAVLink

         MAVLink 설치하기

         MAVLink 라이브러리 생성하기

 

   개발

      드론 비행 시뮬레이터(Simulator)         

         툴체인(toolchain) 설치하기

            jMAVSim 사용하기 1/2

            jMAVSim 사용하기 2/2

            Gazebo 사용하기 1/4

            Gazebo 사용하기 2/4

            Gazebo 사용하기 3/4

            Gazebo 사용하기 4/4

      내장된 응용 프로그램 생성 및 실행하기

 

   비행

      쿼드콥터(Quadcopter) 비행 원리     

 

   문제해결

      Pixhawk와 Emax ESC(변속기) 호환문제 해결방법

 

   기타

      비행금지구역

      비행 시 주의 사항   

      멀티콥터 종류

      커넥터(connector)

      용어


완전 초짜의 드론 만들기 도전! 도전! 도전~!입니다.
맨땅에 헤딩~

인터넷 검색, 관련 사이트를 참고하여 Pixhawk 4(PX4)를 이용한 중/소형 쿼드콥터 드론을 만들려고 하고 있습니다.

참고만 하세요~!

 

※ 아래 내용은 MAVLink 홈페이지 내용을 기반으로 작성한 것이며 정확하지 않은 내용이 포함되어있을 수 있다.

※ 정확한/상세한 내용은 MAVLink 홈페이지 참조


 

픽스호크 자료를 읽다 보면 종종 MAVLink라는 단어를 접한다.

 

Link라는 단어 때문에 무엇을 연결하는 용도로 사용하는 것은 알겠지만 생소한 단어라 모른 척 지나가버리고 싶다. 하지만 그러기에는 픽스호크로 드론을 만드는데 MAVLink는 중요한 부분이다.

 

게다가 단순히 드론 부품들을 조립해서 드론을 만들기만 하는데서 멈추고 싶지 않고 또 픽스호크를 이용해서 다른 무인 이동장치도 만들어보고 싶은 욕심에 MAVLink를 더 이상 모른척할 수가 없다.

 

익숙하지 않은 내용이지만 MAVlLink 홈페이지를 찬찬히 읽어보면서 정리해봤다.

 

 

1. MAVLink란?

 

픽스호크 홈페이지의 텔레메트리 라디오 부분을 보면 이런 표현이 있다.

'텔레메트리 라디오는 지상통제소와 PX4(픽스호크) 사이의 무선 MAVLink 연결을 제공하기 위해서 사용될 수 있다'

 

그러니까 텔레메트리 라디오는 떨어져 있는 두 장치를 연결하기만 할 뿐 그 장치 사이의 실제적인 통신과는 상관이 없다. 즉, 지상통제소와 PX4 사이의 통신을 책임지는 프로토콜MAVLink이라는 것이다.

 

흠... MAVLink...!

 

 

 

MAVLink란 Micro Air Vehicle Link의 약자로 2009년 Lorenz Meier가 처음으로 배포한 통신 프로토콜이다. 현재는 많은 재능 기부자들이 함께 활동 중이며 MAVLink 2.0까지 배포되어 있다.

 

픽스호크를 개발한 Lorenz Meier가 MAVLink를 개발했다는 것만으로도 MAVLink가 픽스호크를 이용한 무인이동장치에 사용될 통신 프로토콜일 것이라는 것을 쉽게 추측할 수 있다.

 

MAVLink는 픽스호크(PX4)와 주변장치들, 예를 들자면 QGroundControl, 라즈베리 파이(rasberry pi) 같은 companion computer, 온-스크린 디스플레이(On-Screen Display) 등과 같은 주변장치 사이의 통신을 책임지는 경량 메시지 프로토콜이다.

 

 

픽스호크와 QGC, companion computer 통신

 

여기서 메시지란 쉽게 PX4와 주변장치 사이에 오고 가는 데이터(또는 패킷)라고 말할 수 있다. 

 

MAVLink의 라이센스는 LGPL 라이센스다.

 

LGPL 라이센스란 자유 소프트웨어 재단의 자유 소프트웨어 라이센스로 프로그램 자체에는 카피레프트(copyleft) 규제가 있으나 프로그램을 그대로 사용하는 다른 프로그램에는 카피레프트 규제가 없다. 하지만 기존 프로그램의 소스 코드를 변경/수정할 경우는 카피레프트 규제를 준수해야 한다.

 

 

2. MAVLink 버전

 

MAVLink은 v1.0과 v2.0 두 개의 버전으로 나눠져 있다.

 

MAVLink 2.0는 MAVLink 1.0의 확장형으로 MAVLink1.0의 메시지에 새로운 필드(field)를 허용했으며 패킷 형태는 아래와 같다.

 

uint8_t magic;                                   ///< 시작점을 가리키는 헤더
uint8_t len;                                       ///< payload의 길이
uint8_t incompat_flags;                       ///< 해석해야 할 flag
uint8_t compat_flags;                         ///< 해석할 수 없을 시 무시 가능한 flag
uint8_t seq;                                     ///< 패킷의 순서
uint8_t sysid;                                   ///< 메시지 발신자 시스템/비행체의 ID
uint8_t compid;                                ///< 메시지 발신자 컴포터는의 ID
uint8_t msgid 0:7;                             ///< 메시지 ID의 첫 번째 8비트 
uint8_t msgid 8:15;                           ///< 메시지 ID의 중간 8비트
uint8_t msgid 16:23;                         ///< 메시지 ID의 마지막 8비트
uint8_t payload[max 255];                  ///< 255 바이트의 최댓값
uint16_t checksum;                           ///< X.25 CRC

 

uint8_t signature[13];                        ///< 링크를 훼손할 수 없도록 보증 서명(선택사항)

 

MAVLink 1.0의 패킷 포맷에는 incompat_flags, compat_flgs, signature가 없으며 메시지 주소용으로는 단일 바이트를 갖는다.

 

MAVLink 2.0는 MAVLink 1.0과 호환되지만 MAVLink 1.0은 MAVLink 2.0과 호환되지 않는다.

 

만약 어떤 장치가 MAVLink 2의 메시지를 해석할 수 있다면 MAVLink 1의 메시지도 해석할 수 있다.


하지만 만약 MAVLink 1의 메시지만 해석할 수 있는 장치가 MAVLink 2의 메시지를 수신할 경우 이 장치는 기본 필드만 인지한다. 즉 이 장치는 송신된 메시지를 읽기는 하지만 MAVLink 2에 추가된 필드를 인지하지는 못 한다.

 

 

3. MAVLink의 통신방법

 

MAVLink는 직렬 통신(serial communication)이다. 

 

따라서 지상통제소(Ground Control Station), Companion Computer 또는 다른 MAVLink 주변장치는 서로 다른 직렬 포트를 통해 분리된 MAVLink 스트림으로 PX4와 상호작용(양방향 통신)한다.

 

이때 MAVLink의 이진 직렬화(binary serialization) 특성으로 PX4와 주변장치를 wifi로 연결하든 telemetry radio로 연결하든 MAVLink 메시지 전달에는 아무런 영향을 미치지 않는다.  

 

 

MAVLink의 메시지 전송 방식은 토픽 모드(topic mode)일대일 모드(point to point mode)혼합된 형태이다.

 

토픽 모드(topic mode)링크 대역폭을 절약하기 위해서 수신 시스템 및 컴포넌트 ID 신호 없이 메시지를 발행(publish) 하기 때문에 메시지를 수신(subscribe)할 특정 수신자가 없다.  따라서 발생한 메시지가 지상통제소로 가는 것인지 또는 companion computer로 가는 것인지 보증하지 않는다. 따라서 상통제소나 companion compute 같은 주변장치는 명령어가 이행되었는지 무인비행체의 상태를 자주 확인해야 한다.

 

이러한 전송방식을 멀티캐스트(multicast)라고도 하며 일반적으로 위치, 고도 등과 같은 모든 자동비행장치의 데이터 등에 사용된다.

 

토피 모드의 장점은 추가적인 오버해드를 생성할 필요가 없고 복수의 구독자가 이 메시지를 모두 수신할 수 있다는 것이다.

 

 

일대일 모드(point to point mode)란 메시지를 송신할 때 수신할 시스템 및 컴포넌트 ID를 사용하는데 재송신 기능을 포함하고 있어 메시지 전송이 보증된다.

 

이러한 방식은 임무, 파라미터 구성을 변경하거나 명령어를 송신할 경우 요구된다.

 

 

MAVLink는 두 개의 무결점 검사를 실행한다.

 

첫 번째 검사는 X.25 체크섬(CRC-16-CCITT)을 이용해서 전송 중 패킷의 무결점을 검사한다. 그러나 이 방법은 데이터가 전송되는 동안 변하지 않았다는 것만을 보증할 뿐 데이터 정의의 연속성을 보증하지는 않는다.

 

두 번째 무결점 검사는 동일한 ID를 갖는 두 개의 메시지가 동일한 정보를 포함하고 있다는 것을 보증하기 위한 데이터 기술(data description)의 무결점 검사로 CRC-16-CCITT를 통해 실행된다.

 

 

4. MAVLink 특징

 

- 매우 효율적이다.

 

MAVLink는 Marshaling 라이브러리로 설계되어 시스템의 상태 및 명령 메시지가 직렬화되어있다. 이 메시지는 플랫폼에 독립적인 특정한 이진 포맷(binary format)으로 실행되어야 한다. 

 

이러한  MAVLink의 이진 직렬화 특성으로 XML 등과 같은 다른 직렬 포맷과 비교해서 적은 오버헤드를 갖기 때문에 매우 효율적이다.

 

MAVLink 1의 경우 패킷 당 단지 8 비트 오버헤드를 가지며, MAVLink 2의 경우는 14 비트이지만 MAVLink 1과 비교 시 더 안전하고 확장성이 있다.

 

또한 MAVLink는 다른 추가 구성이 필요하지 않기 때문에 제한된 통신 대역폭을 갖는 응용 제품에 매우 적합하다.

 

- 신뢰성이 높다.

 

2009년 이래로 MAVLink는 긴 대기시간이나 잡음 등 장애가 있는 통신채널에서도 다양한 형태의 무인이동장치와 지상통제소 사이의 통신 프로토콜로 오랫동안 사용되어왔으며 패킷 누락 감지(packet drop detection), 오염, 패킷 서명 방법도 제공하고 있다.

 

- 대부분의 마이크로컴퓨터/운영체제 지원

 

MAVLinkARM7, ATMega, dsPic, STM32, 윈도우, 리눅스 맥OS, 안드로이드, iOS 등을 지원한다.

 

- 다양한 언어 지원

 

MAVLink는 다양한 컴퓨터 언어를 지원한다.

 

MAVLink v1의 경우 c, c++ 11, Python(2.7+, 3.3+), c#, Objective C, Java, JavaScript, TypeScript/JavaScript, Lua, Swift, Clojure, Go을, MAVLink v2의 경우 c, c++ 11, Python(2.7+, 3.3+), Java, JavaScript, TypeScript/JavaScript, Lua, Clojure, Go, Haskell을 지원한다.

 

- 네트워크 상에서 최대 255 시스템까지 동시에 적용이 가능

 

- on-board나 off-board 통신 가능

 

예를 들자면 지상통제소와 드론, 드론 자동비행장치와 MAVlink가 지원되는 드론 카메라 사이의 통신도 가능하다.

 

 

5. MAVLink 응용

 

많은 자동비행장치, 지상통제소, 통합 API, 프로젝트, 소프트웨어 패키지가 MAVLink를 사용하고 있다. 

 

- 자동비행장치

 

PX4, ArduPilot, AutoQuad 6 AutoPilot, iNAV, SmartAP AutoPilot

 

- 지상통제소

 

QGroundControl, Misson Planner, MAVProxy, UgCS(Universal Ground Control Station), Side Pilot, JAGCS, Flightzoomer, Inexa Control, Synturian Control

 

- 통합 API

 

MAVSDK, Dronecode Camera Manager, Rosetta Drone, pymavlink, MAVROS, DroneKit

 


MAVLink 개요 부분만 대략 정리해봤는데도 생소한 내용이 많다. 실제 적용해 보려면 시간이 오래 걸릴 것 같지만 흥미롭다. 


 

관련글 더보기

댓글 영역