pad_tactile_read — DRIVE pegtactile op

• Data kinds: table × table → table

• Call: import fullseye as fs; fs.ledger.pad_tactile_read(frame: 'dict', pad: 'dict', ctx=None, track=None, pixelwise: 'bool' = True, torsion_model: 'str' = 'partial_slip') -> 'dict' (to call the implementation directly, import pegtactile; pegtactile.pad_tactile_read(frame: 'dict', pad: 'dict', ctx=None, track=None, pixelwise: 'bool' = True, torsion_model: 'str' = 'partial_slip') -> 'dict'; from the registry, opsdrive.get("pad_tactile_read"))

Usage

Image of 1 pad → (P̂, q̂, torsion).

P̂ = shading → photometric normals (tacsim.membrane_recover) → contact radius (the centre is known = pad centre; if pixelwise, tacsim.contact_radius_fit_pixelwise, if false the binned version tacsim.contact_radius_fit = the trap control) → tacsim.hertz_force. q̂ = marker tracking (tacslip.marker_track; skipped if supplied via track) → subtract the normal-load ūr (closed form from P̂) → two-component Mindlin fit (tacslip.mindlin_fit_vector). Torsion = on the residual after subtracting the fitted shear field, a rigid rotation over the stick core (r < 0.6 â) (tactorque.rigid_rotation_fit) → the no-slip relation M = (16Gâ³/3)ω (Reissner–Sagoci) gives torsion_no_slip. ★With torsion_model="partial_slip" (the default, since 2026-10-06), from_no_slip_read returns that value corrected by the numerical partial-slip solution (torsion of cuttouch.torsion_partial_slip) — torsion of a Hertz contact always slips from the edge, so keeping the no-slip relation over-reads M (+33 % at a ratio of 0.5 to full slip, +85 % at 0.8). "no_slip" gives the value of 0.4.0 and earlier (torsion = torsion_no_slip). Also returns torsion_c_over_a (radius of the stick circle / a) and torsion_readable (the stick circle contains the fitting core r < 0.6a and it is not full slip — if false the number is still returned but cannot be relied on). Second implementation Q_stick = value obtained by inverting Mindlin's δx formula from the uniform displacement δ̂ of the stick core (μ is a calibrated value). Returns P, a, q (2,), Q, phi, torsion, torsion_no_slip, torsion_model, torsion_c_over_a, torsion_readable, c_over_a, Q_stick, matched, rms_px (fit residual), track. Raises ValueError: frame lacks rgb or shading, fewer than 3 markers tracked, misspelled torsion_model.

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• poc_knife_tactile_toughness — py -3.11 examples/poc_knife_tactile_toughness.py

• poc_peg_insertion_tactile — py -3.11 examples/poc_peg_insertion_tactile.py

Ops the type connects to (they accept table as input)

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

Same category (pegtactile)

pad_params · pad_context · peg_wrench_to_pad_loads · pad_loads_to_peg_wrench · pad_shear_asymmetry · pad_marker_displacement · pad_tactile_frame · contact_candidates


*Provenance: pegtactile.py — DRIVE operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

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