차량 신호 카탈로그

측정항목 구성 생성기 (MCG)는 신호 이름을 확인하고, 표현식에서 유형 검사를 실행하고, 출력 유형을 추론하여 측정항목 구성을 검증합니다. MCG는 이러한 작업을 실행하기 위해 차량 신호의 프로토콜 버퍼 (protobuf) 메시지 정의에 액세스해야 합니다.

SDV에서 차량 신호와 서비스는 차량 서비스 인터페이스 정의 언어 (VSIDL)를 사용하여 정의됩니다. VSIDL은 프로토콜 버퍼 파일을 사용하여 메시지를 지정하며 이러한 프로토콜 버퍼 파일은 신호 카탈로그의 기반을 형성합니다.

MCG에서 신호 정의를 사용할 수 있도록 하려면 이러한 VSIDL protobuf 파일을 protobuf FileDescriptorSet로 패키징하고 MCG 서비스에 업로드해야 합니다. MCG는 업로드되고 버전이 지정된 이러한 정의 세트에 차량 신호 카탈로그라는 용어를 사용합니다 (기본적으로 차량 신호 카탈로그는 VSIDL 카탈로그에 있는 프로토 메시지 정의의 컴파일되고 업로드된 형태임).

차량 신호 카탈로그란 무엇인가요?

차량 신호 카탈로그는 MCG에 검증을 위한 신호 정의를 제공하며 이는 protobuf FileDescriptorSet로 패키징됩니다.

MCG에서 카탈로그는 업로드 중에 할당하는 버전 문자열로 식별되므로 여러 개의 개별 신호 정의 집합을 관리할 수 있습니다. 예를 들어 소프트웨어 출시(v1.0, v1.1, v2.0) 또는 다양한 차량 모델이나 하드웨어 구성 (suv-my2025, sedan-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/)에서는 FileDescriptorSet가 JSON 페이로드에서 base64로 인코딩된 문자열로 전달되어야 합니다.

API 사용을 위해 vehicle_signals.pb를 인코딩하려면 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/"

버전 나열 및 삭제

사용 가능한 모든 카탈로그 버전을 나열하거나 특정 버전을 삭제할 수 있습니다.

  • 버전 나열: 업로드된 모든 카탈로그 버전의 식별자 목록을 보려면 GET 요청을 /api/v1/vs/로 전송합니다. GET /api/v1/vs/를 참고하세요.

  • 버전 삭제: 카탈로그를 삭제하려면 /api/v1/vs/{version}DELETE 요청을 보냅니다. 여기서 {version}는 카탈로그가 업로드될 때 제공된 식별자입니다 (예: 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 카탈로그의 신호 정의를 사용하여 유효성 검사와 유형 추론을 실행합니다.