본문 바로가기
Drone/MAVROS

MAVLINK Custom message 구성 및 전송

by yongee97 2023. 7. 3.

1. mavlink 통신 예제 다운로드

https://github.com/yongeePark/c_uart_interface_example.git

 

GitHub - yongeePark/c_uart_interface_example: Simple MAVLink to UART interface example for *nix systems

Simple MAVLink to UART interface example for *nix systems - GitHub - yongeePark/c_uart_interface_example: Simple MAVLink to UART interface example for *nix systems

github.com

https://github.com/yongeePark/c_uart_interface_example.git

2. Custom Message 제작

 

아래와 같이 원하는 정보 포함하는 xml 파일 작성

본 예제에서는 20개의 x,y,z point 보낸다고 가정

 

message id는 구간이 있으며 기존 메세지랑 겹칠 경우 통신이 안 되는 것으로 추정됨

만약 전송이 안될경우 id를 바꿔가며 통신 시도해야 함

<?xml version='1.0'?>
    <mavlink>
        <include>common.xml</include>
        <version>3</version>
        <enums></enums>
        <messages>
            <message id="205" name="POINTCLOUD">
            <description>Custom Point Cloud Message</description>
            <field type="uint32_t" name="number" units="ms" display="default">Timestamp in milliseconds</field>
            <field type="float" name="x01" units="m" display="default">position</field>
            <field type="float" name="y01" units="m" display="default">position</field>
            <field type="float" name="z01" units="m" display="default">position</field>
            <field type="float" name="x02" units="m" display="default">position</field>
            <field type="float" name="y02" units="m" display="default">position</field>
            <field type="float" name="z02" units="m" display="default">position</field>
            <field type="float" name="x03" units="m" display="default">position</field>
            <field type="float" name="y03" units="m" display="default">position</field>
            <field type="float" name="z03" units="m" display="default">position</field>
            <field type="float" name="x04" units="m" display="default">position</field>
            <field type="float" name="y04" units="m" display="default">position</field>
            <field type="float" name="z04" units="m" display="default">position</field>
            <field type="float" name="x05" units="m" display="default">position</field>
            <field type="float" name="y05" units="m" display="default">position</field>
            <field type="float" name="z05" units="m" display="default">position</field>
            <field type="float" name="x06" units="m" display="default">position</field>
            <field type="float" name="y06" units="m" display="default">position</field>
            <field type="float" name="z06" units="m" display="default">position</field>
            <field type="float" name="x07" units="m" display="default">position</field>
            <field type="float" name="y07" units="m" display="default">position</field>
            <field type="float" name="z07" units="m" display="default">position</field>
            <field type="float" name="x08" units="m" display="default">position</field>
            <field type="float" name="y08" units="m" display="default">position</field>
            <field type="float" name="z08" units="m" display="default">position</field>
            <field type="float" name="x09" units="m" display="default">position</field>
            <field type="float" name="y09" units="m" display="default">position</field>
            <field type="float" name="z09" units="m" display="default">position</field>
            <field type="float" name="x10" units="m" display="default">position</field>
            <field type="float" name="y10" units="m" display="default">position</field>
            <field type="float" name="z10" units="m" display="default">position</field>
            <field type="float" name="x11" units="m" display="default">position</field>
            <field type="float" name="y11" units="m" display="default">position</field>
            <field type="float" name="z11" units="m" display="default">position</field>
            <field type="float" name="x12" units="m" display="default">position</field>
            <field type="float" name="y12" units="m" display="default">position</field>
            <field type="float" name="z12" units="m" display="default">position</field>
            <field type="float" name="x13" units="m" display="default">position</field>
            <field type="float" name="y13" units="m" display="default">position</field>
            <field type="float" name="z13" units="m" display="default">position</field>
            <field type="float" name="x14" units="m" display="default">position</field>
            <field type="float" name="y14" units="m" display="default">position</field>
            <field type="float" name="z14" units="m" display="default">position</field>
            <field type="float" name="x15" units="m" display="default">position</field>
            <field type="float" name="y15" units="m" display="default">position</field>
            <field type="float" name="z15" units="m" display="default">position</field>
            <field type="float" name="x16" units="m" display="default">position</field>
            <field type="float" name="y16" units="m" display="default">position</field>
            <field type="float" name="z16" units="m" display="default">position</field>
            <field type="float" name="x17" units="m" display="default">position</field>
            <field type="float" name="y17" units="m" display="default">position</field>
            <field type="float" name="z17" units="m" display="default">position</field>
            <field type="float" name="x18" units="m" display="default">position</field>
            <field type="float" name="y18" units="m" display="default">position</field>
            <field type="float" name="z18" units="m" display="default">position</field>
            <field type="float" name="x19" units="m" display="default">position</field>
            <field type="float" name="y19" units="m" display="default">position</field>
            <field type="float" name="z19" units="m" display="default">position</field>
            <field type="float" name="x20" units="m" display="default">position</field>
            <field type="float" name="y20" units="m" display="default">position</field>
            <field type="float" name="z20" units="m" display="default">position</field>

            </message>
        </messages>
    </mavlink>

 

이후 아래 명령어를 입력하여 generator 실행

cd c_uart_interface_example/mavlink/include/mavlink/2.0
python3 mavgenerate.py

Mavlink Generator

 

 

XML : 작성한 custom message file

Out : 희망하는 디렉토리 지정. 예시에선 temp로 지정

Language : C

Protocol : 1.0

 

3. 통신 수행

 

두 대의 컴퓨터에 각각 Telemetery 연결

 

먼저 수신할 컴퓨터에서 아래 명령어 실행

./mavlink_receive

그다음 송신할 컴퓨터에서 아래 명령어 실행

./mavlink_send

통신 성공

 

 

만약 Telemetry 인식하지 못할 경우 포트 지정(깃허브 참고)

 

 

 

 

* Reference

https://blog.naver.com/PostView.naver?blogId=jswcomkr&logNo=221427486273&parentCategoryNo=&categoryNo=63&viewDate=&isShowPopularPosts=true&from=search 

 

[LTE 활용 드론 제어] #2 MAVLink 프로토콜

1. MAVLink 프로토콜이란? 무인 항공기, 특히 드론 분야에서 무선 통신은 없어서는 안 될 필수적인 기...

blog.naver.com

https://imsoftpro.tistory.com/9

 

[Mavlink] Custom Mavlink message 생성 (c#)

1. C# 전용 Mavlink generator 다운https://github.com/dsuarezv/mavlink.netdsuarezv/mavlink.netmavlink.net - A better MavLink object generation for C#. Richer message classes are generated from the object definitions.github.com2. 압축 풀고 Visual Stud

imsoftpro.tistory.com

https://mavlink.io/en/messages/common.html

 

Messages (common) · MAVLink Developer Guide

 

mavlink.io