pyserial/python 和实时数据采集

5 投票
3 回答
4524 浏览
提问于 2025-04-17 03:33

我有一个红外摄像头/追踪器,我通过串口和它进行通信。目前我使用的是pyserial这个模块。这个摄像头每秒更新被追踪物体的位置60次。为了获取这个物体的位置,我会先执行一次pyserial.write(),然后用pyserial.read(serialObj.inWaiting())来监听是否有回复进来。一旦收到回复/位置,我就会重新进入循环,继续这个过程。我的问题是,这种方法的可靠性和速度怎么样。我需要计算机每秒至少获取60次位置(然后再通过UDP发送到实时操作系统)。请问pyserial和Python能做到这一点吗,还是我应该考虑使用基于C语言的其他方法?

谢谢,
卢克

3 个回答

0

我觉得Python在处理数据方面应该没问题。我的建议是你可以试试看,如果发现Python运行得比较慢,那就可以试试PyPy。PyPy是Python的一种实现方式,它会把你代码中大部分的循环部分转换成机器代码,这样速度就能接近C语言了。

http://pypy.org/

1

这主要是延迟的问题,而不是速度的问题。

Python在使用内存时总是会进行分配和释放,但如果数据被重复使用,C库会重新利用相同的内存。所以,操作系统(C库/UDP/IP协议栈)对性能的影响会比Python本身更大。

我真的觉得你应该在你的实时操作系统(RTOS)机器上使用串口,并且用C语言编写代码,提前分配好内存缓冲区。

0

Python 应该能够很好地处理这个问题,但最好的办法是监控一下你每秒读取的次数。也就是说,计算一下每秒完成了多少次读取,如果这个数字太低,就记录到一个性能日志里或者类似的地方。你还应该考虑把输入输出的部分和你其他的Python程序分开,因为pyserial的读取调用是阻塞的,也就是说在读取完成之前,程序会停下来等。

撰写回答