जुकियाओ स्पर्शनीय दस्ताने

डेटा संग्रहण

रोबोट की संयुक्त स्थिति और कैमरा वीडियो के साथ-साथ संपर्क दबाव रिकॉर्ड करें। दस्ताना एक स्पर्शनीय तौर-तरीका जोड़ता है जो पकड़ लेता है कितना कठिन रोबोट ग्रिपर दबा रहा है - केवल दृष्टि के लिए अदृश्य जानकारी।

दस्ताना आपके डेटासेट में क्या जोड़ता है मानक टेलीऑपरेशन डेटासेट संयुक्त स्थिति, वेग और कैमरा छवियों को कैप्चर करते हैं। जुकियाओ ग्लव को जोड़ने से 64-नोड, 200 हर्ट्ज दबाव मानचित्र रिकॉर्ड होता है जो प्रत्येक पकड़ के दौरान संपर्क बल के स्थानिक वितरण को दर्शाता है। इस डेटा पर प्रशिक्षित नीतियां पकड़ बल को संशोधित करना सीख सकती हैं - जो नाजुक या विकृत वस्तुओं के लिए महत्वपूर्ण है।
हार्डवेयर सेटअप

सिस्टम कनेक्शन

कोई भी सॉफ़्टवेयर प्रारंभ करने से पहले सभी डिवाइस कनेक्ट करें. दस्ताना सख्ती से यूएसबी वायर्ड है - कोई वायरलेस मोड नहीं है।

रोबोट भुजा + हाथ

ओर्का हैंड (अनुशंसित) या अन्य अंतिम-प्रभावक। बांह के आधार पर फ़ीटेक यूएसबी एडाप्टर या कैन के माध्यम से कनेक्ट किया गया।

/dev/ttyUSB0 or CAN0

जुकियाओ दस्ताना

पीसी को होस्ट करने के लिए यूएसबी-सी। सीडीसी-एसीएम सीरियल के रूप में प्रकट होता है। 1.5 मीटर केबल; यदि आवश्यक हो तो आवाजाही की स्वतंत्रता के लिए यूएसबी एक्सटेंशन का उपयोग करें।

/dev/ttyACM0

कलाई का कैमरा

USB या GigE कैमरा रोबोट की कलाई पर लगा होता है, जो प्रशिक्षण के लिए वस्तु-केंद्रित दृश्य प्रदान करता है।

/dev/video0 or GigE IP

ओवरहेड कैमरा

दृश्य संदर्भ के लिए निश्चित कार्यक्षेत्र कैमरा। मल्टी-व्यू डेटासेट के लिए कलाई कैमरे के साथ युग्मित करें।

/dev/video2 or GigE IP

टेलीऑपरेशन डिवाइस

लीडर आर्म (एसओ-101 / ओपनआर्म लीडर), वीआर कंट्रोलर, या स्पेसमाउस फॉलोअर रोबोट चला रहा है।

लीडर पोर्ट/HID
रिकॉर्डिंग वर्कफ़्लो

चरण-दर-चरण रिकॉर्डिंग

1

रोबोट की भुजा और हाथ ऊपर लाएँ

आर्म ड्राइवर (और यदि लागू हो तो ओर्का हैंड ड्राइवर) को अलग-अलग टर्मिनलों में प्रारंभ करें। आगे बढ़ने से पहले सत्यापित करें कि Joint_states प्रकाशित हो रहे हैं।

# Terminal 1: Robot arm (example: OpenArm) ros2 लॉन्च openarm_ros2 openarm.launch.py ​​पोर्ट:=/dev/ttyUSB0 # Terminal 2: Orca Hand (if using Orca Hand end-effector) ros2 लॉन्च Orca_ros2 Orca_hand.launch.py ​​port:=/dev/ttyUSB1 # Verify ros2 विषय hz /joint_states # Should be ~100 Hz ros2 विषय hz /orca_hand/joint_states # Should be ~100 Hz
2

