मेट्रिक कॉन्फ़िगरेशन जनरेटर (एमसीजी), सिग्नल के नामों की जांच करके, एक्सप्रेशन पर टाइप की जांच करके, और आउटपुट टाइप का अनुमान लगाकर, मेट्रिक कॉन्फ़िगरेशन की पुष्टि करता है. इन कामों को पूरा करने के लिए, एमसीजी को वाहन के सिग्नल के लिए प्रोटोकॉल बफ़र (प्रोटोबफ़) मैसेज की परिभाषाओं का ऐक्सेस चाहिए.
एसडीवी में, वाहन के सिग्नल और सेवाओं को Vehicle Service Interface Definition Language (वीएसआईडीएल) का इस्तेमाल करके तय किया जाता है. वीएसआईडीएल, मैसेज तय करने के लिए प्रोटोबफ़ फ़ाइलों का इस्तेमाल करता है. ये प्रोटोबफ़ फ़ाइलें, सिग्नल कैटलॉग की बुनियाद होती हैं.
सिग्नल की परिभाषाओं को एमसीजी के लिए उपलब्ध कराने के लिए, आपको इन वीएसआईडीएल प्रोटोबफ़ फ़ाइलों को प्रोटोबफ़ FileDescriptorSet में पैकेज करना होगा. इसके बाद, इसे एमसीजी सेवा पर अपलोड करना होगा. एमसीजी, अपलोड किए गए और वर्शन वाले परिभाषा सेट के लिए Vehicle Signal Catalog शब्द का इस्तेमाल करता है. इससे, Vehicle Signal Catalog, आपके वीएसआईडीएल कैटलॉग में प्रोटो मैसेज की परिभाषाओं का कंपाइल किया गया और अपलोड किया गया फ़ॉर्म बन जाता है.
Vehicle Signal Catalog क्या है?
Vehicle Signal Catalog, एमसीजी को पुष्टि के लिए सिग्नल की परिभाषाएं उपलब्ध कराता है. इसे प्रोटोबफ़ FileDescriptorSet के तौर पर पैकेज किया जाता है.
एमसीजी में, कैटलॉग की पहचान वर्शन स्ट्रिंग से होती है. यह स्ट्रिंग, अपलोड के दौरान असाइन की जाती है. इससे, सिग्नल की परिभाषाओं के कई अलग-अलग सेट मैनेज किए जा सकते हैं. उदाहरण के लिए, सॉफ़्टवेयर रिलीज़ (v1.0, v1.1, v2.0) या वाहन के अलग-अलग मॉडल या हार्डवेयर कॉन्फ़िगरेशन (suv-my2025, sedan-my2025) के लिए, कैटलॉग के अलग-अलग वर्शन बनाए जा सकते हैं. हर मेट्रिक कॉन्फ़िगरेशन, किसी खास कैटलॉग को रेफ़र करने के लिए vs_version फ़ील्ड का इस्तेमाल करता है. इससे उन सिग्नल के बारे में पता चलता है जो डेटा सोर्स के तौर पर उपलब्ध हैं. साथ ही, टाइप के अनुमान और पुष्टि के लिए सिग्नल की परिभाषाएं मिलती हैं.
FileDescriptorSet का इंस्टेंस बनाना
मैसेज और आरपीसी सेवाओं को तय करना में बताए गए तरीके के मुताबिक, वाहन के सिग्नल को प्रोटोबफ़ फ़ाइलों में प्रोटोबफ़ मैसेज के तौर पर तय किया जाता है. अगर एसडीवी प्रोजेक्ट का हिस्सा हैं, तो FileDescriptorSet का इंस्टेंस बनाने के लिए, अपने प्रोजेक्ट के वीएसआईडीएल कैटलॉग से प्रोटोबफ़ फ़ाइलों का इस्तेमाल करें.
एमसीजी के लिए कैटलॉग बनाने के लिए, protoc का इस्तेमाल करके, अपनी प्रोटोबफ़ फ़ाइलों को FileDescriptorSet बाइनरी फ़ाइल में बंडल करें. अगर आपकी सभी प्रोटोबफ़ फ़ाइलें एक ही फ़ोल्डर में हैं, तो 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/ में मौजूद एमसीजी एपीआई एंडपॉइंट का इस्तेमाल करके अपलोड और मैनेज किया जा सकता है. कैटलॉग जोड़ने या अपडेट करने के लिए, POST /api/v1/vs/ एंडपॉइंट का इस्तेमाल किया जाता है. इसके लिए, JSON पेलोड में base64-encoded स्ट्रिंग के तौर पर FileDescriptorSet को पास करना ज़रूरी है.
एपीआई के इस्तेमाल के लिए, vehicle_signals.pb को एन्कोड करने के लिए, base64 कमांड का इस्तेमाल करें. -w 0 फ़्लैग, लाइन रैपिंग को बंद कर देता है, ताकि एन्कोड की गई स्ट्रिंग एक ही लाइन में दिखे:
VEHICLE_SIGNALS_BASE64=$(base64 -w 0 vehicle_signals.pb)
vehicle_signals.pb को नए वर्शन (उदाहरण के लिए, v1.0) के तौर पर अपलोड करने या मौजूदा वर्शन को अपडेट करने के लिए, base64-encoded कॉन्टेंट के साथ POST अनुरोध को /api/v1/vs/ एंडपॉइंट पर, वर्शन के किसी यूनीक नाम के साथ भेजें.
अनुरोध का मुख्य हिस्सा, एक JSON ऑब्जेक्ट होना चाहिए. इसमें version स्ट्रिंग और base64-encoded vehicle_signals स्ट्रिंग शामिल होनी चाहिए:
{
"version": "v1.0",
"vehicle_signals": "Q2lSb1pYB3jCRkRt..."
}
यहां दिए गए उदाहरण में, curl का इस्तेमाल करके, vehicle_signals.pb को v1.0 वर्शन के तौर पर अपलोड करने का तरीका बताया गया है. इस उदाहरण में, JSON पेलोड बनाने के लिए printf का इस्तेमाल किया गया है. साथ ही, इसे 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/"
वर्शन की सूची देखना और उन्हें मिटाना
उपलब्ध कैटलॉग के सभी वर्शन की सूची देखी जा सकती है या किसी खास वर्शन को मिटाया जा सकता है:
वर्शन की सूची देखना: अपलोड किए गए कैटलॉग के सभी वर्शन के आइडेंटिफ़ायर की सूची देखने के लिए,
/api/v1/vs/परGETअनुरोध भेजें. GET /api/v1/vs/ देखें.वर्शन मिटाना: कैटलॉग हटाने के लिए,
DELETEअनुरोध को/api/v1/vs/{version}पर भेजें, जहां{version}वह आइडेंटिफ़ायर है जो कैटलॉग अपलोड करते समय दिया गया था (उदाहरण के लिए,v1.0). DELETE /api/v1/vs/{version} देखें.
सभी एंडपॉइंट के बारे में पूरी जानकारी के लिए, एपीआई के बारे में जानकारी देखें.
मेट्रिक कॉन्फ़िगरेशन में कैटलॉग का इस्तेमाल करना
अपलोड किए जाने पर, vs_version फ़ील्ड का इस्तेमाल करके, मेट्रिक कॉन्फ़िगरेशन में कैटलॉग के वर्शन को रेफ़र करें:
{ "vs_version": "v1.0", ... }
जब इस JSON ऑब्जेक्ट को /api/v1/generate_metrics_config या /api/v1/validate_metrics_config एंडपॉइंट पर भेजा जाता है, तो एमसीजी, पुष्टि और टाइप के अनुमान के लिए v1.0 कैटलॉग से सिग्नल की परिभाषाओं का इस्तेमाल करता है.