触觉传感器#
触觉传感器把刚体连杆的表面变成一张由感知点组成的网格,这些感知点称为 taxel(触觉单元),并报告该表面与附近几何体的交互情况。其输出从每个探针的接触标志,一直到密集的逐 taxel 力、力矩和弹性体位移场——后者模仿触觉皮肤。关于两套接触估计方案、探针布局,以及每种估计背后的力模型,请参阅 接触与触觉传感器指南。
ContactProbe#
把每个探针的穿透深度按阈值转换成该探针的布尔接触标志。
- class genesis.options.sensors.tactile.ContactProbe(*, history_length: int = 0, delay: float = 0.0, jitter: float = 0.0, draw_debug: bool = False, entity_idx: int = -1, contact_threshold: float = 0.0001, release_threshold: float | None = None, hysteresis_strength: float = 0.0, hysteresis_tau: float = 0.0, probe_local_pos: tuple[tuple[float, float, float], ...] | tuple[tuple[tuple[float, float, float], ...], ...] = ((0.0, 0.0, 0.0),), probe_radius: float | tuple[float, ...] | tuple[tuple[float, ...], ...] = 0.01, probe_radius_noise: float = 0.0, debug_probe_color: tuple[float, float, float] = (0.2, 0.4, 1.0), debug_probe_center_radius: float = 0.0008, debug_probe_sphere_opacity: float = 0.3, debug_contact_color: tuple[float, float, float] = (1.0, 0.2, 0.0), probe_gain: tuple[float, ...] | float = 1.0, probe_gain_resample_range: tuple[float, float] | None = None, dead_taxel_probability: float = 0.0, dead_taxel_value_range: tuple[float, float] = (0.0, 0.0), contact_depth_query: typing.Literal['sdf', 'raycast'] | None = None, resolution: tuple[float, ...] | float = 0.0, bias: tuple[float, ...] | float = 0.0, noise: tuple[float, ...] | float = 0.0, random_walk: tuple[float, ...] | float = 0.0, link_idx_local: int = 0, pos_offset: tuple[float, float, float] = (0.0, 0.0, 0.0), euler_offset: tuple[float, float, float] = (0.0, 0.0, 0.0), filter_link_idx: tuple[int, ...] = <factory>) None[source]#
Returns boolean contact per probe based on the contact depth threshold, gated by the
contact_threshold/release_thresholdSchmitt trigger (seeContactHysteresisOptionsMixin).Note
The depth query only runs against geometry the rigid solver reports as in contact with the sensor’s link (the depth itself comes from an SDF/raycast query, not the contact impulse, but contact existence is gated by the solver). Since the solver skips collision between two fixed entities, a sensor on a fixed entity will not detect contacts with other fixed entities.
- Parameters:
probe_radius (float | array-like[float] or shape
(M, N)grid) – Probe sensing radius in meters. A scalar is shared by every probe; an array (or grid) must match the layout ofprobe_local_pos. Array entries of0mark inactive filler probes – they always readFalseand skip the SDF query – so an irregular taxel set can be padded into a regular grid.
- class genesis.engine.sensors.kinematic_tactile.ContactProbeSensor(options: SensorOptions, idx: int, shared_context, shared_metadata, manager: SensorManager)[source]#
Bases:
ContactDepthProbeSensor,SimpleSensor[ContactProbe,RaycastContext,ContactProbeMetadata,tuple]Returns boolean contact per probe with optional Schmitt-trigger hysteresis.
Shares the depth-probe kernel. The contact bit latches on when depth exceeds
contact_thresholdand releases when depth drops to or belowrelease_threshold. Whenrelease_thresholdis left unset (the default; it then falls back tocontact_threshold), the latch is degenerate and behavior matches a stateless threshold. Latch state is read from the per-branch return-space ring, so GT and measured branches latch independently and reset cleanly with the env (the manager zeros the ring on reset).
ContactDepthProbe#
报告每个探针处的穿透深度,单位为米。
- class genesis.options.sensors.tactile.ContactDepthProbe(*, history_length: int = 0, delay: float = 0.0, jitter: float = 0.0, draw_debug: bool = False, entity_idx: int = -1, hysteresis_strength: float = 0.0, hysteresis_tau: float = 0.0, probe_local_pos: tuple[tuple[float, float, float], ...] | tuple[tuple[tuple[float, float, float], ...], ...] = ((0.0, 0.0, 0.0),), probe_radius: float | tuple[float, ...] | tuple[tuple[float, ...], ...] = 0.01, probe_radius_noise: float = 0.0, debug_probe_color: tuple[float, float, float] = (0.2, 0.4, 1.0), debug_probe_center_radius: float = 0.0008, debug_probe_sphere_opacity: float = 0.3, debug_contact_color: tuple[float, float, float] = (1.0, 0.2, 0.0), probe_gain: tuple[float, ...] | float = 1.0, probe_gain_resample_range: tuple[float, float] | None = None, dead_taxel_probability: float = 0.0, dead_taxel_value_range: tuple[float, float] = (0.0, 0.0), contact_depth_query: typing.Literal['sdf', 'raycast'] | None = None, resolution: tuple[float, ...] | float = 0.0, bias: tuple[float, ...] | float = 0.0, noise: tuple[float, ...] | float = 0.0, random_walk: tuple[float, ...] | float = 0.0, link_idx_local: int = 0, pos_offset: tuple[float, float, float] = (0.0, 0.0, 0.0), euler_offset: tuple[float, float, float] = (0.0, 0.0, 0.0), filter_link_idx: tuple[int, ...] = <factory>) None[source]#
Returns contact depth in meters per probe.
Note
The depth query only runs against geometry the rigid solver reports as in contact with the sensor’s link (the depth itself comes from an SDF/raycast query, not the contact impulse, but contact existence is gated by the solver). Since the solver skips collision between two fixed entities, a sensor on a fixed entity will not detect contacts with other fixed entities.
- class genesis.engine.sensors.kinematic_tactile.ContactDepthProbeSensor(options: SensorOptions, idx: int, shared_context, shared_metadata, manager: SensorManager)[source]#
Bases:
ViscoelasticHysteresisMixin[ContactDepthProbeMetadata],KinematicTactileSensorMixin[ContactDepthProbeMetadata],RigidSensorMixin[ContactDepthProbeMetadata],SimpleSensor[ContactDepthProbe,RaycastContext,ContactDepthProbeMetadata,tuple]Returns contact depth in meters per probe.
KinematicTaxel#
在深度查询之上加入弹簧—阻尼力模型,根据穿透深度和相对运动估计每个 taxel 的力和力矩。
- class genesis.options.sensors.tactile.KinematicTaxel(*, history_length: int = 0, delay: float = 0.0, jitter: float = 0.0, draw_debug: bool = False, entity_idx: int = -1, crosstalk_strength: float = 0.0, crosstalk_sigma: float = 0.0, crosstalk_kernel: typing.Any | None = None, hysteresis_strength: float = 0.0, hysteresis_tau: float = 0.0, probe_local_pos: tuple[tuple[float, float, float], ...] | tuple[tuple[tuple[float, float, float], ...], ...] = ((0.0, 0.0, 0.0),), probe_radius: float | tuple[float, ...] | tuple[tuple[float, ...], ...] = 0.01, probe_radius_noise: float = 0.0, debug_probe_color: tuple[float, float, float] = (0.2, 0.4, 1.0), debug_probe_center_radius: float = 0.0008, debug_probe_sphere_opacity: float = 0.3, debug_contact_color: tuple[float, float, float] = (1.0, 0.2, 0.0), probe_gain: tuple[float, ...] | float = 1.0, probe_gain_resample_range: tuple[float, float] | None = None, dead_taxel_probability: float = 0.0, dead_taxel_value_range: tuple[float, float] = (0.0, 0.0), contact_depth_query: typing.Literal['sdf', 'raycast'] | None = None, resolution: tuple[float, ...] | float = 0.0, bias: tuple[float, ...] | float = 0.0, noise: tuple[float, ...] | float = 0.0, random_walk: tuple[float, ...] | float = 0.0, link_idx_local: int = 0, pos_offset: tuple[float, float, float] = (0.0, 0.0, 0.0), euler_offset: tuple[float, float, float] = (0.0, 0.0, 0.0), filter_link_idx: tuple[int, ...] = <factory>, normal_stiffness: float = 1000.0, normal_damping: float = 1.0, normal_exponent: float = 1.0, shear_scalar: float = 1.0, twist_scalar: float = 1.0) None[source]#
A tactile sensor which estimates force and torque per taxel by querying contact depth within the radius of the probe positions along a rigid entity link and the relative velocity of the probe and the entity in contact.
The force and torque are aligned with the contact surface normal
nat each probe – the SDF gradient in"sdf"mode, or the nearest-triangle face normal in"raycast"mode. The returned force is a spring-damper estimate based on contact depth and relative motion:v_n = dot(relative_velocity, n) * n v_t = relative_velocity - v_n s = penetration ** normal_exponent F = (normal_stiffness * s * n) + (normal_damping * s * dot(relative_velocity, n) * n) - (shear_scalar * v_t) T = cross(probe_local_pos, F) - twist_scalar * dot(relative_angular_velocity, n) * n
as opposed to the actual impulse force on the link from the contact obtained from the physics solver.
Note
The depth query only runs against geometry the rigid solver reports as in contact with the sensor’s link (the force/torque come from the spring-damper estimate above, not the contact impulse, but contact existence is gated by the solver). Since the solver skips collision between two fixed entities, a sensor on a fixed entity will not detect contacts with other fixed entities.
probe_local_posmay be either an arbitrary set of probes with shape(N, 3)or a grid-shaped set with shape(M, N, 3). Regular planar grids enable spatial crosstalk on the measured branch (seecrosstalk_strength). A probe whoseprobe_radiusis 0 is treated as an inactive filler – it reads 0 force/torque and is skipped – so an irregular taxel set can be padded into a regular grid for crosstalk.- Parameters:
probe_radius (float | array-like[float]) – Probe sensing radius in meters. A scalar is shared by every probe; an array must match the probe count. Array entries of 0 mark inactive filler probes (see the grid note above); at least one must be positive.
normal_stiffness (float) – Stiffness for normal force estimation based on contact penetration depth and spring-damper model.
normal_damping (float) – Damping for normal force estimation based on contact penetration depth and spring-damper model.
normal_exponent (float) – Exponent for contact force estimation based on contact penetration depth and nonlinear spring-damper model. Default is 1.0, which means linear spring-damper model. Use 1.5 for Hertzian (spherical) contact.
shear_scalar (float, optional) – Coefficient for shear force estimation based on relative linear velocity of the probe and entity in contact.
twist_scalar (float, optional) – Coefficient for twist torque estimation based on relative angular velocity of the probe and entity in contact.
parameters (See SpatialCrosstalkOptionsMixin for the measured-branch spatial crosstalk) –
required. ((crosstalk_strength / crosstalk_sigma / crosstalk_kernel); a regular planar grid is) –
- class genesis.engine.sensors.kinematic_tactile.KinematicTaxelSensor(options: KinematicTaxel, idx: int, shared_context, shared_metadata, manager: SensorManager)[source]#
Bases:
ViscoelasticHysteresisMixin[KinematicTaxelMetadata],SpatialCrosstalkMixin[KinematicTaxelMetadata],KinematicTactileSensorMixin[KinematicTaxelMetadata],RigidSensorMixin[KinematicTaxelMetadata],SimpleSensor[KinematicTaxel,RaycastContext,KinematicTaxelMetadata,KinematicTaxelReturnType]Kinematic taxels: spring-damper force and torque per probe from contact geometry and relative motion.
- class genesis.engine.sensors.kinematic_tactile.KinematicTaxelReturnType(force: Tensor, torque: Tensor)[source]#
Bases:
NamedTuple- Parameters:
force (torch.Tensor, shape ([n_envs,] n_probes, 3)) – Estimated contact force in the link frame from the kinematic spring-damper model.
torque (torch.Tensor, shape ([n_envs,] n_probes, 3)) –
- force: Tensor#
Alias for field number 0
- torque: Tensor#
Alias for field number 1
ElastomerTaxel#
模拟柔软的触觉皮肤,根据相对被跟踪几何体的压入与剪切,报告每个探针的三维标记位移。
- class genesis.options.sensors.tactile.ElastomerTaxel(*, history_length: int = 0, delay: float = 0.0, jitter: float = 0.0, draw_debug: bool = False, entity_idx: int = -1, contact_threshold: float = 1e-05, release_threshold: float | None = -0.0001, hysteresis_strength: float = 0.0, hysteresis_tau: float = 0.0, probe_local_pos: tuple[tuple[float, float, float], ...] | tuple[tuple[tuple[float, float, float], ...], ...] = ((0.0, 0.0, 0.0),), probe_radius: float | tuple[float, ...] | tuple[tuple[float, ...], ...] = 0.01, probe_radius_noise: float = 0.0, debug_probe_color: tuple[float, float, float] = (0.2, 0.4, 1.0), debug_probe_center_radius: float = 0.0008, debug_probe_sphere_opacity: float = 0.3, probe_local_normal: tuple[float, float, float] | tuple[tuple[float, float, float], ...] | tuple[tuple[tuple[float, float, float], ...], ...] = (0.0, 0.0, 1.0), debug_contact_color: tuple[float, float, float] = (1.0, 0.2, 0.0), probe_gain: tuple[float, ...] | float = 1.0, probe_gain_resample_range: tuple[float, float] | None = None, dead_taxel_probability: float = 0.0, dead_taxel_value_range: tuple[float, float] = (0.0, 0.0), contact_depth_query: typing.Literal['sdf', 'raycast'] | None = None, track_link_idx: tuple[int, ...] = <factory>, n_sample_points: tuple[int, ...] | int = 500, use_visual_mesh: bool = True, debug_point_cloud_color: tuple[float, float, float, float] = (1.0, 0.8, 0.0, 1.0), debug_point_cloud_radius: float = 0.002, resolution: tuple[float, ...] | float = 0.0, bias: tuple[float, ...] | float = 0.0, noise: tuple[float, ...] | float = 0.0, random_walk: tuple[float, ...] | float = 0.0, link_idx_local: int = 0, pos_offset: tuple[float, float, float] = (0.0, 0.0, 0.0), euler_offset: tuple[float, float, float] = (0.0, 0.0, 0.0), lambda_d: float = 700.0, lambda_s: float = 300.0, dilate_scale: float = 1.0, shear_scale: float = 1.0, normal_exponent: float = 2.0, compressibility: float = 1.0, elastomer_thickness: float = 0.0) None[source]#
An elastomer tactile sensor that implements HydroShear-style marker displacement from Genesis SDF queries.
The tracked rigid links are sampled into indenter on-surface points for shear history, while marker dilation is queried directly from the tracked geometry SDF.
Note
probe_local_posmay be either an arbitrary set of probes with shape(N, 3)or a grid-shaped set with shape(M, N, 3). Regular planar grids with one shared normal use FFT acceleration for dilation; other layouts use the direct dilation path. Shear is computed directly. A probe whoseprobe_radiusis 0 is treated as an inactive filler – it reads 0 and is excluded from dilation/shear – so an irregular taxel set can be padded into a regular grid for FFT acceleration.Note
probe_gainis applied to ElastomerTaxel as a post-step linear scale of the measured marker displacement (the dilation kernel writes a single shared field for both branches). This is exact for the tangential dilation and shear components but approximate for the normal dilation term, which scales asdepth**normal_exponentand would ideally scale asgain**normal_exponentrather thangain. For gains near 1 the error is small.- Parameters:
probe_local_pos (array-like[array-like[float, float, float]], shape (N, 3) or (M, N, 3)) – Probe positions in link-local frame.
probe_local_normal (array-like[float, float, float] or array-like[array-like[float, float, float]]) – Unit direction(s) in link-local frame: one normal for all probes, or one normal per probe matching
probe_local_pos.probe_radius (float | array-like[float]) – Probe sensing radius in meters. A scalar is shared by every probe; an array must match the probe count. Array entries of 0 mark inactive filler probes (see the grid note above); at least one must be positive.
track_link_idx (array-like[int]) – Global rigid link indices whose collision geometry is queried by SDF and whose mesh is sampled for shear.
n_sample_points (int | array-like[int]) – Total surface samples split across
track_link_idx, or one count per tracked link.compressibility (float) – In-plane dilation kernel as a mix of a local and a global response, in
[0, 1].1(default) is fully compressible: a concentrated local bulge from theexp(-lambda_d * r^2)Gaussian, with no far-field reach.0is fully incompressible: the in-plane displacement is the gradient of the inverse-Laplacian of the indentation depth field (~ r_hat / r) – the global volume-conserving stretch that reaches the whole sensor, but with a soft center. Intermediate values superimpose a local bulge of weightcompressibilityon a global stretch of weight1 - compressibility(each kernel peak-normalized first so the weight is meaningful), giving both a sharp local bulge and the global stretch. The endpoints0and1skip the unused kernel. The normal (out-of-plane) channel keeps thelambda_dGaussian bulge for any value.elastomer_thickness (float) – Gel layer thickness in meters, bottom face bonded to a rigid backing (the Dirichlet condition a flat-slab FEM would use). When > 0 (and
compressibility < 1), the global in-plane response is that of an incompressible elastic layer of this thickness instead of the free-space1/r: indentation features much smaller than the thickness produce little in-plane surface motion (incompressible half-space limit), wavelengths comparable to the thickness respond most, and the long-range field recovers the1/rsqueeze flow. Grid (FFT) layouts use the exact spectral layer solution; non-grid (direct) layouts approximate it by regularizing the1/rkernel at scaleh(r_hat * r / (r^2 + h^2)).0(default) keeps the free-space kernel, regularized at the probe spacing (a numerical guard, not a physical scale – set the thickness to control the global response physically).lambda_d (float) – Falloff coefficient (in 1/m^2) for the Gaussian dilation kernel
exp(-lambda_d * r^2)(larger = sharper, more localized; smaller = broader). It sets the width of the local in-plane bulge (weighted bycompressibility) and always sets the normal (out-of-plane) bulge width.lambda_s (float) – Gaussian falloff coefficient (in 1/m^2) for the shear kernel
exp(-lambda_s * r^2)that spreads each anchored tracked-surface point’s tangential displacement to nearby probes. Larger values keep shear tightly local to the contact patch; smaller values produce a softer, more diffuse shear response.dilate_scale (float) – Scalar gain applied to dilation displacement.
shear_scale (float) – Scalar gain applied to shear displacement.
normal_exponent (float) – Exponent of the penetration-depth power law for the normal (out-of-plane) marker dilation: the normal bulge scales as
depth ** normal_exponent. Must be >= 1.0. Default2.0(the HydroShear quadratic normal response). Tangential dilation and shear stay linear in depth regardless of this value.release_threshold (contact_threshold /) – Schmitt-trigger gate for the shear anchor state (see
ContactHysteresisOptionsMixin): a tracked surface point starts anchoring shear when its penetration into the elastomer reachescontact_thresholdand releases when its depth drops torelease_threshold(default-1e-4: it must separate by 0.1 mm). Only consumed whenshear_scale > 0; backend-agnostic (sdf and raycast depths alike).
Note
Genesis reuses rigid-body SDFs for HydroShear queries. For non-analytic tracked meshes, the collision geometry should be watertight enough for signed-distance preprocessing, and the attached elastomer link’s collision geometry should represent the compliant contact surface.
- class genesis.engine.sensors.point_cloud_tactile.ElastomerTaxelSensor(options: ElastomerTaxel, idx: int, shared_context, shared_metadata, manager: SensorManager)[source]#
Bases:
ViscoelasticHysteresisMixin[ElastomerTaxelSensorMetadata],ContactDepthQuerySensorMixin,PointCloudTactileSensorMixin[ElastomerTaxelSensorMetadata],ProbesWithNormalSensorMixin[ElastomerTaxelSensorMetadata],RigidSensorMixin[ElastomerTaxelSensorMetadata],SimpleSensor[ElastomerTaxel,RaycastContext,ElastomerTaxelSensorMetadata]- build()[source]#
Initialize all shared metadata needed to update all noisy sensors.
Time-related state (
delays_ts,jitter_ts) is pushed bySensor.build(); this method adds the imperfection-parameter state.
- classmethod reset(shared_metadata: ElastomerTaxelSensorMetadata, shared_ground_truth_cache: Tensor, envs_idx)[source]#
Reset the sensor.
This method is called by SensorManager when the scene is reset by
scene.reset().- Parameters:
shared_metadata (SharedSensorMetadata) – The shared metadata for the sensor class.
shared_ground_truth_cache (torch.Tensor) – The shared ground truth cache for the sensor class.
envs_idx (array_like) – The indices of the environments to reset. The envs_idx should already be sanitized by SensorManager.
ProximityTaxel#
在每个 taxel 周围的球形感知体积内,对来自被跟踪网格的点云进行采样,据此估计每个 taxel 的力和力矩,既能捕捉接触,也能捕捉接近接触的状态。
- class genesis.options.sensors.tactile.ProximityTaxel(*, history_length: int = 0, delay: float = 0.0, jitter: float = 0.0, draw_debug: bool = False, entity_idx: int = -1, crosstalk_strength: float = 0.0, crosstalk_sigma: float = 0.0, crosstalk_kernel: typing.Any | None = None, hysteresis_strength: float = 0.0, hysteresis_tau: float = 0.0, probe_local_pos: tuple[tuple[float, float, float], ...] | tuple[tuple[tuple[float, float, float], ...], ...] = ((0.0, 0.0, 0.0),), probe_radius: float | tuple[float, ...] | tuple[tuple[float, ...], ...] = 0.01, probe_radius_noise: float = 0.0, debug_probe_color: tuple[float, float, float] = (0.2, 0.4, 1.0), debug_probe_center_radius: float = 0.0008, debug_probe_sphere_opacity: float = 0.3, probe_local_normal: tuple[float, float, float] | tuple[tuple[float, float, float], ...] | tuple[tuple[tuple[float, float, float], ...], ...] = (0.0, 0.0, 1.0), debug_contact_color: tuple[float, float, float] = (1.0, 0.2, 0.0), probe_gain: tuple[float, ...] | float = 1.0, probe_gain_resample_range: tuple[float, float] | None = None, dead_taxel_probability: float = 0.0, dead_taxel_value_range: tuple[float, float] = (0.0, 0.0), contact_depth_query: typing.Literal['sdf', 'raycast'] | None = None, track_link_idx: tuple[int, ...] = <factory>, n_sample_points: tuple[int, ...] | int = 500, use_visual_mesh: bool = True, debug_point_cloud_color: tuple[float, float, float, float] = (1.0, 0.8, 0.0, 1.0), debug_point_cloud_radius: float = 0.002, resolution: tuple[float, ...] | float = 0.0, bias: tuple[float, ...] | float = 0.0, noise: tuple[float, ...] | float = 0.0, random_walk: tuple[float, ...] | float = 0.0, link_idx_local: int = 0, pos_offset: tuple[float, float, float] = (0.0, 0.0, 0.0), euler_offset: tuple[float, float, float] = (0.0, 0.0, 0.0), stiffness: float = 100.0, shear_coupling: float = 0.0, twist_scalar: float = 1.0, density_scalar: int = 100) None[source]#
A tactile sensor which estimates force and torque per taxel from proximity to point clouds sampled on tracked meshes within a spherical sensing volume of nominal
probe_radiusaround each taxel.For each taxel, every tracked point inside that sphere contributes a penetration depth
P_i = R_eff - ||p_i - o||whereR_effis drawn each simulation step whenprobe_radius_noiseis non-zero (additive uniform noise in meters around the sensing radius, clipped nonnegative). Normal force is aligned withprobe_local_normal; shear uses tangential relative velocity. Generic SimpleSensor imperfections (bias, resolution, etc.) still apply. Outputs are in link-local frame.- Parameters:
probe_local_normal (array-like[array-like[float, float, float]]) – Unit direction(s) for the normal force channel in link-local frame: one
(3,)for all taxels, or one row per taxel matchingprobe_local_pos. Default(0, 0, 1).stiffness (float) – Linear spring stiffness (N/m) scaling summed penetration depths into total reported force.
shear_coupling (float) – Scales penetration-weighted tangential slip
sum_i P_i * v_{t,i}into a shear force contribution (see sensor documentation). Set to0.0to disable shear and use only the normal channel.twist_scalar (float) – Scales the relative angular velocity about the contact normal into a torsional (spin) torque
-twist_scalar * dot(relative_angular_velocity, n) * n. This is the only source of torque about the normal; all remaining torque is in-plane tilting moment. Keep it positive to sense twisting slip, or set to0.0to report those tilting moments alone.density_scalar (int) – Reference point count for normalizing summed penetrations against tracked cloud size (scale is
density_scalar / max(N_pc, 1)for this sensor’s tracked samples).parameters (See SpatialCrosstalkOptionsMixin for the measured-branch spatial crosstalk) –
probe_local_pos ((crosstalk_strength / crosstalk_sigma / crosstalk_kernel); a regular planar grid) –
it. (is required to enable) –
- class genesis.engine.sensors.point_cloud_tactile.ProximityTaxelSensor(options: ProximityTaxel, idx: int, shared_context, shared_metadata, manager: SensorManager)[source]#
Bases:
ViscoelasticHysteresisMixin[ProximityTaxelMetadata],SpatialCrosstalkMixin[ProximityTaxelMetadata],PointCloudTactileSensorMixin[ProximityTaxelMetadata],ProbesWithNormalSensorMixin[ProximityTaxelMetadata],RigidSensorMixin[ProximityTaxelMetadata],SimpleSensor[ProximityTaxel,None,ProximityTaxelMetadata,ProximityTaxelReturnType]Spherical point-cloud taxels: per-taxel force and torque in link-local frame vs tracked meshes.
- build()[source]#
Initialize all shared metadata needed to update all noisy sensors.
Time-related state (
delays_ts,jitter_ts) is pushed bySensor.build(); this method adds the imperfection-parameter state.
- classmethod reset(shared_metadata: ProximityTaxelMetadata, shared_ground_truth_cache: Tensor, envs_idx)[source]#
Reset the sensor.
This method is called by SensorManager when the scene is reset by
scene.reset().- Parameters:
shared_metadata (SharedSensorMetadata) – The shared metadata for the sensor class.
shared_ground_truth_cache (torch.Tensor) – The shared ground truth cache for the sensor class.
envs_idx (array_like) – The indices of the environments to reset. The envs_idx should already be sanitized by SensorManager.