我在覆盆子pi上运行websocket-client,使用跳跃运动websocket服务器发送的数据来控制伺服。通过跳跃运动通过websocket连接发送的数据量如此之高,以至于pi赶上最近的消息会有很长的延迟,只有在运行的时间越长,消息就越差。
如何丢弃队列中的所有旧消息,并在检查时使用最新消息?目前我正在这样做:
ws = create_connection("ws://192.168.1.5:6437")
while True:
result = ws.recv()
resultj = json.loads(result)
if "hands" in resultj and len(resultj["hands"]) > 0:
# print resultj["hands"][0]["palmNormal"]
rotation = math.atan2(resultj["hands"][0]["palmNormal"][0], -resultj["hands"][0]["palmNormal"][1])
dc = translate(rotation, -1, 1, 5, 20)
pwm.ChangeDutyCycle(float(dc))
答案 0 :(得分:1)
由于Leap服务以大约每秒110帧的速度发送数据,因此您有大约9ms的时间来进行任何处理。如果你超过这个,那么你将落后。最简单的解决方案可能是创建一个人工应用帧速率。对于每个循环,如果您还没有达到下次更新的时间,那么您只需获取下一条消息并将其丢弃。
2.0
(我还没有对您的代码进行此修改,因此通常的警告适用)