जुकियाओ ग्लोव ड्राइवर प्रारंभ करें

ग्लोव ROS2 नोड लॉन्च करें। किसी भी रिकॉर्डिंग सत्र को शुरू करने से पहले सत्यापित करें कि 200 हर्ट्ज डेटा प्रवाहित हो रहा है।

# Terminal 3: Juqiao Glove ros2 लॉन्च किया गया juqiao_glove_ros2 glove.launch.py ​​​​पोर्ट:=/dev/ttyACM0 # Verify pressure data is live ros2 विषय hz /juqiao_glove/tactile_array # Should be ~200 Hz ros2 विषय प्रतिध्वनि /juqiao_glove/grasp_region # Should print region strings
3

कैमरे लॉन्च करें

कलाई और सिर के ऊपर के दृश्यों के लिए कैमरा नोड्स प्रारंभ करें। पुष्टि करें कि छवि विषय लक्ष्य फ़्रेम दर (आमतौर पर 30 एफपीएस) पर प्रकाशित हो रहे हैं।

# Wrist camera (USB) ros2 चलाएँ usb_cam usb_cam_node_exe --ros-args -p video_device:=/dev/video0 -p फ़्रेमरेट:=30.0 # Overhead camera (GigE example) ros2 लॉन्च कैमरा_ros2 gge_camera.launch.py ​​आईपी:=192.168.1.100 # Verify ros2 विषय hz /wrist_camera/image_raw ros2 विषय hz /overhead_camera/image_raw
4

सत्यापित करें कि सभी स्ट्रीम सिंक्रनाइज़ हैं

उपयोग ros2 विषय सूची यह पुष्टि करने के लिए कि सभी आवश्यक विषय मौजूद हैं। किसी भी एपिसोड को रिकॉर्ड करने से पहले जांचें कि टाइमस्टैम्प सभी तौर-तरीकों में 20 एमएस के भीतर हैं।

ros2 विषय सूची | ग्रेप -ई "संयुक्त|स्पर्शीय|छवि|समझ" # Expected topics: # /joint_states (arm, ~100 Hz) # /orca_hand/joint_states (hand, ~100 Hz) # /juqiao_glove/tactile_array (glove, ~200 Hz) # /juqiao_glove/grasp_region (glove, ~200 Hz) # /wrist_camera/image_raw (camera, 30 Hz) # /overhead_camera/image_raw (camera, 30 Hz)
5

LeRobot के साथ एक डेटासेट रिकॉर्ड करें

LeRobot की रिकॉर्ड स्क्रिप्ट का उपयोग करें. --स्पर्शीय-विषय फ़्लैग संयुक्त अवस्थाओं और छवियों के साथ-साथ डेटासेट कॉलम के रूप में ग्लव प्रेशर स्ट्रीम को जोड़ता है।

# Record 50 episodes; press Enter to start each, Space to stop पायथन -एम लेरोबोट.स्क्रिप्ट्स.रिकॉर्ड \ --रोबोट-पथ लेरोबोट/कॉन्फ़िग्स/रोबोट/orca_hand.yaml \ --एफपीएस 30 \ --रेपो-आईडी $HUGGINGFACE_USER/orca_grasp_tactile \ --टैग "जुकियाओ-दस्ताना, स्पर्शनीय, हेरफेर" \ --वार्मअप-टाइम-एस 2 \ --एपिसोड-समय-एस 30 \ --रीसेट-समय-एस 5 \ --संख्या-एपिसोड 50 \ --पुश-टू-हब \ --स्पर्शीय-विषय /juqiao_glove/tactile_array \ --स्पर्शीय-कुंजी स्पर्शनीय_दबाव
अभी तक कोई लेरोबोट --स्पर्शीय-विषय ध्वज नहीं? एसवीआरसी मल्टी-मोडल रिकॉर्डर रैपर का उपयोग करें जो सिंक्रनाइज़ेशन और डेटासेट स्कीमा को स्वचालित रूप से संभालता है: पिप इंस्टाल रोबोटिक्ससेंटर[रिकॉर्डर]
6

