مواصفات Meta Quest 3 VR Teleop

مرجع فني كامل: مخطط حزمة UDP، وأنواع الحقول وتخطيط البايت، وتفاصيل وقت الاستجابة من طرف إلى طرف، والمعلمات الرئيسية القابلة للضبط، ومواصفات الذراع المتوافقة.

نظرة عامة على النظام

الأجهزة ووقت التشغيل
سماعة الرأس Meta Quest 3 (يتطلب وضع التتبع اليدوي)
نسخة الوحدة 2022.3 LTS أو أحدث · حزمة XR Hands · البرنامج المساعد OpenXR
وقت تشغيل المضيف Python 3.10+ (Linux أو macOS؛ لا يتطلب ROS)
متطلبات الشبكة نفس الشبكة الفرعية LAN؛ يوصى بنقطة وصول Wi-Fi 6
منفذ UDP الأيمن 8888
منفذ UDP الأيسر 8889 (التحكم الثنائي فقط، وإلا فهو غير مستخدم)
معدل الحزمة (المرسل) ~ 50 هرتز من Unity (حلقة التحديث الثابتة للوحدة)
معدل قيادة الروبوت 30 هرتز افتراضي (قابل للتكوين عبر CONTROL_HZ)
SDK الأساسي (بايبر) Piper_sdk · python-can · CAN عبر محول USB

مخطط حزمة UDP

كل حزمة عبارة عن رسالة ثنائية ذات طول ثابت تبلغ 45 بايت. تستخدم كافة الحقول متعددة البايت ليتل إنديان ترتيب البايت. يتم تجاهل البايتات غير المعروفة الملحقة في النهاية بواسطة جهاز الاستقبال من أجل التوافق الأمامي.

تخطيط الحزمة الثنائية - إجمالي 45 بايت
مجال يكتب بايت وصف
header uint8[4] 4 بايتات سحرية 0x52 0x43 0x54 0x50 — ASCII "RCTP". يتم إسقاط الحزم ذات القيمة السحرية الخاطئة بصمت.
الطابع الزمني float64 8 الوحدة Time.realtimeSinceStartup في ثواني. تستخدم لقياس غضب. لا يتم تفسيرها بواسطة وحدة تحكم الروبوت.
pos_x float32 4 موضع المؤثر النهائي X بالأمتار، إطار عالم الواقع الافتراضي (اليد اليمنى، Y-up). تم تحويله إلى إطار روبوت ملم بواسطة transform_position().
pos_y float32 4 موضع المؤثر النهائي Y بالأمتار، إطار عالم الواقع الافتراضي.
pos_z float32 4 موضع المؤثر النهائي Z بالأمتار، إطار عالم الواقع الافتراضي.
rot_x، rot_y، rot_z، rot_w تعويم 32 × 4 16 دوران المؤثر النهائي كوحدة رباعية في إطار عالم الواقع الافتراضي. تم تحويله إلى أويلر (لفة/درجة/انعراج) بواسطة quat_to_euler() قبل المرور إلى الروبوت SDK.
القابض float32 4 انفتاح القابض: 0.0 = مغلق بالكامل 1.0 = مفتوحة بالكامل. مستمدة من قوة قرصة عبر VRGripperController.cs.
أعلام uint8 1 البت 0: التتبع صالح (1 = تم اكتشاف اليد). البتة 1: طلب التوقف في حالات الطوارئ (1 = ضغط المشغل على القائمة). البتات المتبقية محفوظة.

ملخص إزاحة البايت: الرأس 0–3، الطابع الزمني 4–11، pos_x 12–15، pos_y 16–19، pos_z 20–23، rot_x 24–27، rot_y 28–31، rot_z 32–35، rot_w 36–39، القابض 40–43، الأعلام 44.

بايثون struct سلسلة التنسيق للتفريغ:

يستورد struct

PACKET_MAGIC = b'\x52\x43\x54\x50'  # "RCTP"
PACKET_FMT   = '<4sdffffffff و ب'
#              ^  ^ ^^^^^^^^^^ ^ ^
#              |  | pos xyz    | flags (uint8)
#              |  timestamp   gripper (float32)
#              header (4 bytes)   rot xyzw (float32×4)

مواطنه parse_packet(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),
    }

الكمون من النهاية إلى النهاية

تم القياس على شبكة Wi-Fi 6 LAN باستخدام ذراع AgileX Piper بمعدل تحكم 30 هرتز وحد سرعة 25%. القيم نموذجية. يعتمد الكمون الفعلي على ظروف Wi-Fi ومعدل مضاعفات الروبوت.

