ros名称命名空间和重映射

IQIT IQIT     2022-08-25     580

关键词:

一 概论

名称就是代号,ros中的节点、话题和参数的名称必须是唯一的,这很容易想到,如果你认识两个叫一样名字的人,单凭一个名字你是分辨不出来说的这个人到底是谁,所以 ros中的名称必须是唯一的。

但是,这个规定与现实不符啊,分明现实中就有这种情况啊,所以我们很容易想到两种办法

1 把两个人的名字前加点东西,如三班的A和四班的A(命名空间)

2 分别叫这两个人的小名,或者绰号。(重映射)

通过这种方式就可以解决名字冲突的问题。

ros中这两种方式分别叫做命名空间和重映射。

二 命名空间

我们在安装软件时,两个软件文件夹中可能都有readme.txt,我们可以通过/来限定命名空间

/home/user1/readme.txt 
/home/user2/readme.txt

其中的命名空间就是/home/user1

这可以在ros中写为

rosrun turtlesim turtlesim_node __ns:=/home/user1

注意是两个"_"组成的"__",则用rostopic list输出的节点为

/home/user1/turtlesim


三 重映射

如果你不想起的名字和别人的名字相同,那么你可以通过重映射来改变自己的名字

如我们想要两个turtlesim包中的turtlesim_node节点,分别叫做A和B,我们可以采取下面的操作

rosrun turtlesim turtlesim_node __name:=A
rosrun turtlesim turtlesim_node __name:=B

这时再通过rosnode list 读取节点名称,我们发现节点名称变为

/A
/B

也许机智的你想到,可不可以直接


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

如果这样可以的话直接不就ok了吗?

答案是不行的,这样混淆了命名空间和名称的概念,如果你这么做,ros会提醒你:node names cannot contain /

所以有时必须把两条指令组合起来使用

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

这时节点名为

/home/user1/A

四 总结

ros中的名称是唯一的,我们有两种方法可以处理此问题命名空间(__ns:=)和重映射(__name:=),有时可能需要两者组合使用。

 

映射到命名空间模块时将 prop 作为模块名称传递

】映射到命名空间模块时将prop作为模块名称传递【英文标题】:Passpropasmodulenamewhenmappingtonamespacedmodule【发布时间】:2017-07-2322:16:28【问题描述】:我正在尝试通过props将store模块命名空间传递给组件。当我尝试使用道具映射到吸... 查看详情

名称间距在 vuex 映射中不起作用,抛出未找到模块命名空间

】名称间距在vuex映射中不起作用,抛出未找到模块命名空间【英文标题】:Namespacingnotworkinginvuexmapsthrowingmodulenamespacenotfound【发布时间】:2019-02-2615:30:06【问题描述】:我正在开发一个小项目,我希望能够使用命名空间来避免同... 查看详情

wpf中,如何为自己的类库映射uri名称空间

wpf中,如何为自己的类库映射URI名称空间参考技术A在应用程序中的AssemblyInfo文件中添加[assembly:XmlnsDefinition("您的URI","类库中的命名空间")]其中一个URI可以对应于多个类库中的命名空间 参考技术B你说的是用某种网... 查看详情

EF4 Poco 问题映射类型相同的名称相同的程序集不同的命名空间

】EF4Poco问题映射类型相同的名称相同的程序集不同的命名空间【英文标题】:EF4PocoIssueMappingTypesSameNameSameAssemblyDifferentNamespaces【发布时间】:2011-03-2205:08:27【问题描述】:我在使用EF4和ProxyPocos时遇到问题。我在同一个程序集中... 查看详情

ros学习之group标签

...到一组节点。它具有ns属性,可以将节点组推送到单独的命名空间中。您还可以使用<remap>标记在组中应用重映射设置。 属性ns=“namespace” (可选)将节点组分配给指定的命名空间。命名空间可以是全局或相对的,尽... 查看详情

在工作区中查找和重命名变量(如果存在任何名称)

