見出し画像

自動運転は全部で3つの工程に分けられる 〜認識、判断、制御〜

自動運転のナカミ③【仕組み編】

この記事の目的

事故や渋滞が無くなる!運送業が効率化する!時間が節約できる!…という明るい話から、事故の責任は誰が負うの?車がハッキングされたら?AIとかロボットに運転任せるの怖い…という心配になる話まで、色々な議論がされている自動運転技術。しかしそう言った自動運転が来る来ないという議論を盛んにしている一方、自動運転がどのようにして動いているのかなどと言った中身の深いところまで詳しい方は少ないのではないでしょうか。私はというと、数年前にこの技術を知って以来すぐに進路を変え自動運転研究室に入ったり、研究室入る前から有料オンライン講座(計約30万円…汗)で学んだりと、この業界のキャッチアップに勤しんできました。そこでこの記事を通して自動運転技術の中身を噛み砕いて紹介することで、より一層深い議論ができたり、この産業に張るか張らないかを考えて頂けたらなと思います。

前回は【歴史編】でしたね。第3回目の本記事では、自動自動とか言ってるけど実際どうやって自動で運転してんの?ってところを解説していきます。

大まかな流れ

以前第2回目の記事【歴史編】で、自動運転は大きく分けて3つの工程から成り立っていると書きました。

1. 周辺認識
2. 状況判断
3. 車体制御

しかしこれだけだとあまりにもざっくり過ぎるので、もうちょっと細かく分けて説明します。

1. 周辺認識
   ├── カメラからの情報を画像処理
   └── その他のセンサーからの情報も取込
2. 状況判断
   ├── 自車の現在地を把握
   └── 経路を設計
3. 車体制御
   └── 自然で滑らかに走行

画像引用元

これが大まかな全体像です。意外と知らない単語("Localization" = 自己位置推定)もあったのではないでしょうか。それでは各ステップについて細かく解説していきます。

1. 周辺認識

どんな障害物(対向車両や歩行者)がどこにあって、さらにそれらがどの方向に向かってどんくらいの速度で動いているのか、それを踏まえてどこの領域が安全に走行可能なのか……などの車両の周辺状況をちゃんと理解できないと何も始まりません。なので周辺状況を認識するために、自動運転車にはカメラを始め種々様々なセンサーが搭載されています。人間に例えると”目”の役割ですね。

・カメラからの情報を画像処理

想像に容易いかと思いますが、大体どの自動運転車にもまずカメラが搭載されています。何故かって、そりゃ人間の”目”に一番似た情報を取ってこれるセンサーだからですね。更に言えば、近年のディープラーニングなどを用いた画像処理技術の精度向上も大きくこの自動運転技術の実現に貢献しています。

白線&走行可能領域(水色)と、車両(黄緑)を検出できていますね。

・その他のセンサーからの情報も取込

カメラだけで障害物も白線も認識できるならカメラで十分じゃん、と思うかもしれませんが、カメラだけでは運転に十分な精度が出ないというのが近年の見解です。何故ならカメラは夜で周りが暗いとき、雨や雪などの悪天候のときに弱いからです。そこでカメラのように色情報を取ってくるのではなく、違うアプローチで周りの状況を把握するセンサーも使おうという考えです。有名なのがLIDAR(ライダー)RADAR(レーダー)ですね、名前が紛らわしいですが。そうやってカメラ以外のセンサーを採用することで、カメラの弱点を補うだけでなく、カメラじゃわかり得ない情報、例えば障害物までの距離やその材質といった情報まで手に入れることができます。

LIDAR(ライダー)はよく見るあの自動運転車の頭上でクルクル回ってるやつで、レーザー光を使って周囲の状況を360° くまなく探索してます。

LIDARから得た情報

一方でRADAR(レーダー)は電波を使って障害物を検知します。電波は金属に反応しやすいので、周辺車両の検出にぴったしなんですよね。

2. 状況判断

周辺状況がわかったら、今度はそれを踏まえて「じゃあどんな風に走ろっか」を考えます。人間に例えると”脳”の役割ですね。

・自車の現在地を把握

普段からカーナビやスマホの地図アプリやでGPSを使っているように、私たちは現在地なんて簡単に手に入ると思いがちですが、GPSって実は数メートルの誤差があるんです。人間が地図アプリ見ながら歩く際には大して問題ありませんが、こと自動運転にとっての数メートルは反対車線を意味し、つまりそれは事故を意味します。

なので自動運転においてはGPSからの情報をそのまま鵜呑みで信じるのではなく、ある程度の範囲を絞るためだけに使って、そっからもっと細かい正確な自己位置はその他センサーからの情報+確率の計算を用いて推定します。

一番盛り上がっている赤い所が自車の現在地

・経路を設計

自分が今世界の中でどこにいるのかわかったら、目的地への走行経路を逆算します。その際に周りの車両や障害物がどの向きに&どんな速さで動いているのかも考慮し、例えば前の車両が遅かったら車線を変更する、などといった判断も加えます。

車線変更する際の候補経路

3. 車体制御

経路の設計までできたからといって、まだ一安心ではありません。その経路にしたがって実際に車を走行させる為に、ハンドルやアクセルをコントロールしなければいけません。人間に例えると”手足”の役割ですね。

・自然で滑らかに走行

経路を設計後、ただ車線をはみ出さないように走れば良いってもんじゃありません。やはりなるべく車線の真ん中に沿って走るのが理想であり、真ん中からずれた場合はなるべく早く、でも急にではなく滑らかに真ん中に戻って欲しいものです。皆さんも経験上わかると思いますが、(特にカーブは)頭の中では理想の経路を描けていたとしても、実際にその経路に完璧に沿ったハンドル捌きは難しいですよね。そこをコンピューター制御にやらせようという訳です。

青色のグラフが目標経路(道路の真ん中)だとしたら、黒色や緑色のグラフみたいに波打ってから(左右に振れてから)真ん中に落ち着くより、赤色のグラフみたいに滑らかに真ん中へ向かって欲しいですよね。自動運転と聞くとディープラーニングによる画像処理とかに目が行きがちですが、こういった細かい所が乗客の乗り心地へダイレクトに効いてきますので、最後の工程と言えど車体制御は気が抜けない箇所でもあります。また、カーブ中の曲がる角度や加減速によっても乗客が感じる乗り心地は左右されます。

今回は自動運転全体の大まかな流れを3工程に分けて解説しました。次回からは各工程にもうちょい深く踏み込んで行きます。それでは次回は【周辺認識編】を書こうと思います。

文:川西発之 / 陳発暉 (Twitter/note)
プロフィール:Deep4Drive開発メンバー。高専情報科(C/C++)→大学機械科→HWエンジニアインターン at ドローンベンチャー(Python)→SWエンジニアインターン in NY(PHP)→ニートしながらアプリ開発(React Native)→大学院で自動運転の研究(C++)。日本生まれの純血中国人🇯🇵🇨🇳

私たちはモビリティ分野でのオープンイノベーションを通じ、技術者を育成するコミュニティです。自動運転レースへの挑戦や、JR東日本様等との共同プロジェクト、新規価値創造等を行っています! モビリティに関するイベントも適宜開催中!