~20 مللي ثانية
كويست 3 تتبع خط الأنابيب
اندماج مستشعر وضع اليد في رد اتصال الوحدة
<5 مللي ثانية
اجتياز UDP
واي فاي 6 لان؛ ما يصل إلى 15 مللي ثانية تقريبًا على شبكة Wi-Fi الأقدم
<2 مللي ثانية
تحليل بايثون وقائمة الانتظار
فك الهيكل + إدراج قائمة الانتظار
30-80 مللي ثانية
تنفيذ مسار الروبوت
يعتمد على الحد الأقصى للسرعة ومسافة التحرك
إجمالي نموذجي من النهاية إلى النهاية
واي فاي 6 LAN، سرعة 25% 50-120 مللي ثانية
واي فاي 5 LAN، سرعة 25% 80-150 مللي ثانية
استجابة الإيقاف الإلكتروني للبرنامج (مسار البت 1) دورة تحكم واحدة (~33 مللي ثانية عند 30 هرتز)
كشف تتبع الخسارة فوري (إشارة البايت في الحزمة الحالية)
حافظ على حدود السرعة متحفظة لتقليل الشعور بزمن الوصول. عنصر الكمون الإدراكي المهيمن هو تنفيذ مسار الروبوت. أقل SPEED_PERCENT يجعل النظام يبدو أكثر قابلية للتنبؤ به على الرغم من تشابه الوقت الفعلي لرحلة الذهاب والإياب. ابدأ بـ 25% ولا ترفع إلا بعد التحقق من صحة الحركة بشكل كامل.

المعلمات الرئيسية القابلة للضبط

مفتش الوحدة (VRHandPoseSender)
إزاحة الموضع (م) (0، 0، 0.3) — نقطة بداية بايبر
إزاحة الدوران (درجة) (0، 90، 0) — نقطة بداية بايبر
عامل القياس 0.75 — يقيس حركة اليد إلى مساحة عمل بايبر
مساحة العمل X المشبك (مم) ±400 (بايبر)؛ ±600 (xArm6)
مساحة العمل Z المشبك (مم) 50 - 700 (بايبر)؛ 0 - 900 (xArm6)
منفذ UDP المستهدف 8888 (اليد اليمنى) / 8889 (اليد اليسرى)
خادم بايثون (teleoperation_main.py)
CONTROL_HZ 30 هرتز — معدل قيادة الروبوت؛ تطابق مع معدل المؤازرة
QUEUE_MAXSIZE 3 - إطارات مخزنة مؤقتًا بين سلاسل جهاز الاستقبال وجهاز التحكم
Piper_controller.py (AgileX Piper)
SPEED_PERCENT 25% — الحد الأقصى لكسر سرعة المفصل؛ رفع تدريجيا
X_MIN / X_MAX (مم) −400 / +400
Y_MIN / Y_MAX (مم) −400 / +400
Z_MIN / Z_MAX (مم) 50 / 700
GRIPPER_MAX_UM (ميكرومتر) 70000 - 70 ملم فتحة مادية
وحدات موضع SDK ميكرومتر (عدد صحيح) - اضرب قيم المليمتر في 1000
وحدات توجيه SDK ميلي درجة (عدد صحيح) - ضرب قيم الدرجات بـ 1000
يمكن واجهة can0 (افتراضي) — قم بالتنشيط باستخدام can_activate.sh قبل التشغيل

الأسلحة المتوافقة في SVRC

ذراع DOF SDK/الواجهة ملف وحدة التحكم حالة
أجيليكس بايبر 6 Piper_sdk · يمكن عبر USB piper_controller.py جاهز للإنتاج
الذراع المفتوحة 7 المقبس CAN / ROS 2 MoveIt2 openarm_controller.py بيتا
مجموعة DK1 ثنائية الاستخدام المزدوج 6 المنافذ 8888 + 8889 في وقت واحد dk1_controller.py بيتا
فلاي L1 المزدوج 6 جسر ROS 2 · TCP/IP vlai_l1_controller.py في التنمية

متطلبات البرمجيات

المهمة 3 / جانب الوحدة
الوحدة 2022.3 LTS أو أحدث
حزمة الأيدي XR com.unity.xr.hands ≥ 1.3
البرنامج المساعد OpenXR com.unity.xr.openxr ≥ 1.9
ميتا XR SDK اختياري ولكن يوصى به للعبور
وضع تتبع اليد ممكّن في إعدادات نظام Quest (تتبع الحركة)
التحكم في جهاز الكمبيوتر/جانب بايثون
بايثون 3.10 أو الأحدث (يستخدم بناء جملة نوع الاتحاد)
Piper_sdk pip install piper_sdk
بيثون يمكن pip install python-can
يمكن واجهة محول USB إلى CAN؛ تفعيلها مع can_activate.sh can0 1000000
المكتبة القياسية فقط المقبس، البنية، قائمة الانتظار، الخيوط، الإشارة، الوقت

على استعداد لTeleop؟

ارجع إلى دليل الإعداد لبث Quest 3 إلى ذراع الروبوت، أو اقرأ الويكي الكامل للحصول على المرجع الكامل للمطور.