我使用Opentrack来跟踪头部动作,坐标通过UDP发送到我的Python程序。该程序在正确接收坐标的意义上起作用,但是我注意到在信息到达之前存在很大的延迟。
在观察到行为后,在我看来,跟踪软件将坐标发送到我的程序从中获取数据的某个缓冲区,但是我的程序获取数据的速度比缓冲区填满的速度慢。这意味着如果我移动我的头部,那么所有新坐标都已被检测到,但程序必须逐渐通过缓冲区,这会导致延迟。这是一个问题,因为我将其用作实时应用程序,需要立即将当前坐标发送到我的程序。
我不确定问题是否在Opentrack软件中,如果我应该向该社区寻求帮助,或者我是否可以在Python中修复它...
基本上,我只是希望没有缓冲区,而是只发送当前坐标(如果我的应用程序中丢失了一些测量坐标,则无关紧要)。
def connect(self, PORT):
HOST = '' # Symbolic name meaning all available interfaces
#PORT = 8888 # Arbitrary non-privileged port
# Datagram (udp) socket
try :
self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print 'Socket created'
except socket.error, msg :
print 'Failed to create socket. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()
# Bind socket to local host and port
try:
self.s.bind((HOST, PORT))
except socket.error , msg:
print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()
print 'Socket bind complete'
#now keep talking with the client
def fetch(self):
# receive data from client (data, addr)
d = self.s.recvfrom(1024)
data = d[0]
addr = d[1]
if data:
reply = 'OK...' + data
self.s.sendto(reply , addr)
unpacked_data = struct.unpack('dddddd', data)
x = unpacked_data[0]
y = unpacked_data[1]
z = unpacked_data[2]
return (x, y, z)
答案 0 :(得分:0)
所以我通过添加行
解决了这个问题self.s.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1)
在我的代码中。这将缓冲区设置为1,这解决了我的问题。