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)