आगे बढ़ाने से पहले एपिसोड की समीक्षा करें

हगिंगफेस हब के लिए प्रतिबद्ध होने से पहले स्पर्श डेटा गुणवत्ता को सत्यापित करने के लिए हीटमैप ओवरले के साथ प्रत्येक एपिसोड को दोबारा चलाएं।

# Replay and overlay heatmap on video पायथन -एम रोबोटिक्ससेंटर.स्क्रिप्ट्स.रिव्यू_एपिसोड \ --डेटासेट-पथ ./डेटा/orca_grasp_tactile \ --एपिसोड-सूचकांक 0 \ --ओवरले-स्पर्शीय \ --स्पर्शीय-कुंजी स्पर्शनीय_दबाव # Discard bad episodes पायथन -एम लेरोबोट.स्क्रिप्ट्स.डिलीट_एपिसोड \ --डेटासेट-पथ ./डेटा/orca_grasp_tactile \ --एपिसोड 3 7 12 # episode indices to discard
7

हगिंगफेस हब पर पुश करें

मान्य डेटासेट अपलोड करें. डेटासेट कार्ड स्पर्श सहित तौर-तरीकों के विवरण के साथ स्वतः उत्पन्न होता है।

हगिंगफेस-सीएलआई लॉगिन # first time only पायथन -एम लेरोबोट.स्क्रिप्ट्स.पुश_डेटासेट \ --डेटासेट-पथ ./डेटा/orca_grasp_tactile \ --रेपो-आईडी $HUGGINGFACE_USER/orca_grasp_tactile # Verify upload पायथन -सी " डेटासेट से लोड_डेटासेट आयात करें डीएस = लोड_डेटासेट('$HUGGINGFACE_USER/orca_grasp_tactile', स्प्लिट='ट्रेन') प्रिंट(ds.column_names) प्रिंट(ds.features['tactile_pressures']) "
संदर्भ

डेटासेट स्कीमा

डेटासेट में प्रत्येक फ़्रेम में निम्नलिखित कॉलम होते हैं। सभी सरणियों को फ्लोट32 पैराक्वेट कॉलम के रूप में संग्रहीत किया जाता है; MP4 वीडियो अनुक्रम के रूप में छवियाँ।

