トピックハブ

移動ロボット

車輪型ロボットがどのように動き、目的地までの道を見つけるか。差動駆動・アッカーマン・全方向移動の運動学、map・odom・base_linkの座標系、Nav2スタック、倉庫のフリートを協調させる方法を解説します。

更新 2026年11月14日 · 差動駆動、アッカーマンステアリング、メカナムホイール、オドメトリ、Nav2、コストマップ、REP 105、AMR、フリート管理、VDA 5050、Open-RMF

概要

移動ロボットは、作業空間を自ら持ち運びます。固定されたベースと到達可能な領域を持つ代わりに、世界の中での位置姿勢を持ち、それを推定しなければなりません。さらに、周囲で人やパレットが動く中で経路を計画し、それに沿って走行する必要があります。このハブでは、平らな床を走る車輪型ロボットを扱います。車輪配置が運動をどう制約するか、ナビゲーションスタックをどう組み上げるか、倉庫で自律移動ロボット(AMR)のフリートをどう協調させるかを説明します。ベースの立ち上げ、ナビゲーションの調整、現場へのロボット導入を担当するエンジニア向けの内容です。

重要な考え方

車輪配置が運動学を決める

差動駆動ロボットは、1本の車軸上に2つの駆動輪を持ちます。車輪半径をr、トレッド幅をL、左右の車輪角速度をωR、ωLとすると、前進速度はv = r(ωR + ωL)/2、旋回角速度はω = r(ωR − ωL)/Lです。その場で旋回できますが、横方向には移動できません。これは非ホロノミック拘束であり、プランナはこれを守る必要があります。自動車のようなアッカーマンステアリングは、自転車モデルでよく記述できます。最小旋回半径はホイールベースを最大操舵角の正接で割った値です。そのため、その場で旋回できず、切り返しのための空間が必要です。メカナムホイールやオムニホイールを使う全方向移動ベースはホロノミックです。回転しながら任意の方向に並進できますが、その代償として、ローラが滑り、摩耗し、汚れた床ではトラクションを失います。車輪速度を積分するとオドメトリが得られます。ただし、車輪の滑りやr・Lの誤差のため、ドリフトは際限なく大きくなります。

REP 105は、ROS 2のナビゲーションコードの多くが前提とする3つの座標系を定めています。ロボット本体はbase_linkで、x前方、y左、z上です。odom座標系は連続的ですがドリフトするため、短期的な局所制御に向いています。map座標系はドリフトしませんが、自己位置推定器が補正を行うと、その中での位置姿勢が跳ぶことがあります。そのため長期的な目標には向いていますが、コントローラの基準としては不適切です。自己位置推定器がmapからodomへの変換をパブリッシュし、オドメトリ源がodomからbase_linkへの変換をパブリッシュします。新しいベースを立ち上げるとき、最初の仕事はtf2を通じてこのツリーを正しく構成することです。

ナビゲーションスタック

センサLiDAR・IMU・カメラ自己位置推定mapからodomグローバルプランナ地図上の経路コントローラv・w指令ベース制御車輪速度オドメトリodomからbase_linkコストマップエンコーダ障害物経路座標系(REP 105):map→ odom→ base_link
車輪型ベース向けの典型的なROS 2ナビゲーションスタックにおけるデータの流れです。自己位置推定がオドメトリのドリフトを補正します。グローバルプランナは地図上で、コントローラは小さなローカルコストマップ上で動作し、ベースコントローラが速度指令を車輪速度に変換します。

Nav2は、Macenskiら(2020)が説明したROS 2のナビゲーションスタックです。ナビゲーションを複数のサーバに分割し、ビヘイビアツリーでそれらを協調させます。粒子フィルタであるAMCLのような自己位置推定器が、事前に作成した占有格子地図上で位置姿勢を推定します。あるいは、同時自己位置推定と地図作成(SLAM)のシステムが、走行しながら地図を作ります。グローバルプランナは地図上で経路を求めます。コントローラは、直近のセンサデータから作るローカルコストマップを使い、毎秒何回もその経路に追従します。Nav2には複数のコントローラが付属しています。DWB(Fox、Burgard、Thrunが1997年に発表した動的ウィンドウ法に従うROS 1のDWAコントローラの後継)、Regulated Pure Pursuit、MPPIなどです。ビヘイビアツリーは、進行が止まったときの対応を決めます。コストマップのクリア、後退、待機、再計画のいずれかです。

倉庫AMRとフリート

何もない床を走る1台のロボットは、ナビゲーションの問題です。通路・エレベータ・ドアを人と共有する50台のロボットは、交通の問題です。フリートマネージャは、ジョブを割り当て、経路や交差点を予約し、ロボットを充電に向かわせます。ロボットとこの層の間のインタフェースには、2つのオープンな取り組みがあります。VDA 5050は、ドイツ自動車工業会VDAがVDMAおよびカールスルーエ工科大学と共同で策定したもので、中央のフリートコントローラと異なるメーカーの車両との間のメッセージを定義しています。本稿執筆時点で、GitHubリポジトリで公開されている最新版はバージョン3.0.0です。Open Roboticsが開発するOpen-RMFは、複数のフリートを、ドアやエレベータなど建物の共用設備と協調させます。

どこから始めるか

まず差動駆動から始めてください。上記の運動学を導出し、シミュレーションします。センサとノイズではオドメトリがドリフトする理由を示し、グリッド上の経路計画ではグローバルプランナを作ります。差動駆動A*プロジェクトは、これらをカルマンフィルタと組み合わせます。ROS 2については、Hello ROS 2と状態推定のハブから始めてください。

ツールとプラットフォーム

ツール 用途 ライセンス
Nav2 ROS 2のナビゲーション:自己位置推定、プランナ、コントローラ、ビヘイビアツリー、ドッキング 混在:パッケージごとにApache-2.0、BSD-3-Clause、LGPL-2.1-or-later
slam_toolbox ROS 2向けの2D LiDAR SLAMと自己位置推定 LGPL-2.1
robot_localization 拡張カルマンフィルタ(EKF)とアンセンテッドカルマンフィルタ(UKF)による、オドメトリ・慣性計測装置(IMU)・GPSの融合 BSD-3-Clause
ros2_controllers 差動駆動・アッカーマン・三輪・メカナム・オムニホイールの駆動コントローラ Apache-2.0
Open-RMF 複数フリートの交通管理と建物設備との統合 Apache-2.0
VDA 5050 フリートコントローラと車両の間のインタフェース仕様とJSONスキーマ MIT(リポジトリ)

よくある間違い

  • ベースコントローラに設定した車輪半径やトレッド幅が間違っている。5 m直進させ、その場で10回転させてから、測定した誤差をもとに両方を補正してください。
  • ベースコントローラとEKFのように、2つのノードから同時にodomからbase_linkへの変換をパブリッシュする。各変換を所有するノードは必ず1つにしてください。
  • ローカルコントローラをmap座標系で動かし、自己位置推定の補正のたびにロボットがガクッと動く。
  • コストマップをロボットの半径分だけ膨張させ、ロボットが角をこする理由がわからない。安全マージンを加え、実際のフットプリントをモデル化してください。
  • 誰もいない廊下でナビゲーションを調整する。人が通り過ぎる場面、ガラス壁、狭いドアでテストしてください。
  • 3台目のロボットが届くまで、フリートマネージャを不要なものとして扱う。

さらに深く