【TURING】3か月でカーハッカーになれた話
1. はじめに
こんにちは。TURING株式会社(以下、TURING)で長期インターンをしている、東京大学工学部4年の中谷と早稲田大学先進理工学部3年の天野です。
TURINGは、自動車メーカーとしてTESLA超えを掲げる、完全自動運転EV自動車を開発するベンチャー企業で、自動運転レベル2相当の改造車の販売を今年の目標に定めています。
6月から8月にかけて、正社員の方々の力を借りながらインターン生を中心にLEXUS RXのCAN(Controller Area Network)をハッキングして、私達は見事「カーハッカー」になりました。
この記事では、TURINGが車メーカーとして、AI・自動運転開発だけでなく、自動車そのものの車両開発をどのように行っているかを、CAN解析という点から紹介します。
図1 トルクセンサにつながる運転席足元の配線を、満面の笑みで外しにかかる弊社インターン
2. なぜCANハッキングなのか
LEXUS RX(2019年)において、CANは速度やトルクなどの車両制御量の情報から、エアコン温度やコンビネーションメータ表示といったIVI(In-Vehicle infotainment)まで、車両通信に幅広く使われています。CANをハッキングする動機として以下3点がありました。
- 自動運転システムと組み合わせる際に車載通信の知識が必要。
- 将来的に制御系・IVI系のECUをコンパクトまとめ、TURINGで独自開発したい。
- 改造車を作るに当たり、保安基準適合に関する知見を得たい。
そのために、ブレーキ、アクセル、ステアリング、コンビネーションメータ、エアコンを、CANおよびその他通信線を通してハッキングしました。
3. 止まる・走る・曲がるをハッキング(2/3か月)
前提知識として簡単にこの章で使うCANの知識を確認します。CAN(Controller Area Network)とは、自動車向けに開発されたシリアル通信プロトコルのことで、2本の通信線に発生する電圧差によってデータを送信するので外部からのノイズに強いという特徴があります。
また、2本の通信線の電圧差によって制御量を決めることは、じか線(1つの信号のみを送信する導電ケーブル)でも行われており、このじか線に介入することでブレーキ・アクセル・ステアリングをハッキングします。
このCANを含む車載通信の原理を理解するといよいよ、カーハッキング開始です!
3.1. ブレーキとアクセルのハッキング
最初に、上質で美しいLEXUS RXの内装を気持ちよく剥がします。その後、ブレーキストロークとアクセルストロークそれぞれのセンサにつながる配線を見つけて分岐させ、2本のじか線の電圧とそれらの電圧差を測定します。
次に、それらをプログラムで指定した電圧と電圧差を、ブレーキストロークの電圧が入力される装置であるECU(Electronic Control Unit)に流すと、ブレーキペダルを踏まなくてもこのようにブレーキをかけることができました。
↓ プログラム上でブレーキを踏んだことにしている車を筆者が力強く押している。
アクセルの場合も同様に、ブレーキストロークの電圧が入力されるECUにプログラムで指定した電圧と電圧差を入力すると、電圧差に応じた回転速度でタイヤを回転させることができました。
3.2. ステアリングハッキングのハッキング
ステアリングについてはマイコンによる制御中でも人間がステアリングを乗っ取れるようにしました。これは万が一自動運転中でも人間が危険と判断した際には人間が車を制御できるようにするためです。
まずは、ブレーキと同様に、トルクセンサにつながるじか線を分岐させ、電圧と2本のじか線の電圧差を測定します。
次に、人間とプログラムによる制御量が加算されるような加算回路が乗った基盤を作成します。その基盤でマイコンとDAコンバータで作った電圧と人間の入力を変換した電圧加算し、それをトルクセンサに入力することで、トルク値を偽装してハンドルを操ります。(図2)
図2 ステアリングハッキングの流れ
結果としてこのようにマイコンによってステアリングを操作しさらに、人間の操作介入も可能なハッキングが可能になりました。(図3)
図3 プログラムでステアリングを左に回す一方で、人間(筆者)の力で右にも回せている
4. コンビネーションメータ・エアコンをハッキング(7/3か月)
前提知識として前の章と同様に、まずは、コンビネーションメータASSY(スピードメータのこと。以下コンビネーションメータ)とエアコン(エアコンディショナアンプリファイアASSY)の解析で使うCANに関する知識を確認します。コンビネーションメータやエアコンは、主にCANを介して車内の特定のIDを持つECU(デバイス)と情報のやり取りをしています。
コンビネーションメータやエアコンをエミュレートしカスタマイズしていくには、まず、機能ごとにIDとそのデータを解析して特定し(4.1)、それを再現できる(4.2)必要があります。
4.1 機能ごとのIDとそのデータ部の特定
まず、私たちは次の3つの方法でIDの特定をしました。
4.1.1 車を運転し、データの移り変わりからIDを特定する方法
これは最も原始的な方法と言ってもいいでしょう。実際に車を運転すれば、例えばエンジンやステアリングといった、走行に関連するECUの情報は如実に変化します。
そこで、OBD(オンボードダイアグノーシス)など別の方法で取得したデータと照合すれば、記録したCANのデータがどの項目に対応するのかを知ることができます。この方法は最もわかりやすく取り組みやすいですが、解析できる範囲には限界がありました。
4.1.2 調査対象のECUのみをバスから切り離す方法
この方法は、調査対象のECUのみをCANバスから物理的に切り離し、CANバス(複数のCANのデータが流れている線)に流れるIDのECU切り離し前後の差分から、調査対象のECUあるいはそれに対応する機能に対応するIDを特定するものです。(図4)
この方法は原理が簡単だったので全体像を俯瞰するのに役立ちました。
図4 ECUを物理的にCANバスから切り離す
4.1.3 末端装置の手前でCANに介入し、任意のIDを制限することで特定する方法
この方法は、CAN解析装置を調査対象のECUとCANバスとの間に介入させ、二分探索の要領でブロックするIDを決め、そのIDに対応するCANを電気的にECUとCANバス間に流さないことで、コンビネーションメータやエアコンの挙動の変化を確認し、ブロックしたIDがどの機能に対応するかを特定する方法です。
以上3つの方法でIDを特定した後、コンビネーションメータやエアコンの特定の機能を担うデータ部の特定に移りました。
4.1.4 機能ごとのデータ部特定
ECUを切り離したり、車を運転したりエアコンを操作することにより、CANのデータ部が変化します。このデータ部をバイトごとに可視化することで、コンビネーションメータの表示やエアコンの操作をデータ部のどのバイト部分が担っているかを特定します。(図6)
その次に、可視化したバイト部でECUの状態を表す値を特定したり、二分探索の要領で機能のトリガーとなっているビットを特定したりしました。
図5 CANのデータ部のbyteごとの可視化グラフ
4.2 PC入力による機能の再現
4.1の方法でIDとデータ部の特定を終えると、それを自らPC入力で再現し遊びたくなるというのがエンジニアの性です。
CANはIDとデータ部を特定しそれをCANバスに流したからといって、機能が再現されるわけではなく、コンビネーションメータやエアコンとそれらに命令をするECUとのタイミングを合わせる必要があります。4.1であらかじめ記録しておいたBUS time(タイミング)を参考にデータを流したり、CANから取得したデータを編集して再びCANに流すことにより、以下のような操作を行えるようになりました。(図6, 7)
図6 R(リバース)で爆速(180km/h)表示
図7 PCのCLIからエアコンを操作する
この他にも特定のウォーニングランプの点灯や走行に必要なインジケーターランプの表示を自由に行えるようになりました。
5. まとめと課題・今後の展望について
5.1 まとめ
上記の方法によってLEXUS RXのCAN(およびじか線)解析を網羅的に行い、自動車の通信システムに関する知見を深め、自動車の基本機能である「止まる・走る・曲がる」と、ユーザーエクスペリエンスに直結する「室内表示・空調」に関して、ソフトウェアおよび電気的にハッキングすることができました。
また、今回のCAN解析は、改造車を販売するにあたっての保安基準やその他法律に関する知見を深めることにもつながり、関係各所との意見交換の材料にもなりました。
5.2 課題と今後の展望
課題として、モータの方式やドライバ・インバーターの作りもわからなかったため、ハッキングの深度が浅く、ステアリングの回転速度やトルクを制御できませんでした。そのため、現在はADASの乗っ取りによる制御の完成度を高めることに注力しており、その成果として、9月下旬から10月上旬にかけて北海道を自動運転で1周しました。
しかし、今回のCAN解析による知見は、将来的にTURINGが独自の制御ECUや新たなIVIシステムを設計する際に必要不可欠な知識や経験であり、自動運転の機能を車に組み込むだけにとどまらず、自動車として、また、自動運転車として洗練された車を作る一助となると考えています。
6. おわりに
最後の章まで読んでいただきありがとうございます。TURINGの「車を本気で作るぞ!」という熱意が少しでも届いたなら幸いです。
完全自動運転車の開発には、AI、ソフトウェア、ハードウェア、電気電子、制御、広報、法律、ビジネス、コミュニケーション、力、その他さまざまな知識や経験が必要とされますし、学びながら試しながら作っていくことが重要です。
TURINGは一からいい車(ユーザー目線でも開発者目線でも)を本気で作りたい仲間、好奇心がありワクワクする開発をチームでしたい仲間、完全自動運転の実現に一役買いたいという仲間、今までこれを極めてきたけど他の分野にも手を付けてみたいというチャレンジングな仲間を募集しています。
とまあ少し熱く語ってしまいましたが、TURINGに興味を抱いていただけた方の気軽なご連絡、見学、体験入社、インターン参加をお待ちしております。一緒にいい車を作りましょう!
詳しくは下記の採用ページをご覧ください。
→@issei_y, @aoshun7
※ 今回の検証や走行は私有地内で行っており、実験後の車両は車検に適合する状態に戻してあります。ECUや装備の変更・改造は保安基準に不適合となる恐れがあるため、このような実験を実施する際は専門家の協力のもと行う必要があります。TURINGでも、提携認証工場と外部の専門家の協力のもとで実験を行っております。
Discussion