AbudoriLab.

自律ロボットで誰でも遊べるよう試行錯誤するブログです。

SLAMを理解する - 自己位置の推定と地図の作成 -

AbudoriLabです。

ロボットの自律移動を実現するにおいて必要不可欠な技術となるSLAM(Simultainius Localization and Mapping)の概念を難しい数式などは使用せずにまとめていきます。

1回目は「自己位置の推定」と「地図の作成」について簡単な例を用いて紹介します。

SLAMの意味

’Simultanious Localization And Mapping”の頭文字をとってSLAM(スラム)と呼ばれています。 

Localizationは自己の現在地を推定することを、Mappingは地図を作成することを指しています。

さらに、SLAMは自己位置の推定と地図の作成を同時(simultanious)実現させる技術であることが特徴です。

まずは、SLAMがどんなものかイメージできる動画を紹介します。

下の動画はRTAB-Mapと呼ばれる手法を用いてSLAMを行っているデモで、ロボット分野では有名な学会(IROS)で2014年にMathieu Labbéらによって発表されました。

現在に至るまでアップデートが繰り返されており、オープンソースで誰でも使用することができます。


Four Kilometers Walk in Forest (an uncut real-time visual SLAM demo)

動画中の連続的に描画されている四角錐が推定した自己位置であり、全体に描画された点の集まり(点群)が地図になります。

SLAMの活用

ロボットが代行してヒトの仕事を行う中でも"自律して動き回れる"ことを実現するためにSLAMは活用されます。

具体的には「ロボットがどのように移動したかの軌跡」や「移動開始から撮影したカメラなどの計測データを解析して構築した地図」を取得できます。

そして、取得情報を使用することで、ロボットが初めて訪れた場所でも自身の場所を把握することができ、さらには、最適な動作経路を導くことができます。

したがって、用途先は掃除,搬送,探査,介護,警備,災害時の救出支援など多岐に渡ります。

一方、これまでのロボットの仕事は工場などの決められた特定の場所での作業ばかりでした。

今後のSLAMの精度向上により、"未知な環境"や"時々刻々と変化する環境"でもロボット自身がどこ移動しているかを把握できるようになります。

そして、SLAMの精度向上と他の技術も進化することで、人とロボットが協調して家事などの一般家庭の仕事をする未来が訪れるかもしれません。

自己位置の推定

自己位置推定についての紹介です。

f:id:mikefukurou:20210322204414p:plain

図1

自己位置推定ではロボットがある区間でどれぐらい移動したかを計測した移動量を用いて、移動先の場所を推定します。

図1に示すような過去(t0)から現在(t1)までの移動で計測した移動距離と進行方向の情報が移動量になります。

もし、移動量の計測により(長さ: 1メートル,方向: 直進)だったことがわかった場合、(t0)地点と移動量から(t1)地点の自己位置を推定できます。

では、その移動量はどうやって計測するのでしょうか?

結論から述べると、ロボットに内界センサ(車輪エンコーダ、IMU*1など)、および外界センサ(カメラ、Lidar*2など)と呼ばれるセンサを搭載して計測します。

それらのセンサから計測できる情報(車輪の回転数, 加速度・角速度, カメラの位置・姿勢変化)から移動量を算出し、自己位置の推定に使用します。

車輪エンコーダから計測した車輪の回転数を用いて自己位置を推定する方法(wheel odometry)を例に紹介します。

(カメラを用いて自己位置を推定するvisual odometryについては、別の記事で紹介する予定です)。

f:id:mikefukurou:20210324220131p:plain

図2

 

wheel odometryとは車輪の回転数からロボットが”どんな風に"、"どれくらい"移動したかを計算して現在の位置を把握する方法です。

図2に示すように両輪の円周が1mの二輪ロボットが、(t0)地点から(t1)地点までの移動で右車輪(0.5周),左車輪(0.5周)したとすると0.5m直進したと計測できます。

また、(t1)地点から(t2)地点までの移動で左車輪(1周),右車線(0.5周)だとすると、正確な値は計算が必要になりまずが、少なくとも右に転舵していることを推定できます。

このように、各地点間で計測した移動量を積算することで、逐次的に自己位置の変化を追跡できます。

そして、移動開始地点から移動終了後までにロボットがどのような経路を辿ってきたかをロボット自身が認識することができます。

(おまけ)

内界センサ/外界センサのどちらかだけでも自己位置は推定できますが、各センサでの推定にはそれぞれ弱点が存在します。

車輪の回転量から移動量を算出する"wheel odometry"はタイヤが回転していないにもかかわらずロボットが移動してしまう、すべり(スリップなど)を認識できないことが弱点です。

各センサの出力結果を統合することで弱点を補い、より信頼性の高い結果を取得するのが望ましいです。

地図作成

地図の作成についての紹介です。

冒頭の動画でも見れるような地図を取得することが目的で、その地図の作成を実現にはcamera,Lidarなどの計測データの"つなぎ合わせ"が必要です

(本稿はLidarを題材に紹介していきます。)

つなぎ合わせの紹介の前にLidarで計測して得られるデータについて紹介します。

f:id:mikefukurou:20210322204427p:plain

図3

Lidarは物体までの相対的な位置関係を測るセンサです。

図3の左に示すように照射させた赤外線があたった箇所までの距離(d)を計測できます。

また計測したデータを可視化すると、図3の右に示すように点の集合で表現されることから点群が取得できると書かれたりもします。

地図作成の話に戻ると、各地点で計測した点群をつなぎ合わせて1つの大きな地図を構築します。

f:id:mikefukurou:20210322204454p:plain

図4

図4のようにロボットが壁に沿って移動しながら計測した点群は壁の形状を計測します。

(正確には、点群を結んだ線です)

そして、各地点で計測した形状(赤,黒,青)を上手くつなぎ合わせることで大きな通路の地図ができることがわかると思います。

このつなぎ合わせを移動中にやり続けることで全体の地図を構築することができ、最適な動作計画などが可能になります。

おわりに

最近、SLAMの実用例も増えてきており、少しずつ関心が高まっていることを感じてSLAMについて簡単かつ順を追って紹介した記事を投稿することにしました。

SLAMにもdeep learningで実装される事例がちらほら出てきましたが基本的なコンセプトは変わりません。

SLAMの勉強を始めた方、使い始めた方の参考になれば本望です。

今後は少しずつ深堀していきたいと計画しています。

紹介してほしい要望がございましたら、コメント頂けるとありがたいです。

*1:IMUとは加速度を測定できる加速度センサと角速度を測定できるジャイロセンサを統合したセンサです。

*2:Lidarとは赤外線を照射して、物に当たり跳ね返ってきた赤外線の時間を計測することで物体までの位置関係を把握できるセンサです。出力は3次元の点群情報(赤外線が物体に当たった箇所のlidarからの距離)となります。