ROS话题命令空间——全局、相对和私有

文章目录

  • 1.话题的命名空间介绍
  • 2.编程实现
    • 2.1. 全局名称
    • 2.2.相对名称
    • 2.3.私有名称

参考

1.话题的命名空间介绍

如下图所示,首先图中红色是节点的命名方式,注意节点的命名简单的情况(没有命名空间)是 /节点名,也就是所有节点都有一个/根目录。
蓝色是话题的命名方式,话题可以直接参照/根目录,可以参考话题的/命名空间`,还可以参考节点名称。
ROS话题命令空间——全局、相对和私有_第1张图片

2.编程实现

2.1. 全局名称

全局名称在注册的时候以/开头,然后加上话题名,此时的话题和节点毫无关系

/*************************************************************/
示例1:直接在/后面加上话题名
ros::Publisher pub = nh.advertise<std_msgs::String>("/chatter",1000)

结果1:/chatter


/*************************************************************/
示例2:给话题名加命名空间,也就是/话题命名空间/话题名
ros::Publisher pub = nh.advertise<std_msgs::String>("/chatter/money",1000);

结果2:/chatter/money

2.2.相对名称

相对名称非/开头,直接输入话题名称即可。此时最终的话题挂载到注册这个话题的节点的命名空间下

/*************************************************************/
示例1:假设在命令行运行节点的时候加入了取 __ns:xxx 的命名空间,那么最终这个话题也会挂载到这个命名空间下
ros::Publisher pub = nh.advertise<std_msgs::String>("chatter",1000);

结果1:xxx/chatter


/*************************************************************/
示例2:同理这里也可以为话题设置自己的命名空间
ros::Publisher pub = nh.advertise<std_msgs::String>("chatter/money",1000);

结果2:xxx/chatter/money

2.3.私有名称

私有名称和注册时候的话题形式无关,主要是和ros::NodeHandle有关,在实例化这个对象的时候,给它的构造函数传入~的参数,然后用这个nh去注册发布者或者订阅者的时候添加的话题就是私有名称的话题,此时直接输入话题名注册的话,最终的话题就是挂载到节点下面
注意:如果此时输入的话题名称以/开头,那么尽管nh使用~进行了实例化,但由于全局名称优先级最高,所以此时生成的还是全局名称的话题。

/*************************************************************/
示例1:假设在命令行运行节点的时候加入了 __ns:xxx 的命名空间
ros::NodeHandle nh("~");
ros::Publisher pub = nh.advertise<std_msgs::String>("chatter",1000);

结果1:/xxx/hello/chatter


/*************************************************************/
示例2:假设在命令行运行节点的时候加入了 __ns:xxx 的命名空间
ros::NodeHandle nh("~");
ros::Publisher pub = nh.advertise<std_msgs::String>("chatter/money",1000);

结果2:/xxx/hello/chatter/money


/*************************************************************/
PS:当使用~,而话题名称有时/开头时,那么话题名称是绝对的

示例3:
ros::NodeHandle nh("~");
ros::Publisher pub = nh.advertise<std_msgs::String>("/chatter/money",1000);

结果3:/chatter/money

你可能感兴趣的:(ROS,python)