利用VS第三方库解MavLink协议

 一、安转第三方包

        在右键依赖项,点击“管理NuGet程序包”,搜索“MAVLink”安装检索第一项的第三方包

二、协议解析代码示例

using System;
using System.IO;

namespace MavLinkProcess
{
    internal class Program
    {
        static void Main(string[] args)
        {
            FileStream fs = new FileStream(@"D:\xxxx\接收数据.bin", FileMode.Open);
            StreamWriter basic_info = new StreamWriter(@"D:\xxxx\载具类型、协议版本.txt");
            StreamWriter height_info = new StreamWriter(@"D:\xxxx\高度.txt");
            StreamWriter traj_info = new StreamWriter(@"D:\xxxx\航迹信息.txt");

            MAVLink.MavlinkParse parse = new MAVLink.MavlinkParse();
            int maxAltitude = int.MinValue; // 初始化最大高度为极小值
            bool isStart = false;

            while (fs.Position < fs.Length)
            {
                var msg = parse.ReadPacket(fs);

                // 载具类型、协议类型
                if (msg.msgid == 0)
                {
                    MAVLink.mavlink_heartbeat_t heartbeat_msg = (MAVLink.mavlink_heartbeat_t)msg.data;
                    int typeid = (int)heartbeat_msg.type;

                    bool isMavLink2 = msg.ismavlink2;

                    basic_info.WriteLine($"Protocol Type: {(isMavLink2 ? "MAVLink2" : "MAVLink1")}, Type ID: {typeid}");
                }

                // 出发点经纬度和高度
                if (msg.msgid == 49)
                {
                    // 协议类型
                    bool isMavLink2 = msg.ismavlink2;
                    // 载具ID
                    var COMPID = msg.compid;
                    traj_info.WriteLine($"Protocol Type: {(isMavLink2 ? "MAVLink2" : "MAVLink1")}, Component ID: {COMPID}");

                    MAVLink.mavlink_gps_global_origin_t p_start = (MAVLink.mavlink_gps_global_origin_t)msg.data;
                    traj_info.WriteLine($"Start Point - Longitude, Latitude");
                    traj_info.WriteLine($"{p_start.longitude * 1e-7},{p_start.latitude * 1e-7}");
                    height_info.WriteLine($"Altitude: {p_start.altitude * 1e-3}");
                    isStart = true;
                }

                // 航迹信息和记录最大高度
                if (isStart && msg.msgid == 33)
                {
                    MAVLink.mavlink_global_position_int_t p = (MAVLink.mavlink_global_position_int_t)msg.data;
                    //traj_info.WriteLine($"Current Position - Longitude, Latitude");
                    traj_info.WriteLine($"{p.lon * 1e-7},{p.lat * 1e-7}");
                    height_info.WriteLine($"Altitude: {p.alt * 1e-3}");

                    // 更新最大高度
                    if (p.alt > maxAltitude)
                    {
                        maxAltitude = p.alt;
                    }
                }
            }

            // 写入最大飞行高度
            height_info.WriteLine($"Maximum Flight Altitude: {maxAltitude / 1000}m");

            // 清理资源
            fs.Close();
            basic_info.Close();
            height_info.Close();
            traj_info.Close();
        }
    }
}

注:msgid对应的数据帧内容可以在网页Introduction · MAVLink Developer Guide中查看

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值