无法使用IMU制造商的python2.7示例脚本传递OSC数据

时间:2016-11-25 02:40:17

标签: linux multithreading python-2.7 sockets osc

我正在使用高刷新率IMU(x-IO technologies NGIMU),它以osc格式输出所有数据。制造商提供以下python脚本来提供Linux平台上的数据(我正在运行Ubuntu 16.04)

'''
NGIMU Demo python v2.7 script written by Tom Mitchell (teamxe.co.uk) 2016
Requires pyOSC https://trac.v2.nl/wiki/pyOSC
'''

import socket, OSC, threading, time

# Change this to the NGIMU IP address
send_address = '192.168.1.1', 9000

# Set the NGIMU to send to this machine's IP address
c = OSC.OSCClient()
c.connect(send_address)
msg = OSC.OSCMessage()
msg.setAddress('/wifi/send/ip')
msg.append(str(socket.gethostbyname(socket.gethostname())))
c.send(msg)
c.close()

# Set up receiver
receive_address = '192.168.1.2', 8000
s = OSC.OSCServer(receive_address)
s.addDefaultHandlers()

def sensorsHandler(add, tags, args, source):
    print add + str(args)

def quaternionHandler(add, tags, args, source):
    print add + str(args)

def batteryHandler(add, tags, args, source):
    print add + str(args)

# Add OSC handlers
s.addMsgHandler("/sensors", sensorsHandler)
s.addMsgHandler("/quaternion", quaternionHandler)
s.addMsgHandler("/battery", batteryHandler)

# Start OSCServer
print "\nUse ctrl-C to quit."
st = threading.Thread(target = s.serve_forever)
st.start()

# Loop while threads are running
try :
    while 1 :
        time.sleep(10)

except KeyboardInterrupt :
    print "\nClosing OSCServer."
    s.close()
    print "Waiting for Server-thread to finish"
    st.join()
    print "Done"

IMU拥有自己的网络,我连接到要接收数据的计算机。 我从脚本中引用的位置安装了pyOSC。 当我运行脚本时,没有传递数据,只有消息“使用ctrl-C退出”。 所有连接似乎都正常进行。当脚本运行时,我可以使用Ubuntu防火墙配置gui在正确的ip和端口看到udp连接。我试过禁用防火墙,但没有效果。 另外,我使用另一台计算机将udp数据包发送到该IP和端口并确认收到。 说我是一个编码新手是太慷慨了。尽管如此,我需要运行此脚本。非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

问题是

socket.gethostbyname(socket.gethostname())

未设置正确的IP。您应该更改为

msg.setAddress('/wifi/send/ip')
msg.append('192.168.1.2')