Preferred RoboticsのSLAM技術
自律移動ロボットを支えるSLAM技術
カチャカをはじめとする自律移動ロボットでは、周囲の環境/地図を把握する「地図作成(マッピング)」や、今ロボットがマップ上のどこにいるかを認識する「自己位置推定(ローカライゼーション)」の技術が必須となります。
ロボットを導入した直後は、ロボット内に地図データは存在しないため「地図作成と自己位置推定を同時に」行う仕組みが必要であり、それがSLAM(Simultaneous Localization and Mapping)技術と呼ばれています。
弊社(Preferred Robotics)では、SLAM技術を内製(独自開発)しており、カチャカをはじめとする弊社製品ラインナップ毎に工夫/改良を重ねています。本記事ではSLAM開発担当のエンジニアが、SLAM技術とカチャカにおける独自の工夫点について解説します(技術者向けの内容となっております)。
SLAMとは
SLAM(Simultaneous Localization and Mapping)とは、カメラやLiDAR、IMUやホイールオドメトリなどのセンサ情報から、周囲の環境を表す地図と、その地図の中で自分がどこにいるのか(自己位置)を同時に推定する問題です。また、地図作成後はその地図を既知の情報として、自己位置を推定する問題を解きます。
本記事の構成
本記事は次の内容になっています。
- 既存研究
- 実問題における地図作成の難しさ
- カチャカではどう対処しているのか
既存研究
カメラを用いた研究
Deep Learning(DL)を使わない従来のカメラによる自己位置推定の手法としては、ORB-SLAM、 DSO、 LSD-SLAMなどがあり、DLによる手法だと、Droid-SLAMなどがあります。
Droid-SLAMはRecurrent構造によりカメラの姿勢と物体までの距離を推定する手法で、頑健性があり精度も高いですが、計算コストが高いという問題点があります。DLではありませんが、今年だとGaussian Splattingを用いた手法もでてきました。
Gaussian Splatting SLAMは世界を色付き三次元ガウス分布の集合により近似していく手法で、Droid-SLAMよりも計算量が小さく事前学習が不要という特徴がありますが、こちらも依然として計算コストのハードルがあります。
研究としてはカメラを用いた自己位置推定のほうが盛んではありますが、急激な視点変化や光源変化に弱い、また計算コストが高かったり、計算安定性といった課題があります。
LiDARを用いた研究
LOAMはLiDARを扱うSLAMで、点群から曲率を用いてEdge点とPlanar点を抽出し、各点について用意したコスト関数によりマッチングを行う特徴点ベースの手法です。計算量も低く精度が高いことが特徴ですが、曲率を計算するためそれなりの点数が観測できている必要が有ります。SUMAは特徴点ではなく3D LiDARの入力から法線マップとLiDARの画像を用いて自己位置を推定していく手法で、Surfelという小さな円盤でマップを作りながら、そこに観測を合わせることで自己位置を推定します。LO-NETはLiDAR特徴量の設計などをせず、End-to-endでマッチングを学習します。LO-NETは法線推定は学習ではなく直接算出し、マスク推定と姿勢推定のネットワークは重みを共有したネットワークの構造をしており、教師有り学習で行います。マスクで動的物体に対処しており、特徴量の設計が不要で学習により姿勢推定ができることが強みですが、教師有り学習であるため学習データセットの準備コストがかかります。
LiDAR SLAMはアクティブなセンサーを使うため頑健で、計算負荷もカメラによるものと比べ、一般に小さいです。
また、カチャカのように2Dの動きしかしない場合は、自己位置推定には2次元であることが十分であることもあり、2D LiDARだと安価に実現することができます。
地図作成の困難さ
様々な要因で地図作成は失敗する可能性があります。代表的な要因に、次が挙げられます。
- 使っているセンサーと環境によるもの
- 地図作成時の移動経路によるもの
- 計算資源の制限によるもの
- 時系列データでの検証困難性によるもの
特に3の制約は強く、既存研究の手法をそのまま転用することは難しいです。
実際のデバイスや目的に合わせたSLAMの適用が求められるため、カチャカではSLAMを内製しています。
使っているセンサーと環境によるもの
一般にセンサーが得る情報が少なかったり、センサーが安価で質が悪いとノイズが大きくなり、SLAMは困難になります。例えば、2D LiDARを使っている場合にはLiDARからの観測に"角"が少なければ推定は困難になります。[図]のように、lidarをどう重ね合わせても成立してしまうからです。一方、カメラの場合は壁際など、色が単純でコントラストが小さい画像だと推定が難しくなります。画像のどこに注目すれば移動量を推定できるかが不明であるからです。また、エンコーダからはホイールオドメトリを取得できますが、床面の状態などにより滑りを引き起こしたり、凹凸により走行誤差が生じていきます。
地図作成時の移動経路によるもの
短期的に自己位置を推定できても、長い間観測をつづけると誤差が蓄積(ドリフト)します。地図をぐるっと回って作ったときにスタート地点に戻ってきた図の例を[図]に示します。このように、前後だけのセンサーから現在の自己位置を推定してもドリフトにより、SLAMが認識する自己位置は異なる場所で推定されます。これを補正するためには一般にLoop Closingという技術を用いて自己位置を推定します。Loop Closingは以前通ったことがあるということを認識して、その情報から現在までの姿勢推定結果を修正する技術です。このLoopClosingは現在の位置が以前に通った場所であるかどうかを認識するために、画像やLiDARの情報を用います。しかし、地図作成の経路でほとんど同じ場所を通らなかったりする場合は原理的にLoopClosingができないため、誤差を低減することはできません。
LoopClosingによる地図品質の違い(シミュレーション).
黒矢印:LiDAR観測した場所、点:各場所で観測したLiDAR点群.
左: LCなし、誤差が蓄積していて青とピンクの点でズレが生じている.
右: LCあり、点群がぴったり合って位置が修正されている.
計算資源の制限によるもの
SLAM自体オンラインでの推論が必要なことが多いため、様々な計算上の工夫が求められます。理想としては全てのデータを余すことなく使うことですが、使用するデータ量によっては保持することができません。カチャカではより顕著で、元々の計算資源が限られている上、他の多くのモジュールも動かしているためCPUもメモリも十分に使用することができないため、限られた計算資源から効率よく推定を行う必要があります。
時系列データでの検証困難性
また、検証の難しさも有ります。SLAMは時系列データを扱っているため、ある機能を検証するとき、場合によってはそれまでの時刻の計算を全てやり直す必要も出てきますし、結局精度が劣化したかどうかは全シーケンスを回して評価することも多いです。100mを超える通路の地図を作成することもあるため、1°の推定誤差が生じても地図の完成度に大きな影響を与えることもあります。ささいな修正においてもあらゆるデータを用いて地図作成の品質が低下していないかをチェックする必要が有ります。
カチャカではどう対処しているのか
使っているセンサーと環境によるものに対する対処
他のSLAMと同様、各センサーの情報を統合しながら自己位置を推定しています。お互いのセンサー情報を用いて異常判定を行いながら、ときには選択的に推定を行い、なるべく継続して自己位置が推定できるように処理を行っています。
地図作成時の移動経路によるものに対する対処
LoopClosingが地図の崩れを補正するとても大きな手段にはなりますが、先述の通りLoopClosingは地図のとり方に依って実行できるかどうかが決まります。カチャカでは、LoopClosingが長い間実行されないことも考慮し、地図の全体的な骨格が崩れにくいように地図がとりえる形を事前知識として導入しています。
またLoopClosingの処理も、要求される計算時間に応じて、処理を段階的に変更しています。具体的には、オンライン時ではLoopClosingは弱い計算負荷で動く簡易的なものになっていて、セーブ時に地図がより綺麗に出来上がるよう、全体の見直しをしながら最適化をしています。これらにより、大きな地図で、地図作りの成功率が高くなっています。
計算資源の制限によるものに対する対処
カチャカではSLAMに必要な情報を全てメモリに乗せることはできないので、地図作成時もサイズが大きい情報は全てストレージに退避させています。センサー情報などがほぼストレージに退避されたことで、メモリ使用量を大部分削減できています。また、CPU使用率についても上述の2段階の最適化構造をとることにより削減しています。
時系列データでの検証困難性に対する対処
カチャカでは、効果検証を行うために毎週実データを使って精度評価を行っています。実データにより、前回と比べ地図が劣化していないかを評価しています。評価システムはもちろん、成果物の管理や可視化なども自前で実装しており、特にCPU使用率やメモリ使用量も監視することで精度だけではなくパフォーマンスも含めて劣化がないかを確認しています[図]。
CPU使用率とメモリ使用率監視。いずれも所有する全データに対して監視している。
さいごに
ここではSLAM一般の難しさとカチャカがどう向き合っているかについて、一部ながら簡単に書いてみました。
自己位置推定は自律走行系の根幹をなす技術でありながら、様々な課題があります。地図作成のみについて書いてみましたが、自律移動時にも多くの課題があります。SLAM自体は昔から研究されている分野でありますが、未だ研究が行われ続けている分野でもあります。
少しでも多くの人にカチャカやSLAMについて興味を持っていただけたら幸いです。
カチャカのSLAMは今後も新しい機能を開発したり、精度を向上していくので、よろしくお願いいたします。
企業・団体等でのカチャカの導入に興味をお持ちの方は、以下のサイトよりお気軽にお問い合わせください。
参考文献
[1] Mur-Artal, et al. "ORB-SLAM: a versatile and accurate monocular SLAM system." IEEE transactions on robotics 31.5 (2015): 1147-1163.
[2] Engel, et al. "Direct sparse odometry." IEEE transactions on pattern analysis and machine intelligence 40.3 (2017): 611-625.
[3] Engel, et al. "LSD-SLAM: Large-scale direct monocular SLAM." European conference on computer vision. Cham: Springer International Publishing, 2014.
[4] Teed, et al. "Droid-slam: Deep visual slam for monocular, stereo, and rgb-d cameras." Advances in neural information processing systems 34 (2021): 16558-16569.
[5] Matsuki, et al. "Gaussian splatting slam." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2024.
[6] Zhang, et al. "LOAM: Lidar odometry and mapping in real-time." Robotics: Science and systems. Vol. 2. No. 9. 2014.
[7] Behley, et al. "Efficient surfel-based SLAM using 3D laser range data in urban environments." Robotics: science and systems. Vol. 2018. 2018.
[8] Li, Qing, et al. "Lo-net: Deep real-time lidar odometry." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019.