日本人口++

一昨日、待望の第一子が生まれました。元気で仕草も泣き声も顔も手足も全部可愛い赤ちゃんです。 立ち会い出産も経験することができて、赤ちゃんを取り上げる瞬間や最初の泣き声をあげる瞬間を生で見聞きして、これまでに感じたことのない感情がこみ上げました。妻に感謝します。 「イクメン」という一人歩きした流行り言葉が世の中から廃れて、そんなことは当たり前の世界に早くなるといいですね。

ここ最近、週5ブログ投稿が断続的になりがちでしたが、いろいろとありましてご了承ください。

気を取り直して、本日はROS 2 Beta 2で導入されたロギングライブラリrcutilsを取り上げます。 英語での解説記事もないため、下記ソースコードレポジトリとAPIドキュメントを参照しました。

rclc

ROS 2のクライアントライブラリ(rclcpp, rclpyなど)はゼロベースでそれぞれ実装されているROS 1の場合と違い、rclcというC言語のクライアントライブラリの上にそれぞれ実装されます。

https://github.com/ros2/rclc

これにより、C言語のライブラリを読み込める言語ならば、シリアライズ、通信といった共通のプログラムを再実装するコストなく追加していくことができます。

rcutils

rcutilsも同様にC言語で実装されています。 このため、現在はまだC++言語のサンプルプログラムでしか使われていませんが、rclcと同じようにその他のプログラミング言語にも再利用さていくのかもしれません。

ロギング

いろいろな便利関数が実装されているのですが、一番良く使うことになっていくのはロギングマクロでしょう。 rcutils/logging.hに様々な条件付きマクロが定義されています。

#define RCUTILS_LOG_DEBUG(...)
#define RCUTILS_LOG_DEBUG_NAMED(name, ...)
#define RCUTILS_LOG_DEBUG_ONCE(...)
#define RCUTILS_LOG_DEBUG_ONCE_NAMED(name, ...)
#define RCUTILS_LOG_DEBUG_EXPRESSION(expression, ...)
#define RCUTILS_LOG_DEBUG_EXPRESSION_NAMED(expression, name, ...)
#define RCUTILS_LOG_DEBUG_FUNCTION(function, ...)
#define RCUTILS_LOG_DEBUG_FUNCTION_NAMED(function, name, ...)
#define RCUTILS_LOG_DEBUG_SKIPFIRST(...)
#define RCUTILS_LOG_DEBUG_SKIPFIRST_NAMED(name, ...)
#define RCUTILS_LOG_DEBUG_THROTTLE(time_source_type, duration, ...)
#define RCUTILS_LOG_DEBUG_SKIPFIRST_THROTTLE(time_source_type, duration, ...)
#define RCUTILS_LOG_DEBUG_THROTTLE_NAMED(time_source_type, duration, name, ...)
#define RCUTILS_LOG_DEBUG_SKIPFIRST_THROTTLE_NAMED(time_source_type, duration, name, ...)

ログレベルは以下の5段階です。上記マクロのDEBUG部分を読み替えてください。

  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL

ログレベルをプログラムで制御できるマクロもあります。

#define RCUTILS_LOG_COND_NAMED(severity, ...)

その他

その他、以下のような便利関数が定義されています。

  • メモリ割り当て
  • システム時間取得
  • 文字列操作
  • ファイルシステム操作
  • コマンドライン引数パーサ