सॉफ़्टवेयर एवं ड्राइवर सेटअप

पैक्सिनी एसडीके स्थापित करें, पायथन में दबाव डेटा स्ट्रीम करें, संपर्क हीटमैप की कल्पना करें, वैकल्पिक ROS2 एकीकरण जोड़ें, और पूर्ण डेटा संग्रह पाइपलाइनों के लिए अपने रोबोट आर्म के साथ सिंक्रनाइज़ करें।

चरण 1 - स्थापना

पैक्सिनी एसडीके स्थापित करें

Paxini Gen3 USB HID पर संचार करता है - किसी कर्नेल मॉड्यूल या विक्रेता ड्राइवर की आवश्यकता नहीं है। पायथन एसडीके निम्न-स्तरीय एचआईडी प्रोटोकॉल को लपेटता है और एक स्वच्छ स्ट्रीमिंग एपीआई को उजागर करता है।

कोई भी OS समर्थित Gen3 एक मानक USB HID डिवाइस के रूप में सूचीबद्ध है। विंडोज़, मैकओएस और लिनक्स सभी इनबॉक्स ड्राइवरों के साथ इसका समर्थन करते हैं। पायथॉन 3.10 या बाद का संस्करण आवश्यक है।
# Python 3.10+ required पिप पैक्सिनी-एसडीके स्थापित करें # With visualization extras (matplotlib, numpy) पिप इंस्टाल "पैक्सिनी-एसडीके[अर्थात्]" # With ROS2 bridge (requires ROS2 Humble or Jazzy) पिप इंस्टाल "पैक्सिनी-एसडीके[रोस2]"

इंस्टॉल सत्यापित करें:

पायथन -सी "आयात पैक्सिनी; प्रिंट (पैक्सिनी.__संस्करण__)" # Expected: 1.2.x or later
चरण 2 - यूएसबी डिटेक्शन

सेंसर का पता लगाना

Gen3 सेंसर को USB-C के माध्यम से अपने कंप्यूटर में प्लग करें। इसकी पहचान की पुष्टि करने के लिए SDK की डिवाइस डिस्कवरी उपयोगिता का उपयोग करें:

पायथन -एम पैक्सिनी.डिस्कवर # Example output: # Found 1 Paxini device(s): # [0] PX-6AX-GEN3 serial=PX3A0042 firmware=1.2.4 variant=fingertip

मल्टी-सेंसर सेटअप के लिए (उदाहरण के लिए, यूएसबी हब पर पांच उंगलियां):

पायथन -एम पैक्सिनी.डिस्कवर --सभी # 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) # ...
लिनक्स यूएसबी अनुमतियाँ Linux पर, आपको बिना रूट के HID डिवाइस तक पहुँचने के लिए udev नियम जोड़ने की आवश्यकता हो सकती है। दौड़ना sudo python -m paxini.install_udev एक बार नियम स्थापित करने के लिए, फिर सेंसर को अनप्लग करें और दोबारा प्लग करें।
चरण 3 - स्ट्रीमिंग एपीआई

पायथन स्ट्रीमिंग एपीआई

कोर एपीआई एक कॉलबैक-आधारित स्ट्रीम है। प्रत्येक फ़्रेम एक प्रदान करता है टैक्टाइलफ़्रेम पूर्ण दबाव सारणी और मेटाडेटा युक्त वस्तु।

# Minimal streaming example — 5 lines पैक्सिनी आयात करें सेंसर = पैक्सिनी.सेंसर() # connects to first detected device सेंसर.स्टार्ट() Sensor.stream() में फ़्रेम के लिए: प्रिंट(frame.pressure_map) # 2D numpy array, shape (rows, cols) प्रिंट(frame.total_force_n) # float, total normal force in Newtons

सभी सार्वजनिक एपीआई विधियाँ:

