日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ROS学习之日志消息

發(fā)布時(shí)間:2024/4/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ROS学习之日志消息 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ROS學(xué)習(xí)之日志消息

ROS日志系統(tǒng)的核心思想,就是使程序生成一些簡(jiǎn)短的文本字符流,這些字符流便是日志消息。

0.1嚴(yán)重級(jí)別

?????? ROS中,日志消息分為五個(gè)不同的嚴(yán)重級(jí)別,也可簡(jiǎn)稱為嚴(yán)重性或者級(jí)別。按照嚴(yán)重性程度遞增,這些級(jí)別有
?????? DEBUG
?????? INFO
?????? WARN
?????? ERROR
?????? FATAL

0.2生成日志消息

0.2.1簡(jiǎn)單日志消息

???? 生成簡(jiǎn)單的日志消息,總共有五個(gè)基本的 C++宏用來產(chǎn)生日志消息,其中每個(gè)宏對(duì)應(yīng)一個(gè)嚴(yán)重級(jí)別:
???? ROS_DEBUG_STREAM(message);
???? ROS_INFO_STREAM(message);
?? ? ROS_WARN_STREAM(message);
?? ? ROS_ERROR_STREAM(message);
?? ? ROS_FATAL_STREAM(message);

???? 其實(shí)這個(gè)宏的定義就把格式輸出包含到里面,其中各個(gè)宏的參數(shù) message 可以處理 C++中標(biāo)準(zhǔn)輸出流(ostream)中的各種表達(dá)式,比如 std::cout。這包括在 int 或者 double 這種基本數(shù)據(jù)類型上使用插入操作符(<<),以及已經(jīng)重載這個(gè)操作符的 復(fù) 合 數(shù) 據(jù) 類 型

?

?

0.2.2生成單次日志消息

???? 生成單次消息,其實(shí)就是在程序中加入了一個(gè)靜態(tài)局部變量來檢測(cè),進(jìn)入一次后就把變量改為false則下次檢測(cè)到后則不輸出該信息。

// Don't do this directly. Use ROS_..._STREAM_ONCE instead. { static bool first_time = true ; if (first_time) { ROS_INFO_STREAM( "Here's some important information" <<" that will only appear once."); first_time = false; } }

?

???? 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);

?

?

0.2.3生成頻率受控日志消息

???? 參數(shù) interval 是 double 類型的,它表示以秒為單位的時(shí)間量,這是相鄰日志消息出現(xiàn)的最小時(shí)間間隔。 ROS_..._STREAM_THROTTLE宏的每一個(gè)實(shí)例在第一次執(zhí)行時(shí)都會(huì)生成日志消息(與不帶_THROTTLE 后綴版本宏的日志消息相同),隨后的執(zhí)行都會(huì)被忽略,直到經(jīng)過了指定的時(shí)間間隔。每個(gè)宏的實(shí)例的時(shí)間被單獨(dú)跟蹤,方法是使用一個(gè)局部靜態(tài)變量來存儲(chǔ)上一次生成日志的時(shí)間。

???? 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);

?

0.3查看日志消息

0.3.1控制臺(tái)輸出日志

?

0.3.2rosout輸出日志

??? 除了在控制臺(tái)上顯示,每一個(gè)日志消息都被發(fā)布到話題/rosout 上。該話題的消息類型是 rosgraph_msgs/Log

??????? 我們可以通過rostopic echo /rosout 來查看消息,也可以通過一個(gè)節(jié)點(diǎn)來訂閱日志話題還可以通過指令rqt_console來通過圖形界面來顯示日志消息。

?

0.3.3日志文件

?? 日志消息的第三個(gè),也是最后一個(gè)目的地,是由 rosout 節(jié)點(diǎn)生成的日志文件。作為/rosout 話題回調(diào)函數(shù)的一部分,該節(jié)點(diǎn)可以將日志消息作為一行寫入到一個(gè)日志文件,文件名類似于:~/.ros/log/run_id/rosout.log

??????? 有時(shí)日志過多時(shí)需要我們清除系統(tǒng)日志,利用指令rosclean check如果日志正在消耗過多的硬盤空間,可以通過下面的命令刪除所有已經(jīng)存在的日志:rosclean purge

?

0.4日志啟用和禁用

?

0.4.1通過命令行設(shè)置日志級(jí)別

??????? 設(shè)置一個(gè)節(jié)點(diǎn)的日志級(jí)別,可以使用與以下類似的命令:rosservice call /node-name/set_logger_level???? ros.package-name ? ? level條命令調(diào)用 set_logger_level 服務(wù),該服務(wù)由各個(gè)節(jié)點(diǎn)自動(dòng)提供。
??????? node-name 是你期望設(shè)置日志級(jí)別的節(jié)點(diǎn)名稱
??????? package-name 正如你猜測(cè)的一樣,是擁有這個(gè)節(jié)點(diǎn)的功能包的名稱

??????? level 參數(shù)是 DEBUG、INFO、WARN、ERROR、FATAL 中的一個(gè)89字符串,即為節(jié)點(diǎn)設(shè)置的日志級(jí)別。
?????? 例如,為了在示例程序中啟用 DEBUG 級(jí)別的消息,我們可以使用下面這條命令:
?????? rosservice call /count_and_log/set_logger_level ros.agitr DEBUG
?????? 注意,由于這條命令直接與節(jié)點(diǎn)進(jìn)行交互,我們不能在節(jié)點(diǎn)啟動(dòng)之前使用它。如果一切正常,這個(gè)對(duì) rosservice 的調(diào)用將輸出一個(gè)空行。

0.4.2通過圖形界面設(shè)置日志級(jí)別
?????? 可以嘗試以下命令:rqt_logger_level來通過圖形界面進(jìn)行配置

?

轉(zhuǎn)載于:https://www.cnblogs.com/flyingjun/p/8831455.html

總結(jié)

以上是生活随笔為你收集整理的ROS学习之日志消息的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。