SLAMって何だ？ザックリまとめ

#背景
現時点に於いてはまとめサイトの様な状況ですが、ちょっと興味があったので調べてみました。個人見解も含まれているため、記載内容は参考程度に留めて頂けますと幸いです。

#SLAMって何？
最近ちらほら聞くSLAM(スラム)という技術。略はSimultaneous Localization and Mapping。各単語の正確な意味を記載すると、
　Simultaneous(発音：サイモティニアス/シモティニアス、意味：同時に起きる)
　Localization(発音：ローカリゼーション、意味：部位、位置測定)
　Mapping(発音：マッピング、意味：地図製作)
となります。
”自己位置測定と地図製作を同時に行う技術”の事を指し、主に自動運転制御を目的として知られている技術ですね。

#何で”自己位置の測定”と”地図製作”を一緒に行うの？
自動運転という目的に際しては、”自己位置の測定”と”地図製作”を同時に行う事が必須となります。

例えば、ロボットがとある空間上のある座標[x1,y1,z1]から、目標座標の[x2,y2,z2]移動したい場合、何もない空間上であれば、[x1,y1,z1]と[x2,y2,z2]とを結ぶ直線上をロボットに移動制御すれば良いはずです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537401/c2f85524-38ff-7c49-0663-080de1b028be.png" width=50%>

しかし実空間上は様々な障害物があり直線移動は困難であり、その解決のために地図製作が必要となります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537401/6fc3de70-abba-1f5c-2527-89b1efe4afa6.png" width=50%>


SLAMではロボットを移動させる事で、障害物を配置した地図を作成しながらその地図上の自己位置も同時に測位します。一度製作した地図上の中に於いて、[x1,y1,z1]から[x2,y2,z3]に移動するための経路を障害物がある前提に於いて探索する事で、初めてロボットの自動走行などが可能となります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537401/2e3f8822-19c5-44eb-d83b-d8d2262ee6ef.png" width=50%>


