ROS2ロボットの稼働監視にKafkaとQuestDBを使った話
本文:
「複数のロボットが止まったことをリアルタイムで検知するシステムを作りたい」——そんな動機から、プロダクションレベルのデータパイプラインをロボット監視に応用するプロジェクトを始めました。
【背景】
複数台のロボットが稼働する現場では、どのロボットがいつ止まったかをリアルタイムで把握することが重要です。ROS2のトピックを直接監視するだけではスケールしないし永続化もできない。そこで分散ストリーミング基盤(Kafka)とタイムシリーズDB(QuestDB)を組み合わせたアーキテクチャを設計しました。
【システム概要】
2台のTurtleBot3をGazebo Harmonicでシミュレーションし、オドメトリデータをリアルタイムで収集・分析するパイプラインです。
データフロー:
Gazebo → ROS2 → Kafkaブローカー → QuestDB → 異常検知エンジン
異常検知は10サンプルのスライディングウィンドウで位置分散を計算し、分散が0.001 m²を下回った場合に「ロボット停止」アラートをDBに書き込みます。検知レイテンシは数秒以内。
【技術的な判断】
・なぜKafka?→ プロデューサー(シミュレーター)とコンシューマー(分析・DB書き込み)を疎結合にするため。将来50台以上に拡張する場合も対応できます。
・なぜQuestDB?→ ILPプロトコルによる高速書き込みとPostgreSQLワイヤープロトコルでの柔軟なクエリが両立できるため。
【学んだこと】
・ROS2と分散ストリーミング基盤を繋ぐシステム設計
・Dockerを使った複数サービスのローカル開発環境構築
・タイムシリーズデータの効率的な格納と異常検知アルゴリズムの実装
・単なるロボット制御ではなく「ロボットを運用・監視するインフラ」の設計思想
GitHub: https://github.com/AungKaung1928/fleet_monitoring_ws