我有一个红外摄像机/跟踪器,我通过串口进行通信。我现在正在使用pyserial模块执行此操作。摄像机以60 Hz的速率更新被跟踪物体的位置。为了获得被跟踪对象的位置,我执行一个pyserial.write(),然后用pyserial.read(serialObj.inWaiting())监听传入的回复。一旦收到回复/位置,就重新进入while循环,依此类推。我的问题与这种方法的可靠性和速度有关。我需要计算机以至少60Hz的速率获取该位置(然后该位置将通过UDP发送到实时操作系统)。这是Pyserial / Python能够做到的事情,还是应该考虑其他基于C的方法?
谢谢, 路加
答案 0 :(得分:1)
这更多的是延迟而不是速度。
Python总是执行内存分配和释放,但如果重用数据,C库将重用相同的内存。 因此,OS(C库/ UDP / IP堆栈)将比Python本身产生更大的影响。
我真的认为你应该使用RTOS机器上的串口并使用C代码和预先分配的缓冲区。
答案 1 :(得分:0)
我怀疑Python会很好地跟上数据。我的建议是尝试它,如果Python看起来滞后,那么试试PyPy - 一个Python的实现,它将你的大部分内部循环编译成机器代码,以便快速关闭C语言。
答案 2 :(得分:0)
Python 应保持良好状态,但最好的办法是确保监控每秒的读取次数。计算每秒读取完成的次数,如果此数字太低,则写入性能日志或类似内容。您还应该考虑将I / O部分与python程序的其余部分(如果有的话)解耦,因为pyserial读取调用正在阻塞。