目次 — 知りたいところから読む
入力を変えて確かめる
実験パネルを開き、実行を押すとPythonを読み込みます。停止と初期値へのリセットができます。結果はこの端末内で計算します。Pythonのインストールは不要です。
下にあるローカル実行の手順は、配布ソースを再現するための任意の手順です。ブラウザ実験には不要です。
前提と読み方
前提知識 Labはブラウザで実行。任意のJazzy手順にはROS 2のtopic・parameter・TFの知識。
実装・実験 · 本文の条件と確認項目に沿って、計算例や比較表を追う。
ブラウザで固定入力の再生条件を調べる
上のパネルで、時刻源、headerのずれ、QoSの信頼性、再生するTFを変えて比較します。これは合成データの再生監査です。ROS・DDS・tf2・自己位置推定・ロボットのシミュレータではありません。bagファイルを開かず、実機にも接続しません。下のROSコマンドは、別途実環境で確認する場合の手順です。
毎回、bagの記録時刻が10.0–12.0秒、間隔が0.2秒の11個のscanを使います。入力の odom → base_link は9.8–12.2秒に0.2秒間隔で収録済みという設定です。実測値ではなく教材用の固定データです。時刻ずれの操作はscanのheaderだけに加算し、bagの記録時刻とTFの時刻を変えません。センサの時刻設定が違う入力を表すもので、rosbag2の再生オプションではありません。再生経過時間は (記録時刻 − 10秒) / 再生倍率。2倍速では再生の幅が1秒になりますが、headerの時刻域は変わりません。
四つの確認を分ける
- モデルでの受信: publisherが提供する信頼性とsubscriberが要求する信頼性を別々に選びます。提供がbest effort、要求がreliableの場合は非互換で、それ以外の3通りは互換です。topic名・型・他のQoS設定は適合していると仮定します。この無損失モデルでは互換なら全scanを受信します。実際のbest effort配信の保証、rosbag2が自動選択するQoS、キュー・deadline・lifespan・探索・遅れて参加する購読者は再現しません。
- 入力TFの収録範囲: scanのheaderが収録済みの入力TFの時刻範囲内かを確認し、端点も含めます。全記録に対する監査なので、モデルでscanを受信しない場合も計算します。tf2の実行中のキャッシュ、到着順、補間、待機、callback時点の参照可否は扱いません。範囲内でも実際のlookup成功を意味しません。
- ノード時刻との差: 再生時計では、各scanより先に
/clockを受信し、その最新値がscanのbag時刻と一致すると仮定します。システム時計は教材用の1000秒から再生経過時間だけ進みます。use_sim_timeを設定してもclockを未受信ならノード時刻は0で、差の確認は未評価となり「—」を表示します。初期化済みの場合は|ノード時刻 − scan header| ≤ 150 msを数えます。この対称な範囲は教材の確認基準で、ROSの有効性規則、tf2の許容値、推定ノードのtimeoutではありません。受信やTF収録範囲とは別に計算します。 - TFの配信元: 評価する推定ノードが
map → odomを出す設定です。「入力TFのみ」は記録済みodom → base_linkを残します。「記録TFをすべて再生」は記録済みmap → odomも加えて配信元を二つにします。「記録TFをすべて除外」は必要な入力側も取り除きます。数値は設定上の配信元数で、推定結果ではありません。二重配信の実際の挙動や静的TFのdurabilityは再現しません。
初期状態をAに保存し、Bで2倍速、headerを+400 ms、clockなし、QoS不一致、TF選択を試してください。A/Bの図は同じ軸範囲を使います。+400 msでは最後のscanがTF収録範囲を超え、全11個が教材の時刻差基準から外れます。clock未受信の件数は0ではなく未評価です。どちらも軌跡誤差の予測ではありません。表とJSONには各scanの記録時刻、header、再生経過、ノード時刻と独立した確認結果を残します。
参照資料と範囲
2026-09-20に rosbag2 Jazzy README、Jazzy playerのオプション、Jazzy QoS資料のソース、ROSの時計設計、Jazzy tf2時刻チュートリアルのソース、REP-105を確認しました。このLabのためにROS環境を実行したわけではありません。
A/Bは毎回初期化します。スケジューリング、通信損失、推定器の内部状態、時刻巻き戻り、複数clock配信元、キャリブレーション、静的TF、地図精度、閉ループ走行は対象外です。軌跡誤差は別の SLAM評価Labで扱います。ブラウザの確認は以下の実環境での再生確認を置き換えません。
不具合が出るたびに同じ場所を走り直すと、入力も設定も変わってしまう。rosbag2は入力を保存して比較の土台を作れる。ただし、ログを再生すればロボット全体が同じ動作をするわけではない。本記事はROS 2 Jazzyの一次資料に照らした手順で、実機・ROS環境での走行検証は行っていない。
最初に比較する境界を決める
例として、LiDARと車輪オドメトリを入力にする自己位置推定ノードを比較する。保存するのは入力の/scan、/odom、必要な/tf・/tf_staticである。推定ノードの出力は正解ではなく比較対象として別に保存する。画像を使う場合は画像だけでなく対応するCameraInfoも必要になる。
rosbag2のJazzy READMEで記録・情報表示・QoS上書きを確認した。調査日は2026-09-07。インストール済みパッケージの差を把握するため、ros2 bag record --helpとros2 bag play --helpの出力、パッケージのバージョンを実験記録へ残す。
記録と設定の保存
以下のtopic名とノード名は例である。既存の名前をros2 topic listとros2 node listで調べ、入力が配信されている状態で実行する。
ros2 topic info /scan --verbose
ros2 bag record -o replay-input --topics /scan /odom /tf /tf_static
記録はCtrl+Cで正常終了し、別のコマンドで確認する。
ros2 bag info replay-input
ros2 param dump /localizer > localizer-A.yaml
ノード名/localizerは自分の対象に置き換える。パラメータだけでなく、launchファイル、地図、URDF、外部キャリブレーション、ソフトウェアのコミット、開始姿勢も保存する。bag infoのメッセージ数が非ゼロでも、障害が起きた時間帯に必要な入力がそろっているとは限らない。各センサの時刻差と欠測区間も見る。
再生時の時刻とTFを一つにする
ライブの入力配信を止めた解析環境で、対象ノードとRVizにuse_sim_time=trueを設定する。対象ノードの起動方法はパッケージごとに異なる。起動後、次のように再生する。
ros2 bag play replay-input --clock 100 --rate 1.0
--clockは再生時刻の供給に使う。Jazzyのplay実装でオプションを確認できる。シミュレータなど別の/clock配信元を同時に動かさない。記録時にシミュレーション時刻を使う場合の--use-sim-timeと、再生時の--clockは役割が異なる。
特に注意したいのは/tfに複数の変換が混ざる点である。評価対象がmap→odomを新しく出すなら、記録済みmap→odomを同時に再生してはいけない。一方、入力として必要なodom→base_linkは残す必要がある。topic全体を除くだけでは分離できないことがあるので、記録時点で出力を分けるか、変換ごとのフィルタを用意する。座標フレームの役割はREP-105を参照する。
表示されないときの切り分け
| 症状 | 先に調べるもの |
|---|---|
| bagにはあるのに受信しない | topic名、型、購読側と再生側のQoS |
| 点群だけ出て位置が飛ぶ | 同じTFを配信するノードが二つないか |
| 過去・未来へのTF参照エラー | headerの時刻、use_sim_time、TFの収録範囲 |
| 2回目の再生だけ違う | フィルタの内部状態、地図、時刻巻き戻りへの対応 |
QoSは配信の信頼性や履歴保持の設定である。むやみに全topicをreliableへ変更せず、topic info --verboseから互換性を確認する。必要なtopicだけにQoS上書きYAMLを適用する。静的TFのdurabilityを変える場合は、遅れて参加した購読者への配信も確認する。
AとBを比較する実験票
Aを終了して状態を初期化し、設定一項目を変えたBを新しく起動する。bag、再生速度、開始姿勢、地図、処理対象の時間範囲を同じにする。出力軌跡、処理遅延、入力欠測、失敗時刻を残し、「最後まで動いた」だけを評価にしない。乱数やスレッドの順序による差があるため、同条件の反復も必要である。
この比較は固定した観測への反応を調べるものだ。制御出力が変われば本来の次の観測も変わるので、記録済みセンサ入力による再生だけで閉ループの走行性能を証明できない。
完了の判定
必要な入力を受信し、同じ変換の配信元が一つで、時刻が整合し、AとBの違いを設定の差として説明できれば比較の準備ができた。SLAM評価へ進み、軌跡の時間合わせと誤差計算を追加する。
コメント
コメントの投稿にはログインが必要です
まだコメントはありません。