自動車業界のデジタル変革:eKuiperとSDVの連携
目次
現代の急激な技術進歩とともに、自動車業界は新たな変革の機運が広がっています。その最前線にあるのが Software-Defined Vehicle (SDV)、つまりソフトウェア定義車です。これらのSDVは、これまでにない接続性、自動化、データ駆動型の洞察を提供する一方で、大量のデータを生み出すため、その効率的でリアルタイムな処理が急務となっています。
このブログでは、SDVデータのストリーム処理について深く掘り下げ、それがソフトウェア定義車両内での安全性の向上、パフォーマンスの最適化、ユーザー体験の革新にどのように貢献するかを説明します。
ソフトウェア定義車とは何か?
ソフトウェア定義車両は、高度な接続性、自動化、知能を持つ車両です。他の車両、インフラ、クラウドサービス、モバイルデバイスと通信し、変化する条件やユーザーの好みに適応することができます。SDVは、その振る舞い、パフォーマンス、外観を変更することができるソフトウェアアプリケーションによって遠隔操作または更新することもできます。
例えば、SDVは次のことができる:
- ドライバーの気分や交通状況に応じて、エコ、スポーティ、自律走行などの走行モードを切り替えられる。
- 同乗者の好みや天候に応じて、車内の照明や音楽、温度を変えることができる。
- メーカーまたはサードパーティプロバイダーからルールのアップデートを受け取り、機能やセキュリティを向上させる。
SDVデータの可能性を引き出すストリーム処理
SDVは、センサーやカメラ、GPS、レーダー、ライダーなど、様々なソースから膨大な量のデータを生成します。このデータは複雑で多様なものであり、SDVとユーザーに有用な洞察と行動を提供するためには、リアルタイム、あるいはほぼリアルタイムで処理する必要があります。
ここで登場するのがストリーム処理です。この技術は、データストリームを効率的に処理することを可能にします。データベースやファイルシステムに保存することなく、データが到着した瞬間に即座に処理するというパラダイムに従います。ストリーム処理は、フィルタリング、集約、変換、エンリッチメント、分析など、データストリームに対する様々な操作を可能にします。
さらに、ストリーム処理は複数のソースからのデータの統合を容易にし、データの統一されたビューをもたらす。また、データ量と速度の増加に対応するため、水平方向に拡張する機能も備えている。
ストリーム処理によって、我々はSDVデータから以下のような恩恵を受けることができる:
- 安全性とパフォーマンスの向上:ストリーム処理によってSDVの異常や故障を検出し、ドライバーやサービスプロバイダに警告することができます。また、データ分析に基づいてパラメータを調整することで、SDVのパフォーマンスを最適化することもできます。
- ユーザーエクスペリエンスの向上:ストリーム処理は、ドライバーや同乗者の好みや行動に基づいて、パーソナライズされた推奨や提案を提供することができます。また、エンターテイメント、ナビゲーション、ソーシャルネットワーキングなど、SDVの新しい機能やサービスを実現することもできます。
- 効率性と収益性の向上:ストリーム処理は、リソースの利用やエネルギー消費を最適化することで、SDVの運用コストやメンテナンスを削減することができる。さらに、ストリーム処理は、データインサイトから派生する付加価値サービスや製品を通じて、サービスプロバイダーに新たな収益ストリームを生み出すことができる。
eKuiper:SDVデータに最適な強力なストリーム処理エンジン
LF Edge eKuiperは、IoTエッジ向けの軽量データストリーム処理エンジンで、そのコア機能はわずか10MBのフットプリントを持ち、簡単に車載MPUに導入可能です。このエンジンを用いて、ユーザーはSDVデータのストリーム処理を実行できます。
eKuiperのブログ記事「Bridging Demanded Signals From CAN Bus to MQTT by eKuiper」によれば、eKuiperはCANバスデータの接続と解析が可能であることが示されています。また、MQTT、HTTP、SQLデータベース、ファイルなど、様々なデータソースをサポートしています。NanoMQと組み合わせることで、SOA(SomeIP、DDS)のデータをMQTTにブリッジ接続することもできます。これらのデータソースから得たデータを計算し、変換することで、洞察やトリガーアクションを生成するストリーム処理機能を持っています。
eKuiperはSQLを活用して、"ルール"と呼ばれるストリーミングパイプラインを構築します。ルールはホットデプロイとホットアップデートが可能で、複数のルールを柔軟に連携させ、複雑なシナリオのルールを作成することができます。1つのルールによって、eKuiperは以下のことが可能です:
- 信号レベルで必要なデータを柔軟に選択。さまざまな条件に基づいてデータを抽出することができます。例えば、要求された信号のみ、変更された信号のみ、特定の条件を満たす信号のみなど。
- 車両側のリアルタイムで柔軟なルールエンジン。これは、いくつかの条件を満たすと自動的にアクションをトリガーすることができます。例えば、速度が70を超えたらすべての窓を閉める。
- 俊敏なスマート分析。クラウドに接続しなくても、ローカルのeKuiperを使えば、コーディングなしでデータとAIモデル(現在はTF Lite)を自動的に配線できる。また、車両上の学習モデルにデータを供給することもできる。
- エッジコンピューティングにより、転送帯域幅とクラウド側のコンピューティングプレッシャーを軽減します。eKuiperは、時間ウィンドウに基づいてデータを要約し、転送データを大幅に削減しながらも、データの傾向を維持することができます。また、ダウンサンプルや圧縮データにも対応しています。
- 異種データの集約。様々なプロトコル(TCP、UDP、HTTP、MQTTなど)や様々なフォーマット(CAN、JSON、CSVなど)のデータを解析し、柔軟なルールでマージします。
- メッセージのルーティング。eKuiperは、車両内の他のアプリケーションで使用するためのクラウドおよびローカルストレージへのデータ伝送に関するインテリジェントな決定を行うことができます。例えば、GDPRやホワイトリストに基づいてルーティングを決定します。
eKuiperでソフトウェア定義の車両シナリオを強化
上述のeKuiperの能力に基づいて、適用可能なSDVワークフローを構築し、それを実装することで潜在的なシナリオを促進することができる。
セキュリティ問題の検出
車両からのリアルタイムデータに基づいて、eKuiperはセキュリティ問題を検出し、ドライバーに警告するために使用することができます。一方では、SQLを使用して、セキュリティ問題を検出するためのルールを定義することができます。一方、ユーザーはセキュリティ問題を検出するためにAIモデルを学習させることができます。TensorFlow Liteモデルの場合、ユーザーはモデルをクルマにアップロードするだけで、eKuiperが自動的にデータを読み込み、モデルにフィードする。その結果は、アクションのトリガーやドライバーへの警告に利用できる。
次の例では、CANバスからのデータを使用して、頻繁なブレーキ動作を検出し、ドライバーに警告します。
SELECT CASE WHEN count(*) > 5 THEN 1 ELSE 0 END as alert
FROM CANStream
WHERE SENSOR_TYPE_BRAKE_DEPTH>15
Group by SlidingWindow(ss, 10)
過去10秒間をチェックし、ブレーキ深度が15より大きいブレーキイベントが5回以上あるかどうかを確認します。もしそうであれば、警告を発します。
ユーザー・エクスペリエンスを向上させる自動化
解析された有意義なデータを使って、eKuiperは、ユーザーエクスペリエンスを向上させるためのアクションをトリガするために使用することができます。例えば、車の窓が開いているときに、速度がしきい値よりも速い時間がある場合、窓をオフにすることができます。車両が渋滞している場合、eKuiperは自動的にエアコンをオンにすることができます。
次の例では、CANバスのデータを使用して、事前に訓練されたAIモデルに基づいて、ドライバーに最適な運転モードを自動的に提案します。事前に収集したCANバスのデータに基づいて、運転モードを検出するモデルを訓練したとします。
- REST APIでモデルを車両にアップロードする。
- モデルを読み込み、ストリームを推論し、MQTTでアラートをトリガーするルールを定義します。
tflite
関数は、TensorFlow liteモデルを推論するためにeKuiperが提供するプラグイン関数です。最初のパラメータは動的なモデル名で、次のパラメータは入力データです。結果はモデルの出力です。
SELECT tflite("trained_mode",signal1, signal2) as result FROM CANStream
派生指標の計算と視覚化
収集されたデータには通常、基本的な生データしか含まれていない。データから洞察を得るには、アルゴリズムを使って計算する必要がある。例えば、特定の時間ウィンドウ内の平均速度を計算する。これらの計算結果は、車のインターフェイスに関連情報を表示するために利用することができる。
次の例では、平均減速度、ブレーキ距離など、各ブレーキのパターンを記録し、計算しています。この分析により、ユーザーのブレーキ癖を理解し、その情報に基づいて最適化することができます。結果は車のインターフェイスに表示することができ、ドライバーにブレーキパターンに関する洞察を提供します。
データを2つのルールに分割する。最初のルールはブレーキを検出し、計算する信号を選択する。2番目のルールはメトリクスをインクリメンタルに計算する。これらはメモリ内のシンク/ソースで接続され、パイプラインのように動作する。
ルール1:ブレーキを検出し、計算開始シグナルを定義し、シグナルを選択し、2番目のルールに送る。ここでは、このアルゴリズムをSQLで定義する:ブレーキがオンで速度が10より大きいときのみ計算を開始する。ブレーキがオフのとき、または速度が3未満のときは計算を停止する。
SELECT CASE WHEN brake = 1 AND speed > 10 THEN 1 ELSE 0 END AS brake_start,
CASE WHEN brake = 0 OR speed < 3 THEN 1 ELSE 0 END AS brake_end,
speed, distance, timestamp
FROM CAN_STREAM
WHERE brake_start = 1 OR (brake_end = 1 AND lag(brake_end) = 0)
このルールは、ブレーキが始動したとき、またはブレーキが停止したときに、2番目のルールにデータを送信する。出力データは次のようになる:
{
"brake_start": 1,
"brake_end": 0,
"speed": 20,
"distance": 100,
"timestamp": 1622111111
}
{
"brake_start": 1,
"brake_end": 0,
"speed": 18,
"distance": 120,
"timestamp": 1622111311
}
...
{
"brake_start": 0,
"brake_end": 1,
"speed": 0,
"distance": 200,
"timestamp": 1622112511
}
ルール2:平均減速度を計算する: a=△v/△t
を段階的に計算し、ブレーキが終了したら結果を送信する。
SELECT lag(speed) OVER (WHEN had_changed(brake_end)) as start_speed, speed as end_speed, (start_speed - end_speed) / (timestamp - lag(timestamp) OVER (WHEN had_changed(brake_end)) ) AS deceleration
FROM BRAKE_MEM_STREAM
WHERE brake_end = 1
このうち、 lag(speed) OVER (WHEN had_changed(brake_end))
は、brake_endが最後に1から0に変化したときの速度値、つまりブレーキがかかったときの速度を意味する。時間差の計算には同じラグ関数を使う。結果は以下のようになる。
{
"start_speed": 20,
"end_speed": 0,
"deceleration": 0.5
}
まとめ
ソフトウェア定義車両(SDV)は、大量のデータを生成し、これらのデータから洞察を得ることで、安全性、パフォーマンス、ユーザーエクスペリエンスを向上させることができます。ストリーム処理は、このようなデータをリアルタイムで効果的に処理するための重要な技術です。eKuiperは、SDVデータのストリーム処理を行うための強力なエンジンであり、多くの機能を提供しています。これにより、SDVの潜在的なシナリオを強化し、ユーザーエクスペリエンスを向上させることができます。