如何在多机器人中发布新主题以 slam gmapping 包

How to publish a new topic to slam gmapping package in multiple-robot

我已经在终端中使用这个命令将/scan_new主题发布到tb3_0机器人ROS_NAMESPACE=tb3_0 rosrun gmapping slam_gmapping scan:=scan_new set_base_frame:=tb3_0/base_footprint set_odom_frame:=tb3_0/odom set_map_frame:=tb3_0/map中的gmapping包,但是gamping包没有订阅/scan_new话题。确保 tb3_0 机器人的 gmapping 包订阅 /scan_new 主题的正确命令是什么?

*注:如图红字为ann_publisher节点发布到/scan_new,gmapping包订阅/scan_new主题

这没有按预期工作,因为您正在为节点提供命名空间。执行此操作时,未指定命名空间的主题重映射将默认为节点的命名空间。这里是 /tb3_0,意味着它实际上正在尝试订阅 /tb3_0/scan_new。有几种不同的方法可以解决这个问题,第一种是您可以使用 / 指定全局命名空间,如下所示:scan:=/scan_new 。您也可以做同样的事情,但是在启动文件中:

<?xml version="1.0"?>
<launch>
    <node ns="tb3_0" name="slam_gmapping" pkg="gmapping" type="slam_gmapping" output="screen">
        <param name="base_frame" value="tb3_0/base_footprint" />
        <param name="odom_frame" value="tb3_0/odom" />
        <param name="map_frame" value="tb3_0/map" />
        <remap from="scan" to="/scan_new" />
    </node>
</launch>

高度建议使用启动文件方法。它更干净,并且随着您想要 运行 增加的节点数量的增加而更容易扩展。