[FEATURE] Add noise options for tactile sensors: hysteresis, dead taxels, probe gain#2813
[FEATURE] Add noise options for tactile sensors: hysteresis, dead taxels, probe gain#2813Milotrince wants to merge 8 commits into
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f6ff7d64a3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
69e1ce6 to
3c326a7
Compare
|
89819be to
246bb1e
Compare
cbe2a3f to
e023986
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6e970db529
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if mode is not None: | ||
| self._shared_metadata.contact_depth_query = mode |
There was a problem hiding this comment.
Reject mixed contact-depth backends
When two sensors of the same tactile class set different contact_depth_query values, this class-wide assignment silently makes every earlier sensor use the last sensor's backend; for example the parity test instantiates ContactDepthProbe(..."sdf") followed by ContactDepthProbe(..."raycast"), so both probes are updated through the raycast branch instead of comparing SDF against raycast. Since the option is exposed per sensor and documented as requiring class-wide agreement, this should either store the backend per sensor or raise on conflicting non-None modes rather than letting build order change readings.
Useful? React with 👍 / 👎.
Rework the tactile sensor backends (KinematicTaxel, ContactProbe, ContactDepthProbe, ProximityTaxel, ElastomerTaxel) for performance: - Shared static-chunk BVH + raycast/SDF query infrastructure (new tactile_shared.py), contact prefiltering and candidate-geom masking. - SDF-vs-raycast contact-depth query modes; point-cloud sampling and per-chunk BVH for proximity/elastomer sensors. - Dual ground-truth/measured cache architecture (measured == GT here; the per-taxel noise sources that diverge it land in the follow-up noise PR). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Compute the rigid collision BVH entry a single time in activate() and store it as a plain attribute, rather than re-scanning bvh_contexts on every property access. Inline shared_context.collision_bvh_context at the kernel call sites (drop the per-call rigid_entry local).
30345e2 to
94fe8c3
Compare
Layer per-taxel sensor imperfections on the measured branch of the tactile sensors (built on the BVH/raycast speedup base): - Viscoelastic hysteresis (single Maxwell element). - Dead taxels and per-taxel probe gain (with reset-time resampling). - Per-taxel probe-radius noise (drives the GT-vs-measured radius split). - Grid spatial crosstalk: Gaussian or explicit kernel ((N,M)/(2,N,M)/(3,N,M) with normal/shear/torque grouping), shared by KinematicTaxel and ProximityTaxel; gaussian_crosstalk_kernel helper. - tactile_sandbox --noise demo and noise test coverage. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a reusable subplot-grid + blitting-cache helper to the parent BaseMPLPlotter and use it in MPLVectorFieldPlotter: passing subplot_titles lays out one quiver subplot per title in a single figure (shared positions; data_func returns (K, N, 3)). Backward compatible (no subplot_titles -> single plot, (N, 3) data). tactile_sandbox now opens one plot window: per-taxel sensors show one subplot per environment; scalar sensors (depth/contact) show one line per environment.
a526adf to
dcf6491
Compare
Description
ContactProbewith separate contact_threshold / release_thresholdContactDepthProbe,KinematicTaxel,ProximityTaxel,ElastomerTaxelKinematicTaxel, share FFT code withElastomerTaxelhistory_length>0Related Issue
Merge first: #2922
Motivation and Context
How Has This Been / Can This Be Tested?
Added tests to
test_sensors.pyScreenshots (if appropriate):
Screen.Recording.2026-06-09.at.01.18.50.mov
Checklist:
Submitting Code Changessection of CONTRIBUTING document.