torque_decompose — DRIVE tactorque op

• Data kinds: matrix × matrix × scalar × scalar × scalar → table

• Call: import fullseye as fs; fs.ledger.torque_decompose(pts, u, area: 'float', G: 'float', nu: 'float', a: 'float | None' = None, window=None, radius: 'float | None' = None, coef: 'float | None' = None, P: 'float | None' = None, mu: 'float | None' = None, torsion_model: 'str' = 'partial_slip') -> 'dict' (implementation को सीधे call करना हो तो import tactorque; tactorque.torque_decompose(pts, u, area: 'float', G: 'float', nu: 'float', a: 'float | None' = None, window=None, radius: 'float | None' = None, coef: 'float | None' = None, P: 'float | None' = None, mu: 'float | None' = None, torsion_model: 'str' = 'partial_slip') -> 'dict', registry से लेना हो तो opsdrive.get("torque_decompose"))

उपयोग

marker field को 3 यांत्रिक मात्राओं में बाँटता है: translation = window के अंदर औसत displacement (shear Q, एक-दिशीय घटक), omega = rigid rotation कोण (rigid_rotation_fit) → torsion Mz (a आवश्यक; omega_curl = औसत curl/2 संदर्भ के लिए), D = divergence dipole (area-weighted) → tilt M1 = D / coef (coef default = half-space का closed form −(1−2ν)/(2G), असली hardware पर calibrated मान दें), tau = (−M1_y, M1_x)। औसत displacement घटाने पर divergence और curl नहीं बदलते (स्थिरांक का derivative 0), इसलिए क्रम से फ़र्क नहीं पड़ता। window (cx, cy, R) contact वृत्त तक सीमित है (half-space में pure shear पूरी window पर divergence dipole बनाता है, module docstring देखें)। radius = divergence के लिए पड़ोस त्रिज्या (आवश्यक)।

मरोड़: बिना फिसलन वाला संबंध (Reissner–Sagoci) M = (16Ga³/3)ω को Mz_no_slip में रखा जाता है। ★torsion_model="partial_slip" (डिफ़ॉल्ट, 2026-10-06 से) में, Hertz संपर्क (अभिलंब बल P, घर्षण mu, संपर्क त्रिज्या a) की आंशिक फिसलन के संख्यात्मक हल (cuttouch.torsion_partial_slip के contact और from_no_slip_read) से सुधारा गया मान Mz में लौटाया जाता है —— Hertz संपर्क का मरोड़ किनारे से अवश्य फिसलता है, इसलिए बिना फिसलन वाला संबंध ही रखने पर M को अधिक पढ़ा जाता है (पूर्ण फिसलन तक के अनुपात 0.5 पर +33 %, 0.8 पर +85 %)। Mz_ratio (पूर्ण फिसलन तक का अनुपात), Mz_c_over_a (चिपके वृत्त की त्रिज्या / a), Mz_readable (पूर्ण फिसलन नहीं, और चिपका वृत्त फ़िटिंग विंडो की त्रिज्या को समाहित करता है —— असत्य हो तो संख्या लौटाई जाती है पर भरोसेमंद नहीं। विंडो न हो तो असत्य) भी लौटाए जाते हैं। a देने पर P या mu न हो तो सुधार संभव नहीं, इसलिए ValueError (चुपचाप बिना फिसलन वाला मान नहीं लौटाता)। "no_slip" 0.4.0 तक के मान हैं (Mz = Mz_no_slip) —— सपाट-सिर इंडेंटर (पूर्ण फिसलन के 8/(3π) गुना तक बिना फिसलन सटीक है) या चिपकी डिस्क के लिए। Raises ValueError: area, G ≤ 0, ν [0, 0.5] के बाहर, बिंदुओं का आकार, radius नहीं, विंडो में 3 से कम बिंदु, torsion_model की वर्तनी गलत, partial_slip में a होने पर भी P / mu धनात्मक परिमित नहीं।

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• poc_tactile_dipole_torque — py -3.11 examples/poc_tactile_dipole_torque.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same

इसी category के (tactorque)

punch_pressure · punch_surface_uz · hertz_pressure_shifted · ellipse_pressure_shifted · pressure_first_moment · boussinesq_kernel · boussinesq_surface_displacement · surface_divergence_closed_form


*Provenance: tactorque.py — DRIVE operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.