You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 21:39:58