我正在尝试获取机器人/扫描事件通知。 它对我有用:
// Subscribe to the simulated robot's laser scan topic
laserSub = nh.subscribe("/scan", 1, &MyObject::scanCallback, this);
但是当我将主题更改为 my_robot_name/scan 时,它不起作用:我的回调没有收到任何机器人扫描通知。
// Subscribe to the simulated robot's laser scan topic
laserSub = nh.subscribe(my_robot_name + "/scan", 1, &MyObject::scanCallback, this);
我运行“rostopic info my_robot_name/scan”,看起来根本没有发布者到 my_robot_name/scan。
我该如何解决这个问题?
根据您的说法,没有人发布该主题,难怪您没有收到任何消息。如果你想获取消息,你需要先发布消息。
您遇到的问题是
/scan
是全局命名空间(前缀/
)中的主题。要将其发布到所需的命名空间,您可以在发布者中更改它:
发布到所需的命名空间
ros::Publisher publisher = n.advertise<topic>("my_robot_name/scan", 1);
在启动文件中使用组
如果您对发布者没有任何影响,您可以使用remap并将其重新映射到所需的主题:
<node ...start your node...>
<remap from="/scan" to="my_robot_name/scan" />
</node>
这样
my_robot_name/scan
主题将可供您在节点中回调。