1.NodeHandle类(或者NodeHandle句柄)的私有名称

1)句柄可以让你通过构造函数指定命名空间

ros::NodeHandle nh("my_namespace");

这使得使用该句柄的任何相对名字都是相对<node_namespace>/my_namespace,而不是只相对<node_namespace>.

你也可以指定一个父句柄和追加的命名空间

ros::NodeHandle nh1("ns1");

ros::NodeHandle nh2(nh1,"ns2");

这将把nh2放入到<node_namespace>/ns1/ns2命名空间

2)也可以指定全局名字

ros::NodeHandle nh("/my_global_namespace");

这种做法并不推荐,因为这样会使得节点无法被放入别的命名空间。只是有时在代码中使用全局名字有用。

3)私有名字

使用私有名字比直接调用有私有名的句柄方法更有技巧,你可以在一个私有命名空间中直接创建一个新的句柄。

ros::NodeHandle nh("~my_private_namespace");

ros::Subscriber sub = nh.subscribe("my_private_topic",....);

以上例子会订阅<node_name>/my_private_namespace/my_private_topic

注意:理解的重点上文中红色标注的部分,node_namespace和node_name是两回事!

自己实验之后:测出命名空间的范围级别区别:rosparam list >rosnode list >rostopic list = rosservice list.topic和service可以被NodeHandle所改变,但是不会因为节点名的改变而改变。

4)命名空间的修改以及节点名的重映射

rosrun turtlesim turtlesim_node __ns:=/home/user1

rosrun turtlesim turtlesim_node __name:=A

rosrun turtlesim turtlesim_node __name:=B

相对名称:

一个主要替代方案是让ROS为计算图源提供一个默认的命名空间,具有此特征的名称叫做相对计算图源名称(ralative graph resource name),或简称为相对名称(relative name)。

  设置默认命名空间:为节点选择一个不同的默认命名空间的最好也是最常用的方法是在启动文件中使用命名空间(ns)属性

私有名称:

私有名称,以一个波浪字符(~)开始, 是第三类也是最后一类计算图源名称。和相对名称一样,私有名称并不能完全确定它们自身所在的命名空间,

而是需要ROS 客户端库将这个名称解析为一个全局 名称。与相对名称的主要差别在于,私有名称不是用当前默认命名空间,而是用的它们节点名称作为命名空间。

例如,有一个节点,它的全局名称是 /sim1 /pubvel,ROS 将其私有名称∼max_vel 转换至如下全局名称:/sim1/pubvel + ~max_vel⇒ /sim1/pubvel/max_vel 这种命名方式适用的地方

是每个节点内部都有这样一些资源,这些资源只与本节点有关,而不 会与其他节点打交道,这些资源就可以使用私有名称,与松耦合性相对的。私有名称的关键字“private”仅仅表示其他节点

不会使用它们所在的命名空间, 也就是仅在命名空间层面上有意义。对于其他节点来讲,只要知道私有名称解析后的全局名称,都可以通过其全局名称访问这些计算图源。

二者的组合:

rosrun turtlesim turtlesim_node __name:=A __ns:=/home/user1

命名空间:http://wiki.ros.org/Names

最新文章

  1. python 根据现有文件树创建文件树
  2. 实践 Neutron 前的两个准备工作 - 每天5分钟玩转 OpenStack(78)
  3. JMeter学习-024-JMeter 命令行(非GUI)模式详解(二)-执行代理设置
  4. [转]透过 Linux 内核看无锁编程
  5. c++学习--面向对象一实验
  6. Linux中挂载移动硬盘的方法
  7. vb和php 基于socket通信
  8. HDAO one error
  9. BinaryWriter和BinaryReader用法
  10. C# Dictionary用法总结
  11. PureMVC(JS版)源码解析(七):Mediator类
  12. 请输出in.txt文件中的2 4 6 8 9 10 12行
  13. TreeView 数据绑定及选中命令处理
  14. bootstrap导航菜单,手机和PC端
  15. java读取请求中body数据
  16. CSS垂直居中技巧
  17. Ceph mimic
  18. [Swift]LeetCode518. 零钱兑换 II | Coin Change 2
  19. iOS -- Effective Objective-C 阅读笔记 (7)
  20. windows环境安装weblogic服务【转】【补】

热门文章

  1. matlab算法转为c语言注意事项
  2. 【1】基于quartz框架和Zookeeper实现集群化定时任务系统
  3. 调用 Windows 7 中英文混合朗读
  4. #51单片机#超声波测距(HC-SR04)的使用方法
  5. bzoj 3998 [TJOI2015]弦论——后缀自动机
  6. the road of test
  7. Nginx 改变错误日志打印级别
  8. layui与layer同时引入冲突的问题
  9. Python Twisted系列教程5:由Twisted支持的诗歌客户端
  10. Java微信公众平台开发(十四)【番外篇】--微信web开发者工具使用