ROS - 日志
1.日志级别
日志消息分为五个不同的严重级别宏,与Android的Log定义的严重级别类似,如下基础宏:
ROS_DEBUG_STREAM、ROS_INFO_STREAM、ROS_WARN_STREAM、ROS_ERROR_STREAM、ROS_FATAL_STREAM(按照严重程序级别排序,低到高)
C++代码:
#include <ros/ros.h>
int main(int argc, char** argv){
ros::init(argc, argv, "hello_ros");
ros::NodeHandle nh;
ROS_DEBUG_STREAM("Log DEBUG");
ROS_INFO_STREAM("Log INFO");
ROS_WARN_STREAM("Log WARN");
ROS_ERROR_STREAM("Log ERROR");
ROS_FATAL_STREAM("Log FATAL");
}
编译运行:
pim_server@pim-Precision-T1700:~/ROS/Project$ rosrun hello hello_node
[ INFO] [1476881348.684803138]: Log INFO
[ WARN] [1476881348.684843112]: Log WARN
[ERROR] [1476881348.684852220]: Log ERROR
[FATAL] [1476881348.684876076]: Log FATAL
从运行结果来看,你会发现DEBUG没有打印出来,Why?淡定,4会解答
2.循环单次日志
基础宏后面添加_ONCE,代表日志在循环迭代中只有第一次才会打印日志:
C++代码:
#include <ros/ros.h>
int main(int argc, char** argv){
ros::init(argc, argv, "hello_ros");
ros::NodeHandle nh;
for(int i = 0; i < 10; i++){
ROS_INFO_STREAM_ONCE("Log info i = " << i);
if(i >= 2){
ROS_INFO_STREAM_ONCE("Log info i = " << i);
}
}
}
终端运行:

3.频率日志
基础宏后面添加_THROTTLE就变为了频率日志,入ROS_INFO_STREAM_THROTTLE(interval, message),第一个参数interval代表以秒为单位的时间量,时间量指的是两个日志出现的最小时间间隔
4.打开、关闭日志
1中提到DEBUG日志信息没有输出,原因是C++程序默认的日志级别为INFO,所有DEBUG日志被忽略掉了,那问题来了,如何打开DEBUG级别日志呢?
rosservice call /node-name/set_logger_level ros.package-name level
C++代码:
#include <ros/ros.h>
int main(int argc, char** argv){
ros::init(argc, argv, "hello_ros");
ros::NodeHandle nh;
while(ros::ok()){
ROS_DEBUG_STREAM("Log DEBUG");
ROS_INFO_STREAM("Log INFO");
ROS_WARN_STREAM("Log WARN");
ROS_ERROR_STREAM("Log ERROR");
ROS_FATAL_STREAM("Log FATAL");
}
}
启动上面节点,然后终端运行
rosservice call /hello_ros/set_logger_level ros.hello DEBUG

终端打印如下,久违的DEBUG!
参考链接:https://www.jianshu.com/p/b360728ad6d1
ROS - 日志的更多相关文章
- ROS 日志消息(C++)
1.日志级别 日志消息分为五个不同的严重级别宏,与Android的Log定义的严重级别类似,如下基础宏: ROS_DEBUG_STREAM.ROS_INFO_STREAM.ROS_WARN_STREA ...
- ROS中的日志(log)消息
学会使用日志(log)系统,做ROS大型项目的主治医生 通过显示进程的运行状态是好的习惯,但需要确定这样做不会影响到软件的运行效率和输出的清晰度.ROS 日志 (log) 系统的功能就是让进程生成一些 ...
- SLAM+语音机器人DIY系列:(二)ROS入门——8.理解roslaunch在大型项目中的作用
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- ROS——rqt
$ rosrun rqt_plot rqt_plot # 画出发布在topic上的数据变化图 $ rosrun rqt_graph rqt_graph #画出node关系图 $ rosrun rq ...
- Ros学习调试——rqt_console
1.rqt_console rqt_console:ROS日志框架(logging framework)的一部分,用来显示节点的输出信息 rqt_logger_level:允许我们修改节点运行时输出信 ...
- ROS学习笔记九:ROS工具
ROS有各种工具可以帮助用户使用ROS.应该指出,这些GUI工具是对输入型命令工具的补充.如果包括ROS用户个人发布的工具,那么ROS工具的数量很庞大.其中,本文讨论的工具是对于ROS编程非常有用的辅 ...
- ROS 的一些常用命令行功能
1.安装并添加源sudo gedit /etc/apt/sources.list更新下sudo apt-get update添加 sources.list,如sudo sh -c '. /etc/ls ...
- ROS参数服务器(Parameter Server)
操作演示,对参数服务器的理解:点击打开链接 rosparam使得我们能够存储并操作ROS 参数服务器(Parameter Server)上的数据.参数服务器能够存储整型.浮点.布尔.字符串.字典和列表 ...
- ros基础知识总结
参考于:ros官网教程 实验楼:ros机器人操作系统自主学习实验 基础知识 1 一个catkin程序包由什么组成? 一个程序包要想称为catkin程序包必须符合以下要求: 该程序包必须包含catkin ...
随机推荐
- linux部署jdk-tomcat
http://blog.csdn.net/u012187452/article/details/72595040 //参考jdk下载 一.安装JDK1 下载安装包http://blog.csdn.ne ...
- Linq 使用Startswith 出现空引用的问题
一.问题 我使用的是Entity Fromwork CodeFirst来操作数据库,昨天在使用startswith查询数据的时候发现一个问题,就是经常一直报空引用的错误,查了很久才找到原因,这里做一个 ...
- 【LeetCode 37】解数独
题目链接 [题解] 回溯法搞一下. 用set和数组下标判重. [代码] class Solution { public: set<int> myset[9]; int hang[9][10 ...
- 二进制&八进制&十六进制之间的快速转换------ 心算&笔算方法总结
二进制数 0&1两种元素: 8进制数 0-7 八种元素: 十六进制数 0-9,a,b,c,d,e, ...
- 【2019 Multi-University Training Contest 1】
01:https://www.cnblogs.com/myx12345/p/11543105.html 02:https://www.cnblogs.com/myx12345/p/11439320.h ...
- js的 算法 和 数据结构
js的 算法 1.对一个对象数组按照对象某个属性进行排序 : https://www.cnblogs.com/webcabana/p/7460038.html 在做公交的项目中就碰到过这种算法问题, ...
- 公司-ofo:ofo
ylbtech-公司-ofo:ofo ofo小黄车是一个无桩共享单车出行平台,缔造了“无桩单车共享”模式,致力于解决城市出行问题.用户只需在微信公众号或App扫一扫车上的二维码或直接输入对应车牌号,即 ...
- Sublime 代码段设置
# Sublime 代码段 > 依次找到:Tools -> Developer -> New Snippet,默认代码段配置文件如下: <snippet><cont ...
- Struts1.3——文件上传和下载
1.Struts文件上传 在Web开发中,会经常涉及到文件的上传和下载,比如在注册账户的时候,我们需要上传自己的头像等. 我们可以利用Struts很方便地实现文件的上传. 1.1 开发步骤 现在,假设 ...
- python学习笔记:循环语句——while、for
python中有两种循环,while和for,两种循环的区别是,while循环之前,先判断一次,如果满足条件的话,再循环,for循环的时候必须有一个可迭代的对象,才能循环,比如说得有一个数组.循环里面 ...