← サンプルアプリ一覧へ

配膳ロボットの自律移動

レストランで料理を運ぶロボットです。行き先を選ぶと、自分がどこにいるかを確かめながら、テーブルや人をよけて道を探し、その道に沿って走ります。お掃除ロボットや倉庫の運搬ロボットも同じしくみです。

本当の位置 ロボットが思っている位置と、その自信のなさ(円) 探した道 見えているマーカー

ロボットの頭の中

走っている間、この 4 つを同時に続けている

  1. 1自分はどこ?車輪が何回転したかを数えて、自分の位置を更新し続ける
  2. 2ずれを直す壁のマーカーが見えたら、その方向と距離から自分の位置を直す
  3. 3道を探す地図の上で、ぶつからずに行ける一番短い道を探す
  4. 4道にそって走る少し先の道の点を目指して、ハンドルを切る

本物のロボットでは

やっていること本物ではこうするこのリポジトリ
地図最初に一度、ロボットを手で押して店内を走らせ、レーザー距離センサー(LiDAR)で地図を作る(SLAM)—
自分はどこ? ずれを直す車輪の回転と、LiDAR やカメラで見た壁・マーカーを組み合わせて推定する。ここではカルマンフィルタ(EKF)を使っている。本物ではパーティクルフィルタ(AMCL)も定番04_estimation
道を探す地図をマス目に区切って最短の道を探す(A* という方法)05_planning
道にそって走る少し先の点を目指してハンドルを切る(Pure Pursuit)。本物では人の動きも予測しながら速さを決める03_control
ぜんぶまとめてROS 2 の Nav2 というライブラリが、上の 4 つを部品として持っている。自作せずに設定だけで動かすことが多い07 (予定)

同じしくみで動いているもの

  • お掃除ロボット(部屋の地図を作り、自分の位置を知りながら掃除する)
  • 倉庫で棚ごと運ぶ搬送ロボット(床のマーカーで位置を直す)
  • 病院やホテルの配送ロボット
  • 自動運転車(地図・GPS・カメラで自分の位置を推定し、道を計画して走る)

大事なのは、ロボットは自分の本当の位置を直接は知らないということ。いつも「たぶんここ」という推定の上で道を探して走っています。推定がずれると、正しく計画してもぶつかります。