मेटा क्वेस्ट 3 वीआर टेलीओप विशिष्टताएँ

संपूर्ण तकनीकी संदर्भ: यूडीपी पैकेट स्कीमा, फ़ील्ड प्रकार और बाइट लेआउट, एंड-टू-एंड विलंबता ब्रेकडाउन, कुंजी ट्यून करने योग्य पैरामीटर और संगत आर्म विनिर्देश।

तंत्र अवलोकन

हार्डवेयर और रनटाइम
हेडसेट मेटा क्वेस्ट 3 (हैंड-ट्रैकिंग मोड आवश्यक)
एकता संस्करण 2022.3 एलटीएस या बाद का संस्करण · एक्सआर हैंड्स पैकेज · ओपनएक्सआर प्लगइन
होस्ट रनटाइम पायथन 3.10+ (लिनक्स या मैकओएस; कोई आरओएस आवश्यक नहीं)
नेटवर्क आवश्यकता वही LAN सबनेट; वाई-फाई 6 एक्सेस प्वाइंट अनुशंसित
दाहिने हाथ का यूडीपी पोर्ट 8888
बाएँ हाथ का यूडीपी पोर्ट 8889 (केवल द्विपक्षीय नियंत्रण; अन्यथा अप्रयुक्त)
पैकेट दर (प्रेषक) यूनिटी से ~50 हर्ट्ज़ (एकता का निश्चित अद्यतन लूप)
रोबोट कमांड दर 30 हर्ट्ज़ डिफ़ॉल्ट (CONTROL_HZ के माध्यम से कॉन्फ़िगर करने योग्य)
प्राथमिक एसडीके (पाइपर) Piper_sdk · Python-can · USB एडाप्टर पर CAN

यूडीपी पैकेट स्कीमा

प्रत्येक पैकेट एक निश्चित लंबाई वाला 45-बाइट बाइनरी संदेश है। सभी मल्टी-बाइट फ़ील्ड का उपयोग करें लिटिल-एंडियन बाइट क्रम. आगे की अनुकूलता के लिए अंत में जोड़े गए अज्ञात बाइट्स को रिसीवर द्वारा अनदेखा कर दिया जाता है।

बाइनरी पैकेट लेआउट - कुल 45 बाइट्स
मैदान प्रकार बाइट्स विवरण
हैडर uint8[4] 4 जादुई बाइट्स 0x52 0x43 0x54 0x50 - एएससीआईआई "आरसीटीपी"। गलत जादुई मूल्य वाले पैकेट चुपचाप गिरा दिए जाते हैं।
TIMESTAMP फ्लोट64 8 एकता Time.realtimeSinceStartup सेकंड में. घबराहट माप के लिए उपयोग किया जाता है; रोबोट नियंत्रक द्वारा व्याख्या नहीं की गई।
pos_x फ्लोट32 4 मीटर में अंत-प्रभावक एक्स स्थिति, वीआर वर्ल्ड फ्रेम (दाएं हाथ, वाई-अप)। द्वारा एमएम रोबोट फ़्रेम में परिवर्तित किया गया transform_position().
pos_y फ्लोट32 4 मीटर में एंड-इफ़ेक्टर Y स्थिति, VR वर्ल्ड फ़्रेम।
pos_z फ्लोट32 4 मीटर में एंड-इफ़ेक्टर Z स्थिति, वीआर वर्ल्ड फ्रेम।
रोट_एक्स, रोट_वाई, रोट_जेड, रोट_डब्ल्यू फ्लोट32 × 4 16 वीआर वर्ल्ड फ्रेम में यूनिट क्वाटरनियन के रूप में एंड-इफ़ेक्टर रोटेशन। द्वारा यूलर (रोल/पिच/यॉ) में परिवर्तित किया गया quat_to_euler() रोबोट एसडीके में जाने से पहले।
ग्रिपर फ्लोट32 4 ग्रिपर खुलापन: 0.0 = पूर्णतः बंद, 1.0 = पूरी तरह खुला. के माध्यम से चुटकी ताकत से व्युत्पन्न VRGripperController.cs.
झंडे uint8 1 बिट 0: ट्रैकिंग वैध (1 = हाथ से पता लगाया गया)। बिट 1: आपातकालीन रोक का अनुरोध किया गया (1 = ऑपरेटर ने मेनू दबाया)। शेष बिट्स आरक्षित.

