2

目标:

  • 从一个 pi 到另一个 pi 无线驱动多个伺服/RC 电机。
  • 本质上,我想使用 pi 构建一个 RC 遥控器,第二个 pion 是接收器端。

现在我通过一个稳定的射频链路模块进行串行传输,并且几乎没有损坏的条目。由于射频链路模块,串行传输的最大波特率为 4800。

问题:

发射器 pi 打印值和接收器 pi 打印值之间似乎存在 2-4 秒的差异。我无法弄清楚这种延迟的来源和原因,以及为什么如此之大。请注意,接收 pi 上的信号与发射器 pi 发送的数据完全相同,但要晚 2-4 秒。即使当我绕过发射器/接收器模块并用跳线连接 Tx 和 Rx 引脚时,也会看到相同的延迟。

是什么导致接收 Pi 上的数据被解码这么晚?我已经粘贴在下面的代码中。

---------- Tx Pi -----

import serial
import struct

ser = serial.Serial("/dev/ttyAMA0")
ser.baudrate = 4800

iCount = 0
bProgramLoop = True
while (bProgramLoop == True):

    iOne = iCount
    if (iOne == 100):
        iOne = 0
        iTwo += 1
        iCount = 0
    if (iTwo == 100):
        iTwo = 0
        iThree += 1
    if (iThree == 100):
        iThree = 0
        iFour += 1
    if (iFour == 100):
        iFour = 0
        iFive += 1
    if (iFive == 100):
        iFive = 0

    lData = [iOne,iTwo,iThree,iFour,iFive] # i have done it like this so that I can track in real time where the transmitter is and receiver is with respect to real time changes on the transmitter side
    sData = struct.pack('5B',*lData)
    ser.write(sData)
    print sData

    iCount += 1

-------------- Rx Pi -----

import serial
import struct

ser = serial.Serial("/dev/ttyAMA0")
ser.baudrate = 4800

bProgramLoop = True
while (bProgramLoop == True):
    sSerialRead = ser.read(5)
    tData = struct.unpack('5B',sSerialRead)
    print tData

Tx Pi 打印字符串 sData 和 Rx Pi 打印 touple tData 之间的时间差在 2-4 秒之间。struct.unpack 函数慢吗?

我需要这个时间差绝对最小。有任何想法吗?

4

2 回答 2

1

首先,我不确定这ser.write()是一个异步调用。如果这是使用 pySerial 库,文档说这是一个阻塞调用。

也许尝试:

...
ser.write(sData)
ser.flush()    # Force the 'send'
print sData
...

此外,您ldata可能更容易像这样填充:

lData = [iCount % 100, iCount % 10000, ...etc]

此外,设置写入超时可能会有所帮助(但我不这么认为)。

于 2016-05-22T14:12:08.810 回答
0

(代表 OP 发布)。

正如 Doddie 所建议的,在 ser.write 之后使用 ser.flush 命令。这会在 Rx 侧产生近乎即时的响应。整体主循环采样率下降了一点,但至少对我来说这不是一个交易破坏者。

于 2016-05-25T20:38:09.247 回答