SLAMとは?

これだけは知っておきたい3つのこと

SLAM (Simultaneous Localization and Mapping, 自己位置推定と環境地図作成の同時実行) とは移動体の自己位置推定と環境地図作成を同時に行う技術の総称です。SLAMを活用することで、移動体が未知の環境下で環境地図を作成することができます。構築した地図情報を使って障害物などを回避しつつ、特定のタスクを遂行します。

SLAMを活用する上で知っておきたい3つのことについて解説していきます。

なぜSLAMが重要か

SLAMは技術的には古くから研究されていましたが、近年、コンピューターの性能が向上し、かつ、カメラやレーザーレンジファインダーなどのセンサーが低価格で入手可能になったことで、様々な分野に活用が広がっています。近年ではディープラーニング (深層学習) の技術を応用したSLAMの実装も発表されています。

なぜSLAMが重要か、その利点や応用例を解説します。

SLAMを活用することの利点

なぜSLAMが重要なのでしょうか。

お掃除ロボットを例として取り上げてみます。SLAMを搭載しないお掃除ロボットではランダムに部屋の中を動き回り、ほこりの除去を試みます。この場合、全ての床面を掃除できるとは限りません。また、電力も余分に消費してしまうため、バッテリーの持ちも悪くなってしまいます。一方、SLAMを搭載するとお掃除ロボットは車輪の回転量やカメラなどの画像センサーから移動量を推定することができます。これを自己位置推定(Localization)と呼びます。それと同時にカメラなどのセンサーを使って周辺の障害物の地図を作ります。これを環境地図作成(Mapping)と呼びます。自己位置推定と環境地図作成を同時に行うことをSLAMと呼びます。

SLAMを活用することで、あらかじめ部屋の形状が分かっていなくても、走行しながら部屋の地図情報を構築することができます。構築した地図情報を活用することで、一度掃除した場所を重複することなく、最短時間で隅々までほこりの除去が行えます。

お掃除ロボットでのSLAMの利点

SLAMを活用することによって人間が行っているような柔軟なタスクを移動体に行わせることができます。移動ロボットや自動運転、ドローンなどの移動体の自律化を実現する上で、SLAMは欠かせない技術になっているのです。

SLAMの応用例

SLAMは下記に挙げたように移動ロボット、自動運転、ドローンと用途が広がっています。身の回りの様々な用途に活用できる可能性を秘めています。

  • 自動運転車用の高精度地図 (HD Map) の作成
  • お掃除ロボットの部屋の間取り生成とほこりの効率的な除去
  • 芝刈りロボットによる効率的な芝のメンテンナンス
  • 工場内・生産ラインでの無人搬送車・無軌道型 AGVの自律運転
  • 探査機・ローバーによる未知の惑星探査
  • 潜水艦・UUV・水中探査ロボットによる水中探査
  • ドローン・UAV・移動ロボットの自動操縦による荷物配達
  • 介護ロボットによる訪問・見守り
  • 警備ロボットによる巡回
  • ドローン・UAVによる地形把握、災害現場の状況把握、工事現場の図面作成

SLAMの仕組みとは

SLAMの仕組みについて説明していきます。

SLAMを実現する技術要素は大きく分けて2つあります。1つはセンサー信号処理を中心としたフロントエンドの処理部です。こちらは使用するセンサーに大きく依存する処理となっています。2つ目はポーズグラフの最適化を中心としたバックエンドの処理部です。バックエンドの処理部はセンサーによらず活用できます。

ここではフロントエンドの処理部に注目し、Visual SLAMとLiDAR SLAMという2つの手法についてご紹介します。

SLAMの処理の流れ

Visual SLAM

Visual SLAMは名称のとおり、カメラ・イメージセンサーからの画像を中心としたSLAM技術です。

カメラの種類としては単眼カメラ (広角カメラ、魚眼カメラ、全天球カメラ)、複眼カメラ (ステレオカメラ、マルチカメラ)、RGB-Dカメラ (深度カメラやToFカメラ)などが含まれます。

Visual SLAMは比較的安価に入手できるカメラを利用することでコストを抑える利点があります。また、カメラは情報量が多いため様々なランドマーク(以前観測した場所)を検出することができます。ランドマーク検出をグラフベースの最適化と組み合わせて柔軟なSLAMを実装できる可能性があります。

