ROS之命名空间

ROS中节点、话题、参数重命名以及全局、相对、私有命名空间(示例+代码) ROS中的命名空间 我们首先要了解一下路径的各个部分所代表的含义: ① 以话题为例,三级路径: ② 以节点为例,共有二级路径: ③ 以参数为例,共有三级路径: ROS中的命名空间分为三种:全局、相对、私有。其实命名空间就是名称的前缀,前缀代表着所在路径,存放的位置可以相对于根目录、节点、节点句柄的命名空间这三者来进行划分: 私有、全局、相对命名空间判断的依据: 私有命名空间 “/node_name”节点名称在最外侧 全局... 阅读详情

已经学ROS快两个月了,一开始对ROS 命名空间,参数,参数服务器,重映射没认真看,后来发现很重要,它是学习ROS代码的基础。我们都知道ros以topic通信,但是只靠topic通信是远远不够的,于是使用客服端服务器、actionlib、参数服务器来补充,这几种都是通信的机制。但还不够,为了方便又加入了命名空间,重映射。只有清楚了这些,其实才算对ros有了初步了解,下面的几个文章我将分别介绍。

在介绍之前,我先抱怨一下,对于只学过C语言的我,没有写过什么项目,然后自己学习ROS,简直痛苦。想找几个资料,英文的根本看不懂,四级都没过,找中文的基本都是直译过来的,而且大多数人的理解,或多或少的都有点错误,当然,我的理解应该有点错误的,希望明白之人能指出,感激不尽。

在C++中的命名空间,using namespace std,std就是名空间,这里的命名空间跟它差不多,但是比它更多,一层嵌套一层,用的特别灵活。先举个简单的例子,然后细说。

我们先运行一个小乌龟:

rosrun turtlesim turtlesim_node 


turtlesim是一个包名,turtlesim_node是执行文件名,可以与节点名相同,也不可以不同。这里的节点名是 /turtlesim。说明可能初始化的时候是这样的,为什么是可能,因为重映射可以改变:

ros::init(argc, argv, "turtlesim");

节点名前面加个“/”,这意味这个节点是全局空间的。另外说下,节点是有类型的,节点的类型就是节点所在包名和可执行文件名的加。一般的定义节点句柄:

ros::NodeHandle n;

NodeHandle是一个类,然后我们实例化的一个对象n.这种情况默认n这个节点是全局命名空间下的。你可以认为"/"这个斜杠就是全局名空间。现在我们来改变这个节点的名空间,通过重映射,我们先用重映射,以后再讲。


<

ROS NodeHandle 命名空间 参数读取 ROS NodeHandle 命名空间 参数读取概述命名空间参数读取ros::param::paramnh_.param小结 概述 将命名空间相关知识梳理一下,最近在命名空间上吃了大亏,浪费了很多时间,特别是涉及到后面的参数读取以及订阅发布Topic。 命名空间 全局命名空间,就是默认路jin为全局的命名空间,和绝对路jin的概念相仿。定义时需要注意下面的几点。 1.node不带任何命名空间 ros::NodeHandle node; 2.此时参数路jin均为"imu_mti/imu_mti_sequen 阅读详情

相关推荐

ROS:关于节点和节点句柄以及命名空间

ROS:关于节点和节点句柄以及命名空间 参考资料:ROS官方文档 首先,我们需要明确的是 节点 和 节点句柄 是不同的。一般而言,一个cpp文件只能启动一个ROS节点,但作为该节点的句柄却可以设置多个。 The ros::NodeHandle class serves two purposes. First, it provides RAII-style startup and shutdown of the internal node inside a roscpp program. Second,

Azahaxia的博客 1万+

ROS命名空间参数加载

ROS命名空间参数加载ROS命名空间参数设置 ROS命名空间 ROS命名空间,在我的理解就是我们在一个范围下(这个范围就是指的是命名空间)建立变量,节点等。这些变量,节点的有效范围就是他所在的命名空间。一般默认的是全局空间,即变量,节点全局有效。就像c++中的name space std,我们也可以自己定义自己的命名空间,一些操作和变量只在命名空间有效。为节点选择一个不同的默认命名空间的最好也是最常用的方法是在启动文件中使用命名空间(ns)属性。 ros::NodeHandle nh_private; //默认命名空间,即全局命名空间:/(根) ros::NodeHandle nh_pr

ROS命名空间

ROS命令空间是一个很重要的内容,官方文档:http://wiki.ros.org/Names 分为三类:relative,global,private。下边是一个官网给的示例。 Node Relative (default) Global Private /node1 bar ...

code312code的博客 658

ROS中的命名空间

ROS中的节点、参数、话题和服务统称为计算图源,其命名方式采用灵活的分层结构,便于在复杂的系统中集成和复用。计算图源命名是ROS封装的一种重要机制。每个资源都定义在一个命名空间内,该命名空间内还可以创建更多资源。但是处于不同命名空间内的资源不仅可以在所处命名空间内使用,还可以在全局范围内访问,这与C++中的private有所不同。这种命名机制可以有效避免不同命名空间内的命名冲突。一个有效的命名应该具备以下特点:1)首字符必须是字母([a-z|A-Z])、波浪线(~)或者左斜杠(/)。

小海聊智造 771

ROS | 命名空间

本节详细介绍了ROS中的命名空间机制原理和使用。

九七的博客 780

ros命名空间

ROS中,命名空间是一种用于组织和区分节点、话题、服务和参数等资源的层次结构。命名空间使用斜线(/)作为分隔符,类似于文件系统中的路径。

LoongEmbedded的专栏 796

