crane_utils¶
概要¶
crane_utilsは、Craneプロジェクト全体で使用される共通ユーティリティ関数とヘルパーを提供するヘッダーオンリーライブラリです。ストリーム操作や時間計測などの基本的な機能を提供し、コード重複を削減します。
主要機能¶
ストリーム操作 (stream.hpp)¶
std::vectorのストリーム出力演算子オーバーロードuint8_tの数値表示サポート(文字表示の回避)- デバッグ出力の簡素化
時間計測 (time.hpp)¶
getDiffSec(): 2つの時刻間の差分計算(秒単位)getElapsedSec(): 開始時刻からの経過時間計算ScopedTimer: スコープベースの自動時間計測とROS 2トピック発行
アーキテクチャ上の役割¶
依存レイヤ: ユーティリティ層(Layer 2)
- ROS 2の基本型とC++標準ライブラリのみに依存
- 他のCraneパッケージから広く利用される基盤ライブラリ
- ヘッダーオンリー設計により、ビルド時間の短縮とリンク不要を実現
ライブラリAPI¶
stream.hpp¶
namespace crane {
template<typename T>
std::ostream& operator<<(std::ostream& os, const std::vector<T>& vec);
}
使用例:
#include <crane_utils/stream.hpp>
std::vector<int> data = {1, 2, 3};
std::cout << data << std::endl; // 出力: [1,2,3]
time.hpp¶
namespace crane {
template<typename TClock>
double getDiffSec(std::chrono::time_point<TClock> start,
std::chrono::time_point<TClock> end);
template<typename TClock>
double getElapsedSec(std::chrono::time_point<TClock> start);
class ScopedTimer {
explicit ScopedTimer(rclcpp::Publisher<std_msgs::msg::Float32>::SharedPtr pub);
double elapsedSec() const;
};
}
使用例:
#include <crane_utils/time.hpp>
// 時間差分計算
auto start = std::chrono::high_resolution_clock::now();
// ... 処理 ...
auto end = std::chrono::high_resolution_clock::now();
double elapsed = crane::getDiffSec(start, end);
// スコープタイマー(自動計測+ROS 2発行)
{
crane::ScopedTimer timer(publisher);
// ... 計測対象処理 ...
} // デストラクタで自動的に経過時間をトピック発行
依存関係¶
ビルド依存¶
ament_cmake_autorclcppstd_msgs
実行時依存¶
なし(ヘッダーオンリーライブラリ)
使用方法¶
パッケージへの統合¶
package.xmlへの依存追加:
CMakeLists.txt:
コードでの使用¶
最近の開発状況¶
- 2025年11月: パッケージ作成・基本ユーティリティの実装
- 設計方針: シンプルで再利用可能なヘッダーオンリーライブラリとして維持
- 今後の方針: 必要に応じて共通機能を追加予定
関連パッケージ¶
- 全Craneパッケージ(広く利用される基盤ライブラリ)
- 特に
crane_robot_skills、crane_world_model_publisherなどで活用
備考¶
- ヘッダーオンリー設計のため、ビルド時間への影響が最小限
- テンプレート関数を活用し、型安全性を保証
- ROS 2トピックへの時間計測自動発行により、パフォーマンス分析が容易