विधि/संपत्ति विवरण रिटर्न
सेंसर.स्टार्ट()स्ट्रीमिंग शुरू करें; गैर अवरुद्धकोई नहीं
सेंसर.स्टॉप()धारा को सफाई से रोकेंकोई नहीं
सेंसर.स्ट्रीम()जेनरेटर कॉन्फ़िगर हर्ट्ज़ पर टैक्टाइलफ़्रेम ऑब्जेक्ट प्रदान करता हैजेनरेटर[टैक्टाइलफ़्रेम]
सेंसर.नवीनतम()अवरोधित किए बिना नवीनतम फ़्रेम लौटाता हैटैक्टाइलफ़्रेम
सेंसर.सेट_रेट(हर्ट्ज)नमूना दर निर्धारित करें (यूएसबी-सी के लिए 50-500 हर्ट्ज, बीएलई के लिए 50-200 हर्ट्ज)कोई नहीं
सेंसर.कैलिब्रेट()वर्तमान विश्राम भार के विरुद्ध शून्य-ऑफ़सेट अंशांकनकोई नहीं
सेंसर.सीरियलडिवाइस सीरियल नंबर स्ट्रिंगएसटीआर
सेंसर.वैरिएंट"उंगलियों की नोक" | "फिंगर-पैड" | "हथेली"एसटीआर
चरण 4 - डेटा प्रारूप

स्पर्शनीय डेटा प्रारूप

प्रत्येक टैक्टाइलफ़्रेम रोकना:

मैदान प्रकार विवरण
फ़्रेम.टाइमस्टैम्प_एनएसint यहाँनैनोसेकंड टाइमस्टैम्प (मोनोटोनिक, होस्ट घड़ी)
फ़्रेम.दबाव_मानचित्रnp.ndarray (एच, डब्ल्यू) फ्लोट32प्रति टैक्सेल केपीए में दबाव। आकार विभिन्न प्रकार से भिन्न होता है: उंगलियों की नोक 8×8 है, हथेली 16×12 है।
फ़्रेम.संपर्क_मास्कnp.ndarray (एच, डब्ल्यू) बूलसत्य जहां दबाव संपर्क सीमा से अधिक है (डिफ़ॉल्ट: 5 केपीए)
फ़्रेम.contact_area_mm2तैरनासक्रिय टैक्सल क्षेत्रों का योग मिमी² में
फ्रेम.टोटल_फोर्स_एनतैरनान्यूटन में, सभी करों में एकीकृत सामान्य बल
फ़्रेम.contact_centroid(फ्लोट, फ्लोट)(पंक्ति, स्तंभ) टैक्सेल निर्देशांक में संपर्क क्षेत्र का केन्द्रक
फ़्रेम.इन_संपर्कबूलयदि total_force_n संपर्क सीमा से अधिक है तो सत्य है (डिफ़ॉल्ट: 0.05 N)
फ़्रेम.सेकint यहाँफ़्रेम अनुक्रम संख्या को नीरस रूप से बढ़ाना
स्थानिक संकल्प फिंगरटिप वैरिएंट: 8×8 टैक्सेल ऐरे जो 14×14 मिमी, 1.75 मिमी टैक्सेल पिच को कवर करता है। पाम संस्करण: 16×12 सरणी 48×36 मिमी, 3 मिमी पिच को कवर करती है। प्रत्येक टैक्सेल का माप 0-600 kPa है।
चरण 5 - विज़ुअलाइज़ेशन

लाइव हीटमैप विज़ुअलाइज़ेशन

SDK एक रेडी-टू-रन लाइव विज़ुअलाइज़र शिप करता है। इसे सीधे कमांड लाइन से चलाएँ:

# Launch live heatmap — press Q to quit पायथन -एम पैक्सिनी.विज़ुअलाइज़ # Multi-sensor visualization (e.g., 5-finger setup) पायथन -एम पैक्सिनी.विज़ुअलाइज़ --सभी

या का उपयोग करके अपनी स्वयं की स्क्रिप्ट में एम्बेड करें paxini.अर्थात मॉड्यूल:

पैक्सिनी आयात करें paxini.viz से हीटमैपविंडो आयात करें सेंसर = पैक्सिनी.सेंसर() सेंसर.स्टार्ट() विंडो = हीटमैपविंडो (शीर्षक = "पैक्सिनी जेन3 - फिंगरटिप") Sensor.stream() में फ़्रेम के लिए: window.update(frame.pressure_map) यदि window.should_close(): तोड़ना सेंसर.स्टॉप()
चरण 6 (वैकल्पिक) - ROS2

ROS2 इंटरफ़ेस

ROS2 ब्रिज प्रकाशित करता है सेंसर_संदेश/छवि (दबाव मानचित्र) और एक प्रथा paxini_msgs/TactileFrame प्रति सेंसर विषय। ROS2 विनम्र या जैज़ी की आवश्यकता है।

