Read tactile data
Simulator modules must be imported after AppLauncher starts Isaac Sim.
After sim.reset(), read data after scene.update(sim_dt) in the simulation
loop. The following fragment assumes the scene has finger2_sensor:
import torch
sensor = scene["finger2_sensor"]
forces_n = sensor.data.normal_forces[0] # 738 values
frame_n = sensor.get_tactile_image()[0] # 32 x 32 firmware frame
rows, columns = sensor.taxel2pixel.T
assert torch.equal(frame_n[rows, columns], forces_n)
print("Load (N):", forces_n.sum().item())
Unoccupied pixels are zero. World positions and normals are available in
taxel_points_w and taxel_normals_w. depths is negative in contact and zero
otherwise; depth_dots is in metres per second.
See the API reference for shapes and units.
For a batched scene, replace [0] with the environment index you need.
normal_forces contains one value per taxel; get_tactile_image() rearranges
those values into firmware pixels. Summation in taxel space and frame space
returns the same load. Do not interpolate the frame when checking mapping.
The supplied DEX-01 frame has 738 occupied pixels and 286 unoccupied pixels.
A zero at an occupied pixel means no normal load at that sample. Use
taxel2pixel to distinguish occupied zero-force pixels from unused cells.