5

我有一个红外摄像机/跟踪器,我通过串行端口与之通信。我目前正在使用 pyserial 模块来执行此操作。摄像机以 60 Hz 的速率更新被跟踪对象的位置。为了获得被跟踪对象的位置,我执行了一个 pyserial.write(),然后使用 pyserial.read(serialObj.inWaiting()) 监听传入的回复。收到回复/位置后,将重新进入 while 循环,依此类推。我的问题与这种方法的可靠性和速度有关。我需要计算机以至少 60Hz 的速率获取位置(然后该位置将通过 UDP 发送到实时操作系统)。这是 Pyserial/Python 能够做到的,还是我应该研究基于 C 的替代方法?

谢谢,卢克

4

3 回答 3

1

这更多的是延迟问题而不是速度问题。

Python总是执行内存分配和释放,但是如果数据被重用,相同的内存将被C库重用。因此操作系统(C 库/UDP/IP 堆栈)将比 Python 本身产生更大的影响。

我真的认为您应该在您的 RTOS 机器上使用串行端口并使用 C 代码和预分配的缓冲区。

于 2011-10-02T21:46:00.503 回答
0

我怀疑 Python 会很好地跟上数据。我的建议是尝试一下,如果 Python 出现滞后,然后尝试使用 PyPy——一种 Python 的实现,它将你的大部分内部循环编译为机器代码,以实现与 C 的速度接近。

http://pypy.org/

于 2011-10-02T22:01:01.523 回答
0

Python应该跟得上,但最好的办法是确保监控每秒读取的次数。计算每秒读取完成的次数,如果这个数字太低,则写入性能日志或类似内容。您还应该考虑将 I/O 部分与 python 程序的其余部分(如果有的话)分离,因为 pyserial 读取调用被阻塞。

于 2011-10-03T00:42:36.023 回答