【ROS读书笔记】---5. 计算图源命名


本章将掌握三种基本计算图源和一种其他的计算图源的来历,查看方式以及优缺点对比等。

介绍

前文给节点命名(“hello_ros”和"publish_velocity")以及给话题命名(“turtle1/cmd_vel”和“turtle1/pose”)等的都是计算图源名称的例子。
接下来一起看看不同的计算图源名称。

不同的计算图源

node、topic、service、参数等统称计算图源。而每个计算图源由一个叫计算图源名称(graph resource name)的短字符串标识。

事实上,计算图源名称在 ROS 命令行和代码中是广泛存在的,前面我们已经多次接触它们。例如,前面学习的 rosnode info 命令行工具和 ros::init 函数都将节点名作为其参数,rostopic echo 命令行工具和 ros::Publisher 构造函数则都要求提供话题名作为参数,这些都是计算图源名称的具体实例


全局名称

例如我们已经遇到过的:

 /teleop_turtle
 /turtlesim
 /turtle1/cmd_vel
 /turtle1/pose
 /run_id
 /count_and_log/set_logger_level
  • “/”表示全局名称。
  • 每个斜杠代表以及命名空间
  • 描述资源本身的基本名称(base name)。上述的cmd_vel、pose等都是。
  • 它在任何地方都可以使用(包括但不限于代码、命令行工具、图形界面)。
  • 有明确的含义,不存在二义性。
优缺点
  • 为了指明一个计算图源,需要列出完整的所属空间,尤其是命名空间层很多。
  • 除去使人更容易追踪变量外,几乎没有优点,相对名称和私有名称似乎更好用。

相对名称

让ROS为计算图源提供一个默认命名空间,替代中间命名空间层过多的全局名称的做法。具有此特征的名称称为相对名称。例子如下:

teleop_turtle
turtlesim
cmd_vel
turtle1/pose
run_id
count_and_log/set_logger_level
  • 可以明显看到前边少了/,知道ROS解析某个计算图源时候的默认命名空间,相对名称就可以和特定计算图源匹配。
解析相对名称
  • 将当前默认的命名空间的名称加载相对名称的前边,就可以解析为全局名称。
  • 比如在默认命名空间为/turtle1的地方使用相对名称,可以解析到全局名称如下:
/turtle1      +   cmd_vel   =>   /turtle1/cmd_vel
默认命名空间       相对名称         全局名称
  • 此时只用cmd_vel(相对名称)ROS即可自动解析
设置默认命名空间

默认命名空间单独为每个节点设置的。如果不设置命名空间,ROS会将全局命名空间作为默认命名空间(ns属性)。

  • 1.命令行参数设置
_ _ns:=default-namespace
  • 2.利用环境变量设置
Export ROS_NAMESPACE=default-namespace
  • 请注意1的优先级高于2.
相对名称的意义
  • 它使得在小系统基础上实现复杂系统变得更加容易
  • 如果所有节点都是相对名称,则移植(用户能方便的将此节点和话题移植到其他命名空间)简单。高效资源结合。

私有名称

以一个波浪字符开始(~),解析方式同相对名称一样。唯一不同是私有名称以它们的节点名作为默认命名空间。
例如:

/sim1/pubvel   +   ~max_vel   =>   /sim1/pubvel/max_vel
节点命名空间       相对名称         全局名称
  • 每个节点内部都有只与本节点有关的资源,不会与其他节点打交道。
  • 私有名称通常用roslaunch的专门功能设置私有名称可以访问的参数。
  • 私有名称也用于一个节点的运算服务。

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

匿名名称

之前介绍的三种是基本变量类型。ROS 还提供了另一种被称为匿名名称的命名机制,匿名并不是指没有名字,而是指非用户指定而又没有语义信息的名字

使用处理器时间生成匿名名称

示例程序
 // This program starts with an anonymous name, which
 // allows multiple copies to execute at the same time ,
 // without needing to manually create distinct names
 // for each of them.
 #include <ros/ros.h>

 int main ( int argc, char **argv )
 {
		ros::init ( argc, argv, "anon",
		ros::init_options::AnonymousName );
		ros::NodeHandle nh ;
		ros::Rate rate (1) ;
		while (ros::ok( )) 
		{
				ROS_INFO_STREAM( "This␣ message␣ is␣ from␣ "
				<< ros::this_node::getName ( ));
				rate.sleep( );
		}
 }

即便是多次启动也不会导致命名冲突。因为会得到唯一性名称。

结束

下一章roslaunch工具。🤣

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 无法找到 ros-melodic-autotruck-1.0.0-bionic.20221101.052612_amd64.deb 这个包。 这可能是因为这个包不存在或者没有被添加到可用的软件源中。你可以尝试以下操作: 1. 确保你正在使用正确的软件源,并且已经更新了软件源的缓存。 2. 检查软件包的名称是否拼写正确。 3. 尝试在其他软件源中搜索这个包。 4. 如果该包是第三方软件包,你可以在对应的网站或者Github上下载安装。 5. 如果以上方法都不能解决问题,可以试试更换其他版本的ROS. ### 回答2: 出现该错误的原因是没有找到名为"ros-melodic-autotruck-1.0.0-bionic.20221101.052612_amd64.deb"的ROS(Robot Operating System)软件包。 解决该问题的步骤如下: 1. 确保已正确安装ROS软件,且已正确设置ROS软件源。ROS软件的安装和设置可以参考官方文档。 2. 确认你输入的软件包名称是否正确,包括大小写。如果软件包名称不正确,应该使用正确的名称进行搜索和安装。 3. 确保你的系统和软件源中有该软件包的支持。在确定软件包支持的操作系统和版本后,根据操作系统和版本选择相应的软件源。 4. 运行`sudo apt update`命令更新软件包列表,确保本地软件包列表是最新的。 5. 运行`sudo apt install ros-melodic-autotruck`命令安装相应的软件包。注意替换`ros-melodic-autotruck`为正确的软件包名称。 6. 如果以上步骤无法解决问题,可能是因为该软件包是非官方或自定义软件包。在这种情况下,你可能需要联系软件包的提供者获取详细的安装说明或支持。 总之,无法找到软件包的问题通常是因为软件包名称、软件源或系统配置错误。通过以上步骤逐一排查,你应该能够解决该问题并正确安装所需的ROS软件包。 ### 回答3: 无法找到包"ros-melodic-autotruck-1.0.0-bionic.20221101.052612_amd64.deb"的提示通常意味着在您的计算机上没有添加与该包对应的软件源。要解决这个问题,您可以按照以下步骤进行操作: 1. 确认软件源名称:首先,确保您正确地拼写了该软件包的名称。如果名称不正确,您将无法找到它。请务必检查您在命令中输入的名称。 2. 更新软件源列表:使用以下命令更新软件源列表,以确保您的计算机能够找到最新的软件包: ``` sudo apt update ``` 3. 添加正确的软件源:如果软件源列表没有包含所需的软件包,您需要手动添加正确的软件源。请按照ROS官方文档或其他可靠来源的指导添加正确的ROS软件源。 4. 检查软件源链接:确保手动添加的软件源链接正确,并且您的计算机可以访问它。您可以尝试在浏览器中打开链接以进行确认。 5. 重新安装软件包:一旦您正确地添加了软件源,并且可以找到该软件包,您可以使用以下命令重新安装它: ``` sudo apt install ros-melodic-autotruck-1.0.0-bionic.20221101.052612_amd64.deb ``` 如果您仍然无法找到或安装所需的软件包,可能需要检查该软件包是否存在于其他软件源或您可能需要寻求相关技术支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值