一、背景介绍
小弟在ROS学习笔记(1)(https://blog.csdn.net/jik198558/article/details/105163565)的最后(2.2.3)发现remap标签没有实现预想的功能,于是做了以下几个实验来理解remap的作用域,希望对小伙伴们有帮助。
三、实验过程
2.1代码概述
node:mtalker1 中发布两个话题chatter及chatterp
mlistener1 中订阅分别订阅两个话题remapchatter及chatterp
mlistener2 中订阅分别订阅两个话题remapchatter及chatterp
其中chatter和remapchatter消息类型相同
2.2实验结果
2.2.1测试用例及结果
备注:表格里的通讯结果是以是否接受到chatter话题消息为依据的
序号 | remap 位置 | remap方向 | mlistener1 通讯结果 | mlistener2 通讯结果 | 附录 |
---|---|---|---|---|---|
1 | 与node标签平行 | from="/remapchatter" to="/A/chatter" | 失败 | 成功 | 图2.1.1 |
2 | 与node标签平行 | from="/A/remapchatter" to="/A/chatter" | 成功 | 失败 | 图2.1.2 |
3 | 与node标签平行 | from="/A/chatter" to="/A/remapchatter" | 成功 | 失败 | 图2.1.3 |
4 | 与node标签平行 | from="/A/chatter" to="/remapchatter" | 失败 | 成功 | 图2.1.4 |
5 | 处于mtalker1的node标签内部 | from="/A/chatter" to="/remapchatter" | 失败 | 成功 | 图2.2.1 |
6 | 处于mtalker1的node标签内部 | from="/A/chatter" to="/A/remapchatter" | 成功 | 失败 | 图2.2.2 |
7 | 处于mtalker1的node标签内部 | from="/A/remapchatter" to="/A/chatter" | 失败 | 失败 | 图2.2.3 |
8 | 处于mtalker1的node标签内部 | from="/remapchatter" to="/A/chatter" | 失败 | 失败 | 图2.2.4 |
9 | 处于mlistener1 的node标签内部 | from=/A/chatter" to="/A/remapchatter" | 失败 | 失败 | 图2.3.1 |
10 | 处于mlistener1 的node标签内部 | from=/A/chatter" to="/remapchatter" | 失败 | 失败 | 图2.3.2 |
11 | 处于mlistener1 的node标签内部 | from="/A/remapchatter" to="/A/chatter" | 成功 | 失败 | 图2.3.3 |
12 | 处于mlistener1 的node标签内部 | from="/remapchatter" to="/A/chatter" | 失败 | 失败 | 图2.3.4 |
13 | 处于mlistener2 的node标签内部 | from=/A/chatter" to="/A/remapchatter" | 失败 | 失败 | 图2.4.1 |
14 | 处于mlistener2 的node标签内部 | from=/A/chatter" to="/remapchatter" | 失败 | 失败 | 图2.4.2 |
15 | 处于mlistener2 的node标签内部 | from="/A/remapchatter" to="/A/chatter" | 失败 | 失败 | 图2.4.3 |
16 | 处于mlistener2 的node标签内部 | from="/remapchatter" to="/A/chatter" | 失败 | 成功 | 图2.4.4 |
2.2.2实验数据记录
图2.1.1
图2.1.2
图2.1.3
图2.1.4
图2.2.1
图2.2.2
图2.2.3
图2.2.4
图2.3.1
图2.3.2
图2.3.3
图2.3.4
图2.4.1
图2.4.2
图2.4.3
图2.4.4
三、实验结论
1,当remap和node平行时,from和to可以为launch文件中任意节点。
2,当remap处于节点内部时,from必须为当前节点所定义的内容,to可以是launch文件中任意节点。见测试用例表格条目(6,11,16)
四、疑问
1,在做实验过程中发现直接用launch文件启动mtalker1,mlistener1,mlistener2节点后,在控台使用ctrl+c则会将所有节点退出,使用rosnode list指令查看所有节点均被注销。launch文件如下:
<launch>
<remap from="/A/remapchatter" to="/A/chatter"/>
<node pkg="learning_communication" type="mtalker1" name="talker" ns="/A" launch-prefix="xterm -e"/>
<node pkg="learning_communication" type="mlistener1" name="mlistener1" ns="/A" launch-prefix="xterm -e"/>
<node pkg="learning_communication" type="mlistener1" name="mlistener2" launch-prefix="xterm -e"/>
</launch>
2,如果先使用roscore控台启动master后,再用launch文件启动mtalker1,mlistener1,mlistener2节点后,在控台使用ctrl+c则会发现这些节点依旧存在,不知道为什么有大神可以解释下吗?下图分别是rosnodelist指令截图和rqt截图,其中rqt中为每个节点均加了一个n—的前缀。不知道什么意思。