オドメトリ

**オドメトリ(odometry)**とは、時間をかけて増分的な運動計測を積分することでロボットの姿勢を推定することである——デッドレコニング。既知の初期姿勢から出発し、新たな計測ごとに小さな相対運動 ΔTk\Delta T_k が得られ、現在の姿勢はすべての増分の合成として表される。

Tk=T0ΔT1ΔT2ΔTkT_k = T_0 \cdot \Delta T_1 \cdot \Delta T_2 \cdots \Delta T_k

「オドメトリ」という語は元々**ホイールオドメトリ(wheel odometry)**を指していた。エンコーダがホイールの回転数を数え、キネマティックモデル(差動駆動、アッカーマン)がそれを線速度と角速度に変換する。同じ考え方は、相対的な運動を計測できる任意のセンサに一般化できる。

オドメトリの決定的な特性はドリフトである。各増分は小さな誤差を持ち、増分は乗法的に連結されるため、誤差は無制限に蓄積される。1メートルあたり0.5%の並進誤差は、デスクサイズの動きでは目に見えないが、1キロメートルでは致命的になる。したがって、オドメトリだけでは大域的に一貫した地図を生成することは決してできない——それにはループ閉じ込みと大域的最適化が必要であり、これこそがオドメトリとSLAMを分ける点である。

現代のSLAMバックエンドでは、オドメトリは相対姿勢制約として現れる。ポーズグラフにおける連続する姿勢ノード間のエッジ、あるいはファクターグラフにおける動きモデルファクターとして、

xt+1=f(xt,ut)+wt,wtN(0,Qt)\mathbf{x}_{t+1} = f(\mathbf{x}_t, \mathbf{u}_t) + \mathbf{w}_t, \qquad \mathbf{w}_t \sim \mathcal{N}(\mathbf{0}, Q_t)

ここで制御/計測 ut\mathbf{u}_t はエンコーダ、IMU、あるいはVOフロントエンドから得られ、QtQ_t はその不確実性をモデル化する。

演習例:差動駆動オドメトリ

ホイール半径 rr、エンコーダで計測されたホイール角速度 ωl,ωr\omega_l, \omega_r、ホイール間距離 LL を持つ2輪差動駆動ロボットについて、機体速度は次のようになる。

v=r(ωr+ωl)2,ω=r(ωrωl)L.v = \frac{r(\omega_r + \omega_l)}{2}, \qquad \omega = \frac{r(\omega_r - \omega_l)}{L}.

平面上の姿勢 (x,y,θ)(x, y, \theta) をタイムステップ Δt\Delta t にわたって積分する(最も単純なオイラー形式)。

xk+1=xk+vcosθkΔt,yk+1=yk+vsinθkΔt,θk+1=θk+ωΔt.x_{k+1} = x_k + v\cos\theta_k\,\Delta t, \qquad y_{k+1} = y_k + v\sin\theta_k\,\Delta t, \qquad \theta_{k+1} = \theta_k + \omega\,\Delta t.

この十行程度の積分器は、完全なオドメトリシステムであり——典型的な失敗モードすべてを示す。位置の更新が θk\theta_k に依存していることに注目してほしい。方位の誤差があると、それ以降の並進はすべて誤った方向に回転してしまう。距離 dd を方位誤差 δθ\delta\theta を持ったまま走行した後の横方向の位置誤差はおおよそ dδθd \cdot \delta\theta である——これがなぜ方位(ジャイロの品質、ホイールベースのキャリブレーション)がオドメトリ精度を支配するのか、そして安価なジャイロをホイールオドメトリに追加するだけで大きく改善する理由である。

ドリフトの振る舞い

実用上、オドメトリの品質は相対誤差として——移動距離に対する割合や1メートルあたりの角度で——表現される。これはまさにKITTIオドメトリベンチマークと相対姿勢誤差(RPE)指標が計測している対象である。絶対軌跡誤差(ATE)はオドメトリシステムには誤ったレンズである。なぜなら絶対誤差は設計上無限に増大するからである。

よくある落とし穴

SLAMにおける意義

オドメトリはすべてのSLAMシステムの背骨である。それは、トラッキング、マッピング、ループクロージングモジュールが構築の基盤とする高頻度かつ局所的に正確な運動推定を提供する。その誤差特性——局所的には滑らかだが大域的にはドリフトする——を理解することは、現代のSLAMのアーキテクチャを説明する。短い時間軸ではオドメトリを信頼し、ループ閉じ込みや絶対計測が利用可能になったときには常に大域的に補正する。

関連ノート