# Install the ROS2 extras and launch the node पिप इंस्टाल "पैक्सिनी-एसडीके[रोस2]" ros2 रन paxini_ros2 सेंसर_नोड # 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.sync मॉड्यूल. यह एक साझा घड़ी के विरुद्ध सभी सेंसर फ़्रेमों को टाइमस्टैम्प करता है और एक ब्लॉकिंग एपीआई प्रदान करता है जो सिंक्रनाइज़ (आर्म_स्टेट, टैक्टाइल_फ़्रेम) जोड़े उत्पन्न करता है:

पैक्सिनी आयात करें paxini.sync से मल्टीसोर्ससिंक आयात करें # Initialize sensor and arm interface सेंसर = पैक्सिनी.सेंसर() भुजा = YourArmInterface() # any arm with a get_joint_state() method सिंक = मल्टीसोर्ससिंक( सेंसर=सेंसर, भुजा = भुजा, अधिकतम_dt_ms=5.0 # reject pairs with >5ms timestamp gap ) आर्म_स्टेट के लिए, सिंक.स्ट्रीम में स्पर्श(): प्रिंट(arm_state.joint_positions) प्रिंट(tactile.total_force_n) प्रिंट(tactile.pressure_map)
टाइमस्टैम्प संरेखण Gen3 टाइमस्टैम्प USB इंटरप्ट समय पर होस्ट घड़ी का उपयोग करके नैनोसेकंड रिज़ॉल्यूशन के साथ फ्रेम करता है। जिटर आम तौर पर <0.5 एमएस है। MultiSourceSync जब आर्म और सेंसर की दरें भिन्न होती हैं तो क्लास इंटरपोलेशन को संभालती है।
समस्या निवारण

शीर्ष 3 मुद्दे

paxini.discover() खाली सूची लौटाता है

सेंसर का पता नहीं चल रहा है. क्रम में जांचें: (1) एक अलग यूएसबी-सी केबल आज़माएं - कुछ केबल केवल चार्ज-चार्ज होते हैं और डेटा नहीं ले जाते हैं। (2) लिनक्स पर चलाएँ sudo python -m paxini.install_udev फिर सेंसर को अनप्लग/रीप्लग करें। (3) पुष्टि करें कि सेंसर एलईडी ठोस है (ब्लिंक नहीं कर रही है) - ब्लिंकिंग का मतलब है कि यह फर्मवेयर अपडेट मोड में है; बाहर निकलने के लिए रीसेट बटन को 5 सेकंड तक दबाए रखें।

दबाव_मैप दबाने पर सभी शून्य होते हैं

सेंसर को अंशांकन की आवश्यकता है या थ्रेशोल्ड बहुत अधिक सेट है। दौड़ना sensor.calibrate() सेंसर अनलोड के साथ (कोई संपर्क नहीं)। यदि समस्या बनी रहती है, तो जांच लें कि सेंसर वैरिएंट आपके माउंट से मेल खाता है - उंगलियों पर स्थापित पाम सेंसर बड़े टैक्सल क्षेत्र के कारण बहुत कम दबाव मान दिखाएगा। फर्मवेयर संस्करण 1.2+ की भी पुष्टि करें python -m paxini.discover.

मल्टीसोर्ससिंक टाइमस्टैम्पड्रिफ्ट एरर बढ़ाता है

आर्म इंटरफ़ेस क्लॉक और सेंसर टाइमस्टैम्प में अधिक अंतर हो रहा है max_dt_ms. यह आम तौर पर आर्म एसडीके द्वारा पुरानी संयुक्त स्थिति (उदाहरण के लिए, कम दर पर बफर्ड) लौटाने के कारण होता है। बढ़ोतरी max_dt_ms पहले परीक्षण के रूप में 10.0 तक, फिर जांच करें कि आर्म स्टेट रिफ्रेश दर अपेक्षा से कम क्यों है। यूएसबी आर्म्स के लिए, पुष्टि करें कि पावर प्रबंधन द्वारा यूएसबी पोलिंग दर को कम नहीं किया जा रहा है (sudo powertop लिनक्स पर)।

अभी भी अटके हुए हैं? में पोस्ट करें मंच प्रश्न सूत्र आपके ओएस, एसडीके संस्करण के साथ (paxini.__version__), और सटीक त्रुटि आउटपुट।