pymavlink 解析自定义mavlink消息。

1.下载mavlink_master包,用于将xml 文件生成对应的py文件。地址是
https://codeload.github.com/mavlink/mavlink/zip/refs/heads/master
进入目录运行python .\mavgenerate.py
呈现gui程序
在这里插入图片描述
2.根据发送端的消息定义格式修改接收解析段的pymavlink有关库。
可修改…\venv\Lib\site-packages\pymavlink\dialects\v10\common.xml文件中的messageid中的fields。发送的msgid 要与接收的msgid保持一致!。
3.使用MAVLINK Generator工具。生成common.py文件。
4.将common.py中定义的消息名称有关类和函数复制到
…\venv\Lib\site-packages\pymavlink\dialects\v10\ardupilotmega.py文件内。
eg:我修改的gps_raw_int这个消息名称。那么需要修改的函数有;

 def gps_raw_int_encode(....
 def gps_raw_int_send(.....
 class MAVLink_gps_raw_int_message(MAVLink_message):
 setattr(MAVLink_gps_raw_int_message, "name", mavlink_msg_deprecated_name_property())
 

如果你的字段个数发生了变化,还需要修改…\venv\Lib\site-packages\pymavlink\mavutil.py

   if float(mavlink.WIRE_PROTOCOL_VERSION) >= 1:
            self.messages['HOME'] = mavlink.MAVLink_gps_raw_int_message(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

最后接收端的代码如下:

import time
from pymavlink import mavutil

master = mavutil.mavlink_connection(
    'COM6',
    baud=115200,
)
# master.mav.heartbeat_send(mavutil.mavlink.MAV_TYPE_GCS,
#                                                 mavutil.mavlink.MAV_AUTOPILOT_INVALID, 0, 0, 0)
master.mav.heartbeat_send(mavutil.mavlink.MAV_TYPE_ONBOARD_CONTROLLER,
                                                mavutil.mavlink.MAV_AUTOPILOT_INVALID, 0, 0, 0)
while True:
    msg = master.recv_match(blocking=True,type='GPS_RAW_INT')
    try:

        if not msg:
            continue
        if msg.get_type() == "BAD_DATA":
            if mavutil.all_printable(msg.data):
                print(msg.data)
        else:
            # Message is valid
            print(msg.to_dict(), msg.get_srcSystem(),msg.get_srcComponent(),  msg.get_type())
    except:
        pass
    time.sleep(0.1)
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值