概述
本节详细介绍了ROS中的命名空间机制原理和使用。
一、定义介绍
在ROS(Robot Operating System)中,命名空间是一种用于组织和区分节点、话题、服务和参数等资源的层次结构。命名空间使用斜线(/)作为分隔符,类似于文件系统中的路径。
二、原理解读
1.命名空间
每个ROS节点都有一个命名空间,节点的名称即为它所在的命名空间。例如,节点名称为 /my_node 的节点将位于命名空间 /my_node 下,其创建的资源将默认在该命名空间下进行操作。
由于几乎所有的节点操作都由ros::NodeHandle
(节点句柄)来实现,因此,在创建ros::NodeHandle
时,就已经确定了命名空间规则。我们最常见的声明节点句柄的代码ros::NodeHandle n;
其实是指定了该节点句柄的命名空间为ROS系统默认命名空间(注意不是节点默认的命名空间),也就是所谓的全局命名空间。而 ros::NodeHandle nh("~");
才是声明局部命名空间。需要注意的是,当我们在一个节点中同时声明这两个节点句柄时,ros::NodeHandle n;
和 ros::NodeHandle nh("~");
是可以共存的,只不过用句柄n
创建的资源都是在全局命名空间,句柄nh
创建的资源则是在局部命名空间&#x