Active Safety (1)

Photo01:今年10月に都内で開催されたフリースケールセミコンダクタジャパンのFTF Japan 2012における「Active Safety:trends and innovative solutions」という資料より。筆者がFreescaleの資料を引用することが多いのは、半導体メーカーの中でこうした資料を一番積極的に出してくれるのがFreescaleだから、という理由でそれ以外の他意はない

 前回までは機能安全についてのご紹介を行ってきたが、今回からはもう少し積極的な安全機能として、Active Safetyの話を色々ご紹介してゆきたい。今回はあんまり半導体の話が出てこないが、そのあたりはご容赦のほどを。

 Active Safetyという用語は煩雑に耳にするが、その適用範囲は非常に広い。Photo01はActive Safetyに含まれる範囲の機能の一覧である。左上から時計回りに

  • 歩行者や道路標識の検出:カメラを使って、歩行者や道路標識を認識し、これにあわせて速度や進路をアシストする。
  • ジェスチャー認識:運転手の身振り手振りなどで特定の機能を行う
  • リアビューカメラや駐車アシスト:バックの際に歩行者や他の車などにぶつからないように警告する
  • 死角検出:ミラーなどの死角に他の車などがいるかどうかを検出して運転手に通知
  • バードビュー:これも広義には駐車アシストの範疇になる。
  • ハイビームアシストやレーン逸脱警告:対向車の状況を自動検出してハイビームとロービームの自動切換えを行ったり、センターラインなどを検出して車線の逸脱を検出する
  • オートクルーズ:単に一定速度で走らせるだけではなく、前方車との車間を維持するように調整する

といった項目が挙げられている。

 こうした諸々の機能は、運転される方からすると痛し痒しのケースもあるだろう。例えばパーキングアシストは、車庫入れに自信のある方にはまるで無用、と思われるかもしれない。ただ自動車メーカーからすれば、そうしたエキスパートドライバーを前提に車を作るわけにもいかないので、こうした機能をなるべく広い範囲の車に搭載しようとしている。

 こうした機能のほとんどは、カメラを使っての検出になるのが普通だ。Photo01のケースでは、オートクルーズに関してのみレーダーを使うことを想定している(このため、ボンネットの中にクルーズコントロールのユニットが入っている)が、他のもののほとんどはカメラを使って画像処理を行うことになる。今回は、この画像処理の基本をちょっとご紹介したいと思う。

 ちょっと古い話になるが、スバル(富士重工業)の「EyeSight」はもう広く一般に認知されているかと思う。2010年には新型も発表されており、自動停止ブレーキなどの機能が付いている。

 EyeSightはステレオカメラを使って障害物との距離を測定、それにあわせて自動ブレーキなどを行ってくれるものだが、このステレオカメラというものは別にEyeSightの専売特許でも何でもなく、カメラを利用した距離測定方式では、間違いなく2つ以上のカメラを装着している。もっと言ってしまえば、人間も2つの目で1つの対象物を見つめることで、おおよその距離が分かるわけで、これと同じ仕組みである。

 図1のように、水平方向にある程度の距離を空けて設置された2つのカメラの前方やや左に、障害物があるとする。これを2つのカメラで撮影した場合、カメラ1で撮影した映像では中央よりやや右に障害物が写っているし、カメラ2だとかなり左に障害物が写っているはずだ。

 カメラの位置が固定されていれば、この状態からそれぞれの視線の角度(図中のθ1とθ2)が算出できるので、ここから三角関数を使って障害物との距離(図中の青い破線)を計算で求めることができる。理屈そのものは、こんなに簡単である。

図1

 もっとも実際には、これをやろうとするととっても大変である。角度そのものの算出は、2つのカメラの間の距離を固定してしまえば、それほど難しくない。カメラのど真ん中に写っていれば90度で、そこから10ピクセル左にずれていれば85度で、17ピクセルずれていれば80度で……といった形であらかじめテーブルを用意しておけば、計算は容易である。あとはきちんとカメラがまん前を向くように固定されてさえいればよく、このためEyeSightのカメラユニットはガッチリしたフレームに固定されているのが写真で分かる。では何が問題かというと、「画面中のどれを対象物とするか」の判断をどう行うか、である。

Photo02:背後に見えるピンク色のものはお猫様用クッション。一時的にちょっとどいていただいた

 ちょっと簡単な実験をしてみた。Amazonのダンボールを展開して、簡易撮影台を作り(Photo02)、ここにカメラを置いてそれぞれどう見えるかを撮影してみた。カメラは中心線から左右に5cmずつ離した場所で撮影することにして、対象物のマッチ箱はカメラから30cmと15cmの2つのパターンで撮影してみた。撮影サイズは640×480ピクセルに落としている。

 さて、まず15cmの場合がPhoto03(左)とPhoto04(右)である。この2枚を重ねあわせてみる(Photo05)と、画像にあまりブレが無いので、パターンマッチ(画像同士の比較)を掛けると割と簡単に一致しそうだ。

 ところが30cmの場合はどうか?ということでPhoto06(左)とPhoto07(右)を重ね合わせたのがPhoto08である。Photo05同様に、比較的ぴったりと合うのだが、相対的にマッチ箱の大きさが小さくなっているので、パターンマッチでちょっと難しくなりそうだ。

