自己位置推定がなぜ自動運転において重要か

# この記事の要約

- 自己位置推定がなぜ自動運転に重要かをまとめる
- 自己位置推定は，自動運転における認識や制御などを目的レベルまで達成させるために極めて重要
- オンラインで必要な情報をすべて認識できるなら自己位置推定は不要，ただしその様な機能の実現は未だに難しい



# この記事の執筆のモチベーション

自己位置推定に関する内容を専門でない人に説明すると，そもそも「なぜ自己位置推定が自動運転に必要なのか？」という質問をされます．ここでいう自己位置推定とは，±10~20cm程度の誤差で，地図上での位置を認識することを目的としています．当然人間はこのようなことをしていないので，なぜ自己位置推定が必要なのか疑問に思うのも当然かと思います．

本記事では，自己位置推定が自動運転においてどのような役割を担っているかを簡単な例も交えながら説明していきます．



# 自己位置推定とは

読んで字の如く「自己」の「位置」を「推定」することです．私はよく下のイラストを使って説明しています．地図があるときに，自分の目で見えるものと地図の上でのものとの対応を取り，自身の地図上における相対位置を判断します．

![syugakuryokou_group_kids.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329950/e326e53b-00f3-545e-8f77-eb114ef50110.png)

自動運転車両も全く同じことをします．自動運転を行う前に地図が作成されており，その地図上での相対位置をセンサ観測を基にして推定します．人間の場合は「目で見たもの」ですが，自動運転車両の場合は「センサで観測したもの」を使って地図との対応を取ることになります．

余談ですが，カーナビやGoogle mapでは，地図上の物体と対応を取るといったことはしません．なぜなら，GPSなどを使ってすでに自身の位置を推定しまっているからです．ここでいう自己位置推定とは，GPSが与えてくれるような位置情報をGPSに頼らずに取得する，ということを意味しています（なぜGPSに頼らないかの疑問はこの記事では触れません）．

さらに余談ですが，自己位置推定の話をするとSimultaneous Localization and Mapping （SLAM）と混同される方がいます．SLAMとは「自己位置推定と地図構築の同時実行」です．すなわち，地図が動的に変わっていくようなものです．自己位置推定では，地図は固定の基で位置を推定する，という問題を扱うので，SLAMとは別の問題を扱っていることになります．「自己位置推定は地図更新をしないSLAM」とも解釈できますが，それなら素直に「自己位置推定」というべきです．



# 自己位置推定の効果

自己位置推定を行うことで，与えられた地図上での相対位置を知ることができます．これにより，**地図に記録されている情報と自動運転車両との相対位置も知ることができる**ようになります．例として下の図を見てみましょう．この図の左上は，点群地図を用いて自己位置推定を行っているものになります．図中の緑や青で書かれている線は，白線や走行経路などの情報であり，いわゆる「高精度地図」と呼ばれるものです．そしてメインの図は，**自己位置推定の結果を基に，カメラ画像に高精度地図の情報を投影した結果になります**．つまり，**カメラで認識したのではなく，自己位置推定の結果を基にそれぞれの物体がある位置を予測した結果**となっています．

<img width="530" alt="localization_example.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329950/a6ccc3be-39e8-06e6-0d9c-f2258ab4e823.png">


このことを踏まえて，例えば信号の周辺を見てみると，**信号認識をしていないのに，正確に信号の位置を予測することができている**ことが確認できます．つまり，画像全体から信号を探さなくとも，ある決められた範囲のみを探索するだけで，信号を見つけることができるようになります．

また実際に自動運転車両が走行する経路に関しても，**経路計画を行わなくともどの位置を走行すれば良いかが判断できるようになります**．もし自動運転車両が自らどの位置を走行するか判断しないといけなくなると，当然ながら高度な環境認識機能を搭載しなければいけなくなります．

これらのことから見てわかるように，正確な自己位置推定ができるようになると，**自動運転に必要な認識や経路計画などの機能を要求レベルまで達成することが簡略化できている**ということがいえます．そのため，現状自動運転を行おうとすると，まず最初に正確に自己位置推定を行う，ということが重要となってきます．



