我需要使用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
答案 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)
例如,像这样