pyserial / python和实时数据采集

时间:2011-10-02 21:38:42

标签: python real-time pyserial

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

谢谢, 路加

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

我怀疑Python会很好地跟上数据。我的建议是尝试它,如果Python看起来滞后,那么试试PyPy - 一个Python的实现,它将你的大部分内部循环编译成机器代码,以便快速关闭C语言。

http://pypy.org/

答案 2 :(得分:0)

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