ROS日志消息

// This program periodical ly generates log messages at
 // various severity levels .
 #include <ros/ros.h>

 int main (int argc,char **argv) 
{
 // Initialize the ROS system and become a node .
 ros::init(argc, argv, "count_and_log");
 ros::NodeHandle nh;

 // Generate log messages of varying severi ty regularly .
 ros::Rate rate (10);
 for(int i=1; ros::ok(); i++)
{
 ROS_DEBUG_STREAM("Counted?to?"<<i);
 if((i%3)==0)
{
 ROS_INFO_STREAM(i<<"?is?divisible?by?3.");
 }
 if((i%5)==0)
{
 ROS_WARN_STREAM(i<<"?is?divisible?by?5.");
 }
 if((i%10)==0)
{
 ROS_ERROR_STREAM(i<<"?is?divisible?by?10.");
 }
 if((i%20)==0)
{
 ROS_FATAL_STREAM(i<<"?is?divisible?by?20.");
 }
 rate.sleep();
 }
}
1.普通的日志输出
总共有五个基本的 C++ 宏用来产生日志消
息,其中每个宏对应一个严重级别:
ROS_DEBUG_STREAM(message);
ROS_INFO_STREAM(message);
ROS_WARN_STREAM(message);
ROS_ERROR_STREAM(message);
ROS_FATAL_STREAM(message);
其中各个宏的参数 message 可以处理 C++ 中标准输出流( ostream
中的各种表达式
 
2.格式输出函数(printf)的日志
如果你更喜欢用格式输出函数( printf )风格的接口来替换
C++ 风格的流, ROS 还提供了不带 _STREAM 后缀的宏。比如,
ROS_INFO(format, …)
可以生成 INFO 级别的日志消息。只要你熟悉 printf ,这些
宏将按照你的期望工作。一个具体的例子是,表 3.4 中的
代码大致等价于:
ROS_INFO(“Position=(%0.2f, %0.2f) direction=%0.2f”, msg.x,
 
msg.y, msg.theta);
 
3. 生成一次性日志消息
OS 提供了可以仅仅生成一次日志消息的简单
的宏。
ROS_DEBUG_STREAM_ONCE(message);
ROS_INFO_STREAM_ONCE (message);
ROS_WARN_STREAM_ONCE (message);
ROS_ERROR_STREAM_ONCE (message);
ROS_FATAL_STREAM_ONCE (message);
在循环中就第一次执行打印,后续执行无效
 
4.生成频率受控的日志消息
还有一些宏可以用来控制日志消息
出现的频率。
ROS_DEBUG_STREAM_THROTTLE(interval, message);
ROS_INFO_STREAM_THROTTLE(interval, message);
ROS_WARN_STREAM_THROTTLE(interval, message);
ROS_ERROR_STREAM_THROTTLE(interval, messge);
ROS_FATAL_STREAM_THROTTLE(interval, message);
参数 interval double 类型的,它表示以秒为单位的时间量,这
是相邻日志消息出现的最小时间间隔。 ROS_..._STREAM_THROTTLE
宏的每一个实例在第一次执行时都会生成日志消息(与不带
_THROTTLE 后缀版本宏的日志消息相同),随后的执行都会被忽略,
直到经过了指定的时间间隔。每个宏的实例的时间被单独跟踪,
方法是使用一个局部静态变量来存储上一次生成日志的时间
 
查看日志
1.控制台
然而,需要注意的是,由于这两种流的缓存方式不同,
可能导致消息不按照顺序出现——在结果中 DEBUG
INFO 消息可能出现得比你预想的靠后。你可以使用 stdbuf
命令使标准输出采用行缓存方式,从而强制让消息按照正
常顺序输出:
stdbuf –oL command &> file
将其日志记录存于文件中
 

2. rosout 上的消息

由于 /rosout 只是一个普通的话题,你当然可以通过
rostopic echo /rosout
这条命令直接查看消息内容。如果你一定要坚持,甚至可以自己
写一个程序来订阅 /rosout 话题,以你自己喜欢的方式来显示或者
处理这些消息。然而,查看 /rosout 消息最简单的方式是使用下面
这条命令 5, 6
rqt_console
 
3.日志文件
日志消息的第三个,也是最后一个目的地,是由 rosout 节点
生成的日志文件。作为 /rosout 话题回调函数的一部分,该节点可
以将日志消息作为一行写入到一个日志文件,文件名类似于:
~/.ros/log/run_id/rosout.log
这里的 rosout.log 日志文件是纯文本文件。它可以利用 less head
或者 tail 等命令行工具、或者是你喜欢的文本编辑器查看。运行
标识码( run_id )是一个通用唯一识别码( UUID ),它在节点管理
器开始运行时基于你计算机的 MAC 地址和当前的时间生成。下面
是一个 run_id 的例子:
57aa1860-d765-11e2-a830-f0def1e189cc
使用这类唯一标识码,可以区分来自不同 ROS 会话的日志文件。
查找运行标识码 至少有两种简单方法可以查看当前会话的
run_id
通过检查 roscore 生成的输出,在靠近输出末端的位置,可以
看到与下面内容类似的一行
setting /run_id to run_id
通过以下命令向节点管理器询问当前的 run_id
rosparam get /run_id
由于 run_id 存放在参数服务器上,因此该命令是有效的。
 
查看和删除日志文件
可以使用下面这条命令来查看当前账户中被 ROS 日志消
耗的硬盘空间 7
rosclean check
如果日志正在消耗过多的硬盘空间,可以通过下面的命令删除所
有已经存在的日志:
rosclean purge
如果你愿意,也可以手动删除这些日志文件
 
日记级别设置
待完善
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值