बाइट ऑफ़सेट सारांश: हेडर 0-3, टाइमस्टैम्प 4-11, पॉज़_x 12-15, पॉज़_y 16-19, पॉज़_z 20-23, रोट_x 24-27, रोट_y 28-31, रोट_ज़ 32-35, रोट_w 36-39, ग्रिपर 40-43, फ़्लैग्स 44।

अजगर struct अनपैकिंग के लिए प्रारूप स्ट्रिंग:

आयात struct

PACKET_MAGIC = b'\x52\x43\x54\x50'  # "RCTP"
PACKET_FMT   = '<4sdfffffffff एफ बी'
#              ^  ^ ^^^^^^^^^^ ^ ^
#              |  | pos xyz    | flags (uint8)
#              |  timestamp   gripper (float32)
#              header (4 bytes)   rot xyzw (float32×4)

डीईएफ़ पार्स_पैकेट(data: bytes) -> dict | None:
    अगर len(data) < struct.calcsize(PACKET_FMT):
        वापस करना None
    fields = struct.unpack_from(PACKET_FMT, data)
    header, ts, px, py, pz, rx, ry, rz, rw, gripper, flags = fields
    अगर header != PACKET_MAGIC:
        वापस करना None
    वापस करना {
        "टाइमस्टैम्प": ts,
        "पद": (px, py, pz),
        "रोटेशन": (rx, ry, rz, rw),
        "ग्रिपर":  gripper,
        "वैध":    bool(flags & 0x01),
        "रुकना":    bool(flags & 0x02),
    }

एंड-टू-एंड विलंबता

30 हर्ट्ज नियंत्रण दर और 25% गति सीमा पर एजाइलएक्स पाइपर आर्म के साथ वाई-फाई 6 लैन पर मापा गया। मूल्य विशिष्ट हैं; वास्तविक विलंबता वाई-फाई स्थितियों और रोबोट सर्वो दर पर निर्भर करती है।

~20 एमएस
क्वेस्ट 3 ट्रैकिंग पाइपलाइन
यूनिटी कॉलबैक के लिए हैंड पोज़ सेंसर फ़्यूज़न
<5 एमएस
यूडीपी ट्रांजिट
वाई-फाई 6 लैन; पुराने वाई-फ़ाई पर ~15 एमएस तक
<2 एमएस
पायथन पार्स और कतार
स्ट्रक्चर अनपैक + क्यू इंसर्ट
30-80 एमएस
रोबोट प्रक्षेपवक्र निष्पादन
गति सीमा और चाल दूरी पर निर्भर करता है
विशिष्ट कुल अंत-से-अंत
वाई-फाई 6 लैन, 25% स्पीड 50-120 एमएस
वाई-फाई 5 लैन, 25% स्पीड 80-150 एमएस
सॉफ़्टवेयर ई-स्टॉप प्रतिक्रिया (बिट 1 पथ) 1 नियंत्रण चक्र (30 हर्ट्ज़ पर ~33 एमएस)
ट्रैकिंग-नुकसान का पता लगाना तत्काल (वर्तमान पैकेट में फ़्लैग बाइट)
विलंबता अनुभव को कम करने के लिए गति सीमा को रूढ़िवादी रखें। प्रमुख अवधारणात्मक विलंबता घटक रोबोट प्रक्षेपवक्र निष्पादन है। एक निचला SPEED_PERCENT वास्तविक राउंड-ट्रिप का समय समान होने के बावजूद सिस्टम को अधिक पूर्वानुमानित महसूस कराता है। 25% से शुरू करें और प्रस्ताव पूरी तरह मान्य होने के बाद ही बढ़ाएं।

मुख्य ट्यून करने योग्य पैरामीटर

