【群馬事業所】俺たちの仕事 自動車の運転支援システム開発を紹介



こんにちは、群馬事業所のマネージャ、細P(仮名)です。


今回は群馬事業所で3年前から常駐案件として参加している開発、

運転支援システムについて紹介します。



■運転支援システムって?

その前に、「そもそも車の機能ってなんだ?」

って考えると、大きく分けて

走る。

曲がる。

止まる。

の3つです。


走るためにアクセルを踏み、

曲がるためにハンドルを回し、

止まるためにブレーキを踏む。

車の運転免許を持っている方は(持っていない方も、なんとなく)これは分かると思います。


問題は、この3つは全てドライバーの操作によるものです。

人のやることですから、当然判断ミスや操作ミスがあって、事故につながったります。

これを読んでいる方も、自動車やバイク・あるいは自転車や歩行者でも…実際に事故や危険な目にあった、なんてこともあったのではないでしょうか?


よって、安全でより良い運転のために

自動車メーカーは各社しのぎを削って運転を支援するシステムを開発し、商品(車)の付加価値として販売しています。

中でも、先進運転支援システム(英語でAdvanced driver-assistance system、以下「ADAS」と言います)の分野は、車載カメラによる画像認識やレーダー、センサー類の情報を元に処理制御を行います。

ウチらIT屋の出番ですね!


そんな訳で、開発案件として自動車メーカーさんから当社にもお仕事があり

細Pがマネージャとしてチームを組んで参加しています。


では、実際の業務支援例を幾つか並べて解説してみます。



■業務支援例(1) 組み込み



関連技術:C, C++, Linux, 画像処理 など


ADASのハードウェアとなる車載カメラによる画像認識やレーダー、センサー類の情報を元に処理制御に至るまでのプログラミング、この開発に携わっています。

独立した機械の中に組み込まれたコンピューターを制御するためのシステムなので、「組み込み」システムと呼ばれます。


冒頭の走る。曲がる。止まる。

を自動車側から支援するため、

情報を瞬時にプログラミングで認識し、アクセル、ハンドル、ブレーキの制御に伝達する。

このため、処理時間は常にコンマミリ秒単位で抑えるプログラミングが要求されます!

処理が高速であることから、主にC,C++言語が用いられています。

同じ理由で、車載組み込みのシステムにはLinuxが多く使われています。


またシステムのバージョン、機能がすすむにつれコード量や処理時間が増大するため、リファクタリング(コードの最適化)をメイン作業としてお願いされることも少なくありません。


キミも自動車メーカーのテストドライバーだ!?


テスト検査は実際のテストカメラなどで検証、つまり実車に乗っての試験を必ず行います。

開発テストのメンバーに選ばれれば、時には一般道の走行など、業務を通じて貴重な楽しいテスト体験ができる場合があります!


とは言え、

走行中の車内ではモニターとPCをずっとにらめっこ。

道中でバグなどを見つけた場合、社屋に戻らず車内その場でソースコードを書き直しビルド、ソフト入れ替え。

テスト再開。

なんてこともやったりします。

視力は大切にしたいですね。笑


もちろん楽しいばかりではなく、

一方で「お客様の命と安全を守る」システムである以上、そのテスト検査は非常に厳密です。

レビューはもちろん大規模なコード解析ツールなども用いて常に厳しくチェックを行い、製品品質の向上を支援しています。



■業務支援例(2) AI識別


関連技術:Python, 機械学習やディープラーニング など


AI識別、ディープラーニング。

この文章を読んでいる方ならきっと耳にしているワードだと思います。


先に書きました画像認識・識別は人の手によるプログラミング、コーディングでした。

しかしADASも今や自動運転のレベルまで考えられています。

これを実現するためには:

画像に映るこの物体は、車?人?何かの障害物?

路肩はどこまであるの?

この道路のペイント線は、車線で合ってるの?

今見えた黄色い光は、信号?車のウィンカー?工事現場の注意看板?

などなど…


人が目で見て、脳で判断するのは簡単でも、

これを機械を用いて人の手によるプログラミングで全て判定していくには

判断する入力のデータ量が余りにも多すぎて、限界があります。


そこで、大量の入力データを扱える機械学習・ディープラーニング、

いわゆるAIで学習、桁違いに精度の良い識別をさせることにより

正しく安全な車の制御、最終的には自動運転まで繋がっていきます。


使用言語は主にPythonが用いられます。

Python言語には機械学習・ディープラーニングに用いることのできるライブラリ・フレームワークが数多く揃っているのがその理由です。

プログラミングの他にも、大手メーカーによるGUIベースのニューラルネットワーク開発ツールなどを用いることもあります。

この分野はとても新しく、誰もがその場で学習しながら開発支援を行う、とてもチャレンジングな作業です。


AIによる開発は花形!


車載の分野に限らず、AIによる開発は盛んに行われており、その案件や求人も多いです。

大手の○○会社がAI開発を製品に取りいれるべく、東京に新たにオフィスを新設

なんてニュースなどを耳にしたこともあるかと思います。


もしかしたら新聞やメディアに自分の携わっているチームの記事が

掲載されることがあるかも知れません。夢がありますよね!


余談ですが細Pの母校、大学は情報学の専攻でしたが

つい最近になって、情報学「科」から「部」に格上げされ、

データサイエンスプログラムだけで1つの科が新設されたそうです。

これも時代の流れですね。


■業務支援例(3) データ管理


関連技術:Web(JScript, HTML/CSS, 各種Webフレームワーク),

データベース(PostgreSQL, Oracle), ExcelVBA など


データの管理はとても重要な支援作業です。

Excel等のワークシート表などで管理するシーンも多いですが、データが多くなればとても足りません!

ので、データベースの構築や、これを操作・抽出するツール開発を行うことでこれを支援します。

GUIはWebベースでの開発が多く、フロントエンドではJScript, HTML/CSSなどを、バックエンドではそのWebフレームワークに沿った言語でコーディングします。

例えば、Django WebフレームワークならここでもPython言語を用います。


特にAI識別には、そのインプットにとても多くのデータを必要とします。

例えば、AI識別のアルゴリズムが決定したら、次はそのインプットのために必要な1億枚の画像を出力しデータ管理するスクリプトを作成し、運用する作業が割り当てられるかも知れません!


データ単位いくつ言えるかな?


業務で扱うデータは本当に膨大です。

データサイズの単位としては、ご存知かとは思いますが、


B(バイト), KB, MB, GB, TB…


TB(テラバイト)までは、市販されているデータストレージ(ハードディスク)で見かける単位なので

ここまでは一般的だと思います。


その次の単位って、すぐ言えますか?

案外難しいんじゃないかと思います。


ちなみに正解は、

PB(ペタバイト)

です。


中々耳慣れない単位ですよね。

業務では、この単位のデータストレージが普通に出てきて

開発規模の大きさを実感しました。



■終わりに


細Pは元々車が好きで、

子どもの頃はF1レーサーに憧れ、

運転免許を取ってからは色々なスポーツカーに乗り、時にはサーキットを走っていました。


だからIT屋をしながら、車の開発に携わる

このお仕事の話が来た時は、天職か!?

と内心思ったものです。


携わって最初の頃などは、

現場の敷地内を歩いていて、そばで走ってくる開発車両とすれ違ったりするだけでワクワクしてました。

最近は慣れちゃいましたが…笑


以上、今回は群馬事業所で常駐案件として参加している、自動車の運転支援システム開発について紹介しました。

なんとなくでも実際にどんなことしているのかイメージしてもらえたら嬉しいです。


最後まで読んでいただいてありがとうございました。


GITの応募ページを確認してみる!