Generator konfiguracji danych (MCG) weryfikuje konfiguracje danych, sprawdzając nazwy sygnałów, przeprowadzając sprawdzanie typów w wyrażeniach i określając typy danych wyjściowych. Aby wykonywać te zadania, MCG musi mieć dostęp do definicji wiadomości bufora protokołu (protobuf) dla sygnałów pojazdu.
W SDV sygnały i usługi pojazdu są definiowane za pomocą języka definicji interfejsu usługi pojazdu (VSIDL). VSIDL używa plików protobuf do określania wiadomości, a te pliki protobuf stanowią podstawę katalogu sygnałów.
Aby udostępnić definicje sygnałów usłudze MCG, musisz spakować te pliki VSIDL protobuf w plik protobuf FileDescriptorSet i przesłać go do usługi MCG. MCG używa terminu Katalog sygnałów pojazdu w odniesieniu do tych przesłanych i wersjonowanych zestawów definicji (co w zasadzie oznacza, że Katalog sygnałów pojazdu to skompilowana, przesłana forma definicji wiadomości proto w katalogu VSIDL).
Czym jest katalog sygnałów pojazdu?
Katalog sygnałów pojazdu zawiera definicje sygnałów do weryfikacji przez MCG, spakowane jako protobuf FileDescriptorSet.
W MCG katalogi są identyfikowane za pomocą ciągu znaków wersji, który przypisujesz podczas przesyłania. Umożliwia to zarządzanie wieloma różnymi zbiorami definicji sygnałów. Możesz na przykład utrzymywać różne wersje katalogu dla wydań oprogramowania (v1.0, v1.1, v2.0) lub dla różnych modeli pojazdów lub konfiguracji sprzętu (suv-my2025, sedan-my2025). Każda konfiguracja danych wykorzystuje pole vs_version do odwoływania się do konkretnego katalogu, który określa sygnały dostępne jako źródła danych i zawiera definicje sygnałów do wnioskowania o typie i weryfikacji.
Tworzenie instancji FileDescriptorSet
Zgodnie z opisem w artykule Definiowanie wiadomości i usług RPC sygnały pojazdu są definiowane jako wiadomości protobuf w plikach protobuf. Jeśli uczestniczysz w projekcie SDV, użyj plików protobuf z katalogu VSIDL projektu, aby utworzyć instancję FileDescriptorSet.
Aby utworzyć katalog dla MCG, połącz pliki protobuf w FileDescriptorSetplik binarnyprotoc za pomocą protoc. Jeśli wszystkie pliki protobuf znajdują się w jednym folderze, uruchom to polecenie, aby wygenerować plik 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
Przesyłanie katalogów i zarządzanie nimi
Przesłanie zestawu definicji sygnałów jako katalogu umożliwia odwoływanie się do niego w żądaniach konfiguracji danych według nazwy wersji.
Dodawanie lub aktualizowanie wersji katalogu
Po wygenerowaniu vehicle_signals.pbpliku katalogu możesz go przesłać i nim zarządzać za pomocą punktów końcowych interfejsu MCG API w sekcji /api/v1/vs/. Punkt końcowy do dodawania lub aktualizowania katalogu, POST /api/v1/vs/, wymaga przekazania parametru FileDescriptorSet jako ciągu znaków zakodowanego w formacie Base64 w ładunku JSON.
Aby zakodować znak vehicle_signals.pb do użycia w interfejsie API, użyj polecenia base64. Flaga -w 0
wyłącza zawijanie wierszy, dzięki czemu zakodowany ciąg znaków pojawia się w jednym wierszu:
VEHICLE_SIGNALS_BASE64=$(base64 -w 0 vehicle_signals.pb)
Aby przesłać plik vehicle_signals.pb jako nową wersję (np. v1.0) lub zaktualizować istniejącą wersję, wyślij żądanie POST z zakodowaną w formacie base64 zawartością do punktu końcowego /api/v1/vs/ z unikalną nazwą wersji.
Treść żądania musi być obiektem JSON zawierającym ciąg znaków version i ciąg znaków vehicle_signals zakodowany w formacie Base64:
{
"version": "v1.0",
"vehicle_signals": "Q2lSb1pYB3jCRkRt..."
}
Poniższy przykład pokazuje, jak przesłać plik vehicle_signals.pb jako wersję v1.0 za pomocą curl. W przykładzie użyto polecenia printf do utworzenia ładunku JSON i przekazania go do polecenia curl, co pozwala uniknąć konieczności tworzenia pliku JSON zawierającego bardzo długi ciąg base64 w jednym wierszu:
# 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/"
Wyświetlanie listy wersji i usuwanie ich
Możesz wyświetlić listę wszystkich dostępnych wersji katalogu lub usunąć konkretną wersję:
Lista wersji: aby wyświetlić listę identyfikatorów wszystkich przesłanych wersji katalogu, wyślij
GETżądanie na adres/api/v1/vs/. Zobacz GET /api/v1/vs/.Usuwanie wersji: aby usunąć katalog, wyślij żądanie
DELETEna adres/api/v1/vs/{version}, gdzie{version}to identyfikator podany podczas przesyłania katalogu (np.v1.0). Zobacz DELETE /api/v1/vs/{version}.
Szczegółowe informacje o wszystkich punktach końcowych znajdziesz w dokumentacji API.
Używanie katalogu w konfiguracjach danych
Po przesłaniu odwołaj się do wersji katalogu w konfiguracjach danych za pomocą pola vs_version:
{ "vs_version": "v1.0", ... }
Gdy ten obiekt JSON zostanie wysłany do punktów końcowych /api/v1/generate_metrics_config lub /api/v1/validate_metrics_config, MCG użyje definicji sygnałów z katalogu v1.0 do przeprowadzenia weryfikacji i wnioskowania o typie.