ロボットが「いまどこにいるか」を知る方法は、必ずしも地図やGPSから始まるわけではない。車輪が何回転したか、どちらへどれだけ曲がったか、加速度計とジャイロが何を観測したか。その直前からの変化を時刻ごとに積み上げて現在位置を推定するのが、Dead Reckoning(デッドレコニング、推測航法)である。屋内で動く搬送ロボットやAGVでは、車輪エンコーダから得るOdometry(オドメトリ)が制御・障害物回避・地図との照合をつなぐ基礎になる。本稿では、差動二輪を中心に原理を数式で追い、誤差がなぜ避けられないのか、実装でどこを押さえるべきかを整理する。

0. 30秒要約

1. Dead Reckoningとは何か

Dead Reckoningは、既知の初期状態と運動量から、外部の目印を参照せずに現在状態を推測する方法の総称である。船舶の航海で針路と速力を積み上げたことに由来し、移動ロボットでは「エンコーダで測った車輪回転を距離に換算し、姿勢に応じて世界座標へ足し込む」処理を指すことが多い。ROS 2の移動ロボット運動学の文脈でも、車輪アクチュエータのエンコーダを用いた運動学の順積分はodometric localization、passive localization、dead reckoningと呼ばれる。

ここで重要なのは、Dead Reckoningが測定器の種類ではなく、推定のしかただという点である。車輪エンコーダだけのWheel Odometry、IMUだけの慣性航法、脚ロボットの関節角・接地情報を使うLeg Odometry、ドップラー速度を使うRadar Odometryはいずれも、相対的な運動を積分する限りDead Reckoningに属する。反対に、既知の地図にLiDARスキャンを照合するLocalizationや、GNSSの測位、床のマーカーを読む処理は、外部の基準を使って位置を観測する方法である。

OdometryとSLAMの違いもこの線で理解できる。Odometryは直前からの相対移動を連続的に出す。SLAMは地図との整合や再訪地点の検出を使い、積み上がった誤差を大域的に戻せる。前者は短時間で滑らかだがドリフトし、後者は長期的には正しいが観測の更新時に位置が跳ぶことがある。実用システムが両方を持つ理由はここにある。

2. 直感:一歩ずつ足すほど、方角の小さな間違いが効く

目を閉じて廊下を10 m歩く場面を考える。歩幅が毎回ほんの少し違っても、まっすぐなら位置のずれは比較的ゆっくり増える。しかし最初の向きが1度だけずれていれば、10 m先では横方向に約10\tan(1^\circ) \simeq 0.17\,\mathrm{m}外れる。移動距離が100 mなら同じ角度誤差が約1.7 mになる。

ロボットでも同じである。車輪の回転量は「どれだけ進んだか」を与え、左右差は「どれだけ曲がったか」を与える。ただし、旋回時の横滑り、片側タイヤの摩耗、床の継ぎ目、荷重の変化は、実際の移動とエンコーダが示す移動を食い違わせる。Dead Reckoningはその食い違いを自力で発見できない。だからこそ、短時間の運動を高頻度に追う役目としては非常に強いが、絶対位置の唯一の根拠にしてはいけない。

3. 座標系:bodyで測り、worldへ変換して積分する

平面を走るロボットでは、ロボットに固定された座標系をbody frame \{B\}、出発点に固定した座標系をworld frame \{W\}とする。x_Bは進行方向、y_Bは左方向、\thetaはworld frameのx_W軸から測ったヨー角とする。推定したい姿勢は

\mathbf{x} = \begin{bmatrix}x & y & \theta\end{bmatrix}^{\top}

である。body frameで得た速度\mathbf{v}_B=[v_x\;v_y]^{\top}をworld frameへ移す回転行列は、

