הגדרת תוכנה ומנהלי התקנים

התקן את Paxini SDK, הזרם נתוני לחץ ב-Python, הדמיית מפות חום של אנשי קשר, הוסף אינטגרציה אופציונלית של ROS2 וסנכרן עם זרוע הרובוט שלך לצינורות איסוף נתונים מלאים.

שלב 1 - התקנה

התקן את Paxini SDK

ה-Paxini Gen3 מתקשר באמצעות USB HID - אין צורך במודולי ליבה או מנהלי התקנים של ספקים. Python SDK עוטף את פרוטוקול HID ברמה נמוכה וחושף ממשק API של סטרימינג נקי.

כל מערכת הפעלה נתמכת ה-Gen3 מונה כהתקן USB HID סטנדרטי. Windows, macOS ו-Linux תומכים כולם עם מנהלי התקנים של תיבת דואר נכנס. נדרשת Python 3.10 ואילך.
# Python 3.10+ required pip להתקין paxini-sdk # With visualization extras (matplotlib, numpy) התקנת pip "paxini-sdk[viz]" # With ROS2 bridge (requires ROS2 Humble or Jazzy) התקנת pip "paxini-sdk[ros2]"

אמת את ההתקנה:

python -c "import paxini; print(paxini.__version__)" # Expected: 1.2.x or later
שלב 2 - זיהוי USB

זיהוי החיישן

חבר את חיישן Gen3 למחשב שלך באמצעות USB-C. השתמש בכלי השירות לגילוי המכשיר של ה-SDK כדי לוודא שהוא מזוהה:

python -m paxini.discover # Example output: # Found 1 Paxini device(s): # [0] PX-6AX-GEN3 serial=PX3A0042 firmware=1.2.4 variant=fingertip

עבור הגדרות ריבוי חיישנים (למשל, חמש אצבעות על רכזת USB):

python -m paxini.discover --all # Found 5 Paxini device(s): # [0] PX-6AX-GEN3 serial=PX3A0042 variant=fingertip (index 0) # [1] PX-6AX-GEN3 serial=PX3A0043 variant=fingertip (index 1) # ...
הרשאות USB של Linux בלינוקס, ייתכן שיהיה עליך להוסיף כלל udev כדי לגשת למכשירי HID ללא שורש. לָרוּץ sudo python -m paxini.install_udev פעם אחת כדי להתקין את הכלל, ואז נתק וחבר מחדש את החיישן.
שלב 3 - סטרימינג API

Python Streaming API

ממשק API הליבה הוא זרם מבוסס התקשרות חוזרת. כל מסגרת מספקת א TactileFrame אובייקט המכיל את מערך הלחץ המלא ומטא נתונים.

# Minimal streaming example — 5 lines ייבוא פקסיני חיישן = paxini.Sensor() # connects to first detected device sensor.start() עבור מסגרת ב-sensor.stream(): print(frame.pressure_map) # 2D numpy array, shape (rows, cols) print(frame.total_force_n) # float, total normal force in Newtons

כל שיטות ה-API הציבוריות:

שיטה / נכס תֵאוּר מחזיר
sensor.start()התחל בסטרימינג; לא חוסםאַף לֹא אֶחָד
sensor.stop()עצור את הזרם בצורה נקייהאַף לֹא אֶחָד
sensor.stream()מחולל מניב אובייקטי TactileFrame ב-Hz מוגדרGenerator[TactileFrame]
sensor.latest()מחזירה את המסגרת העדכנית ביותר מבלי לחסוםTactileFrame
sensor.set_rate(hz)הגדר קצב דגימה (50–500 הרץ עבור USB-C, 50–200 הרץ עבור BLE)אַף לֹא אֶחָד
sensor.calibrate()כיול אפס היסט נגד עומס המנוחה הנוכחיאַף לֹא אֶחָד
חיישן.טורימחרוזת מספר סידורי של המכשירstr
חיישן.variant"קצה האצבע" | "רפידת אצבע" | "כַּף הַיָד"str
שלב 4 - פורמט נתונים

פורמט נתונים מישוש

כֹּל TactileFrame מכיל:

שָׂדֶה סוּג תֵאוּר
frame.timestamp_nsintחותמת זמן ננו-שנייה (מונוטונית, שעון מארח)
frame.pressure_mapnp.ndarray (H, W) float32לחץ בק"פ לטקסל. הצורה משתנה לפי גרסה: קצה האצבע הוא 8×8, כף היד היא 16×12.
frame.contact_masknp.ndarray (H, W) boolנכון כאשר הלחץ חורג מסף המגע (ברירת מחדל: 5 kPa)
frame.contact_area_mm2לָצוּףסכום שטחי טקסל פעילים במ"מ
frame.total_force_nלָצוּףכוח נורמלי משולב על פני כל הטקסלים, בניוטונים
frame.contact_centroid(לצוף, לצוף)(שורה, קול) מרכז של אזור המגע בקואורדינטות טקסל
frame.in_contactboolנכון אם total_force_n חורג מסף מגע (ברירת מחדל: 0.05 N)
frame.seqintמספר רצף של פריים מונוטוני
רזולוציה מרחבית גרסת קצות אצבעות: מערך 8×8 טקסל המכסה 14×14 מ"מ, גובה 1.75 מ"מ טקסל. גרסת כף היד: מערך 16×12 המכסה 48×36 מ"מ, גובה 3 מ"מ. כל taxel מודד 0-600 kPa.
שלב 5 - הדמיה

