Мне нужно написать узел издателя ROS (и затем абонентский узел), используя данные IMU, которые публикуются из IMU с использованием OSC. У меня есть скрипт Python, который будет печатать данные на экран, но мне нужно иметь возможность опубликовать это через ROS.
Я видел rososc, но это связано с использованием интеллектуальных устройств, которыми я не пользуюсь, и я просто не знаю достаточно, чтобы иметь возможность преобразовать его в то, что мне нужно.
Я написал некоторый код, используя примеры, которые я нашел в качестве основы, но на данный момент он просто публикует «нет» вместо потока данных.
Как мне опубликовать OSC в узле ROS, а не только на экране?
Вот мой код - он в основном такой же, как и оригинальный скрипт , но с некоторыми смешанными командами 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
Если кто-нибудь может помочь или даже направить меня в правильном направлении, я был бы так благодарен.
1020 * ТИА *