3.4 节点重名
问题描述
在 ROS2 中不同的节点可以有相同的节点名称,比如可以启动多个 turtlesim_node 节点,这些节点的名称都是 turtlesim。节点重名虽然是被允许的,但是开发者应该主动避免这种情况,因为节点重名时可能会导致操作上的混淆,仍以启动了多个 turtlesim_node 节点为例,当使用计算图(rqt_graph)查看节点运行状态时,由于他们的节点名称一致,那么虽然实际有多个节点,但是在计算图上显示一个。并且节点名称也会和话题名称、服务名称、动作名称、参数等产生关联,届时也可能会导致通信逻辑上的混乱。
那么在 ROS2 中如何避免节点重名呢?
解决思路
避免重名问题,一般有两种策略:
- 名称重映射,也即为节点起别名;
- 命名空间,是为节点名称添加前缀,可以有多级,格式:/xxx/yyy/zzz。
这也是在 ROS2 中解决重名问题的常用策略。
解决方案
上述两种策略的实现途径主要有如下三种:
- ros2 run 命令实现;
- launch 文件实现;
- 编码实现。
本节将逐一演示上述三种方案的实现语法。