没有消息类型的 ROS cpp 回调

ROS cpp callback without message type

我想创建一个能够在不知道消息类型的情况下收听主题的 ROS 节点。在 python 中,这是可能的,如下所示:

https://schulz-m.github.io/2016/07/18/rospy-subscribe-to-any-msg-type/

我试过了,效果很好。但是,我想避免复制整个消息;因此,我需要在 roscpp nodelet 中使用该功能。

从本质上讲,这类问题非常 pythonic 并且在 c++ 中更难解决。话虽如此,已经有一种(某种)解决方案。看看 ros_msg_parser.

语法不太好,我什至不确定这是否是个好主意,但它可以让您生成通用订阅者。来自链接回购的示例:

boost::function<void(const RosMsgParser::ShapeShifter::ConstPtr&)> callback;
callback = [&parsers, topic_name](const RosMsgParser::ShapeShifter::ConstPtr& msg) -> void {
    topicCallback(*msg, topic_name, parsers);
};
ros::Subscriber subscriber = nh.subscribe(topic_name, 10, callback);