ROS与C++入门教程-NodeHandles
ROS与C++入门教程-NodeHandles
说明:
- 介绍NodeHandles节点类的作用和使用
NodeHandles节点类
- ros::NodeHandle类有两个作用:
- 首先,在roscpp程序的内部,它提供了RAII方式启动和关闭。
- 其次,它提供了一个额外的层命令空间解决方案,可以使组件更容易写。
自动启动和关闭
- ros::NodeHandle管理内部的引用计数
- 开始节点:
ros::NodeHandle nh;
- 创建时候,如果内部节点没有开始,ros::NodeHandle会开始节点,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
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号