一方、単眼カメラを使用する場合は距離の単位(スケール)が不定となるため、ARマーカーやチェッカーボードなど既知の物体を検出して画像上から物理量を知る、もしくは、IMU (Inertial Measurement Unit、慣性計測装置) などの物理量を直接計測できるセンサーとフュージョンする必要があります。Visual SLAMのテクノロジーとしてはStructure from Motion (SfM) や Visual Odometry (ビジュアルオドメトリー)、バンドル調整などが関連します。

Visual SLAMのアルゴリズムは大きく2つに分類できます。画像特徴点のマッチングによる疎な手法と、画像全体の輝度を使った密な手法です。アルゴリズムとして、前者はPTAMやORB-SLAM、後者はDTAM、LSD-SLAM、DSO、SVOなどがよく知られています。

Structure from Motionの例

RGB-D SLAMの例

LiDAR SLAM

LiDAR (Light Detection and Ranging) というレーザーセンサー (距離センサー)を主に使用した方法です。

レーザーセンサーはカメラやToFなどの他のセンサーに比べて格段に精度が高く、自動運転やドローンなど速度が速い移動体で広く使用されています。レーザーセンサーの出力値は一般的に2D (X、Y座標)もしくは3D (X、Y、Z座標)の点群データとなります。レーザーセンサーの点群は距離精度が高く、SLAMの地図構築に対して非常に有効に働きます。一般に点群同士をマッチングすることで移動量を逐次推定します。移動量を積算することで自己位置を推定することができます。LiDARからの点群のマッチング ではICP (Iterative Closest Point)アルゴリズムやNDT (Normal Distributions Transform)アルゴリズムが用いられます。地図としては2Dや3Dの点群地図やグリッドマップ、ボクセルマップとして表現することがあります。

一方、密度の観点において、点群は画像などに比べて粗く、点群同士のマッチングにおいて、特徴が十分でない側面もあります。例えば、周囲に障害物が少ないような場所では点群間の位置合わせが容易でなく、移動体の位置を見失ってしまうことがあります。また、点群のマッチングは一般に処理負荷が高いため、高速化の工夫が必要となります。よって車両の位置推定にはホイールオドメトリーやGNSS、IMUなどの他の計測結果をフュージョンすることもあります。

2D LiDARによるSLAM

3D LiDARによるSLAM

SLAMを実現するための課題

SLAMは一部実用化されているものの、より汎用的に活用するには様々な技術的課題があります。主要な3つの課題を取り上げ、解説します。

課題1. 位置推定の誤差が蓄積し、真値から大きく外れる

SLAMのもっとも知られた課題の1つに、誤差の蓄積(ドリフト)があります。SLAMは逐次移動量を推定します。移動量の推定には必ず誤差が発生します。この誤差が累積していくことで、真の位置と大きくずれる現象が発生します。この誤差の蓄積により、地図データが崩れたり、歪んだりするため、それ以降の探索が困難になります。

例としてロの字の通路を周回することを考えます。このとき、誤差が蓄積していくと始点と終点の位置が一致しないような現象が発生します。このようなループが閉じない現象をループの閉じこみ(閉ループ、Loop closure)問題と呼びます。位置推定の誤差は本質的に不可避なものです。ループの閉じこみを検出し、誤差の蓄積をどのように補正・キャンセルするかが重要となります。

元の位置に戻らない(地図が歪む)

対策の1つは、以前訪れた場所の特徴を何らかランドマークとして記憶しておき、過去の位置推定の誤差を最小化することです。誤差の補正には姿勢グラフ・ポーズグラフ(pose graph)を構築して実現します。誤差の最小化を最適化問題として解くことでもっともらしい地図データを生成します。このような最適化はVisual SLAMではバンドル調整(bundle adjustment)などとも呼ばれます。

ポーズグラフを構築し、誤差の最小化を行った例

課題2. 位置推定が失敗し、地図上の位置を見失う

画像や点群によるマッチングではロボットの運動は考慮されていません。そのため、非連続的な姿勢推定結果を出力することがあります。例えば、秒速1mで移動しているロボットが急に10m先に飛ぶような計算結果を出力することもあります。

このような位置推定の失敗(ロスト)に対処する2つの方法があります。一つ目は移動体の運動モデルや複数のセンサーをフュージョンすることで位置推定の失敗を抑制することです。もう一つは位置推定が失敗した際に復帰するアルゴリズムを準備しておくことです。

