rosbags を管理するための 9 つのすばらしいオープンソース ツール
Evocargo エンジニアによる選択
ROS を始めたばかりでも、すでに深い開発者でも、特定のことや操作をより簡単に、より速く、より便利に行うことができると感じるかもしれません。ROS 用のツールを今すぐ作成することを考えるかもしれません。たとえば、バッグのメタデータを見やすく表示するツールなどです。その前に、オープンソース ROS パッケージのセレクションを確認してください。時間と労力を大幅に節約できる既製のソリューションが見つかるかもしれません。
この投稿では、バッグ データの視覚化と編集に役立つ ROS バッグのパッケージに焦点を当てます。一部のパッケージでは、さらに進んで、特定の製品のニーズに合わせてパッケージをアップグレードする方法を示します。
自動運転車は、認識、位置特定、衝突回避、自己診断、および自動運転車のその他の重要なタスクに必要な大量のデータを生成します。このようなデータは、ニューラル ネットワークのトレーニングやインシデントの調査に使用されるため、非常に価値のある資産です。たとえば、米国高速道路交通安全局は、自律システムの安全性を調査し、結果を報告書にまとめるために、 SAE レベル 2 ~ 5 の先進運転支援システム(ADAS)を搭載した車両が関与する特定の衝突を報告することを、一部のメーカーとオペレーターに義務付けています。クラッシュレポート。これは、他の国でも一般的な方法になる可能性があります。
生成されたデータの推定値は、搭載されている機器やアプリケーション シナリオにより、車両ごとに異なる場合があります。複数の高解像度カメラ、ライダー、レーダー、およびその他のセンサーを搭載した 1 台の自動運転車は、数時間の通勤で最大 15 TB のデータを生成できます。これは、乗客をノンストップで移動させるロボタクシーが 1 日あたり 450 TB を処理できると言われていることを意味します (詳細については、こちらとこちらを参照してください)。
ROS を使用している場合、すべてのデータは、記録および保存されるバッグ ファイルに書き込まれるため、後でそれらにインデックスを付けたり、注釈を付けたり、再生したりできます。
そのため、ナビゲートして分析する必要があるファイルの印象的なリストができあがります。それをやり遂げるには、この記事で説明するために選択した無料の ROS パッケージを使用できます。それらのいくつかはROS Indexに含まれていますが、含まれていないものもあります。また、それらのいくつかは ROS 1 専用に設計されています — これについてはメモします。
素敵な UI でバッグを表示する
図 1からわかるように、バッグは基本的にディレクトリ内のファイルです。それらを操作するにはコマンド ライン インターフェースを使用する必要があり、できることはあまりありません。デフォルトでは、ROS を使用すると、bag ファイルを再生したり、bag に関する情報を表示したり、そのサイズと期間を表示したり、トピックやタイプを表示したりできます。メッセージの数とその量。データが蓄積すればするほど、必要なものを見つけるのが難しくなります。
Southwest Research InstituteによるBag Databaseツールは、ROS バッグ ファイルのディレクトリを監視するための使いやすい Web インターフェイスを提供します。記録の日付、ルート、対応する画像など、多くの有用なメタデータを表示できます。
バッグとのやり取りがとても簡単で効率的になります。
さらに、Bag Databaseを使用すると、分離された Docker コンテナーで実行できるさまざまな後処理スクリプトを追加できます。たとえば、Evocargo では、bag_indexer
バッグの中身の包括的な概要を 1 つの PNG 画像で表示するスクリプトを作成しました。
一見すると、次のようなアイデアを得ることができます。
- サムネイルによるレーンの品質、光、および気象条件
- オドメトリ、GNSS、ローカリゼーションに基づく参照ルートとそれからの逸脱
- 任意の時間または位置での速度
- 車両制御モード、または車両を手動で操作しなければならなかった時間
- 乗車距離と所要時間
- バッグネームなど
情報ブロックの位置と色、カメラ画像からのサムネイルの数などのスナップショットのパラメーターは、構成ファイルで定義されます。
Bag Databaseでは、bag_indexer
スクリプトは次のようになります。
スクリプトの詳細と例については、バッグ データベースのドキュメントを参照してください。
メタデータの追加
バッグのメタデータには、記録場所、OS とソフトウェアのバージョン、接続されているデバイス、気象条件、タスクなど、バッグの記録条件に関する詳細が含まれています。通常、このようなデータは別のファイルに保存します。ただし、Bag Databaseなどの一部のバッグ ビジュアライザーでは、メタデータをバッグ ファイルに統合する必要があります。
メタデータを ROS1 バッグ ファイルに直接書き込むには、rosbag_metadataパッケージを使用できます。箱から出してすぐに、ROS パッケージ バージョン、git リポジトリと git-commit ハッシュに関する情報、環境変数、ネットワーク構成などのシステム データと共にコメントを保存します。これらのデータはすべて、YAML ファイルのテキストとして /metadata トピックに追加されます。
rosbag_metadataをそのまま使用することも、特別な製品のニーズを満たすためにケータリングすることもできます。たとえば、Evocargo のロジスティクス サービスでは、車のモデルと番号、生のキャリブレーション情報、地図など、より具体的な情報が手元に必要でした。したがって、自動運転車の管理により適したrosbag_metadataに基づいた独自のパッケージを作成しました。また、必要に応じてフィールドを簡単に追加できます。
再生と視覚化
ROS 1 のオプションの 1 つはWebvizです。これは、 Cruiseのエンジニアによって開発およびオープンソース化されたバッグ再生および視覚化 Web ツールです。ROS バッグ ファイルをドラッグ アンド ドロップして、データの視覚的な洞察を即座に得ることができます。それと同じくらい簡単です!しかもWebアプリなので特別な環境を整える必要もありません。
そのインターフェイスはカスタマイズ可能で、パネルを追加して、より関連性の高いデータを 1 か所で表示できます。さらに、他のツールと統合することもできます。たとえば、バッグ データベースウィンドウから直接 Webvizを開くことができます。(この設定については、こちらで説明しています)。
ここで言及したいもう 1 つのツールはFoxglove Studioです。ロボット工学における可視化と分析という同じ目的を持っていますが、ROS 1 と ROS 2 の両方をサポートし、商用サポートを提供することで、さらに進んでいます。これは、Cruise のWebvizプロジェクトのフォークとして始まり、現在積極的に開発され、その機能セットを拡張しています。これは、クロスプラットフォーム Web アプリとして、および Linux、macOS、および Windows デバイスでより多くの機能とカスタム パネル拡張機能のロックを解除するデスクトップ アプリとして利用できます。
Foxglove Studioの開発と更新の詳細については、 Mediumのブログを参照するか、Web サイトにアクセスしてください。
バッグの編集
ROS 1 でバッグ ファイルを編集したい場合は、 Davide Facontiによるrosbag_editorをチェックしてください。このツールでは、bag ファイルにバッチ変更を適用することはできませんが、デモンストレーションなど、特定の bag を編集するのに役立つ場合があります。そのシンプルな UI により、手動でトピックの名前を変更して削除したり、ファイルの先頭または末尾を切り取ってバッグの期間を変更したり、圧縮タイプを変更してファイル サイズを小さくしたり、変換を削除したりできます。
Evocargo では、ROS1 で記録されたバッグをバッチ編集できるツールが必要だったので、エンジニアのVladimir Burmistrovがros_bag_migrationパッケージを作成しました。記録されたバッグ内のメッセージの形式を変更できます。メッセージの名前を変更して削除するだけでなく、メッセージを 2 つに分割し、定義されたルールを特定のメッセージ バージョンに適用することもできます。このパッケージは、更新された一連のメッセージ定義を使用して新しいバッグを記録することを決定し、それに応じて互換性のために古いバッグを変更したい場合に最適です。
グラフの作成
次に、素晴らしいグラフ ビルダーである PlotJuggler (Davide Faconti による別のパッケージ) について説明します。PlotJugglerを使用すると、システムまたはロボット内を流れるあらゆるデータを分析できます。その機能のおかげで、デバッグがはるかに簡単になります。
- リアルタイムで、または 1 つまたは複数の .bag ファイルをPlotJugglerにロードすることにより、ROS トピックのデータのグラフを作成できます。
- 複数のデータ プロットの追加と管理は、非常にユーザー フレンドリーです。たとえば、いくつかの 2D データを取得して XY タブを作成し、それをプロットしてすべてのタイムスタンプの 2D 位置を視覚化できます。
- プロットには組み込みのデータ変換の機会がたくさんあります。たとえば、データのオフセットを削除したり、スケーリングしたり、統合したり、外れ値を削除したりできます。変換の組み合わせを作成することもできます。これは、さまざまなソースからのデータを比較するのに非常に役立ちます。
- 適切な変換関数が見つからない場合は、独自の変換関数を作成できます。たとえば、クォータニオンからヨー角を抽出して視覚化する関数を作成できます。
- 少なくとも最後のではなく!キラー機能: バッグを扱っている場合、「ROS Topic Re-Publisher」を有効にできます。つまり、タイム スライダーを好きな時間にドラッグすると、PlotJugglerは選択したタイムスタンプに対応するすべてのトピックのデータを公開します。これは、特定の瞬間のカメラからの画像を表示したり、診断メッセージを確認したり、RVIZ などの他の視覚化ツールですべてのデータを視覚化したりする場合に非常に便利です。
メッセージ配信
テストとデバッグの目的では、実験の結果が安定して再現されることが重要です。たとえば、特定のセンサー データを含むバッグでローカリゼーション アルゴリズムをテストする場合、このアルゴリズムを実行するたびに同じ結果が得られることを期待できます。ただし、ROS のパブリッシュ/サブスクライブ ロジックは 100% のメッセージ配信を保証できず、ノードがバッグ内のすべてのメッセージを同じ順序で処理しない可能性があります。
ROS 1のbatch_rosパッケージを使用すると、タスクに重要なトピックをバッグ ファイルに指定できます。batch_ros は、これらのトピックから各メッセージを発行した後、サービス呼び出しの同期を待ちます。これにより、ノードが定義された順序でメッセージを 1 つずつ処理した後、バッグ ファイルからのメッセージが確実に発行されます。
これにより、 batch_rosはバッグの決定論的で反復可能な処理を保証します。
記録状態
バッグが記録されている間、デフォルトの ROS 1 設定では「記録中…」というメッセージのみが表示されます。何か問題が発生した場合、タスクが完了して失敗した場合にのみ、それを知ることができます。記録プロセスをより有益なものにするために、ROS 1 のrosbag_fancyターミナル インターフェースを試してください。これは、記録されているトピック、メモリ使用量、バッグ ファイル サイズなどの有用なデータをリアルタイムで表示します — すべてが非常に単純なテーブルに表示されます。
また、ドロップされたメッセージの数 ( Drops ) も表示され、次の問題と考えられる解決策につながります。
ここまで読んでくれてありがとう — 私たちと同じように ROS での経験を向上させたいと思っているに違いありません! まとめましょう。この投稿では、次の ROS パッケージについて説明しました: Bag Database、rosbag_metadata、Webviz、Foxglove Studio、rosbag_editor、ros_bag_migration、PlotJuggler、rosbag_fancy、およびbatch_ros。
この選択したパッケージが役立つと思われる場合は、拍手とコメントでお知らせください。このような概要の詳細については、ブログで喜んで共有します。たとえば、テスト、シミュレーション、ドキュメンテーション、およびその他の目的のための注目すべき ROS パッケージがあります。