यूडीपी पैकेट स्कीमा
प्रत्येक पैकेट एक निश्चित लंबाई वाला 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% से शुरू करें और प्रस्ताव पूरी तरह मान्य होने के बाद ही बढ़ाएं।