車輛訊號目錄

指標設定產生器 (MCG) 會檢查信號名稱、對運算式執行型別檢查,以及推斷輸出型別,藉此驗證指標設定。MCG 必須存取車輛訊號的通訊協定緩衝區 (protobuf) 訊息定義,才能執行這些工作。

在 SDV 中,車輛訊號和服務是使用車輛服務介面定義語言 (VSIDL) 定義。VSIDL 會使用 protobuf 檔案指定訊息,而這些 protobuf 檔案會構成信號目錄的基礎。

如要讓 MCG 取得信號定義,您必須將這些 VSIDL protobuf 檔案封裝成 protobuf FileDescriptorSet,然後上傳至 MCG 服務。MCG 會使用「車輛訊號目錄」一詞,指稱這些上傳及版本化的定義集 (基本上,車輛訊號目錄就是 VSIDL 目錄中編譯及上傳的 proto 訊息定義)。

什麼是車輛訊號目錄?

車輛信號目錄會提供 MCG 驗證用的信號定義,並封裝為 protobuf FileDescriptorSet

在 MCG 中,目錄會以您在上傳時指派的版本字串識別,方便您管理多個不同的信號定義集。舉例來說,您可能會為軟體版本 (v1.0v1.1v2.0) 或不同車輛型號/硬體設定 (suv-my2025sedan-my2025) 維護不同的目錄版本。每個指標設定都會使用 vs_version 欄位參照特定目錄,該目錄會定義可做為資料來源的信號,並提供信號定義以供型別推斷和驗證。

建立 FileDescriptorSet 的執行個體

如「定義訊息和 RPC 服務」一文所述,車輛訊號是在 protobuf 檔案中定義為 protobuf 訊息。如果您是 SDV 專案的一員,請使用專案 VSIDL 目錄中的 protobuf 檔案,建立 FileDescriptorSet 的例項。

如要建立 MCG 的目錄,請使用 protoc 將 protobuf 檔案打包成 FileDescriptorSet 二進位檔案。

如果所有 Protobuf 檔案都位於同一個資料夾,請執行下列指令來產生 vehicle_signals.pb

protoc --include_imports --descriptor_set_out=vehicle_signals.pb <var label="path to folder with .proto files">path/to/your/protos</var>/*.proto

上傳及管理目錄

將信號定義集上傳為目錄後,您就能在指標設定要求中,依版本名稱參照該信號定義集。

新增或更新目錄版本

產生 vehicle_signals.pb 目錄檔案後,您可以使用 /api/v1/vs/ 下的 MCG API 端點上傳及管理檔案。新增或更新目錄的端點 POST /api/v1/vs/ 需要在 JSON 酬載中,以 base64 編碼字串的形式傳遞 FileDescriptorSet

如要編碼 vehicle_signals.pb 以供 API 使用,請使用 base64 指令。-w 0 標記會停用換行功能,因此編碼字串會顯示在同一行:

VEHICLE_SIGNALS_BASE64=$(base64 -w 0 vehicle_signals.pb)

如要上傳 vehicle_signals.pb 做為新版本 (例如 v1.0),或更新現有版本,請將採用 Base64 編碼的內容傳送至 /api/v1/vs/ 端點,並使用不重複的版本名稱發出 POST 要求。

要求主體必須是包含 version 字串和 base64 編碼 vehicle_signals 字串的 JSON 物件:

{
  "version": "v1.0",
  "vehicle_signals": "Q2lSb1pYB3jCRkRt..."
}

以下範例說明如何使用 curl,將 vehicle_signals.pb 上傳為版本 v1.0。這個範例使用 printf 建構 JSON 酬載,並將其管道化至 curl,避免建立包含極長單行 base64 字串的 JSON 檔案:

# 1. Encode the FileDescriptorSet to a Base64 string
VEHICLE_SIGNALS_BASE64=$(base64 -w 0 vehicle_signals.pb)

# 2. Define catalog version and build JSON payload
VERSION="<var label="catalog version">v1.0</var>"
JSON_PAYLOAD=$(jq -n --arg v "$VERSION" --arg d "$VEHICLE_SIGNALS_BASE64" \
  '{version: $v, vehicle_signals: $d}')

# 3. POST the data to the API endpoint
echo "$JSON_PAYLOAD" | curl -H "Content-Type: application/json" --data-binary @- "$SERVICE_URL/api/v1/vs/"

列出及刪除版本

您可以列出所有可用的目錄版本,或刪除特定版本:

  • 列出版本:如要查看所有已上傳目錄版本的 ID 清單,請將 GET 要求傳送至 /api/v1/vs/。請參閱 GET /api/v1/vs/。

  • 刪除版本:如要移除目錄,請將 DELETE 要求傳送至 /api/v1/vs/{version},其中 {version} 是上傳目錄時提供的 ID (例如 v1.0)。請參閱 DELETE /api/v1/vs/{version}。

如要瞭解所有端點的完整詳細資料,請參閱 API 參考資料。

在指標設定中使用目錄

上傳後,請使用 vs_version 欄位,在指標設定中參照目錄版本:

{ "vs_version": "v1.0", ... }

將這個 JSON 物件傳送至 /api/v1/generate_metrics_config/api/v1/validate_metrics_config 端點時,MCG 會使用 v1.0 目錄中的訊號定義執行驗證和型別推斷。