2023年10月20日金曜日

Eclipse Kuksaを調べてみた

Eclipse SDV Project調査です。今回はEclipse KUKSA。

https://eclipse-kuksa.github.io/kuksa-website/

語源ですが、
ククサ:北欧の遊牧民族の使っているマグカップ
とのことです。
この語源と実際の機能にどのように結びついているかは不明。

以下調べた内容です。

  • Eclipse Kuksaについて
  • 簡易動作確認

ちなみにメインのメンテナはBoschの方です。

Eclipse Kuksaについて

KUKSAの主な機能

  • 車両データとインターフェースをVehicleSignalsSpecification(VSS)にもとづいて共通フォーマットに抽象化
  • さまざまな車両インタフェースを基本的なインタフェースに適合することを重点としている
  • オンボード、オフボードの新しい技術を車両アーキテクチャに追加可能
  • アプリケーションやToolChainは対象外で、それについてはEclipse Velocitasを参照

KUKSA.valは以下のコンポーネントがある

VSSを使ったブローカ、サーバとClientのサンプルが提供されている。

Componentescription
KUKSA DatabrokergRPC + Rustで実装されたVSSのブローカー。認証アクセスも提供
KUKSA Serverwesocket + C++ で実装されたVSSのデータサーバ。認証アクセスも提供で、機能がリッチ。
KUKSA PythonClientとSDKコマンドラインツール。VSSBroker,サーバにアクセスできデータ取得、更新が可能
KUKSA GO Client ExampleGoで書かれたBroker, ServerにアクセスできるClient
Example Applications上記を使ったサンプル
Feeders and ProvidersBroker, Serverを使ったデータ交換の複数Feeder、Provider

COVESA_VSSについて

VSS(VehiclesSignalSpecification)はCOVESAで定義されている車両信号のカタログ定義

  • 車両信号に対してdomain taxonomyを導入
  • VSS標準カタログを定義し、ベンダー依存しないように定義する。ベンダー固有部はオーバーレイの拡張が可能

VSSの詳細については割愛

簡易動作確認

KUKSA.valのBrokreを使って動作確認をする。

  • 対話ツールを使った動作確認
  • node-redを使ったサンプル確認

対話ツールを使った動作確認

  1. Brokerを立ち上げる
  2. clientを使って
  • データの取得
  • データの設定
  • 対象データのSubscribe
    今回はBrokerを使ったサンプル

https://github.com/eclipse/kuksa.val

podman run -it --rm --net=host ghcr.io/eclipse/kuksa.val/databroker:master --insecure

データ取得、設定

> podman run -it --rm --net=host ghcr.io/eclipse/kuksa.val/kuksa-client:master 
Test Client> getMetaData   Vehicle.Speed 
{
    "path": "Vehicle.Speed",
    "metadata": {
        "data_type": "FLOAT",
        "entry_type": "SENSOR",
        "description": "Vehicle speed"
    }
}
Test Client> getValue   Vehicle.Speed 
{
    "path": "Vehicle.Speed"
}

Test Client> setValue   Vehicle.Speed 5.1
OK

Test Client> getValue   Vehicle.Speed 
{
    "path": "Vehicle.Speed",
    "value": {
        "value": 5.099999904632568,
        "timestamp": "2023-10-01T15:02:36.725825+00:00"
    }
}

浮動小数点の誤差があるのはなぜかは不明。

subscribe

Test Client> subscribe Vehicle.Speed
{
    "subscriptionId": "a126e311-02a0-44f9-a49e-0687e5cf2afe"
}

[
  {
    "entry": {
      "path": "Vehicle.Speed",
      "value": {
        "value": 5.199999809265137,
        "timestamp": "2023-10-01T15:06:55.475883+00:00"
      }
    },
    "fields": [
      "VALUE"
    ]
  } 
]

別ターミナルで

Test Client> setValue Vehicle.Speed 5.2
OK

node-redを使ったサンプル確認

https://github.com/eclipse/kuksa.val/tree/master/kuksa_apps/node-red

> git clone https://github.com/eclipse/kuksa.val
> cd kuksa.val/kuksa_apps/node-red
> docker-compose up -d
>
  • http://<IPアドレス>:1880/ ブラウザを開く
    • 以下の拡張をインストール
    • node-red-dashboard
    • node-red-contrib-web-worldmap
  • http://<IPアドレス>:1880/ui ブラウザを開く
> cd ../../
> docker build -f kuksa-client/Dockerfile -t kuksa-client:latest .
> docker run --rm -it --net=host kuksa-client:latest
> connect ws://127.0.0.1:8090
> authorize -f kuksa_certificates/jwt/super-admin.json.token
> setValue Vehicle.Speed 10

以下のリンクの画像のように更新時にメータが反映される。
https://github.com/eclipse/kuksa.val/blob/master/kuksa_apps/node-red/node-red-screenshot.png


reference

所感

明確な用途は書いていないが、KUKSA.valでデータリポジトリを構築して、クラウドからデータ収集していくのかなと思う。
サーバー側は「gRPC + Rust」 、 「WebSocket+C++」と選択肢があることはよい。gRPC+Rustは今の流行りか。
VSSのデータ構造をみると、実際のECUから直接KUKSA Broker/Serverに登録はできなそう。
なのでCANデータをgRPC/Websocket通信ができるECUに転送し、登録するのかなと思う。

用語集

用語説明
GENIVIIVIシステム向けにオープンなインフォテインメントプラットフォームの幅広い採用を目指し発足された非営利団体
COVESA(The Connected Vehicle Systems Alliance)GENIVIの名称変更し、狙いをオンエッジ・インクラウドサービス、インターフェース、データ交換を含むコネクテッド車両システムへと進化したもの