目次 — 知りたいところから読む
入力を変えて確かめる
実験パネルを開き、実行を押すとPythonを読み込みます。停止と初期値へのリセットができます。結果はこの端末内で計算します。Pythonのインストールは不要です。
下にあるローカル実行の手順は、配布ソースを再現するための任意の手順です。ブラウザ実験には不要です。
前提と読み方
前提知識 IMUと車輪オドメトリ、ROS 2のトピックとTF。
入門 · 計算例と診断手順。特定実機の故障原因を断定するものではありません。
ブラウザで時刻・取付位置・軸を比較する
上のパネルで理想的な計算例を比較できます。ROSやローカルPythonは不要です。値が食い違う別々の理由を示す教材で、融合フィルタ、校正の推定、実機診断は行いません。元の切り分け手順は下に残しています。
時刻差: Δtは「比較する値の時刻−基準時刻」です。表示する差は x(t+Δt)−x(t)=vx Δt と heading(t+Δt)−heading(t)=yaw_rate Δt。正なら後、負なら前の値を比較します。1 m/s・90 deg/s・+50 msでは+0.05 mと+4.5°です。固定軸方向の等速移動と一定角速度の別々の例で、旋回軌跡の積分やフィルタ誤差の予測ではありません。Δtを特定ドライバの通信遅延やタイムスタンプ誤差の符号と同一視しないでください。停止中は時刻の違いが見えなくなることがあります。許容値は提案しません。
取付位置: 下の図は同じ瞬間の速度です。body軸はx前方・y左・z上、正のyawは+zから見て反時計回り。入力する基準点の速度はbody軸の v_base=(vx,0) です。r=(rx,ry) は基準原点からセンサ原点への位置で、body軸で表します。ω=yaw_rate × π/180 とすると、位置による速度差は ω×r=(-ω ry, ω rx) m/s。したがって v_sensor_body=v_base+ω×r です。位置図はm、速度図はm/sで、別々の尺度です。センサ軸の矢印は表示用に長さ0.15 mとしています。速度図は成分を比較するため原点をそろえたもので、走行軌跡ではありません。
取付方向: R_bs はsensor成分をbody成分へ回転します。仮想的なセンサ点の並進速度を v_sensor_components=R_bsᵀ v_sensor_body で作ります。body軸へ戻しても、それはセンサ点の速度です。既知の ω×r を引いて初めて、この理想計算で入力した基準点の速度に戻ります。同じ正確な幾何条件を使っているので、校正を推定した結果ではありません。仮想的な速度測定であり、IMUの生の加速度・角速度出力ではありません。加速度の取付位置効果は扱いません。
「未補正の成分差」は、別の位置・別の軸で表した数値をわざと引いた誤った比較で、フィルタのイノベーションではありません。条件によっては誤った比較でも打ち消し合ってノルムがゼロになります。「代数的な復元残差」は同じ正確なモデルを使った後の浮動小数点丸め誤差で、自己位置の精度や実機校正の正しさを示しません。表では各ベクトルの測定点と軸を明記します。
その場旋回、取付位置ゼロ、左側の取付、逆回転、90°の取付方向を比較してください。取付角を変えるとsensor成分が変わりますが、物理的なbody軸の速度は変わりません。Δtの変更は時刻の教材だけに影響します。初期設定の0.2 m・90 deg/sでは取付位置による速度差は約0.314 m/s。記事の別の例1 rad/sでは0.2 m/sです。deg/sとrad/sを区別してください。
入力はすべて合成・誤差なしの仮定です。共分散、雑音、可観測性、滑り、バイアス、補間、TF参照、時計同期、ROS実行、融合推定器は含みません。A/Bの位置図・速度図はそれぞれ共通の尺度です。操作範囲は教材の仮定です。点の変換は別の座標変換Lab、再生条件は再生Labを参照してください。
参考: REP-103の座標規約、Modern Roboticsの剛体上の点の速度。2026-09-20確認。サイト既存の平面回転関数と剛体速度式の平面形を使用します。
センサを増やしたのに位置推定が悪くなるとき、最初に疑うのはフィルタの難しさだけではない。同じ物理量でも、時刻・座標・単位が異なれば、そのまま比較できない。まず入力単体を確認し、その後で融合器へ渡す境界を点検する。
切り分けの順番を固定する
同じ短いログを使い、車輪だけ、IMUだけ、両方という順に確認する。毎回走行条件まで変えると、改善が設定変更によるものか床面や速度の違いなのか判断しにくい。基礎はセンサフュージョン入門で確認できる。
時刻ずれは移動量のずれになる
等速で1 m/sの車体を考える。観測が50 msずれると、同じ瞬間として比較した位置には 1\times0.05=0.05 mの差が生まれる。角速度90度/sなら、同じ50 msで姿勢差は4.5度となる。これは定速度を仮定した計算例で、許容誤差の推奨値ではない。
メッセージのタイムスタンプがセンサの取得時刻か、ドライバの受信時刻かを調べる。通信遅延が一定でも、取得時刻を正しく使えば対応できる場合がある。逆にホスト間の時計が異なると、単にキューを増やしても直らない。ログ再生では全ノードのシミュレーション時刻設定をそろえる。
座標の向きと原点を確認する
ROSの車体座標は通常x前方・y左方・z上方、カメラの光学座標はz前方・x右方・y下方である。単位と軸の定義はREP-103で確認する。frame名を変更するだけでは数値を回転したことにならない。
センサ座標の点を車体へ変換する式は p_b=R_{bs}p_s+t_{bs}。回転だけでなく並進も必要で、逆変換の並進は単に -t ではなく -R^Tt になる。較正値の向きを「sensorからbody」なのか「bodyからsensor」なのか記録する。
取付位置の違いは運動の違いでもある
回転する剛体では、センサ位置の速度は v_s=v_b+\omega\times r となる。原点から0.2 m離れた位置で角速度1 rad/s、距離ベクトルが回転軸に直交する例なら、速度差の大きさは0.2 m/s。車体がその場旋回していても、離れたセンサが静止しているわけではない。
平行移動だけでなく旋回を含めて確認する。ただし本格的な外部較正には十分な運動励起が必要で、直進だけのデータから全自由度を求められるとは限らない。座標の役割はREP-105とも照合する。
残差と共分散を最後に読む
| 症状 | 仮説 | 次に比較するもの |
|---|---|---|
| 速度を上げるほどずれる | 時刻ずれ | 同じ経路で速度だけ変えたログ |
| 旋回でずれが大きい | 軸・取付位置・時刻 | 静止、直進、左右旋回の差 |
| 一入力を加えた瞬間に跳ぶ | frame・単位・過信 | 入力単体と予測値の残差 |
| 長時間かけて流れる | バイアス・滑り | 生値の平均と観測可能な方向 |
残差は観測と予測の差である。共分散を小さくすると入力を強く信じるが、間違った軸や時刻を正しくする効果はない。同じエンコーダから作った位置と速度を独立した観測として強く信じれば、重複した情報を過大評価する可能性もある。robot_localizationの公式実装で、使用する入力項目とフレーム処理を確認する。
原因を一つずつ確かめる
設定変更は一回に一つとし、同じログで差を確認してから新しい走行で再確認する。静止で値が妥当でも、動いているときの同期・取付誤差は残り得る。SLAM評価へ進む前に、時刻の定義、単位、TFの配信元、較正値の方向を一枚の記録にそろえよう。
コメント
コメントの投稿にはログインが必要です
まだコメントはありません。