यूनिटी इंस्पेक्टर (VRHandPoseSender)
स्थितिऑफ़सेट (एम) (0, 0, 0.3) - पाइपर प्रारंभिक बिंदु
रोटेशनऑफ़सेट (डिग्री) (0, 90, 0) - पाइपर प्रारंभिक बिंदु
पैमाने का कारक 0.75 - पाइपर कार्यक्षेत्र में हाथ की गति को मापता है
कार्यक्षेत्र एक्स क्लैंप (मिमी) ±400 (पाइपर); ±600 (xArm6)
कार्यक्षेत्र Z क्लैंप (मिमी) 50 - 700 (पाइपर); 0 - 900 (xArm6)
यूडीपी लक्ष्य पोर्ट 8888 (दायाँ हाथ) / 8889 (बायाँ हाथ)
पायथन सर्वर (teleoperation_main.py)
CONTROL_HZ 30 हर्ट्ज़ - रोबोट कमांड दर; सर्वो दर से मिलान करें
QUEUE_MAXSIZE 3 - रिसीवर और नियंत्रक थ्रेड्स के बीच बफ़र किए गए फ़्रेम
Piper_controller.py (एजाइलएक्स पाइपर)
SPEED_PERCENT 25% - अधिकतम संयुक्त गति अंश; धीरे-धीरे बढ़ाएँ
X_MIN / X_MAX (मिमी) −400 / +400
Y_MIN / Y_MAX (मिमी) −400 / +400
Z_MIN / Z_MAX (मिमी) 50 / 700
GRIPPER_MAX_UM (µm) 70,000 - 70 मिमी भौतिक उद्घाटन
एसडीके स्थिति इकाइयाँ माइक्रोमीटर (पूर्णांक) - मिमी मान को 1 000 से गुणा करें
एसडीके ओरिएंटेशन इकाइयां मिलिडिग्री (पूर्णांक) - डिग्री मानों को 1,000 से गुणा करें
इंटरफ़ेस कर सकते हैं can0 (डिफ़ॉल्ट) - चलने से पहले can_activate.sh के साथ सक्रिय करें

एसवीआरसी में संगत हथियार

हाथ DOF एसडीके/इंटरफ़ेस नियंत्रक फ़ाइल स्थिति
एजाइलएक्स पाइपर 6 Piper_sdk · USB पर कर सकते हैं piper_controller.py उत्पादन के लिए तैयार
ओपनआर्म 7 सॉकेटकैन/आरओएस 2 मूवइट2 openarm_controller.py बीटा
DK1 द्वि-मैनुअल किट दोहरी 6 पोर्ट 8888 + 8889 एक साथ dk1_controller.py बीटा
वीएलएआई एल1 दोहरी 6 आरओएस 2 ब्रिज · टीसीपी/आईपी vlai_l1_controller.py विकास में

सॉफ़्टवेयर आवश्यकताएं

क्वेस्ट 3 / एकता पक्ष
एकता 2022.3 एलटीएस या बाद का
एक्सआर हैंड्स पैकेज com.unity.xr.hands ≥ 1.3
ओपनएक्सआर प्लगइन com.unity.xr.openxr ≥ 1.9
मेटा एक्सआर एसडीके वैकल्पिक लेकिन पासथ्रू के लिए अनुशंसित
हैंड ट्रैकिंग मोड क्वेस्ट सिस्टम सेटिंग्स में सक्षम (मूवमेंट ट्रैकिंग)
पीसी/पायथन साइड को नियंत्रित करें
अजगर 3.10 या बाद का संस्करण (यूनियन प्रकार सिंटैक्स का उपयोग करता है)
पाइपर_एसडीके pip install piper_sdk
अजगर-कर सकते हैं pip install python-can
इंटरफ़ेस कर सकते हैं यूएसबी-टू-कैन एडाप्टर; के साथ सक्रिय किया गया can_activate.sh can0 1000000
केवल मानक पुस्तकालय सॉकेट, संरचना, कतार, थ्रेडिंग, सिग्नल, समय

टेलीओप के लिए तैयार हैं?

अपने क्वेस्ट 3 को रोबोट आर्म पर स्ट्रीम करने के लिए सेटअप गाइड पर वापस लौटें, या संपूर्ण डेवलपर संदर्भ के लिए पूर्ण विकी पढ़ें।