# ディープラーニングによる認識と地図を用いた認識

「自己位置推定が正確にできれば正確な物体認識などの実現が簡単になる」というような説明をしました．この様に説明すると「最近はディープラーニングで高精度に物体認識できるのだから，自己位置推定なしでも良いのではないか？」というような質問をされます．結論として筆者は，「ディープラーニングによる認識だけでは未だに不十分である」という様に考えています．その一番の理由は**交通におけるコンテクストの理解**にあると考えています．「コンテクスト」とは「文脈」の様なものです．つまり**道路上を走行する上で本当に必要な情報の理解が現状のディープラーニングでは難しい**と考えています．一例を上げてみます．

<img width="810" alt="semantics.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329950/30519dbf-ea8a-5b3e-2a34-33f120995980.png">

上の図の真ん中の図は，左の画像の各ピクセルを対応する物体の色で塗りつぶしたものになります．近年では，ディープラーニングを用いてこの様な認識（セマンティックセグメンテーション）を高精度に行うことができます．しかしこの認識だけで十分でしょうか？例えば交通環境には，自車の走行車線と反対車線が存在します．しかしディープラーニングは，どちらも同様に道路として認識しています．当然人間はこれらの情報を理解できています．道路1つをとっても，本当に人間らしい認識を実現しようとすると，まだ不十分であることが理解できます．一方，これらの情報は地図に埋め込まれておけば簡単に認識することができます．例えば，この地点にいるなら走行車線はこちらを向いているなどです．

道路には，様々な「常識」なども存在します．これらも認識しないと，本当に人間らしい運転はできないといえますが，その様なものの認識は未だに困難です．なので現状では，地図に「この地点ではこのように動く」といった情報を埋め込んでしまうことが，現実的な解決策となっています．



# 【余談】自己位置推定と他のモジュールの関係

現状良く使わる自動運転のシステム図を簡単に書くと以下の様になります．自己位置推定が最初に実行され，その位置認識結果を基に障害物検知や経路計画などのモジュールが実行されます．この際，**自己位置推定による位置認識結果は常に正しい**と仮定している場合が多いです．これは自己位置推定の失敗を正しく検知するのが難しいためです．すなわち，**自己位置推定の失敗は自動運転の失敗に直結する**と言うこともできます．

![system.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329950/36ed2ea9-da09-5418-a0fd-5cb82acea9c0.png)

私の研究では，自己位置推定の信頼性を推定したり，失敗検知・復帰を高精度に実現することで，自動運転全体の安全性を向上させて行く，という様な取組を行っています．もしご興味があればご連絡ください．

- [Simultaneous pose and reliability estimation using convolutional neural network and Rao–Blackwellized particle filter](https://www.researchgate.net/publication/327263623_Simultaneous_pose_and_reliability_estimation_using_convolutional_neural_network_and_Rao-Blackwellized_particle_filter)

- [Misalignment Recognition Using Markov Random Fields with Fully Connected Latent Variables for Detecting Localization Failures](https://www.researchgate.net/publication/334619428_Misalignment_Recognition_Using_Markov_Random_Fields_with_Fully_Connected_Latent_Variables_for_Detecting_Localization_Failures)

- [Hybrid Localization using Model-and Learning-Based Methods: Fusion of Monte Carlo and E2E Localizations via Importance Sampling](https://www.researchgate.net/publication/338966524_Hybrid_Localization_using_Model-and_Learning-Based_Methods_Fusion_of_Monte_Carlo_and_E2E_Localizations_via_Importance_Sampling)



# まとめ

本記事では，自動運転において自己位置推定がなぜ重要なのかを解説しました．高精度な自己位置推定を行うことで，地図情報を活用することが容易となり，結果として認識や経路計画などのタスクの実現を簡略化することができます．また現状だと，この様な地図情報の活用無しで，自動運転のために必要な情報すべてを認識するこは困難です．そのため，自動運転を行おうとすると，まず自己位置推定を正確に行う，ということが重要となってきます．

この記事が，自己位置推定とは一体何なのかと疑問に感じている方，また，なぜ必要なのかを説明するのに困っている方，などの役に立てば幸いです．