在写launch文件的过程中出现了remappings效果和设想不一致的情况,后来发现是自己对remappings功能的理解错误。因为之前没有在网上找到相关的解释,于是在此记个随笔。
首先ROS2文档中的相关内容放在这里:launch文件介绍。
然后我们举一个例子:
Node(
package='pkg',
executable='node',
name='pkg_node',
remappings=[
('/topic_A', '/topic_B'),
]
)
这里的remappings应该理解为:把我在node中所有需要写话题名的位置里面写进去的"topic_A",直接改为"topic_B"这几个字。而不能理解为:在node之前加一个“过滤器”,每当node接收到topic_A时,过滤器把topic_A屏蔽掉,并且转而把其中的内容放进topic_B话题再发布给node。这两者实质上是完全相反的映射!
举个例子说,假如node原本订阅了topic_A,那么需要向topic_B发布话题才能被node接收到;假如node原本向topic_A发布消息,那消息实际将被发布到topic_B上。
所以说不能将remappings理解为一种“消息传递方向上的映射”,而要理解为一种在节点内部“字面的映射”或者说是“符号的映射”。remappings的映射不具有方向性。