我是靠谱客的博主 欢呼小丸子,最近开发中收集的这篇文章主要介绍ROS中计算图源——相对名称绝对名称解析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

https://blog.csdn.net/zhanghm1995/article/details/81874129

ROS中话题、节点、服务和参数统称为计算图源(graph resource),每一个计算图源由一个叫计算图源名称的短字符串标识。所谓的计算图源名称也就是ROS在解析这些话题名、节点名、服务名和参数名时需要具体对应的名称。
计算图源名称包括全局名称、相对名称、私有名称和匿名名称。
官网参考:http://wiki.ros.org/Names
https://blog.csdn.net/jack_20/article/details/70746736
http://wiki.ros.org/roscpp/Overview/NodeHandles

全局名称
所有以”/”开头的计算图源名称都是全局名称。其实不管是相对名称还是私有名称,ROS在解析具体名称时都需要转换到全局名称才能明确确定(有点类似操作系统标识文件位置的绝对路径);
在定义ros::NodeHandle节点句柄对象时,如果没有传递任何参数,如下所示:

ros::NodeHandle nh;
1
此时使用该句柄的任何相对名称都默认直接在该相对名称前面加上”/”,使其成为全局名称,例如:

ros::Publisher objectPublisher_ = nh.advertise<std_msgs::Int8>(“object”,1);
1
由于名称object前面没有”/”,此时ROS在解析该名称的时候,则默认直接在前面加上”/”,使其成为全局名称,此时可以利用
rostopic list
发现,发布的话题名为"/object”。
全局名称可以按照命名空间归类计算图源,如/a/b/c/d/e也是一个有效的全局名称。

相对名称
凡是名称开头没有“/”的计算图源名称都是相对名称。相对名称本身不能完全确定它们自身所在的命名空间(有点类似操作系统标识文件位置的相对路径),需要在相对名称前面加上当前默认命名空间组成一个全局名称,才能明确标识计算图源。
ros::NodeHandle nh(“my_namespace”);

私有名称
以一个波浪符号(~)开始的计算图源名称为私有名称。私有名称也不能完全确定它们自身所在的命名空间,而是需要ROS客户端库将这个名称解析为一个全局名称。与相对名称使用默认命名空间来解析计算图源名称不同的是,私有名称使用它们的节点名称作为命名空间来解析。
如:

ros::init(argc, argv, “my_node_name”);
ros::NodeHandle nodeHandle("~");
ros::NodeHandle nh2("~foo");
1
2
3
此时nodeHandle的命名空间为/my_node_name,nh2的命名空间为/my_node_name/foo。

launch中的命名空间
参考: https://github.com/micpalmia/youbot_ros_tools/wiki/Understanding-launch-and-namespaces

使用注意
在launch文件中也可以指定参数,此时参数的命名空间需要格外注意:命名空间由参数所在的位置决定。
如下所示,此时参数没有定义在任何节点域内,因为launch文件是可以一次性启动多个节点的,因此此时参数的默认命名空间为“/”,并不由任何节点名决定;
所以下图中产生的参数为”/vechicle_name"

如果改为下图形式,此时参数在node内部定义,为私有名称,此时参数的默认命名空间为"/<node_name>";
所以下图中产生的参数为"/ros_namespace_ne/vehicle_name"。

注:作为节点元素的子集时,param 元素中给出的参数名总是被当做私有名称解析,无论它们是否以~或者/开始

在launch中使用参数的时候计算图源注意事项:
https://answers.ros.org/question/43001/setting-parameters-in-a-launch-file-does-not-appear-to-be-working/

最后

以上就是欢呼小丸子为你收集整理的ROS中计算图源——相对名称绝对名称解析的全部内容,希望文章能够帮你解决ROS中计算图源——相对名称绝对名称解析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部