< >
Home » ROS与C++入门教程 » ROS与C++入门教程-NodeHandles

ROS与C++入门教程-NodeHandles

ROS与C++入门教程-NodeHandles

说明:

  • 介绍NodeHandles节点类的作用和使用

NodeHandles节点类

  • ros::NodeHandle类有两个作用:
    • 首先,在roscpp程序的内部,它提供了RAII方式启动和关闭。
    • 其次,它提供了一个额外的层命令空间解决方案,可以使组件更容易写。

自动启动和关闭

  • ros::NodeHandle管理内部的引用计数
  • 开始节点:
ros::NodeHandle nh;
  • 创建时候,如果内部节点没有开始,ros::NodeHandle会开始节点,ros::NodeHandle实例销毁,节点就会关闭。

命名空间

ros::NodeHandle nh("my_namespace");
  • 这使得任何相对名称可用,NodeHandle相对于<node_namespace>/my_namespace而不是 <node_namespace>。
  • 也可以指定父NodeHandle和命名空间:
ros::NodeHandle nh1("ns1");
ros::NodeHandle nh2(nh1, "ns2");
  • 这个放nh2 进入<node_namespace>/ns1/ns2 命名空间.

全局名称

  • 你可以指定全局名,如:
ros::NodeHandle nh("/my_global_namespace");
  • 这通常不鼓励,因为它阻止了节点被推为命名空间(如roslaunch)。然而,有时在代码中使用全局名称可能是有用的。

私有名称

  • 直接使用私有名称比使用带有私有名称的nodehandle方法会更令人混淆。
  • 相反,你必须在一个私有空间创建一个新的nodehandle:
ros::NodeHandle nh("~my_private_namespace");
ros::Subscriber sub = nh.subscribe("my_private_topic", ...);
  • 上面的例子会订阅<node_name>/my_private_namespace/my_private_topic

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ROS与C++入门教程