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 mavutilmaster = 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:continueif msg.get_type() == "BAD_DATA":if mavutil.all_printable(msg.data):print(msg.data)else:# Message is validprint(msg.to_dict(), msg.get_srcSystem(),msg.get_srcComponent(), msg.get_type())except:passtime.sleep(0.1)