关于ROS日志ROS_INFO需要知道的一些东西

背景

        之前刚学ros没有太关注过ros的日志消息,感觉ROS_INFO ROS_INFO_STREAM等和printf cout没什么大的区别,还打印一大串时间戳,没什么用,也没有深究,真是年少无知啊!后来随着调试项目的复杂,发现调试中间输出好多信息,到了部署的时候没什么用处,还得注释掉,很麻烦,后来就用了glog.在ros相关的项目中,为了保持格式的一致,又关注了一下ros自身的消息打印,发现还是很好用的,下面简单分享一下比较常用的经验,还有好多没用到的慢慢探索.

参考:可以先看一下这个博客 【ROS】学习之日志(log)消息_Amelie_xiao的博客-CSDN博客_rosout参考:https://www.cnblogs.com/flyingjun/p/8831455.htmlhttp://t.zoukankan.com/lijianming180-p-12014217.htmlROS日志(log)系统:通过显示进程的运行状态是好的习惯,但需要确定这样做不会影响到软件的运行效率和输出的清晰度。ROS 日志 (log) 系统的功能是让程序生成一些日志消息,显示在屏幕上、发送到特定 topic 或者储存在特定 log 文件中,以方便调试、记录、报警等。下面简单介.https://blog.csdn.net/lemonxiaoxiao/article/details/122101380

我简单写一下自己的测试过程吧

python 脚本如下:

import rospy

if __name__ == '__main__':
    rospy.init_node("test_node")
    rate = rospy.Rate(5)

    while not rospy.is_shutdown():
        rospy.loginfo("Hello world!")
        rospy.logwarn("Hello warning!")
        rospy.logerr("hello error")
        rospy.logdebug("hello debug")
        rospy.logfatal("hello fatal")
        rate.sleep()

默认输出等级为INFO, 不输出debug信息,可以打开rqt_logger_level配置输出等级, 选择节点test_node, logger: rosout, levels改为Debug

 输出结果如下:

 解释一下输出信息:第一个为系统时间戳,第二个为消息的输出的时候时钟源的时间,当ros系统设置了use_sim_time true的时候,这个为播放的bag包的时间,没有bag数据包播放时会卡住,可参考博客: ros::Rate 设定的帧率循环进入一次就卡住_龙性的腾飞的博客-CSDN博客问题:ros::Rate 设定的循环进入一次就卡住解决方案:ros环境使用的仿真时间,时钟源(录的数据包)停止了,设置使用系统时间或者重新播放bag数据包,仿真时间更新即可.或者,中断rosore重新启动.参考:ROS时钟仿真的初探_qq_278667286的博客-CSDN博客ros时钟仿真的初探如果设置了ros时钟仿真参数,发布一个时间的clock话题,就可以控制ros系统的时间。但是当发布clock话题的节点没有运行,会出现什么反应?我得出的答案是当其他所有节点线程遇到延时,执行rospy.slhttps://blog.csdn.net/qq_30460905/article/details/123697863?spm=1001.2014.3001.5501

当然你都无法直接分辨是哪天,这都是从1970-01-01 00:00:00 UTC开始算起的时间,单位为秒.国内北京时间UTC+8.0所以时间戳是从1970-01-01 08:00:00开始.

        要想看懂时间戳,下面就轮到rqt_console登场了,如下图stamp显示的就是转换过后的时间戳:

 第一行从左到右如图,很清晰,最后一列Location可以定位到来自于哪个文件多少行,双击每条消息任意位置可以查看消息的所有详细信息.

第二行是配置过滤哪些消息,可根据等级,消息内容,时间范围,节点以及话题来滤除.

第三行是配置高亮哪些消息,可根据等级,消息内容,时间范围,节点以及话题来设置.

对于大型项目日志查看和分析很有用了.

赶快用起来吧!

### ROS_INFO 宏的使用方法及示例 #### 1. **ROS_INFO 宏简介** `ROS_INFO` 是 ROS 提供的一组日志记录工具的一部分,用于在运行时输出信息级别的消息。它类似于标准 C++ 中的 `printf` 函数,但在 ROS 环境中有更多优势,比如可以根据日志级别过滤输出、支持颜色编码以及便于调试和部署环境下的管理[^6]。 #### 2. **基本语法** `ROS_INFO` 的基本形式如下所示: ```cpp ROS_INFO(format_string, arguments...); ``` - `format_string`: 类似于 printf 风格的格式化字符串。 - `arguments...`: 对应占位符的具体值列表。 例如,如果想打印一条简单的提示信息可以这样写: ```cpp ROS_INFO("This is an informational message."); ``` 更复杂的带参数情况则像下面这样实现: ```cpp int count = 42; double value = 3.14; ROS_INFO("Count: %d Value: %.2f", count, value); ``` 以上代码会分别将整数变量 `count` 和浮点数变量 `value` 插入到指定的位置处形成最终输出的内容[^7]。 #### 3. **实际应用案例** 假设有一个定时发布话题数据的小型节点,我们可以加入一些状态报告来辅助观察其行为表现: ```cpp #include "ros/ros.h" #include "std_msgs/String.h" void chatterCallback(const std_msgs::String::ConstPtr& msg){ ROS_INFO("I heard: [%s]", msg->data.c_str()); } int main(int argc, char **argv){ ros::init(argc, argv, "listener"); ros::NodeHandle n; ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback); ros::spin(); return 0; } ``` 在此例中每当接收到新的消息时都会触发回调函数 `chatterCallback` ,从而执行里面的 `ROS_INFO` 来告知监听到了什么样的具体内容[^8]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值