RFD868x模块MAVLink通信不稳定问题求助
基于RFD868x模块的MAVLink通信问题求助
我正在开发一套基于支持MAVLink协议的RFD868x模块的通信系统,使用Python的pymavlink库编写程序。
单向通信测试
测试时偶尔会出现BAD_DATA或UNKNOWN_DATA,但信息能正常传输。尝试其他消息类型时表现极差,仅1-2条消息能到达,随后通信就会冻结。
发送端代码:
import json import time from pymavlink import mavutil my_dict = { "lng": 12.34567898910, "lat": 12.34567898910 } # Establish connection to serial port master = mavutil.mavlink_connection('/dev/serial0', baud=57600) while True: text = json.dumps(my_dict) msg=master.mav.statustext_encode( mavutil.mavlink.MAV_SEVERITY_INFO, text.encode() ) master.mav.send(msg) print("sent") time.sleep(1)
接收端代码:
import json import time from pymavlink import mavutil # Establish connection to serial port master = mavutil.mavlink_connection('com7', baud=57600) print("begin") while True: msg = master.recv_match(blocking=True, timeout=.1) if msg!=None: if msg.get_type() != 'BAD_DATA': print (msg)
双向通信测试
此时文本消息能正常接收,但发送command消息(未被接收端识别)后,通信直接冻结。
发送端代码:
import json import time from pymavlink import mavutil master = mavutil.mavlink_connection('/dev/serial0', baud=57600) def send_message(dats:dict): text = json.dumps(dats) msg=master.mav.statustext_encode( mavutil.mavlink.MAV_SEVERITY_INFO, text.encode() ) master.mav.send(msg) print("sent") time.sleep(.1) my_dict = { "lng": 12.34567898910, "lat": 12.34567898910 } t=time.time() while True: if time.time()-t>1: send_message(my_dict) t=time.time() mess = master.recv_match(blocking=True, timeout=1) if mess!=None: print(mess) send_message(my_dict)
接收端代码:
import json import time from pymavlink import mavutil # Establish connection to serial port master = mavutil.mavlink_connection('com7', baud=57600) def cmdLong(dats:list): cmd = master.mav.command_long_encode( 0, 0, # target component ID mavutil.mavlink.MAV_CMD_USER_1, # command ID 0, # confirmation dats[0], # parameter 1 (not used) dats[1], # parameter 2 (not used) dats[2], # parameter 3 (not used) dats[3], # parameter 4 (not used) dats[4], # parameter 5 (string) dats[5], # parameter 6 (not used) dats[6] ) master.mav.send(cmd) print("writed") time.sleep(.1) t=time.time() print("begin") while True: print("Waiting for message...") if time.time()-t>20: cmdLong([0,0,0,0,0,0,0]) t=time.time() msg = master.recv_match(blocking=True, timeout=1) if msg!=None: if msg.get_type() != 'BAD_DATA': print (msg)
主从式通信测试
按正确顺序启动程序,但接收端完全无法检测到消息,也无法触发回复。
主端代码:
import json import time from pymavlink import mavutil # Establish connection to serial port master = mavutil.mavlink_connection('/dev/serial0', baud=57600) def send_message(dats:dict): text = json.dumps(dats) msg=master.mav.statustext_encode( mavutil.mavlink.MAV_SEVERITY_INFO, text.encode() ) master.mav.send(msg) print("sent") time.sleep(.1) my_dict = { "lng": 12.34567898910, "lat": 12.34567898910 } print("begin") while True: mess = master.recv_match(blocking=True, timeout=.1) if mess!=None: if mess.get_type() != 'BAD_DATA': print(mess) send_message(my_dict)
从端代码:
import json import time from pymavlink import mavutil # Establish connection to serial port master = mavutil.mavlink_connection('com7', baud=57600) def cmdLong(dats:list): cmd = master.mav.command_long_encode( 0, 0, # target component ID mavutil.mavlink.MAV_CMD_USER_1, # command ID 0, # confirmation dats[0], # parameter 1 (not used) dats[1], # parameter 2 (not used) dats[2], # parameter 3 (not used) dats[3], # parameter 4 (not used) dats[4], # parameter 5 (string) dats[5], # parameter 6 (not used) dats[6] ) master.mav.send(cmd) print("writed") time.sleep(.1) print("begin") cmdLong([0,0,0,0,0,0,0]) while True: msg = master.recv_match(blocking=True, timeout=.1) if msg!=None: if msg.get_type() != 'BAD_DATA': print (msg) cmdLong([0,0,0,0,0,0,0])
我不清楚这些问题的原因,恳请各位提供帮助!
内容的提问来源于stack exchange,提问作者Domkrt
相关产品推荐
相关产品推荐