Ros中的命名空间

Ros中的命名空间 在发布或者定阅时,有这么一行代码 ros::init(argc, argv, "publish_node_A"); ros::NodeHandle nh; ros::Publisher sub_pub = nh.advertise<std_msgs::string>("chatterA",1000); 第三行"chatterA"就是一种命名空间名称的方式。 计算图源的名称分为: 1)基础名称,例如chatterA 2)全局名称,例如/A/chatterA

weixin_45024226的博客 2129

ros 命名空间

文章目录全局命名空间相对名称私有名称节点命名空间 全局命名空间 /rosout前面的反斜杠“/”表明该节点名称属于全局命名空间。之所以叫做全局名称因为它们在任何地方(包括代码、命令行工具、图形界面工具等的任何地方)都可以使用。无论这些名称用作众多命令行工具的参数还是用在节点内部,它们都有明确的含义。这些名称从来不会产生二义性,也无需额外的上下文信息来决定名称指的哪个资源。如/turtle1/cmd_vel 由斜杠分开的一系列命名空间(namespace),每个斜杠代表一级命名空间命名空间用于将相关的计算图

Vic_Hao的博客 992

ROS 命名空间

ROS 计算图级资源: 节点、参数、主题、服务,这些命名规范和解释规则适应所有这些资源,在ROS中配置参数,进行topic订阅发布中很重要!!! 命名规范 第一个字符必须是([a-z|A-z]),或者波浪号~或者斜杠/ 后面的字符可以是([0-9|a-z|A-Z]), 下划线( _ ),斜杠(\) 名字的解释规则 / -&gt; 全局(global)命名空间 ~ -&gt...

探索的博客 2390

ROS 命名空间,名称

基本概念 如果不同包内含有相同的节点,不同的节点发布同名的话题会不会产生二义性?答案是会。 从编译的角度讲,同名的节点指的是生成同样节点名的可执行程序,而从运行的角度讲,只要ros::init(“node_name”) 函数内的node_name相同就是同名的节点,不管运行程序的名字叫什么,都视为同名的节点,当同一个节点在没终止前,再一次运行它,与同名的两个节点同时运行时,两种情况都会异常退出。 不同节点发布同名的话题,两个节点能正常运行,但是使用命令rostopic list查看是,列表中只会有一个top

HongHu_fly的博客 751

ROS参数命名空间理解

在这种情况下,shared_param 是相对路径,因此它会被放在节点的命名空间下。这种方式可以让你更加灵活地组织和管理参数,避免在复杂系统中出现命名冲突,同时也可以通过全局参数在不同命名空间的节点中共享参数。· 使用 nh.getParam(“shared_param”, value) 会查找 shared_param 是否存在于。这时,shared_param 仍然是相对路径,因此它会被放在节点的命名空间 robot1 下。的命名空间(例如 /robot1/shared_param)下。

weixin_43414962的博客 925

ROS句柄NodeHandle的命名空间

参考: https://sychaichangkun.gitbooks.io/ros-tutorial-icourse163/content/chapter6/6.5.html 1.NodeHandle ros::NodeHandle对象,也就是节点的句柄,它可以用来创建Publisher、Subscriber以及做其他事情。 句柄(Handle)这个概念可以理解为一个“把手”,你握住了门把手,就可以很容易把整扇门拉开,而不必关心门是什么样子。NodeHandle就是对节点资源的描述,有了它你就可以操作这个

qq_42731705的博客 1743

ROS命名空间重映射

ROS命名空间有 全局命名空间 相对命名空间 私有命名空间 对应着      全局名称   相对名称   私有名称 用于区分topic等 全局名称 以“/”开头的节点名,话题名表示其属于全局命名空间,其也被称为全局名称,在整个程序中是独一无二的,具有绝对的意味,例如下面一些话题名 /turtlesim /turtle1/cmd_vel /A/B/C/D/E 当以全局名称订阅一...

Adam_996的博客 1833

003ROS的计算图和命名空间

ROS专栏

qq_45670407的博客 925

ROS笔记3】节点 和 命名空间 (通俗理解运用)

ROS中,节点、话题、服务、参数等都可以有自己的命名空间(namespace)。命名空间ROS用来组织和隔离不同资源的一种方式,确保了系统中的名字是唯一的,并允许同样的结构在不同的上下文中被重用。这就像在真实世界中的邮政系统,同一个城市里可以有多条同名的“梅花路”,但它们位于不同的区域,比如“东区的梅花路”和“西区的梅花路”。假设ROS是一个大型的邮局,而这个邮局需要处理来自世界各地的信件。每个信件都有一个地址,告诉邮局如何正确地投递这封信。在这个比喻中,邮局的“地址系统”就像是ROS命名空间

挪威的深林的博客 1922

深入理解ROS中的命名空间

通过合理使用命名空间,我们可以将相关的实体进行组织和管理,实现系统的模块化和隔离。在ROS的开发中,合理使用命名空间是非常重要的一部分,可以提高代码的可读性和可维护性。通过使用命名空间,可以将相关的实体进行组织和区分,避免名称冲突,提高系统的可扩展性和可维护性。它类似于计算机科学中的命名空间概念,可以将一组相关的变量、函数或对象放置在一个独立的命名空间中,以避免名称冲突。:通过将相关的节点、话题、服务等实体放置在同一个命名空间下,可以更好地组织和管理它们,提高系统的可维护性和可扩展性。

XrxVue的博客 662
上一篇: move_base参数配置 不断完善
下一篇: ROS之参数服务
小菜虎
博客等级 码龄12年 140粉丝 37原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值