SLAMスキャナの原理と勘どころ

最近、ハンディSLAMスキャナーが各社からリリースされ、市場でも多くみられるようになってきました。

SLAMスキャナーを使用して点群を取得する場合、使用している技術・原理を考慮した観測が欠かせません。観測作業における勘どころを大まかな原理と共にまとめてみました。

参考文献:

このブログ記事は、以下の書籍からの情報を部分的に引用しています。詳細については、以下の書籍をご覧ください。


SLAMスキャナーの原理

基本的な考え方

SLAM(Simultaneous Localization and Mapping)とは自己位置の推定と地図作成を同時に行う技術の事です。周辺の地図情報と移動量を得る2つのセンサから構成されていて、それぞれのセンサから得た情報を基に、地図作成と自己位置推定を行いながら、マッピングを積み上げていきます。

  1. Aの位置にスキャナーがあり、周辺の情報をセンサーで取得したとします。得られる地図は地図①です。
  2. スキャナーがBに移動し、周辺の情報をセンサーで取得します。(地図②)
  3. 移動量を取得するセンサーによりBの位置が分かっているので、そこを中心にしてセンサーで得た情報を書き加えていきます。(地図①+②)
  4. 以後、同じ処理の繰り返しです。移動した分だけ、地図上の自己位置をずらしながら、センサーが得た地図情報を移動後の位置を中心に書き加えていきます。


使用するセンサー

「基本的な考え方」で説明した通り、SLAMスキャナーは (1)周辺の情報を取得するセンサーと、(2)移動量を取得するセンサーから構成されています。

LiDAR~周辺の情報を取得する

LiDARは、レーザーを照射し、対象物からの反射を基に距離を計測するセンサーです。下図の様に、レーザーを回転させることで周辺の状況を計測します。これだけでは、2次元の形状しか把握できませんので、受発光部を動揺させながら回転することによって3次元の空間情報を取得することが可能になります。


IMU~移動量を取得する

IMUはXYZ各軸の加速度と角速度を検出するセンサーです。加速度の2回積分は座標、角速度の1回積分は角度となりますので、センサーからの出力を演算処理することで、センサーの位置と方向を把握することが可能です。


代表的な2つのセンサーについて説明しましたが、その他ミリ波レーダーやGNSS、カメラ画像などの情報もくわえながら、周辺情報や移動量を推定する機種もあります。

原理は単純なのですが、実際は理論通りにうまくいきません。現実のデータには「誤差」が含まれているからです。誤差を含んだブレのある情報から、あらゆる手法を駆使してそれらしく自己位置を推定していく・・・というのがSLAM技術のキモといえるでしょう。

パターンマッチング

では、ブレのある情報からどのように自己位置を推定しているのでしょうか?一言でいうなら「仮の位置」を決めながら、「良さそうな解」を探している・・・という事です。

具体的に考えてみましょう。
  1. ここまででで示した地図が出来上がっているとします。
  2. IMU観測を基に、スキャナーの現在位置を”仮に”決めます。
  3. 仮位置からのLiDAR観測データ(×)を地図に重ねてみます。
  4. 比較対象データ()の中で、観測データ(×)と特徴が合う点を探します。
  5. 見つかったら、比較対象データ()と観測データ(×)の対応点との距離を評価します。
  6. ”仮の”位置をずらしながら、5.の評価値が最小になる位置を探します。評価値が収束したら、推定位置を確定させます。
  7. 確定位置からの測定データで、地図を更新します。(点)

このような手順を踏んで、自己位置を推定していきます。上記(5)で述べた「評価値」の推定方法には、様々な手法があります。それらの推定方法から、観測対象に最も適したどの方法を採用するのか?どのように組み合わせるのか?といった要素が、SLAMスキャナーのパフォーマンスを左右しているのです。

ループ検出・ポーズ調整

スキャンを長時間続けていくと、どうしても誤差が累積してしまいます。

その場合、スキャンしている場所が以前訪れた場所なのかを調べ、もしそうなら、以前訪れた際に作成した地図に重なるように、今積み上げている地図を調整することで累積誤差を低減させることが出来ます。


以前訪れた場所かどうかを調べる手法を「ループ検出」、以前訪れた時に作成した地図に重なる様に、今積み上げている地図を調整する(上図のA’→A)を「ポーズ調整」と呼びます。

観測の勘どころ

ユーザー側のアプローチ

ざっくりとですが、SLAMスキャナーの原理について説明しました。ここまで説明したのは機器側のアプローチです。様々なアルゴリズムを駆使して、誤差を含んだブレのある観測データから、それらしい情報を推定している・・・というのが理解いただけたと思います。

「パターンマッチング」の項で、黄色で網掛けした部分に注目してください。重要なのは: 

  • IMU が推定した「仮の」位置
  • 作成済みの地図と観測データの対応点を見つけるための「特徴点」

です。ですから、誤差の少ない IMU 観測値、より強力な特徴点データを機器に提供してあげるといった、ユーザー側のアプローチも重要となってくるといえるでしょう。

それで、以下の点に注意する必要があります:

  • なるべく強い特徴点を捉える
  • 作成済みの地図上の特徴点に書き加えることが出来る様にする。つまり、急な動き(方向変換)、早い移動速度などを避けて、スキャナーが特徴点を見失しなう事が無い様、注意を払う。
  • IMU も然り、急な動きを避け IMU による “仮の”位置の精度悪化を抑える。
  • レーザーが照射している範囲は、機種により異なるので、対象にスキャナーを向けているつもりでも、そうでない可能性がある。(本当に対象を捉えているのか?レーザーの照射方向に注意を払う。~下図)



当たり前の事でですが、基本的なことを常に意識した観測を心がけるのが大切という事です。

特徴点を捉える

「なるべく強い特徴点を捉える」という事を、実際のスキャンシーンを例に挙げて考えてみましょう。

屋内から屋外に出る

例えば屋内から屋外に出る場合、ドア正面に向かって近づくと、ドアから出た瞬間いきなり屋外となりこれまでの特徴を見失ってしまい歪んでしまいます。廊下の端を歩きながらドアに近づき、ドアへの侵入は斜めから行うようにすれば、屋内と屋外を同時に捉えながら外に出ることが出来ます。

コーナーを曲がる

コーナーを曲がる場合、右側面へのスキャンが終わり、かつ上側面のスキャンが始まっていない状態で旋回すると、上側面が突然現れる形となってしまい、正常につなげることが出来ません。

コーナーを曲がる際は、右側面のスキャンが終わる前に旋回を始め、上側面と右側面を同時にスキャンしながら旋回することで、特徴を繋げていくことが出来ます。

凹みをスキャンする

狭いスペースに侵入してスキャン、退出するシーンを考えてみましょう。この場合も特徴の繋がりを意識しながらスキャンすることが重要です。

凹みに侵入した後、Uターンして凹みから出てしまうと、容易に特徴を見失ってしまいます。


凹み内のスキャンが終わったら、そのまま後ずさりしながらスキャンしていくことでスムーズに特徴を繋いでいくことが出来ます。