کاتالوگ‌های سیگنال خودرو

مولد پیکربندی معیارها (MCG) با بررسی نام سیگنال‌ها، انجام بررسی نوع عبارات و استنباط انواع خروجی، پیکربندی‌های معیارها را اعتبارسنجی می‌کند. MCG برای انجام این وظایف، نیاز به دسترسی به تعاریف پیام بافر پروتکل (protobuf) برای سیگنال‌های خودرو دارد.

در SDV، سیگنال‌ها و سرویس‌های خودرو با استفاده از زبان تعریف رابط سرویس خودرو ( VSIDL ) تعریف می‌شوند. VSIDL از فایل‌های protobuf برای مشخص کردن پیام‌ها استفاده می‌کند و این فایل‌های protobuf اساس یک کاتالوگ سیگنال را تشکیل می‌دهند.

برای اینکه تعاریف سیگنال در دسترس MCG قرار گیرد، باید این فایل‌های protobuf VSIDL را در یک protobuf FileDescriptorSet بسته‌بندی کرده و آن را در سرویس MCG آپلود کنید. MCG از اصطلاح Vehicle Signal Catalog برای این مجموعه‌های تعریف آپلود شده و نسخه‌بندی شده استفاده می‌کند (که اساساً یک Vehicle Signal Catalog را به شکل کامپایل شده و آپلود شده تعاریف پیام proto در کاتالوگ VSIDL شما تبدیل می‌کند).

کاتالوگ سیگنال خودرو چیست؟

یک کاتالوگ سیگنال خودرو ، تعاریف سیگنال را برای اعتبارسنجی در اختیار MCG قرار می‌دهد که به صورت یک protobuf FileDescriptorSet بسته‌بندی شده است.

In MCG, catalogs are identified by a version string that you assign during upload, which lets you manage multiple distinct signal definition sets. For example, you might maintain different catalog versions for software releases ( v1.0 , v1.1 , v2.0 ), or for different vehicle models or hardware configurations ( suv-my2025 , sedan-my2025 ). Each metrics configuration uses the vs_version field to reference a specific catalog, which defines the signals that are available as data sources and provides signal definitions for type inference and validation.

یک نمونه از FileDescriptorSet ایجاد کنید

همانطور که در تعریف پیام‌ها و سرویس‌های RPC توضیح داده شده است، سیگنال‌های خودرو به عنوان پیام‌های protobuf در فایل‌های protobuf تعریف می‌شوند. اگر بخشی از یک پروژه SDV هستید، از فایل‌های protobuf از کاتالوگ VSIDL پروژه خود برای ایجاد نمونه‌ای از FileDescriptorSet استفاده کنید.

برای ایجاد کاتالوگ برای MCG، فایل‌های protobuf خود را با استفاده از protoc در یک فایل باینری 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 ، می‌توانید آن را با استفاده از نقاط پایانی MCG API در مسیر /api/v1/vs/ آپلود و مدیریت کنید. نقطه پایانی برای اضافه کردن یا به‌روزرسانی یک کاتالوگ، POST /api/v1/vs/، مستلزم آن است که FileDescriptorSet به عنوان یک رشته کدگذاری شده با base64 در JSON payload ارسال شود.

برای رمزگذاری vehicle_signals.pb برای استفاده در API، از دستور base64 استفاده کنید. علامت -w 0 قابلیت بسته‌بندی خط را غیرفعال می‌کند تا رشته رمزگذاری شده در یک خط نمایش داده شود:

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

برای آپلود vehicle_signals.pb به عنوان یک نسخه جدید (به عنوان مثال، v1.0 ) یا برای به‌روزرسانی نسخه موجود، یک درخواست POST با محتوای کدگذاری شده base64 به نقطه پایانی /api/v1/vs/ با یک نام نسخه منحصر به فرد ارسال کنید.

بدنه درخواست باید یک شیء JSON حاوی رشته version و رشته vehicle_signals کدگذاری شده با base64 باشد:

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

مثال زیر نحوه آپلود vehicle_signals.pb به عنوان نسخه v1.0 با استفاده از curl را نشان می‌دهد. این مثال از printf برای ساخت JSON payload و pipe کردن آن به curl استفاده می‌کند، که از نیاز به ایجاد یک فایل JSON حاوی یک رشته base64 تک خطی بسیار طولانی جلوگیری می‌کند:

# 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/ مراجعه کنید.

  • حذف یک نسخه: برای حذف یک کاتالوگ، یک درخواست DELETE به /api/v1/vs/{version} ارسال کنید، که در آن {version} شناسه‌ای است که هنگام آپلود کاتالوگ ارائه شده است (برای مثال، v1.0 ). به DELETE /api/v1/vs/{version} مراجعه کنید.

برای جزئیات کامل در مورد تمام نقاط پایانی، به مرجع API مراجعه کنید.

استفاده از کاتالوگ در تنظیمات معیارها

When uploaded, reference a catalog version in metrics configurations using the vs_version field:

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

وقتی این شیء JSON به نقاط انتهایی /api/v1/generate_metrics_config یا /api/v1/validate_metrics_config ارسال می‌شود، MCG از تعاریف سیگنال از کاتالوگ v1.0 برای انجام اعتبارسنجی و استنتاج نوع استفاده می‌کند.