如何解决在 Python 中同时从 2 个串行 USB 端口读取同步数据穿线?多处理?
我正在使用 RTK GPS 导航构建由 RaspBerry Pi 控制的自主漫游车。我在流动站上使用两个独立的 U-Blox RTK GPS 模块以 4Hz 运行以获得非常准确的位置和航向计算,它们都通过 USB 端口连接到 Pi。我正在使用 pyserial 库来读取通过 USB 输出的 NMAE 句子。我遇到的问题是每个模块发送的串口数据是精确同步的,所以在为一个端口调用Serial.readline()时,发送到另一个端口的数据丢失了。
`class GPS():
def __init__(self,port,baud):
self.gpsSerial = serial.Serial(port,baud)
# init some variables
return
def read(self):
NMEASentance = str(self.gpsSerial.readline())
if NMEASentance not what_i_wanted_or_blank:
return 0
# do some processing,update vars
return 1
frontGps = GPS(port1,baud)
rearGps = GPS(port2,baud)
while True:
if frontGps.read():
# grab the new data
if rearGps.read():
# grab the new data
最终发生的情况是,当一个串行端口正在被读取并处理数据时,另一个正在同时传输并且被错过了。我试过一个接一个地进行读取并将处理留待以后处理,但问题仍然存在。 我如何同时读取两个端口?线程化每个串行读取是否有效(它们仍将在同一个进程中运行,因此不会并发执行,对吗?) 如果解决方案是多处理,那么有人可以发布一些框架代码供我遵循,因为这个问题确实困扰着我。 感谢您的帮助!
解决方法
很想得到一些代码: 设置两个进程从串口读取并加入共享队列
我有一个 GPS 串行环路在运行,需要为磁力计添加第二个串行链路,并且需要一种方法将两个流分开
目前,使用 Neo6M GPS 并注意到 #GPRMC 消息就像一个心跳,在每个 UTC 秒刻度上每秒传输一次。
#GPRMC 是 GPS 标准语句,用于传输 UTC 时间/日期 (以及位置、速度和航向)所以它会在 UTC 秒 = 00.00 传输
在阅读有关问题后,我意识到所有 GPS 接收器可能都在做同样的事情。因此,如果您有任意数量的电源打开,它们将全部同步。
如果我的理论是正确的: 即使相隔几大洲,也可以让支持 GPS 的 pi 士兵机器人大军步调一致。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。