#SLAMを用いた事例(AGV)
SLAMといえば真っ先に思いつくのがAGV(Automated Guided Vehicle、無人搬送車)ですね。そこでまずAGV市場を調べてみました。
[2018 AGV市場の現状と将来性 (株)矢野経済研究所](https://www.yano.co.jp/market_reports/C60115200?utm_source=yahoo&utm_medium=cpc&yclid=YSS.1000085630.EAIaIQobChMIsobqvoa37QIVBraWCh1heg9PEAAYBSAAEgLeffD_BwE)
・オムロン(株)
・KUKAジャパン(株)
・(株)ZMP
・シャープ(株)
・(株)ダイフク
・中西金属工業(株)
・日本電産シンポ(株)
・リコーインダストリー(株)
この辺りのメーカーさんがAGVを手掛けられている様ですね。続いて上記記載のメーカーさんの事例を拝見しました。

### 事例1
世界40拠点を持つロボットSIメーカーのKUKA様のサイトを拝見しました。
[KUKAナビテーションソリューション](https://www.kuka.com/ja-jp/%E8%A3%BD%E5%93%81%E3%83%BB%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9/%E3%83%A2%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3/%E3%83%8A%E3%83%93%E3%82%B2%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537401/e43e196f-de76-1561-811a-654e5bc4a7da.png)
ラインマーカー、QRコード等のビジュアルガイダンス、磁気テーブ、外部レーダー送受信機等の、目印となる外部媒体を用いずとも、自動運転が可能となっている様です。素晴らしいですね。

### 事例2
国内での知名度の高いオムロン様のサイトを拝見しました。

[モバイルロボット：イージーオペレーション](https://www.fa.omron.co.jp/products/family/3664/video.html)
何もない2次元マップ上に、障害物と模された黒点群とロボットの走行軌跡を模した青点が、同時に配置されているのが良くわかります。素敵です。

#SLAMを用いた事例(ドローン)
続いてドローンを用いた事例も調べてみました。ドローンはコンスーマ向け商品でもあるため、山ほど事例が出てきますねw
[こんなドローンも将来絶対やってくる。SLAM技術＋AI（人工知能） でドローン完全自動飛行](http://dronesmedia.jp/?p=5127)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537401/f8b047ad-9491-8093-b9c8-f48640d2641d.png"  width=70%>
ドローンが飛行し、障害物を避けながら目的地まで自動走行しています。素敵です。

#SLAMを用いた事例(その他)

iPad Proやiphone12にはLidarセンサー(赤外光の様です)とカメラが搭載されているので、SLAMを用いたアプリケーションも数多く製作されております。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537401/e06862a9-ac87-3419-10b3-89ffbd169475.png" width=30%>
一例：[iPad Pro LiDAR meshing using ARKit](https://www.youtube.com/watch?v=fRUsV-esskM)

#SLAM関連の技術要素
続いてSLAMの技術自体をもう少しだけ深堀してみます。大さっぱなイメージとしてSLAMを用いた自動走行の技術には、
・フロントサイドの”距離情報群センシング”
・得られた距離情報群からの”マップ生成”
・得られたマップを用いた”経路探索”
・実際のアクチュエーターへの”駆動指示”
の4種類の基礎技術が必要と考えます。(厳密には不意に現れる障害物の高速検出や、エラーハンドリング制御など色々ありそうですが…)

以下が、マップを生成する上でのシステムイメージ。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537401/9867fab8-77b4-9784-c9f2-f270d9063235.png"  width=99%>

以下が、実際の自動運転時のシステムイメージ。”経路生成”からフローがスタートし、移動しながら逐次マップと経路を更新する様な流れですね。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537401/67f0a1ac-943a-f703-591e-372f37571c18.png"  width=100%>

今回の記事ではSLAMにおける記載という事で、フロントサイドに位置するセンシング方式と、マップ生成を行う上注意点としてよく耳にする”閉ループ問題”について触れます。

##センシング方式について
外部ガイダンス不要のSLAMとして主に2種類の方式があります。「Lidar SLAM」と「Visual SLAM」ですね。

###Lidar SLAM
　Lidar：(発音：ライダー、意味：Light Detection and Ranging ＝ 光検出及び測距)

レーザーから照射される光を、光センサーで受光迄の時間を測る事で、被写体までの距離を測定する方式。用いるレーザー(光)の波長によって、測距可能な距離や強度を選択する事が可能となります。浜松ホトミクス様のサイトがイメージしやすく分かり易かったです。
[LiDAR | 浜松ホトニクス](https://www.hamamatsu.com/jp/ja/applications/lidar/index.html)

###Visual SLAM
　Visual：(発音：ビジュアル、意味：画像による)

ToFカメラやステレオカメラ等の距離を測定できるカメラを使用する事で、被写体までの距離を測定する方式。こちらも使用するセンサーによって、測定可能な距離や精度が大きく異なります。

###どっちの方式がいいの？
現時点に於いて、検出精度や検出距離についてはLidarSLAMが良好の様です。対してVisualSLAMの利点は通常のRGB画像を併せて取得できる事から物体認識を一緒に行えるという事だと考えます。最近ではLidarSLAMと通常のカメラを併せ持つカメラといった物もリリースされてきております。

##センシングしたデータからマップを作る(オドメトリと閉ループについて)
SLAMの技術は大きく分けて、オドメトリ(Odometry)と閉ループ(RoopClosing)の2つに大別できます。
###オドメトリ
　Odometry(発音：オドメトリ、意味：走行距離計(オドメーター)による測定)

こちらは前述でもしている通り、各種距離センサーから得られる距離情報の時間的推移を用いて、どれだけ動いたのかを推定する技術です。只、走行時のタイヤの空転や距離センサーの誤差の蓄積から、少しずつ地図や自己位置が実座標上からずれていきます。その結果スタート地点に戻っても、自身で生成した地図上はスタート地点に戻らないという問題が起きます(閉ループ問題)。これを解消するのがRoopClosingという技術です。

###閉ループ
　RoopClosure/RoopClosing(発音：ループクロージャー/ループクロージング)

同一座標系に戻った際の位置ズレ情報を基に、生成した地図を幾何変換し綺麗な地図に成形しなおす技術をRoopClosureと呼びます。マップの生成にはこのOdometryとRoopClosureの両方を繰り返しながら実現されるそうです。

[MATLAB Japan ロボティクス：SLAMによる自己位置推定と地図構築](https://www.youtube.com/watch?v=U0kUKPlP1CA)が参考になりました。

RoopClosure前
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537401/97a2f95a-37f2-69a8-c4e9-867f40ad95da.png" width=50%>

RoopClosure後
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537401/42ff7c82-0f1e-d4ee-5a85-bacf8b05e3e4.png" width=50%>

#まとめ
今回はザっとSLAMの技術の概要を調査してみました。個人見解もありますので参考程度に見てもらえますと幸いです