pegtactile op• Data kinds: table × signal × signal × signal × signal × signal → table
• Call: import fullseye as fs; fs.ledger.contact_state_from_wrench(kp, F, M_g, g, tip, axis, f_air: 'float' = 0.05, tau: 'float' = 0.35, tol: 'float' = 8e-05, geometry: 'bool' = True, tol_l: 'float' = 5e-05) -> 'dict' (to call the implementation directly, import pegtactile; pegtactile.contact_state_from_wrench(kp, F, M_g, g, tip, axis, f_air: 'float' = 0.05, tau: 'float' = 0.35, tol: 'float' = 8e-05, geometry: 'bool' = True, tol_l: 'float' = 5e-05) -> 'dict'; from the registry, opsdrive.get("contact_state_from_wrench"))
Contact wrench (F that the peg receives from the hole and M about the grasp point g, world frame) → contact state (rules, no learning).
For a single point contact, the moment about that point is 0 (no couple at a point). For each geometrically touchable candidate point c (contact_candidates), if the minimum of the normalised residual e(c) = |M_g − (c − g) × F| / (|F| r) is below tau it is one point (chamfer if at the tip edge with depth < W); if no candidate can explain it and there are valid candidates at both the tip and the body, two points; if |F| < f_air, no contact. With geometry, Whitney's geometry takes precedence: at tilt θ, if the tip is deeper than l₂(θ) − tol_l below the narrowest part, it must touch both sides (two points forced). At the wedging boundary θ = c/μ the edge of the tip's friction cone passes through the mouth contact point (slope of the line joining mouth and tip c/θ = μ), and the two-point wrench cannot be distinguished from "one point at the mouth" —— a blind spot inherent in wrench-only rules. Returns state (CONTACT_STATES), e_tip, e_mouth, where ("none" / "tip" / "mouth" / "tip+mouth" / "?"), c (point of contact, for one point), Fmag, depth, forced. Raises ValueError: vectors not finite 3-component, tau ≤ 0.
• 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.
• poc_peg_insertion_tactile — py -3.11 examples/poc_peg_insertion_tactile.py
table as input)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
pegtactile)pad_params · pad_context · peg_wrench_to_pad_loads · pad_loads_to_peg_wrench · pad_shear_asymmetry · pad_marker_displacement · pad_tactile_frame · pad_tactile_read
*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.