स्तंभआकार/प्रकारविवरण
अवलोकन.स्थिति फ्लोट32[6] रोबोट भुजा संयुक्त स्थिति (रेडियन)। यदि 6-डीओएफ आर्म का उपयोग किया जाता है तो इंडेक्स 6 ग्रिपर एपर्चर है।
अवलोकन.हाथ_स्थिति फ्लोट32[17] ओर्का हाथ संयुक्त स्थिति (रेडियन), 17 डीओएफ। यदि कोई कुशल हाथ नहीं है तो छोड़ें। मेटाडेटा में प्रति संयुक्त नाम लेबल किया गया।
अवलोकन.स्पर्शीय_दबाव फ्लोट32[64] जुकियाओ ग्लोव ने प्रति नोड दबाव को सामान्यीकृत किया, 0.0 (कोई संपर्क नहीं) से 1.0 (पूर्ण स्केल)। रोबोट फ्रेम दर से मिलान करने के लिए 200 हर्ट्ज का डाउनसैंपल किया गया।
अवलोकन.स्पर्शीय_दबाव_कच्चा uint16[64] कच्चे 16-बिट एडीसी मान। पुनर्अंशांकन के बाद पुन: सामान्यीकरण के लिए सुरक्षित रखें। वैकल्पिक; डेटासेट का आकार कम करने के लिए इसे छोड़ें।
अवलोकन.समझ_क्षेत्र एसटीआर सक्रिय संपर्क क्षेत्र अनुमानी: "हथेली", "अँगूठा", "अनुक्रमणिका", "मध्य", "अँगूठी", "पिंकी", या "" (कोई संपर्क नहीं).
अवलोकन.छवियाँ.कलाई uint8[एच,डब्ल्यू,3] 30 एफपीएस पर कलाई कैमरा आरजीबी फ्रेम, एमपी4 वीडियो अनुक्रम के रूप में संग्रहीत।
अवलोकन.छवियाँ.ओवरहेड uint8[एच,डब्ल्यू,3] 30 एफपीएस पर ओवरहेड कैमरा आरजीबी फ्रेम।
कार्रवाई फ्लोट32[6 या 23] बांह (6) और वैकल्पिक रूप से हाथ (17) के लिए संयुक्त स्थिति को लक्षित करें। आकार इस बात पर निर्भर करता है कि कुशल हाथ मौजूद है या नहीं।
भाषा_निर्देश एसटीआर कार्य विवरण, उदा. "अंडे को बिना तोड़े उठाओ". भाषा-अनुकूलित नीति प्रशिक्षण को सक्षम बनाता है।
एपिसोड_इंडेक्स int यहाँ डेटासेट के भीतर एपिसोड नंबर.
फ़्रेम_सूचकांक int यहाँ एपिसोड के भीतर फ़्रेम संख्या (0-अनुक्रमित)।
TIMESTAMP फ्लोट64 एपिसोड शुरू होने के बाद से सेकंड बीत गए।

स्पर्शनीय डाउनसैंपलिंग

दस्ताना 200 हर्ट्ज़ पर प्रवाहित होता है; रोबोट और कैमरे आमतौर पर 30-100 हर्ट्ज़ पर चलते हैं। रिकॉर्डर निकटतम-पड़ोसी टाइमस्टैम्प मिलान का उपयोग करके फ़्रेम को संरेखित करता है। संपूर्ण 200 हर्ट्ज स्पर्श धारा को एक अलग सरणी के रूप में संरक्षित करने के लिए:

# Store full-rate tactile as a variable-length array per frame पायथन -एम रोबोटिक्ससेंटर.स्क्रिप्ट्स.रिकॉर्ड \ --स्पर्शीय-मोड पूर्ण दर # default is "matched" (one per robot frame) # This produces a ragged column: observation.tactile_sequence # shape per row: float32[N, 64] where N varies (typically 6-7 frames at 200Hz/30fps)
गुणवत्ता

एपिसोड गुणवत्ता चेकलिस्ट