הדמיית מפת חום חיה

ה-SDK שולח מכשיר חזותי חי מוכן להפעלה. הפעל אותו ישירות משורת הפקודה:

# Launch live heatmap — press Q to quit python -m paxini.visualize # Multi-sensor visualization (e.g., 5-finger setup) python -m paxini.visualize --all

או להטמיע בסקריפט משלך באמצעות ה paxini.viz מודול:

ייבוא פקסיני מאת paxini.viz ייבוא HeatmapWindow חיישן = paxini.Sensor() sensor.start() window = HeatmapWindow(title="Paxini Gen3 — קצה אצבע") עבור מסגרת ב-sensor.stream(): window.update(frame.pressure_map) if window.should_close(): לשבור sensor.stop()
שלב 6 (אופציונלי) - ROS2

ממשק ROS2

גשר ROS2 מפרסם א sensor_msgs/Image (מפת לחץ) ומנהג paxini_msgs/TactileFrame נושא לכל חיישן. דורש ROS2 Humble או Jazzy.

# Install the ROS2 extras and launch the node התקנת pip "paxini-sdk[ros2]" ros2 הפעל paxini_ros2 sensor_node # Published topics (per sensor): # /paxini/PX3A0042/pressure_image sensor_msgs/Image # /paxini/PX3A0042/tactile_frame paxini_msgs/TactileFrame # /paxini/PX3A0042/contact_event std_msgs/Bool

עבור הגדרות ריבוי חיישנים, כל מכשיר מפרסם תחת המספר הסידורי שלו. אתה יכול למפות מחדש נושאים בקובץ ההשקה שלך באמצעות מיפוי מחדש של ROS2 רגיל.

שלב 7 - שילוב זרועות

שילוב זרוע רובוט

כדי לסנכרן נתוני Paxini עם מצב מפרק זרוע הרובוט, השתמש ב- paxini.sync מודול. זה חותמת את כל מסגרות החיישנים מול שעון משותף ומספקת API חוסם שמניב זוגות מסונכרנים (arm_state, tactile_frame):

ייבוא פקסיני מ-paxini.sync ייבוא MultiSourceSync # Initialize sensor and arm interface חיישן = paxini.Sensor() arm = YourArmInterface() # any arm with a get_joint_state() method sync = MultiSourceSync( חיישן=חיישן, זרוע=זרוע, max_dt_ms=5.0 # reject pairs with >5ms timestamp gap ) עבור arm_state, מישוש ב-sync.stream(): print(arm_state.joint_positions) print(tactile.total_force_n) print(tactile.pressure_map)
יישור חותמת זמן ה-Gen3 חותמת מסגרות ברזולוציה של ננו-שניות באמצעות שעון המארח בזמן הפסקת USB. ריצוד הוא בדרך כלל <0.5 אלפיות השנייה. ה MultiSourceSync מחלקה מטפלת באינטרפולציה כאשר שיעורי הזרוע והחיישנים שונים.
פתרון בעיות

3 הבעיות המובילות

paxini.discover() מחזיר רשימה ריקה

החיישן אינו מזוהה. בדוק לפי הסדר: (1) נסה כבל USB-C אחר - חלק מהכבלים נטענים בלבד ואינם נושאים נתונים. (2) ב-Linux, הפעל sudo python -m paxini.install_udev לאחר מכן נתק/נתק את החיישן. (3) ודא שנורית החיישן מוצקה (לא מהבהבת) - מהבהב אומר שהיא במצב עדכון קושחה; החזק את לחצן האיפוס למשך 5 שניות כדי לצאת.

לחץ_מפה הוא כולו אפסים בעת לחיצה

החיישן זקוק לכיול או שהסף מוגדר גבוה מדי. לָרוּץ sensor.calibrate() עם החיישן לא טעון (ללא מגע). אם הבעיה נמשכת, בדוק שגרסת החיישן תואמת את התושבת שלך - חיישן כף היד המותקן על קצה האצבע יציג ערכי לחץ נמוכים מאוד בגלל שטח הטקסל הגדול יותר. אשר גם את גירסת הקושחה 1.2+ עם python -m paxini.discover.

MultiSourceSync מעלה את TimestampDriftError

שעון ממשק הזרוע וחותמת הזמן של החיישן משתנים ביותר מ max_dt_ms. זה נגרם בדרך כלל על ידי ה-SDK של הזרוע שמחזיר מצב מפרק מעופש (למשל, מאוחסן בקצב נמוך יותר). לְהַגדִיל max_dt_ms ל-10.0 כבדיקה ראשונה, ואז בדוק מדוע קצב הרענון של מצב הזרוע נמוך מהצפוי. עבור זרועות USB, ודא שקצב סקר ה-USB אינו מצטמצם על ידי ניהול צריכת החשמל (sudo powertop בלינוקס).

עדיין תקוע? פרסם ב שרשור שאלות בפורום עם מערכת ההפעלה שלך, גרסת SDK (paxini.__version__), ופלט השגיאה המדויק.