運動モデルを活用したセンサーフュージョンにはいくつかの方法があります。代表的なものはカルマンフィルターを使った位置推定です。一般的な差動駆動型ロボットや四輪車は非線形の運動モデルとなるため、拡張カルマンフィルターやパーティクルフィルター(モンテカルロローカリゼーション)がよく使われます。他に、Unscentedカルマンフィルターなどのより柔軟なベイズフィルターを用いることもあります。センサーフュージョンとしてよく用いられるセンサーは慣性計測装置 (IMU、AHRS、INS、加速度センサー、ジャイロセンサー、地磁気センサー)があります。車両の車輪に取り付けたホイールオドメトリー (ホイールエンコーダー)を用いることもよくあります。

位置推定に失敗してしまった場合に復帰する方法として、過去に訪問した点をランドマークとして記憶しておく方法があります。このような点はキーフレームとも呼ばれます。ランドマークを探索する場合は何らか特徴量をインデックス化しておき、高速に走査できるようにしておきます。画像特徴量による手法としはBag of Features (Bof)、 Bag of Visual Words (BoVW)があります。近年ではディープラーニングによる特徴量から距離比較を行い、近いシーンかどうかの判断を行うこともあります。

課題3. 画像処理・点群処理・最適化の計算コストが高い

SLAMを実機ロボット上で実現する際に問題になるのが計算コストです。

ロボットの計算ユニットには一般的に省電力・小型の組み込みマイコンなどが使用されます。位置推定を精度よく実現するためには、画像処理や点群処理によるマッチングを速い周期で実行する必要があります。また、ループ閉じこみのような最適化計算も負荷の高い処理になります。このような計算コストの高い処理をどのように組み込みマイコン上で実行するかが課題となります。

マッチング処理の前処理となる特徴抽出などは比較的、並列化に向いた処理が多く、マルチコアによる処理やSIMD演算、組み込みGPUの活用などで高速化ができる場合があります。また、ポーズグラフの最適化は比較的長い周期実行できればよいので、優先度を下げながら定期的に実行するなどの工夫がとれます。

MATLABによるSLAM

MATLAB®ではSLAMを実装するための様々なコンポーネントを用意しています。これらのコンポーネントを組み合わせて対象のシステムにあったSLAMアプリケーションの構築を試行錯誤できます。

  1. SLAMのフロントエンド活用可能な様々なセンサー信号処理・画像処理
  2. SLAMのバックエンドとして活用できる2D/3Dのポーズグラフ
    • Navigation Toolboxによる2D/3Dポーズグラフ
    • Computer Vision Toolboxによるバンドル調整
  3. SLAMアルゴリズムを経路計画や制御など他のToolboxと連携
    • Navigation Toolboxのパスプランニングアルゴリズムと連携が可能

SLAMについてさらに詳しく

Robotics System Toolboxを用いて、移動体の環境地図作成と自己位置推定を行い、自律走行を実現します。
MATLAB/Simulinkを活用した効率的なパスプランニングアルゴリズムの開発をご覧いただきます。グリッドマップなどの地図データの取り扱い、LiDARを使った自己位置推定などのSLAM(Simultaneous Localization And Mapping)から運動学を考慮したパスプランニングのアルゴリズム検討まで、最新機能を交えて効率よく開発ができる様子をご紹介いたします。
この例では、ポーズグラフ最適化を使用して、収集された一連の2D Lidarスキャンを使ってSLAMアルゴリズムを実装する方法を示します。2D Lidarスキャンを使用して環境のマップを構築し、ロボットの位置軌道を推定します。
慣性測定ユニット(IMU)の読み取り値を活用して、車両に搭載されたセンサーからの3D Lidarデータを処理して、マップを構築する方法を紹介します。車両の軌道を全地球測位システム(GPS)記録と比較する方法も示します。
Structure from Motion (SfM) は、一連の 2 次元画像シーケンスからシーンの 3 次元構造を推定します。この例では、ビューのシーケンスからキャリブレーションされたカメラの姿勢を推定し、シーンの 3 次元構造を再構成します。
ビジュアルオドメトリは、画像シーケンスを分析することにより、カメラの位置姿勢を推定するプロセスです。一連の画像からキャリブレーションされた単一のカメラの軌跡を推定する方法を示します。