通过ROS发布OSC消息

时间:2019-04-23 12:34:47

标签: python ros osc

我需要使用IMU数据编写ROS发布者节点(然后是订户节点),该IMU数据是使用OSC从IMU中发布的。我有一个python脚本,它将数据打印到屏幕上,但是我需要能够通过ROS发布。

我见过rososc,但这似乎与使用我不使用的智能设备有关,我只是不了解将其转换为我所需要的东西。

我已经使用一些示例作为基础编写了一些代码,但是目前它只是发布“ none”而不是数据流。

如何使OSC在ROS节点中发布,而不仅仅是在屏幕上发布?

这是我的代码-与原始script基本相同,但其中混入了一些ROS命令。

# I've added this function
def handlerfunction(s, x, y, z, w): 
    # Will receive message data unpacked in s, x, y
    pass

def generate_imu():
    parser = argparse.ArgumentParser()
    parser.add_argument("--ip", default="0.0.0.0", help="The ip to listen on")
    parser.add_argument("--port",
      type=int, default=8084, help="The port to listen on")
    args = parser.parse_args()

    dispatcherObj = dispatcher.Dispatcher()
    # dispatcherObj.map("/quaternion", print) #- original command to print data to screen
    pub=rospy.Publisher('imu_pub',Float32,queue_size=10)
    rospy.init_node('generate_imu')
    while not rospy.is_shutdown():
        #/quaternion is imu data followed by numerical data. I replaced 'print' with handlerfunction
        ngimu_out = dispatcherObj.map("/quaternion",handlerfunction)
        rospy.loginfo("imu: %s", ngimu_out)
        pub.publish(ngimu_out)

    server = osc_server.ThreadingOSCUDPServer((args.ip, args.port), dispatcherObj)
    print("Serving on {}".format(server.server_address))

    server.serve_forever()

评论行是 我得到: [INFO] [1556016429.254443]:imu:无

我想得到: [INFO] [1556016429.254443]:imu:0.02763 3.282368 9.367127 0.32357235 0.775263

如果有人可以帮助甚至指出正确的方向,我将非常感激。

tia

1 个答案:

答案 0 :(得分:0)

# I've added this function
def handlerfunction(s, x, y, z, w): 
    # Will receive message data unpacked in s, x, y
    pass

这部分什么都不做。

如何尝试?

class imu_data:

    def __init__(self):
        self.s = 0
        self.x = 0
        self.y = 0
        self.z = 0
        self.w = 0


# I've added this function
def handlerfunction(s, x, y, z, w): 
    # Will receive message data unpacked in s, x, y
    newData = imu_data() //creating new object
    newData.s = s;
    newData.x = x;
    newData.y = y;
    newData.z = z;
    newData.w = w;
    return newData

并且:

rospy.init_node('generate_imu')
ngimu_out = new imu_data()
while not rospy.is_shutdown():

能否请您检查一下是否可行? 如果它不尝试单独打印。

print("s: " + ngimu_out.s)

例如,像这样