zoukankan      html  css  js  c++  java
  • "ros::NodeHandle"的用法:全局vs.私有

    "ros::NodeHandle"的用法

    1. 自动启动和结束

    ros::NodeHandle管理着一个内部引用数,使得开启和结束一个节点(node)可以简单地按照下面一行代码完成:

    ros::NodeHandle nh;
    

    2. 命名空间(Nnamespaces)

    NodeHandles可以指定一个命名空间给它的构造函数:

    ros::NodeHandle nh("my_namespace");
    

    这行代码将创建一个相对于NodeHandle的域名,<node_namespace>/my_namespace,而不是直接地表示为<node_namespace>

    你也可以指定一个父节点的NodeHandle和命名空间,后面可以跟子节点的NodeHandle和命名空间:

    ros::NodeHandle nh1("ns1");
    ros::NodeHandle nh2(nh1, "ns2");
    

    这将会把nh2放在<node_namespace>/ns1/ns2的命名空间下。

    全局域名(Global Names)

    如果确实需要,你可以指定一个全局域名:

    ros::NodeHandle nh("/my_global_namespace");
    

    这样的方式通常不是很推荐,因为它会阻止节点被放进命名空间(如使用roslaunch)。但是,有时候,在代码中使用全局命名空间也会很有用。

    私有域名(Private Names)

    使用私有域名比起直接调用一个带有私有域名("~name")的NodeHandle函数要麻烦一点。相反,你必须创建一个新的位于私有命名空间的NodeHandle

    ros::NodeHandle nh("~my_private_namespace");
    ros::Subscriber sub = nh.subscribe("my_private_topic", ...);
    

    上面这个例子将会订阅话题<node_name>/my_private_namespace/my_private_topic

    参考

  • 相关阅读:
    bzoj 1503: [NOI 2004]郁闷的出纳员
    bzoj 1001: [BeiJing2006]狼抓兔子
    bzoj 1005: [HNOI2008]明明的烦恼
    bzoj 1004: [HNOI2008]Cards
    bzoj 1003: [ZJOI2006]物流运输trans
    06day1
    05day2
    04day2
    04day1
    03day2
  • 原文地址:https://www.cnblogs.com/casperwin/p/15033060.html
Copyright © 2011-2022 走看看