Photo03:被写体までの距離15cm。左の画像Photo04:右の画像Photo05:左右を重ねた画像
Photo06:被写体までの距離30cm。左の画像Photo07:右の画像Photo08:左右を重ねた画像

 では次にマッチ箱の向きを正面ではなく、やや斜めにひねってみる。まず15cmの場合だが、左(Photo09)と右(Photo10)でマッチ箱の形が全く異なって撮影されているのが分かる。無理に重ね合わせてみたのがPhoto11だが、この状態では画像の一致を検出するのは非常に難しい。

 30cmの場合だと左(Photo12)と右(Photo13)ともにマッチ箱の手前の面がきちんと見えてはいるが、重ね合わせてみるとこの通り(Photo14)である。これは向かって左側の「安全燐寸」の文字が重なるようにしてみたが、そうすると右側の「品質特撰」の文字が完全に分離しているのが分かる。

 Photo05とかPhoto08のようなケースでは画像の一致は難しくないが、Photo11とかPhoto14では「単に画像を重ねて比較」するだけでは無理がある。

Photo09:被写体までの距離15cm。左の画像Photo10:右の画像Photo11:左右を重ねた画像
Photo12:被写体までの距離30cm。左の画像Photo13:右の画像Photo14:左右を重ねた画像

 そんなわけで、普通はもう少し画像処理を行う。まず処理を簡単にするために、フルカラー画像をモノクロにする(Photo15、16)。次いでここで輪郭抽出という処理を掛けて、物体の外形を明確にし(Photo17、18)、次いで細線化を行って余分な情報を取り除く(Photo19、20)。この状態で重ね合わせると、中央の桃の形の相似形からこれが同じものであると判断でき、またその周囲の縦のラインからマッチ箱の中心位置が求められるので、これを元に位置の算出ができるというわけだ。

Photo15:画像をモノクロに変換(左)Photo16:画像をモノクロに変換(右)
Photo17:輪郭抽出で外形を明確にする(左)Photo18:輪郭抽出で外形を明確にする(右)
Photo19:細線化で余分な情報を取り除く(左)Photo20:細線化で余分な情報を取り除く(右)

 今回は分かりやすく示すために、敢えて後ろは無地のダンボールとしたが、実際にカメラで撮影すると当然背景に色々なものが写り込むわけで、これは位置測定にとってはノイズとなる。こうしたノイズの除去にもさまざまなノウハウや技法があるが、「これ一発で全部解決」といったものはない。

 例えばPhoto15、16とPhoto19、20を比較すると、Photo19、20では背景とかが綺麗に消えているが、その一方でダンボールの折り目などは厳として残っているわけで、こうしたものをどう消すのかが、エンジニアにとっての腕の見せ所である。

 またこの例では対象物を1つとしたが、実際には複数の対象物があるわけで、当然扱える対象物が多ければ多いほどActive Safetyには有用となる。

 ところが、これはシステムにとっては当然厳しい。大雑把に言えば、通常のカメラは毎秒30フレームで撮影を行う。つまり33msec毎に1枚撮影が行われるので、一対のステレオ画像にこうした処理を行って、目標物を定め、そこから距離を割り出し、必要ならばブレーキなりステアリングなりに介入を行うといった一連の過程を33ms以内に行わねばならないことになる。目標物が複数あった場合、これは恐ろしく困難である。

 例えばこんな風景(Photo22)に同じくモノクロ化/輪郭抽出/細線化を行うと、こんな感じである(Photo23)。この状態から歩行者を検出するのは困難というか無理であり、これはこれで別の手法を使う必要がある。

Photo22:この写真は写真素材 足成(http://www.ashinari.com/)が配布されているものから利用させていただいたPhoto23

 なので、実際は一対のステレオ写真に対して、複数の画像処理を並行して行い、その結果をまとめたうえで警告の表示やらブレーキ操作やらをすることになる。これには結構壮絶な処理能力が必要になる訳で、結果として最近のスマートフォンやタブレット端末と同等以上のプロセッサとか、DSP(Digital Signal Processor)と呼ばれる高性能な処理エンジンが搭載される傾向にある。

 ということで今月は原理を説明したので、次回はこれをどう実現しているかをもう少しご紹介したい。

カーエレWatch バックナンバー
http://car.watch.impress.co.jp/docs/series/cew/


(大原雄介 )
2012年 11月 28日