tacsim op• Data kinds: normalmap × matrix × matrix × scalar × scalar → table
• Call: import fullseye as fs; fs.ledger.contact_radius_fit_pixelwise(normals, X, Y, R: 'float', a0: 'float', centre_xy=(0.0, 0.0), r_max_over_a: 'float' = 2.5, excl_px: 'float' = 1.5) -> 'dict' (to call the implementation directly, import tacsim; tacsim.contact_radius_fit_pixelwise(normals, X, Y, R: 'float', a0: 'float', centre_xy=(0.0, 0.0), r_max_over_a: 'float' = 2.5, excl_px: 'float' = 1.5) -> 'dict'; from the registry, opsdrive.get("contact_radius_fit_pixelwise"))
Reads the contact radius by fitting the Hertz slope model dh/dr(r; a), with continuous a, to the per-pixel radial slopes (the bin-free version of contact_radius_fit; a0 is its coarse value).
contact_radius_fit fits to the means of radial bins (width = pixel pitch), so the sign of the bias changes each time a crosses a pixel pitch (−0.04 / +0.31 / −0.02 % at P = 3.5 / 4.0 / 4.5 N). Even if 0.3 % is enough for the value of P itself, for the difference of two images (F_x = P_L − P_R for the two gripper fingers) the slope dP̂/dP of P̂ matters, and the binned version distorted the slope by 40 % (measured in the pegtactile PoC). Here pixels with r < r_max_over_a·a0 are used as they are, and pixels within ±excl_px of the edge r ≈ a0 are discarded —— the slope has a discontinuous derivative at r = a (a square-root cusp outside), so the value fluctuates with the pixel-to-edge alignment, and keeping them makes a oscillate with the period of the pixel pitch. SSE(a) is minimised by golden-section search (initial interval [0.8, 1.2]·a0, 40 iterations). centre_xy is the known centre (x, y), in m. Returns a, delta = a²/R, rms (slope residual), n (number of pixels used). Raises ValueError: R, a0 ≤ 0, shape mismatch, fewer than 16 usable pixels.
• 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
tacsim)combined_modulus · hertz_sphere · hertz_force · hertz_cylinder · hertz_surface_uz · hertz_pressure · membrane_indent_sphere · membrane_indent_shape
*Provenance: tacsim.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.