跳转至

PointCloudTactileSensor

刚度 + 剪切点云触觉传感器,底层是 genesis.sensors.ProximityTaxel

在父 link 的网格上采样一组点云(默认 use_visual_mesh=True),每帧对一组被 跟踪 link 做接触查询。接触响应由线性 stiffness 和可选的 shear_coupling 控制 —— 比可变形 elastomer 模型更轻量,但仍能从几何上得到每个探针的触觉 信息。

如果需要带有限刚度的可变形接触动力学,请用 ElastomerTactileSensor

配置

PointCloudTactileSensorCfg 继承 SensorCfg。全部字段使用关键字参数。

字段 类型 默认 说明
name str "" 继承自 SensorCfg,场景内唯一。
entity_name str "robot" 继承自 SensorCfg,挂载探针的实体。
link_name str "" 探针所在的父 link。必填。
probe_local_pos tuple[tuple[float, float, float], ...] ((0.0, 0.0, 0.0),) 探针在父 link 本地坐标系下的位置。
probe_local_normal tuple[float, float, float] (0.0, 0.0, 1.0) 探针前向方向(父 link 本地系)。
probe_radius float 0.01 探针球半径(米)。
track_link_names tuple[str, ...] () 非空的接触目标 link 集合。
n_sample_points int 500 网格上的点云采样密度。
use_visual_mesh bool True 采样自视觉网格(True)或碰撞几何(False)。
stiffness float 100.0 接触响应的线性刚度(N/m)。
shear_coupling float 0.0 切向耦合系数。
history_length int 0 透传给 Genesis。0 表示只读当前帧;> 0 分配 ring buffer。

track_link_names 必填

Genesis 拒绝构造 track_link_idx 为空的 ProximityTaxel。封装层在最早期 抛 ValueError,务必填入要查询接触的目标 link(例如被操作物体)。

数据

Genesis 的 ProximityTaxel.read() 返回结构化的 ProximityTaxelData(force=…, torque=…)。封装层把两个张量字段提取到 PointCloudTactileData 上;raw 别名为 force,让 genelab.mdp.rewards.tactile 中的 shape-agnostic 奖励函数继续可用。

字段 类型 形状
force torch.Tensor (float32) (num_envs, [history,] num_probes, 3) —— 探针本地系下的接触力向量。
torque torch.Tensor (float32) (num_envs, [history,] num_probes, 3) —— 探针本地系下的接触力矩向量。
raw torch.Tensor force 的别名。

示例

from genelab.configs import InteractiveSceneCfg
from genelab.sensor import PointCloudTactileSensorCfg

scene_cfg = InteractiveSceneCfg(
    sensors=(
        PointCloudTactileSensorCfg(
            name="finger_pad",
            link_name="right_finger_tip",
            probe_local_pos=((0.0, 0.0, 0.001),),
            track_link_names=("object",),
            n_sample_points=128,
            stiffness=250.0,
            shear_coupling=0.5,
        ),
    ),
)

另见