• ros 编程习惯


    1.设置ros的info,warning,debug,error等编写的时候要思考,何时该使用,以及在开头要使用设置rosconsole的级别来对应输出,以方便调试。

    2.在使用ros_info等的时候要把该节点的名称或者该类的名称也加上去,以方便排查错误源等,ROS_INFO("[节点名 %s]", e.what());

    3.使用ros::NodeHandle nh("~");  的形式,以及服务server名字均在全局命名空间下。

    1、句柄可以让你通过构造函数指定命名空间
    
    ros::NodeHandle nh("my_namespace");
    
    这使得使用该句柄的任何相对名字都是相对<node_namespace>/my_namespace,而不是只相对<node_namespace>
    
    你也可以指定一个父句柄和追加的命名空间
    
    ros::NodeHandle nh1("ns1");
    
    ros::NodeHandle nh2(nh1,"ns2");
    
    这将把nh2放入到<node_namespace>/ns1/ns2命名空间
    
    2、也可以指定全局名字
    
    ros::NodeHandle nh("/my_global_namespace");
    
    这种做法并不推荐,因为这样会使得节点无法被放入别的命名空间。只是有时在代码中使用全局名字有用。
    
    3、私有名字
    
    使用私有名字比直接调用有私有名的句柄方法更有技巧,你可以在一个私有命名空间中直接创建一个新的句柄。
    
    ros::NodeHandle nh("~my_private_namespace");
    
    ros::Subscriber sub = nh.subscribe("my_private_topic",....);
    
    以上例子会订阅<node_name>/my_private_namespace/my_private_topic
    
    注意:理解的重点上文中红色标注的部分,node_namespace和node_name是两回事!
    
    node_name = node_namespace + nodename
    
    补充demo
    
    // launch 文件中 ns=="node_namespace"
    
    ros::init(argc, argv, "node_name"); // node name
    
    ros::NodeHandle n; //n 命名空间为/node_namespace
    
    ros::NodeHandle n1("sub"); // n1命名空间为/node_namespace/sub
    
    ros::NodeHandle n2(n1,"sub2");// n2命名空间为/node_namespace/sub/sub2
    
    ros::NodeHandle pn1("~"); //pn1 命名空间为/node_namespace/node_name
    
    ros::NodeHandle pn2("~sub"); //pn2 命名空间为/node_namespace/node_name/sub
    
    ros::NodeHandle pn3("~/sub"); //pn3 命名空间为/node_namespace/node_name/sub
    
    ros::NodeHandle gn("/global"); // gn 命名空间为/global
    View Code

    4.backward-cpp调试代码。

    5.在使用参数服务器 param等的时候以及和对应的launch文件一起结合使用。

    6.launch文件里面的output输出指定到对应的log文件,以及launch文件里面的节点node可以指定使用的内核的名字。

    7.消息和服务写在一个包里面,便于管理。

  • 相关阅读:
    Elasticsearch 支持拼音自动补全
    laravel自动补全链接
    laravel的服务容器(药箱)、服务提供者(小盒子)、Facades(更方便用药),方便大家透彻理解
    php static静态属性和静态方法
    php面向对象的构造方法与析构方法
    MySQL事务-ROLLBACK,COMMIT用法详解
    php 事务处理transaction
    Python:初步学习Python
    iOS:自己写的一个星级评价的小Demo
    iOS:枚举enum的使用
  • 原文地址:https://www.cnblogs.com/gary-guo/p/10039022.html
Copyright © 2020-2023  润新知