Trình tạo cấu hình chỉ số (MCG) xác thực cấu hình chỉ số bằng cách kiểm tra tên tín hiệu, thực hiện kiểm tra loại trên biểu thức và suy luận loại đầu ra. MCG cần có quyền truy cập vào định nghĩa thông báo vùng đệm giao thức (protobuf) cho tín hiệu xe để thực hiện các tác vụ này.
Trong SDV, tín hiệu và dịch vụ xe được xác định bằng cách sử dụng Ngôn ngữ định nghĩa giao diện dịch vụ xe (VSIDL). VSIDL sử dụng các tệp protobuf để chỉ định thông báo và các tệp protobuf này tạo thành cơ sở của danh mục tín hiệu.
Để cung cấp định nghĩa tín hiệu cho MCG, bạn phải đóng gói các tệp protobuf VSIDL này vào một protobuf FileDescriptorSet và tải tệp đó lên dịch vụ MCG. MCG sử dụng thuật ngữ Danh mục tín hiệu xe cho các tập hợp định nghĩa đã tải lên và được kiểm soát phiên bản này (về cơ bản, tạo Danh mục tín hiệu xe là dạng đã tải lên và được biên dịch của các định nghĩa thông báo proto trong danh mục VSIDL).
Danh mục tín hiệu xe là gì?
Danh mục tín hiệu xe cung cấp cho MCG các định nghĩa tín hiệu để xác thực, được đóng gói dưới dạng FileDescriptorSet protobuf.
Trong MCG, danh mục được xác định bằng chuỗi phiên bản mà bạn chỉ định trong quá trình tải lên, cho phép bạn quản lý nhiều tập hợp định nghĩa tín hiệu riêng biệt. Ví dụ: bạn có thể duy trì các phiên bản danh mục khác nhau cho bản phát hành phần mềm (v1.0, v1.1, v2.0) hoặc cho các mẫu xe hoặc cấu hình phần cứng khác nhau (suv-my2025, sedan-my2025). Mỗi cấu hình chỉ số sử dụng trường vs_version để tham chiếu đến một danh mục cụ thể, xác định các tín hiệu có sẵn dưới dạng nguồn dữ liệu và cung cấp định nghĩa tín hiệu để suy luận và xác thực loại.
Tạo một thực thể của FileDescriptorSet
Như mô tả trong bài viết Xác định thông báo và dịch vụ RPC, tín hiệu xe
được xác định là thông báo protobuf trong các tệp protobuf. Nếu bạn là thành viên của dự án SDV, hãy sử dụng các tệp protobuf trong danh mục VSIDL của dự án để tạo một thực thể của FileDescriptorSet.
Để tạo danh mục cho MCG, hãy gói các tệp protobuf vào tệp nhị phân FileDescriptorSet bằng cách sử dụng protoc. Nếu tất cả các tệp protobuf của bạn đều nằm trong một thư mục, hãy chạy lệnh sau để tạo 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
Tải lên và quản lý danh mục
Việc tải tập hợp định nghĩa tín hiệu lên dưới dạng danh mục cho phép bạn tham chiếu đến tập hợp đó theo tên phiên bản trong các yêu cầu cấu hình chỉ số.
Thêm hoặc cập nhật phiên bản danh mục
Sau khi tạo tệp danh mục vehicle_signals.pb, bạn có thể tải lên và quản lý tệp đó bằng cách sử dụng các điểm cuối MCG API trong /api/v1/vs/. Điểm cuối để thêm hoặc cập nhật danh mục, POST /api/v1/vs/, yêu cầu FileDescriptorSet được truyền dưới dạng chuỗi được mã hoá base64 trong tải trọng JSON.
Để mã hoá vehicle_signals.pb cho mục đích sử dụng API, hãy sử dụng lệnh base64. Cờ -w 0 sẽ tắt tính năng xuống dòng để chuỗi được mã hoá xuất hiện trên một dòng:
VEHICLE_SIGNALS_BASE64=$(base64 -w 0 vehicle_signals.pb)
Để tải vehicle_signals.pb lên dưới dạng phiên bản mới (ví dụ: v1.0) hoặc để cập nhật phiên bản hiện có, hãy gửi yêu cầu POST có nội dung được mã hoá base64 đến điểm cuối /api/v1/vs/ bằng tên phiên bản riêng biệt.
Nội dung yêu cầu phải là đối tượng JSON chứa chuỗi version và chuỗi vehicle_signals được mã hoá base64:
{
"version": "v1.0",
"vehicle_signals": "Q2lSb1pYB3jCRkRt..."
}
Ví dụ sau đây trình bày cách tải vehicle_signals.pb lên dưới dạng phiên bản v1.0 bằng cách sử dụng curl. Ví dụ này sử dụng printf để tạo tải trọng JSON và chuyển tải trọng đó đến curl, giúp bạn không cần tạo tệp JSON chứa chuỗi base64 một dòng rất dài:
# 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/"
Liệt kê và xoá phiên bản
Bạn có thể liệt kê tất cả các phiên bản danh mục hiện có hoặc xoá một phiên bản cụ thể:
Liệt kê phiên bản: Để xem danh sách mã nhận dạng cho tất cả các phiên bản danh mục đã tải lên, hãy gửi yêu cầu
GETđến/api/v1/vs/. Xem GET /api/v1/vs/.Xoá phiên bản: Để xoá danh mục, hãy gửi yêu cầu
DELETEđến/api/v1/vs/{version}, trong đó{version}là mã nhận dạng được cung cấp khi danh mục được tải lên (ví dụ:v1.0). Xem DELETE /api/v1/vs/{version}.
Để biết thông tin chi tiết đầy đủ về tất cả các điểm cuối, hãy xem Tài liệu tham khảo về API.
Sử dụng danh mục trong cấu hình chỉ số
Khi tải lên, hãy tham chiếu đến phiên bản danh mục trong cấu hình chỉ số bằng cách sử dụng trường vs_version:
{ "vs_version": "v1.0", ... }
Khi đối tượng JSON này được gửi đến các điểm cuối /api/v1/generate_metrics_config hoặc /api/v1/validate_metrics_config, MCG sẽ sử dụng các định nghĩa tín hiệu từ danh mục v1.0 để thực hiện quá trình xác thực và suy luận loại.