प्रत्येक एपिसोड को अपने डेटासेट में शामिल करने से पहले इन मानदंडों के अनुसार उसकी समीक्षा करें। एक बुरा प्रकरण नकली स्पर्श पैटर्न पेश कर सकता है जो नीति प्रशिक्षण को ख़राब कर देता है।

  • स्पर्श धारा निरंतर है - कोई फ्रेम अंतराल नहीं सत्यापित करें फ़्रेम.अनुक्रम बिना रुकावट के वेतन वृद्धि। फ़्रेम ड्रॉप्स स्पर्श स्तंभ में दोहराए गए मानों के रूप में दिखाई देते हैं।
  • विश्राम के समय आधार रेखा शून्य के करीब होती है (<0.03) एपिसोड प्रारंभ में (किसी भी संपर्क से पहले), अधिकतम दबाव नोड को 0.03 से नीचे पढ़ना चाहिए। आराम के समय 0.05 से ऊपर बहाव यह दर्शाता है कि दस्ताने को पुनः अंशांकन की आवश्यकता है।
  • संपर्क ईवेंट वीडियो में दृश्यमान पकड़ के साथ संरेखित होते हैं के साथ दोबारा खेलें --ओवरले-स्पर्शीय. दबाव स्पाइक्स (अधिकतम नोड > 0.4) कलाई कैमरे में दृश्यमान ग्रिपर बंद होने के साथ मेल खाना चाहिए।
  • संपर्क चरण के दौरान पकड़ क्षेत्र सुसंगत रहता है घास_क्षेत्र प्रत्येक पकड़ के दौरान एक या दो क्षेत्रों पर स्थिर होना चाहिए (उदा. "हथेली" + "अनुक्रमणिका"). तेजी से बदलते क्षेत्र दस्ताने के गलत संरेखण या शोर संकेत का संकेत देते हैं।
  • रोबोट स्थिति के सापेक्ष दस्ताने विलंबता <20 एमएस स्पर्शीय घटना की शुरुआत की तुलना ग्रिपर वेग स्पाइक से करें। विलंबता > 20 एमएस यूएसबी हब कंजेशन का सुझाव देता है - दस्ताने को सीधे होस्ट यूएसबी पोर्ट से कनेक्ट करें।
  • भाषा निर्देश प्रदर्शित कार्य से मेल खाता है भाषा-वातानुकूलित डेटासेट के लिए, सुनिश्चित करें कि एपिसोड प्रारंभ में दर्ज किया गया निर्देश सटीक रूप से वर्णन करता है कि ऑपरेटर ने वास्तव में क्या प्रदर्शित किया है।
  • रोबोट की गति में कोई केबल हस्तक्षेप नहीं 1.5 मीटर यूएसबी केबल को एपिसोड के दौरान ऑपरेटर के हाथ की गतिविधियों को प्रतिबंधित नहीं करना चाहिए या दस्ताने को नहीं खींचना चाहिए। अग्रबाहु पर एक केबल प्रबंधन क्लिप का उपयोग करें।
नीति प्रशिक्षण

स्पर्शीय प्रेक्षणों के साथ प्रशिक्षण

जो नीतियां स्पर्श इनपुट का उपभोग करती हैं, वे आम तौर पर केवल-दृष्टि बेसलाइन की तुलना में संपर्क-संवेदनशील कार्यों (नाज़ुक वस्तु हैंडलिंग, खूंटी प्रविष्टि, कपड़ा मोड़ना) पर 15-30% सुधार देखती हैं।

# ACT policy with tactile observations (SVRC fork adds tactile encoder) पायथन -एम लेरोबोट.स्क्रिप्ट्स.ट्रेन \ --डेटासेट-रेपो-आईडी $HUGGINGFACE_USER/orca_grasp_tactile \ --नीति अधिनियम \ --policy.observation_keys \ "अवलोकन.छवियाँ.कलाई" \ "अवलोकन.छवियां.ओवरहेड" \ "अवलोकन.स्थिति" \ "अवलोकन.हाथ_स्थिति" \ "अवलोकन.स्पर्शीय_दबाव" \ --आउटपुट-डीआईआर आउटपुट/एक्ट_टैक्टाइल # The tactile encoder maps float32[64] → latent via a small MLP # No special architecture changes required for ACT or Diffusion Policy
# Diffusion Policy with tactile (identical --observation_keys, different policy flag) पायथन -एम लेरोबोट.स्क्रिप्ट्स.ट्रेन \ --डेटासेट-रेपो-आईडी $HUGGINGFACE_USER/orca_grasp_tactile \ --नीति प्रसार \ --policy.observation_keys \ "अवलोकन.छवियाँ.कलाई" \ "अवलोकन.स्थिति" \ "अवलोकन.स्पर्शीय_दबाव" \ --आउटपुट-डीआईआर आउटपुट/डिफ्यूजन_टैक्टाइल
युक्ति: समान समय पर स्पर्श को अलग करें उत्तीर्ण अवलोकन.स्पर्शीय_दबाव = शून्य(64) यह मापने के लिए कि नीति स्पर्श बनाम दृष्टि पर कितनी निर्भर करती है। इससे पता चलता है कि आपके कार्य के लिए स्पर्श की आवश्यकता है या दृष्टि पर्याप्त है।