】在工作区中查找和重命名变量(如果存在任何名称)【英文标题】:Find&renamevariableinworkspace,ifeithernamesexist【发布时间】:2016-02-2315:18:28【问题描述】:如何从可能的名称列表中搜索Workspace中的变量名称,然后重命名现有变... 查看详情

使用文件夹名称复制和重命名文件的批处理文件

】使用文件夹名称复制和重命名文件的批处理文件【英文标题】:Batchfiletocopyandrenamefileswithfoldername【发布时间】:2014-02-0218:49:23【问题描述】:我有一个文件夹,其中包含数百个电影子文件夹,每个子文件夹都包含几部电影和... 查看详情

在dplyr中,如何删除和重命名不存在的列,操作所有名称,并使用字符串命名新变量?

】在dplyr中,如何删除和重命名不存在的列,操作所有名称,并使用字符串命名新变量?【英文标题】:Indplyr,howtodeleteandrenamecolumnsthatdon\'texist,manipulateallnames,andnameanewvariableusingastring?【发布时间】:2015-03-0802:05:19【问题描述】:... 查看详情

命名空间简记

一、命名空间:从名称到对象的映射,大部分的命名空间都是通过python字典来实现的。命名空间提供了在项目汇总避免名字冲突的一种方法,各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能重名,但不同的命... 查看详情

解析唯一数据和重命名文件

...】:我试图创建一个Perl脚本来重命名文件(数百个不同名称的文件),但我没有成功。我首先需要找到唯一的文件编号,然后将其重命名为更易于阅读的名称。由于文件名不连续,因此很难。文件名示例:重要性数在que序列之... 查看详情

按特定条件复制和重命名 - 批量

...我有类似AAAJ_J1DO.docx的文件模式,但我想通过创建文件夹名称AAAJ将其更改为AAAJ.docx条件是在下划线之前找到名称并在重命名文件中的该命名副本中创建文件夹。以下文件模式示例:D:\\yog 查看详情

python中的命名空间是啥?

命名空间是从名称到对象的映射,大部分的命名空间都是通过Python字典来实现的。命名空间提供了在项目中避免名字冲突的一种方法,各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空... 查看详情

无法读取名称为 [xx] 在命名空间 ['default'] 中的 configmap

】无法读取名称为[xx]在命名空间[\\\'default\\\']中的configmap【英文标题】:Cannotreadconfigmapwithname:[xx]innamespace[\'default\']Ignoring无法读取名称为[xx]在命名空间[\'default\']中的configmap【发布时间】:2019-11-1318:28:16【问题描述】:k8s新手。... 查看详情

wpf使用其它的命名空间(宝典1)

Xaml是实例化的,net对象的通用方法,包括那些位于非WPF名称空间下的和自己创建的名称空间中的对象为使用没有在wpf中定义的类,需要将.net名称空间映射到xml名称空间,可以使用这样的一特殊的语法来实现这样的工作xmlns:prefix="c... 查看详情

如何根据子文件夹复制文件和重命名

...试在gradle中复制一个文件并同时重命名它,其中文件的新名称应该取决于它所在的子文件夹的名称。例如,我的文件结构如下所示:├──apk│  └──app-envTest-normalBuild-release.apk├──logs│  查看详情

解构和重命名属性

...名b。【问题讨论】:“重命名”是什么意思?a.b属性的名称为b,您无法更改它。期望的结果是什么?@Bergi喜欢constb:d=a,但也可以使用c。【参考方案1】:您可以通过重 查看详情

函数的命名空间和作用域

一、函数的命名空间命名空间:namespace是从名称(name)到对象(object)上的映射。当一个name映射到一个object上时,这个name和这个object就有了绑定(bind)关系,或者说这个name指向了这个object。每个name只对应一个object,而一个obj... 查看详情

名称空间(namespaces)(转)

大致来说,命名空间只是将名称映射到对象的容器。正如你可能已经听到的,Python中的所有内容-字符串,列表,词典,函数,类等都是一个对象。这样的“名称与对象”的映射使我们能够通过分配给它的名称访问对象。例... 查看详情