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

XML : 작성한 custom message file
Out : 희망하는 디렉토리 지정. 예시에선 temp로 지정
Language : C
Protocol : 1.0
3. 통신 수행
두 대의 컴퓨터에 각각 Telemetery 연결
먼저 수신할 컴퓨터에서 아래 명령어 실행
./mavlink_receive
그다음 송신할 컴퓨터에서 아래 명령어 실행
./mavlink_send

만약 Telemetry 인식하지 못할 경우 포트 지정(깃허브 참고)
끝
* Reference
[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