סכימת מנות UDP
כל מנה היא הודעה בינארית באורך קבוע של 45 בתים. כל השדות מרובי-בתים משתמשים מעט-אנדיאן סדר בתים. בתים לא ידועים המצורפים בסוף מתעלמים על ידי המקלט לצורך תאימות קדימה.
| שָׂדֶה |
סוּג |
בתים |
תֵאוּר |
| כּוֹתֶרֶת |
uint8[4] |
4 |
בתים קסמים 0x52 0x43 0x54 0x50 — ASCII "RCTP". חבילות עם ערך קסם שגוי נשמטות בשקט. |
| חותמת זמן |
לצוף64 |
8 |
אַחְדוּת Time.realtimeSinceStartup תוך שניות. משמש למדידת ריצוד; לא מתפרש על ידי בקר הרובוט. |
| pos_x |
לצוף32 |
4 |
מיקום X של מנגנון הקצה במטרים, מסגרת עולם VR (יד ימין, Y-up). הומר למסגרת רובוט מ"מ על ידי transform_position(). |
| זֵר |
לצוף32 |
4 |
מיקום Y של מנגנון קצה במטרים, מסגרת עולם VR. |
| pos_z |
לצוף32 |
4 |
מיקום Z של מנגנון הקצה במטרים, מסגרת עולם VR. |
| rot_x, rot_y, rot_z, rot_w |
לצוף32 × 4 |
16 |
סיבוב אפקטור קצה כקווטרניון יחידה במסגרת עולם VR. הומר לאולר (גלגול/גובה/פיהוק) על ידי quat_to_euler() לפני המעבר לרובוט SDK. |
| תפסן |
לצוף32 |
4 |
פתיחות האוחזת: 0.0 = סגור לחלוטין, 1.0 = פתוח לגמרי. נגזר מחוזק צביטה דרך VRGripperController.cs. |
| דגלים |
uint8 |
1 |
סיביות 0: מעקב חוקי (1 = זיהוי יד). Bit 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– 43, gripper.
פִּיתוֹן struct מחרוזת פורמט לפירוק:
יְבוּא struct
PACKET_MAGIC = b'\x52\x43\x54\x50' # "RCTP"
PACKET_FMT = '<4sdffffffffff f B'
# ^ ^ ^^^^^^^^^^ ^ ^
# | | pos xyz | flags (uint8)
# | timestamp gripper (float32)
# header (4 bytes) rot xyzw (float32×4)
def 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 אלפיות השנייה
Quest 3 Tracking Pipeline
מיזוג חיישן תנוחת יד להתקשרות חוזרת של Unity
<5 אלפיות השנייה
UDP Transit
Wi-Fi 6 LAN; עד ~15 אלפיות השנייה ב-Wi-Fi ישן יותר
< 2 אלפיות השנייה
פייתון ניתוח ותור
פירוק מבנה + הכנסת תור
30-80 אלפיות השנייה
ביצוע מסלול רובוט
תלוי במגבלת המהירות ובמרחק התנועה
| Wi-Fi 6 LAN, מהירות של 25%. |
50–120 אלפיות השנייה |
| Wi-Fi 5 LAN, מהירות של 25%. |
80-150 אלפיות השנייה |
| תגובת עצירה אלקטרונית של תוכנה (נתיב סיביות 1) |
מחזור בקרה אחד (~33 אלפיות השנייה ב-30 הרץ) |
| זיהוי מעקב אובדן |
מיידי (מסמן בייט בחבילה הנוכחית) |
שמור על מגבלות מהירות שמרניות כדי להפחית את תחושת השהיה.
מרכיב השהיה התפיסתי הדומיננטי הוא ביצוע מסלול רובוט. נמוך יותר SPEED_PERCENT גורם למערכת להרגיש צפויה יותר למרות שזמן ההליכה הלוך ושוב דומה. התחל ב-25% והעלה רק לאחר שהתנועה מאומתת במלואה.