{}^{W}\!R_{B}(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta\\ \sin\theta & \cos\theta \end{bmatrix},\qquad \mathbf{v}_W={}^W\!R_B(\theta)\mathbf{v}_B

となる。差動二輪のような非ホロノミックな台車は横へ瞬間移動できないので、理想的にはv_y=0である。したがって、前進速度vとヨー角速度\omegaから連続時間の運動学は次式になる。

\dot{x}=v\cos\theta,\qquad \dot{y}=v\sin\theta,\qquad \dot{\theta}=\omega

サンプリング周期を\Delta tとすれば、もっとも単純な前進オイラー積分は

x_{k+1}=x_k+v_k\cos\theta_k\Delta t, \quad y_{k+1}=y_k+v_k\sin\theta_k\Delta t, \quad \theta_{k+1}=\mathrm{wrap}(\theta_k+\omega_k\Delta t)

となる。\mathrm{wrap}は角度を(-\pi,\pi]などの範囲に戻す処理である。急旋回では、区間の始点だけの向きを使うこの近似が粗くなるため、中点の\theta_k+\omega_k\Delta t/2を使うmidpoint法、あるいは一定曲率の円弧を厳密に積分する方法が安全である。

4. 差動二輪:パルスから速度とヨー角速度を作る

左右の車輪の移動距離を\Delta s_R,\Delta s_L、トレッド幅(左右の接地点間隔)をbとする。区間の並進移動量とヨー角変化は

\Delta s=\frac{\Delta s_R+\Delta s_L}{2},\qquad \Delta\theta=\frac{\Delta s_R-\Delta s_L}{b}

である。時間で割れば、v=(v_R+v_L)/2\omega=(v_R-v_L)/bとなる。エンコーダの分解能を1回転あたりNパルス、車輪半径をr、区間内のパルス増分をn_R,n_Lとすれば、

\Delta s_R=\frac{2\pi r}{N}n_R,\qquad \Delta s_L=\frac{2\pi r}{N}n_L

である。実装では、ホイールの減速比、四逓倍後のエンコーダ分解能、符号(前進・後進)、左右のエンコーダを同じ時刻に読むことまで含めて確認する。ここを取り違えると、どれほど後段のフィルタを調整しても正しいOdometryにはならない。

旋回中の位置更新は、\Delta\theta\neq0なら半径R=\Delta s/\Delta\thetaの円弧として

x_{k+1}=x_k+R\{\sin(\theta_k+\Delta\theta)-\sin\theta_k\},
y_{k+1}=y_k-R\{\cos(\theta_k+\Delta\theta)-\cos\theta_k\}

と計算できる。|\Delta\theta|が十分小さいときは数値的に不安定になるので、前節のmidpoint法へ切り替えるのが実装上は簡単である。

5. 積分誤差はなぜ大きくなるのか

推定速度に一定の誤差\delta vがあれば、位置誤差は概ね\delta p(t)=\delta v\,tで時間に比例する。より厄介なのはヨー角の誤差である。直進速度vで走るとき、小さな角度誤差\delta\thetaは横方向速度誤差をおよそv\delta\theta生む。ジャイロのヨー角速度に一定バイアスb_\omegaがあれば、\delta\theta(t)\simeq b_\omega tなので、横位置誤差は

\delta y(t)\simeq\int_0^t v b_\omega\tau\,d\tau =\frac{1}{2}v b_\omega t^2

と時間の2乗で増える。これは「向きの誤差が距離を進むほど横ずれへ変換される」ためである。IMUの加速度を二回積分して位置を作る場合、加速度バイアスb_aだけでも\delta p\simeq b_a t^2/2となり、姿勢誤差を経由した重力の混入も重なる。MEMS IMU単体の位置積分が数十秒〜数分で実用性を失いやすい理由である。

エンコーダはIMUよりも並進距離を安定に出せることが多いが、空転した瞬間には「回った」という事実しか知らない。誤差はランダムノイズだけではない。床材、タイヤ温度、搭載重量、摩耗、サスペンション、旋回半径のモデル誤差といった系統誤差を含む。したがって、共分散を出力して不確かさを後段へ渡し、実走データで車輪半径とトレッド幅を校正する必要がある。

6. センサー構成:単体を置き換えるのでなく、誤差の形を補い合う

典型的な構成と役割は次の通りである。

構成要素 主に得る量 長所 主な破綻要因
車輪エンコーダ 前進量・左右差 安価、高頻度、短距離の並進に強い 空転、段差、タイヤ径・トレッド幅のずれ
IMU(ジャイロ) ヨー角速度・姿勢変化 急旋回や車輪空転の検出補助、高頻度 バイアス、振動、磁気センサーなら磁気外乱
IMU(加速度計) 比推力・傾き 3D姿勢推定、停止判定の補助 重力分離、二回積分の急速なドリフト
ステアリング角 車両の曲率 Ackermann型AGVの旋回モデルに有効 リンクのガタ、ゼロ点ずれ
LiDAR / Camera 地図との相対姿勢 ドリフトを環境から戻せる 低特徴、遮蔽、照明・天候、動的物体
GNSS / マーカー / UWB 絶対位置 長距離の誤差を拘束できる 遮蔽、マルチパス、設置・運用コスト

もっとも基本的な地上ロボット構成はエンコーダ+ジャイロである。エンコーダからvを、ジャイロから\omegaを使い、EKF/UKFで状態を更新する。両者の誤差は独立ではないため、単純にジャイロだけを絶対的に信じるのではなく、走行試験からノイズ共分散を設定する。後段にLiDAR-SLAM、Visual-SLAM、GNSS、反射板やQRマーカーを足せば、外部観測の来たタイミングでDead Reckoningのドリフトを補正できる。詳しい融合の考え方は「Sensor Fusion入門」、IMUを核にした構成は「VIO/LIO入門」も参照されたい。

7. 実装手順:まず滑らかなlocal odometryを正しく作る

実装の目標を、最初から「絶対に正しい位置」に置かない。最初の目標は、数秒〜数十秒の範囲で連続していて、制御器が信頼できる局所姿勢を作ることにある。

  1. 座標系と符号を決める。 ROSの慣例なら、base_linkはロボット前方をx、左をy、上をzとし、odomは局所的に固定された世界座標とする。全センサーの取り付け姿勢(外部パラメータ)と、ヨーの正方向を図面・TFで一致させる。

  2. パルスを距離へ換算する。 実効車輪半径、1回転あたりの実効パルス数、減速比を含む係数を求める。空中での回転数ではなく、荷重を掛けた平坦路で既知距離を往復して校正する。左右を同じ半径と仮定せず、必要なら別係数にする。

  3. 運動学を積分する。 エンコーダのタイムスタンプごとに\Delta s_R,\Delta s_Lを計算し、4節の円弧またはmidpoint法でodom→base_linkを更新する。処理周期が揺れても、固定周期を仮定せず実測の\Delta tを使う。

  4. IMUを同期・校正する。 起動時の静止区間でジャイロのゼロ点を推定し、温度でバイアスが変わる機種は温度特性も確認する。IMUを車体中心から離して載せる場合、旋回時の加速度が混じるため、取り付け位置と姿勢を正しく扱う。

  5. フィルタで融合し、共分散を出す。 状態を[x,y,\theta,v,\omega]程度から始め、エンコーダの速度・ジャイロの角速度を観測としてEKFへ入れる。観測が怪しいときほど共分散を大きくし、空転検知中のエンコーダを無条件に信じない。ROS 2ではrobot_localizationがEKF/UKFと複数のOdometry・IMU入力を提供する。

  6. 外部観測を別レイヤーで結ぶ。 SLAM、GNSS、マーカーなどによる大域補正はmap→odomとして扱い、連続性が必要なodom→base_linkを跳ばさない。経路追従器には通常、滑らかな局所Odometryを渡す。

  7. ログで検証する。 直線10 m、左右90度旋回、8の字、積載量の異なる走行、濡れた床や段差を含む走行を記録し、真値との横ずれ・角度ずれ・再現性を確認する。パラメータは一度だけの成功走行で決めない。

8. 現行のロボット・AGVではどう使われるか

倉庫AGVやAMRでは、Dead Reckoningは「地図を持たない古い方式」ではなく、今もリアルタイム制御の下層を支える構成要素である。たとえばLiDARを使う自律搬送車でも、レーザースキャンの照合は数十Hz程度であり、モータ制御・速度推定・短時間の障害物回避にはより高頻度で連続したOdometryが必要になる。そこで車輪エンコーダとIMUを融合した局所姿勢を常時出し、LiDAR地図照合や天井マーカーの結果でゆっくり大域座標を補正する。

フォークリフト型AGVでは、Ackermann操舵のステアリング角と後輪(または駆動輪)の回転から曲率を推定する。ステアリング角を\delta、ホイールベースをLとすれば、低速の自転車モデルでは\omega \simeq v\tan\delta/Lである。ただし実際には操舵の遅れ、フォーク荷重によるタイヤ変形、床との横滑りがあるため、このモデルは観測ではなく予測として扱うのがよい。

屋外配送ロボットや農業ロボットでは、GNSS/RTKが使える場所でも、樹木・建物・高架下では更新が失われる。Dead Reckoningはその欠測区間をつなぐ役目を持つ。一方、工場の磁気テープ追従AGVでも、テープの交差点やマーカーを通るまでの位置補間、停止距離の見積り、異常時の安全な減速に車輪Odometryが使われる。センサーが高度になるほどDead Reckoningが不要になるのではなく、「更新間を滑らかにつなぐ予測器」として重要になる。

9. よくある失敗例と切り分け

直進なのに弧を描く。 左右の実効半径、エンコーダの符号、トレッド幅のいずれかがずれている。まっすぐな既知距離の往復だけでなく、左右旋回を同数行い、片側だけに出る誤差かを確認する。IMUを融合している場合でも、まずエンコーダ単体の軌跡を可視化して原因を分離する。

その場旋回で位置が大きく動く。 左右車輪の積分タイミングがずれている、トレッド幅が不正確、あるいは左右輪が異なる摩擦で滑っている可能性が高い。低速と高速で結果が変わるなら、剛体運動学の係数ではなく動的な滑りが支配的である。速度依存のノイズモデルにし、外部観測による補正頻度を上げる。

IMUを足したらむしろ悪くなった。 座標軸の取り付け姿勢、角速度の単位(rad/sとdeg/s)、重力を含む加速度の扱い、タイムスタンプのいずれかを疑う。静止時にヨー角が回り続けるならジャイロバイアス、旋回時だけ破綻するなら外部パラメータや時刻ずれが典型である。磁気センサーの方位を工場内で無条件に使うと、モーターや鉄骨による磁気外乱でさらに悪化する。

SLAMの地図上でOdometryが跳ぶ。 大域補正をodom→base_linkへ直接入れている設計が多い。odomは短時間で滑らか、mapは大域的に正しいが更新時に不連続でもよい、という役割を守る。外部観測が来たときはmap→odomを更新し、局所制御が参照する変換は連続に保つ。

共分散をゼロまたは固定値にする。 後段のEKFがそのセンサーを絶対視し、空転やマッチング失敗から復帰できなくなる。停止・直進・急旋回・荒れた床など状態ごとに残差を評価し、少なくとも誤差が増えたときに不確かさを大きくする仕組みを持たせる。

10. Dead Reckoningと他の自己位置推定の比較

観点 Wheel/IMU Dead Reckoning LiDAR/Visual Odometry SLAM・地図照合 GNSS/RTK・マーカー
基準 自身の運動センサー 直近の環境観測 環境地図・再訪地点 外部インフラ・衛星
出力の連続性 非常に高い 高いが追跡喪失時に弱い 補正時に跳ぶことがある 更新間は欠測・揺れがあり得る
長時間の絶対精度 低い(必ずドリフト) 相対誤差は蓄積する 地図が良ければ高い 受信・設置条件が良ければ高い
コスト 低い 中〜高 センサー・計算資源が必要 インフラまたは受信環境が必要
得意な役割 制御、短時間の予測、欠測の橋渡し 短中距離の環境追跡 自己位置の大域補正と地図作成 絶対座標への拘束

選択は二者択一ではない。Dead Reckoningを高速な予測、地図・GNSS・マーカーを低頻度の補正として組み合わせるのが、もっとも再現性の高い考え方である。

11. 最新研究の方向性

近年の研究は、「積分誤差をなくす」よりも、誤差が増える状況を検知し、利用可能な別の物理量・別の観測で拘束する方向に進んでいる。

第一は、学習を使った誤差モデル化である。RNNやTransformerなどでIMUのバイアス・路面状態・速度を推定し、EKFのプロセス雑音や観測雑音を状況に応じて変える研究が進む。学習モデルだけで位置を直接出すより、運動学・フィルタという物理モデルに学習された補正を重ねる構成は、未知環境での失敗を見つけやすい。

第二は、新しい相対速度センサーの融合である。4D Radarは雨・霧・暗所で働き、ドップラー速度を直接使えるため、カメラやLiDARが弱い条件を補うRadar-Inertial Odometryが提案されている。脚ロボットでは関節エンコーダと足裏の接地検出から、接地足を一時的な外部基準として扱うLeg Odometryが使われる。車輪、脚、レーダーの違いはあっても、「相対運動を積む」という骨格は共通する。

第三は、オンライン校正と故障検知である。センサー間の時刻ずれ、IMUの取り付け角、タイヤ半径は、長期運用中に変化し得る。因子グラフや適応フィルタでこれらを状態として同時推定し、残差の急増から空転・センサー断・外部観測の誤対応を隔離する設計が、実環境でのロバスト性に直結する。研究上の新しさだけでなく、ログを継続収集して校正を更新できる運用設計が重要になる。

12. まとめ

Dead Reckoningは、過去の推定位置へ相対運動を積み上げる、もっとも基本的で不可欠な自己位置推定である。差動二輪では左右車輪の移動差から前進量とヨー角変化を作り、body frameで測った速度をworld frameへ回転して積分する。エンコーダは距離に、IMUは短時間の姿勢変化に強いが、空転・バイアス・校正誤差は積分で必ず増幅される。

実装で大切なのは、正しい座標系と時刻、実走での車輪校正、誤差を表す共分散、そしてodomの連続性とmapの大域精度を分けることだ。Dead Reckoningを単独で完結させようとせず、短時間を確実につなぐ予測器として磨き、LiDAR・カメラ・マーカー・GNSSなどの外部観測で定期的に戻す。この役割分担こそが、現在のAGV・AMRが現場で安定して動くための土台になっている。

参考資料

#Dead Reckoning #Odometry #Wheel Encoder #IMU #AGV #ロボティクス入門