微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Python 中同时从 2 个串行 USB 端口读取同步数据穿线?多处理?

如何解决在 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?