ros 节点话题重映射和命名空间(以turtlesim为例)

由于ROS必须有唯一的名称,不论是节点还是话题都是如此,简单地两次执行相关节点将导致之前执行的节点终止。但是我们可以在运行时更改节点的名称,而不需要运行额外的程序或更改源代码。方法包括命名空间(namespace)和重新映射(remapping)。
这里说一下关于节点和话题的名称重映射,以turtlesim这个简单的小实验为例子。
节点名称重映射:

  1. 记得先打开ros_maseter,运行roscore.

  2. rosrun turtlesim turtlesim_node __name:=first_turtle
    此处name前为两个下划线。

  3. rosrun turtlesim turtlesim_node __name:=second_turtle

  4. 通过rosnode list 可以查看当前的节点有哪些

  5. rosrun turtlesim turtle_teleop_key
    可以通过键盘控制来控制两个乌龟同时运动,因为两只乌龟订阅同一个话题turtle1/cmd_vel,而发布节点turtle_teleop_key只向话题turtle1/cmd_vel发送消息。
    ros 节点话题重映射和命名空间(以turtlesim为例)_第1张图片
    如图所示,可以开启两个turtlesim,并且有不同的名称,可以通过键盘同时控制两个乌龟同时运动在做多摄像头定位时非常有用。
    利用rqt_graph工具可以看到当前节点和话题关系。
    ros 节点话题重映射和命名空间(以turtlesim为例)_第2张图片

话题名称重映射

  1. rosrun turtlesim turtlesim_node __name:=first_turtle turtle1/cmd_vel:=first_cmd_vel
    这句话除了将turtlesim启动的节点重命名为first_turtle外,还将原来订阅的话题turtle1/cmd_vel改名为first_cmd_vel。
  2. rosrun turtlesim turtlesim_node __name:=second_turtle turtle1/cmd_vel:=second_cmd_vel
    生成名为second_turtle的节点和订阅名为second_cmd_vel的话题。
  3. 这个时候通过指令rosrun turtlesim turtle_teleop_key是控制不了任何一个小海龟的,因为他发布的话题名为turtle1/cmd_vel,而两只小乌龟的订阅话题在刚才的指令中已经重新修改过了。

4.(此步可忽略) rosrun turtlesim turtle_teleop_key turtle1/cmd_vel:=first_cmd_vel
我一开始想的是改变turtle_teleop的发布的话题就可以了,但是却没有考虑到虽然话题改变了,但是节点是同一个节点,所以没法在两个终端中实现分别控制,忘记了重映射节点名,于是做如下修改。

  1. rosrun turtlesim turtle_teleop_key __name:=first_teleop turtle1/cmd_vel:=first_cmd_vel
    这句话同时修改了节点名字和发布的话题名字; 这句话同时修改了节点名字和发布的话题名字
  2. 再在另外一个终端中输入 重新映射的另外一套键盘控制:
rosrun turtlesim turtle_teleop_key __name:=second_teleop turtle1/cmd_vel:=second_cmd_vel

此时可以实现两个终端中分别控制两个小海龟。
ros 节点话题重映射和命名空间(以turtlesim为例)_第3张图片ros 节点话题重映射和命名空间(以turtlesim为例)_第4张图片

利用命名空间实现上述内容
利用命名空间来完成上述内容会变得相对简单一些,方法类似节点的重命名。

  1. rosrun turtlesim turtlesim_node __ns:=zly
    和__name:= 这个重命名方式类似,这个是开辟了不同名字的命名空间。
  2. rosrun turtlesim turtlesim_node __ns:=yx
  3. rosrun turtlesim turtle_teleop_key __ns:=zly
  4. rosrun turtlesim turtle_teleop_key __ns:=yx
    键盘也是在不同的命名空间下启动的,因此互不影响,相比之前的重命名能够方便一些。
    ros 节点话题重映射和命名空间(以turtlesim为例)_第5张图片
    ros 节点话题重映射和命名空间(以turtlesim为例)_第6张图片

上面讲到了名称的多种用法,名称使得整个ROS系统的灵活运转。

你可能感兴趣的:(ros,ubuntu,ros,turtlesim,重映射,命名空间)