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

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

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

、句柄可以让你通过构造函数指定命名空间

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命名空间

、也可以指定全局名字

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

这种做法并不推荐,因为这样会使得节点无法被放入别的命名空间。只是有时在代码中使用全局名字有用。

、私有名字

使用私有名字比直接调用有私有名的句柄方法更有技巧,你可以在一个私有命名空间中直接创建一个新的句柄。

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

4.backward-cpp调试代码。

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

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

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

ros 编程习惯的更多相关文章

  1. 防御性编程习惯:求出链表中倒数第 m 个结点的值及其思想的总结

    防御性编程习惯 程序员在编写代码的时候,预料有可能出现问题的地方或者点,然后为这些隐患提前制定预防方案或者措施,比如数据库发生异常之后的回滚,打开某些资源之前,判断图片是否存在,网络断开之后的重连次数 ...

  2. 漫谈C++:良好的编程习惯与编程要点

    以良好的方式编写C++ class 假设现在我们要实现一个复数类complex,在类的实现过程中探索良好的编程习惯. ① Header(头文件)中的防卫式声明 complex.h: # ifndef ...

  3. 10条PHP编程习惯助你找工作

    过去的几周对我来说是一段相当复杂的经历.我们公司进行了大裁员,我是其中之一,但却体验到了其中的乐 趣.我从来没有被开除过,所以很难不去想得太多.我开始浏览招聘板块,一个全职PHP程序员的职位很吸引人, ...

  4. 10条PHP编程习惯

    过去的几周对我来说是一段相当复杂的经历.我们公司进行了大裁员,我是其中之一,但却体验到了其中的乐 趣.我从来没有被开除过,所以很难不去想得太多.我开始浏览招聘板块,一个全职PHP程序员的职位很吸引人, ...

  5. [置顶] 学习JDK源码:编程习惯和设计模式

    编程习惯 1.用工厂方法替代构造函数 Boolean.valueOf() 通过一个boolean简单类型,构造Boolean对象引用. 优点:无需每次被调用时都创建一个新对象.同时使得类可以严格控制在 ...

  6. iOS高效编程秘诀—坚持编程习惯

    资料源于网络 习惯会影响一个人做事的方式,也会直接影响效率.我经常在项目完成后自我总结,有哪些做得好的,有哪些做得不好的?然后把一些好的流程记录下来,并且重新运用回编程中.那些能够坚持去做的流程,就变 ...

  7. 养成这8个编程习惯,你的Python性能将蹭蹭蹭地往上涨

    Python不以性能见长,但掌握一些技巧,也可尽量提高程序性能,避免不必要的资源浪费. 1. 使用局部变量 尽量使用局部变量代替全局变量:便于维护,提高性能并节省内存. 使用局部变量替换模块名字空间中 ...

  8. java的编程习惯影响程序性能

    在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身. 养成良好的编程习惯非常重要,能够显著地提升程序性能. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时 ...

  9. 养成良好的C++编程习惯(持续更新)

                    c++语言的灵活是建立在对编程者个人的编程素质的严格要求基础上的,好的C++编程习惯能避免很多问题. 没有好的编程习惯,极有可能编写一行代码,编译器能报十几个错误,而且 ...

随机推荐

  1. 2018蓝桥杯 全球变暖(dfs)

    你有一张某海域NxN像素的照片,"."表示海洋."#"表示陆地,如下所示:........##.....##........##...####....###.. ...

  2. PAT1066(AVL树)

    An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...

  3. [LeetCode_94] Binary Tree Inorder Traversal

    题目链接 https://leetcode.com/problems/binary-tree-inorder-traversal/ 题意 二叉树的中序遍历 思路 中序遍历:即"左中右&quo ...

  4. aruba 802.11ac协议

    上述功能为802.11ac协议,高密环境下建议不勾选. 附百度百科:虽然802.11ac标准草案提高了传输速度并增加了带宽,可以支持企业网络中数量越来越庞大的设备,但是企业开始发现,这个标准需要依赖于 ...

  5. stark组件之过滤操作【模仿Django的admin】

    一.先看下django的admin是如何实现过滤操作 首先在配置类中顶一个list_filter的列表,把要过滤的字段作为元素写i进去就可以了 class testbook(admin.ModelAd ...

  6. 联想G510安装win7系统

    1.插入系统盘重启(要按Fn+f12) 2默认下一步 3.选择自定义 4.选择需要将系统安装到的分区,格式化,然后下一步 5.默认下一步 安装到这里就成功了 6.问题处理: 第4步时出现 Window ...

  7. 使用命令行执行sql文件

    用Navicat 导入sqlserver数据库时,出现了out of memory异常,百度无果,想起之前用命令行导入过,再次试了一下成功 用法: 打开执行命令: sqlcmd -S localhos ...

  8. java_14.1 判断是否是闰年

    package demo; import java.util.Calendar; import java.util.Scanner; public class Demo { public static ...

  9. how2j网站前端项目——天猫前端(第一次)学习笔记5

    收拾好心情,现在开始学习第5个页面——购物车页面! 一.结算按钮 这个还是比较简单的,我自己看着站长的样子模仿了一个: 有个地方不会做,就是全选前面的复选框,站长的框里面是白色的,我搞不来. 二.订单 ...

  10. 利用jenkins+saltstack+sh 修改nginx配置文件并重新加载

    jenkins的配置(这里作用只是当做界面使用,利用它来管理执行salt命令) 1.构建操作来执行shell脚本 (pillar可以配置灵活的参数) saltstack 的 sls文件编写 nginx ...