Reproducing Table 3: Tactile Modality Ablation

July 4, 2026 ยท View on GitHub

This document records the Table 3 tactile-modality ablation results and gives reproduction commands for the last three rows:

  • Force E+FS
  • Img+FS
  • Field+FS

The OpenPI-side model service should be started from the modified NathanWu7/Tabero-VTLA repository. The Isaac-side evaluation client runs from this Tabero repository.

Table 3 Results

F/G refer to firm/gentle language prompts. SR is success rate. AG is the average grip-force metric reported in the paper. None means no tactile input, Img means tactile image input, Field means force-field input, Force E means force input through an MLP encoder, Force D means force input through a decoder, and FS means force-supervision loss is enabled.

The paper numbers use the paper-style runtime setting: Isaac Lab 2.2 with Isaac Sim 5.0, all contact_gripper sensors bound to panda_.*finger, and squeeze_ff_k_load_z = 0.6.

ModelF SRG SRF AGG AG
None0.000.000.00.0
Img0.370.013.01.1
Field0.400.012.92.0
Force E0.400.012.51.8
FS0.820.4530.43.1
Force D+FS0.820.3128.53.3
Force E+FS0.840.4930.33.4
Img+FS0.870.4830.63.6
Field+FS0.860.5232.43.7

Local Reproduction Results

The table below records the local minicase_k09 rerun under Isaac Lab 2.3 with Isaac Sim 5.1. In this setting, all contact_gripper sensors are bound to gelsight_mini_case_.*, squeeze_ff_k_load_z = 0.9, and squeeze_ff_contact_threshold = 1.0. Each firm or gentle value is aggregated over the Tabero LIBERO object subset, with 9 tasks and 450 total trials.

AG pred is the model-side predicted grip-force metric from the evaluation summary. AG meas is the measured contact-force metric reported by the environment.

VariantModelF SRG SRF AG predG AG predF AG measG AG meas
minicase_k09Force E+FS enc100.7890.31629.063.7320.191.87
minicase_k09Img+FS0.8600.33131.913.9720.572.45
minicase_k09Field+FS0.9110.35833.776.5820.764.49

Common Setup

Use three local roots:

TABERO_ROOT=/path/to/Tabero
Tabero_VTLA_ROOT=/path/to/Tabero-VTLA
MODEL_ROOT=/path/to/models

The Tabero client expects LIBERO initial-state HDF5 files under benchmarks/datasets/libero/assembled_hdf5. From the Tabero repository root:

cd "$TABERO_ROOT"
source scripts/tools/set_replay_env.sh inference

The OpenPI service and the Tabero client must use the same host and port. The commands below use:

server_host = 127.0.1.1

For each model, run the server command from Tabero_VTLA_ROOT, wait until the server prints server listening on 0.0.0.0:<PORT>, then run the firm and gentle evaluation commands from TABERO_ROOT.

The evaluation commands use the Tabero task subset and the downloaded LIBERO initial states:

--task-suites libero_object
--use-tabero-tasks
--hdf5-folder benchmarks/datasets/libero/assembled_hdf5
--require-hdf5

Force E+FS

Model

ItemValue
HF repoNathanWu7/pi0_lora_tacforce_tabero_enc_10
Tabero-VTLA configpi0_lora_tacforce_tabero_enc
Checkpoint step49999
Checkpoint dir$MODEL_ROOT/pi0_lora_tacforce_tabero_enc_10/checkpoints/pi0_lora_tacforce_tabero_enc/pi0_lora_tacforce_tabero_enc_10/49999

Download the weights:

hf download NathanWu7/pi0_lora_tacforce_tabero_enc_10 \
  --local-dir "$MODEL_ROOT/pi0_lora_tacforce_tabero_enc_10" \
  --include 'checkpoints/pi0_lora_tacforce_tabero_enc/pi0_lora_tacforce_tabero_enc_10/49999/params/**' \
  --include 'checkpoints/pi0_lora_tacforce_tabero_enc/pi0_lora_tacforce_tabero_enc_10/49999/assets/**' \
  --include 'norm_stats/**'

This Tabero-VTLA config expects assets/NathanWu7/tabero under the checkpoint step. If the downloaded checkpoint does not contain that assets directory, link the downloaded norm stats into the checkpoint assets directory:

CHECKPOINT_DIR="$MODEL_ROOT/pi0_lora_tacforce_tabero_enc_10/checkpoints/pi0_lora_tacforce_tabero_enc/pi0_lora_tacforce_tabero_enc_10/49999"
mkdir -p "$CHECKPOINT_DIR/assets/NathanWu7"
ln -sfn "$MODEL_ROOT/pi0_lora_tacforce_tabero_enc_10/norm_stats/pi0_lora_tacforce_tabero_enc/NathanWu7/tabero" \
  "$CHECKPOINT_DIR/assets/NathanWu7/tabero"

Start the OpenPI service:

cd "$Tabero_VTLA_ROOT"

CUDA_VISIBLE_DEVICES=0 \
JAX_PLATFORMS=cuda \
XLA_PYTHON_CLIENT_PREALLOCATE=false \
uv run python scripts/serve_policy.py \
  --port 18019 \
  policy:checkpoint \
  --policy.config=pi0_lora_tacforce_tabero_enc \
  --policy.dir="$MODEL_ROOT/pi0_lora_tacforce_tabero_enc_10/checkpoints/pi0_lora_tacforce_tabero_enc/pi0_lora_tacforce_tabero_enc_10/49999"

Run the firm-force evaluation:

cd "$TABERO_ROOT"
source scripts/tools/set_replay_env.sh inference

conda run --no-capture-output -n tabero python -u scripts/tools/run_task_evaluations.py \
  --policy-model openpi \
  --control-mode tactile \
  --server-host 127.0.1.1 \
  --server-port 18019 \
  --task-suites libero_object \
  --use-tabero-tasks \
  --num-total-experiments 50 \
  --hdf5-folder benchmarks/datasets/libero/assembled_hdf5 \
  --require-hdf5 \
  --prompt-adverbs firmly tightly \
  --output-dir evaluation_results/table3_force_e_fs_enc10_firm \
  --output-format both \
  --headless

Run the gentle-force evaluation:

cd "$TABERO_ROOT"
source scripts/tools/set_replay_env.sh inference

conda run --no-capture-output -n tabero python -u scripts/tools/run_task_evaluations.py \
  --policy-model openpi \
  --control-mode tactile \
  --server-host 127.0.1.1 \
  --server-port 18019 \
  --task-suites libero_object \
  --use-tabero-tasks \
  --num-total-experiments 50 \
  --hdf5-folder benchmarks/datasets/libero/assembled_hdf5 \
  --require-hdf5 \
  --prompt-adverbs gently softly \
  --output-dir evaluation_results/table3_force_e_fs_enc10_gentle \
  --output-format both \
  --headless

Img+FS

Model

ItemValue
HF repoNathanWu7/pi0_lora_tacimg_tabero
Tabero-VTLA configpi0_lora_tacimg_tabero
Checkpoint step49999
Checkpoint dir$MODEL_ROOT/pi0_lora_tacimg_tabero/checkpoints/pi0_lora_tacimg_tabero/pi0_lora_tacimg_tabero/49999

Download the weights:

hf download NathanWu7/pi0_lora_tacimg_tabero \
  --local-dir "$MODEL_ROOT/pi0_lora_tacimg_tabero" \
  --include 'checkpoints/pi0_lora_tacimg_tabero/pi0_lora_tacimg_tabero/49999/params/**' \
  --include 'checkpoints/pi0_lora_tacimg_tabero/pi0_lora_tacimg_tabero/49999/assets/**' \
  --include 'norm_stats/**'

Start the OpenPI service:

cd "$Tabero_VTLA_ROOT"

CUDA_VISIBLE_DEVICES=0 \
JAX_PLATFORMS=cuda \
XLA_PYTHON_CLIENT_PREALLOCATE=false \
uv run python scripts/serve_policy.py \
  --port 18017 \
  policy:checkpoint \
  --policy.config=pi0_lora_tacimg_tabero \
  --policy.dir="$MODEL_ROOT/pi0_lora_tacimg_tabero/checkpoints/pi0_lora_tacimg_tabero/pi0_lora_tacimg_tabero/49999"

Run the firm-force evaluation:

cd "$TABERO_ROOT"
source scripts/tools/set_replay_env.sh inference

conda run --no-capture-output -n tabero python -u scripts/tools/run_task_evaluations.py \
  --policy-model openpi \
  --control-mode tactile \
  --server-host 127.0.1.1 \
  --server-port 18017 \
  --task-suites libero_object \
  --use-tabero-tasks \
  --num-total-experiments 50 \
  --hdf5-folder benchmarks/datasets/libero/assembled_hdf5 \
  --require-hdf5 \
  --prompt-adverbs firmly \
  --output-dir evaluation_results/table3_img_fs_firm \
  --output-format both \
  --headless

Run the gentle-force evaluation:

cd "$TABERO_ROOT"
source scripts/tools/set_replay_env.sh inference

conda run --no-capture-output -n tabero python -u scripts/tools/run_task_evaluations.py \
  --policy-model openpi \
  --control-mode tactile \
  --server-host 127.0.1.1 \
  --server-port 18017 \
  --task-suites libero_object \
  --use-tabero-tasks \
  --num-total-experiments 50 \
  --hdf5-folder benchmarks/datasets/libero/assembled_hdf5 \
  --require-hdf5 \
  --prompt-adverbs gently \
  --output-dir evaluation_results/table3_img_fs_gentle \
  --output-format both \
  --headless

Field+FS

Model

ItemValue
HF repoNathanWu7/pi0_lora_tacfield_tabero
Tabero-VTLA configpi0_lora_tacfield_tabero
Checkpoint step49999
Checkpoint dir$MODEL_ROOT/pi0_lora_tacfield_tabero/checkpoints/pi0_lora_tacfield_tabero/pi0_lora_tacfield_tabero/49999

Download the weights:

hf download NathanWu7/pi0_lora_tacfield_tabero \
  --local-dir "$MODEL_ROOT/pi0_lora_tacfield_tabero" \
  --include 'checkpoints/pi0_lora_tacfield_tabero/pi0_lora_tacfield_tabero/49999/params/**' \
  --include 'checkpoints/pi0_lora_tacfield_tabero/pi0_lora_tacfield_tabero/49999/assets/**' \
  --include 'norm_stats/**'

This Tabero-VTLA config expects assets/NathanWu7/tabero_object_25. If the checkpoint only contains assets/NathanWu7/tabero, create a local symlink inside the checkpoint assets directory:

cd "$MODEL_ROOT/pi0_lora_tacfield_tabero/checkpoints/pi0_lora_tacfield_tabero/pi0_lora_tacfield_tabero/49999/assets/NathanWu7"
ln -sfn tabero tabero_object_25

Start the OpenPI service:

cd "$Tabero_VTLA_ROOT"

CUDA_VISIBLE_DEVICES=0 \
JAX_PLATFORMS=cuda \
XLA_PYTHON_CLIENT_PREALLOCATE=false \
uv run python scripts/serve_policy.py \
  --port 18018 \
  policy:checkpoint \
  --policy.config=pi0_lora_tacfield_tabero \
  --policy.dir="$MODEL_ROOT/pi0_lora_tacfield_tabero/checkpoints/pi0_lora_tacfield_tabero/pi0_lora_tacfield_tabero/49999"

Run the firm-force evaluation:

cd "$TABERO_ROOT"
source scripts/tools/set_replay_env.sh inference

conda run --no-capture-output -n tabero python -u scripts/tools/run_task_evaluations.py \
  --policy-model openpi \
  --control-mode tactile \
  --server-host 127.0.1.1 \
  --server-port 18018 \
  --task-suites libero_object \
  --use-tabero-tasks \
  --num-total-experiments 50 \
  --hdf5-folder benchmarks/datasets/libero/assembled_hdf5 \
  --require-hdf5 \
  --prompt-adverbs firmly \
  --output-dir evaluation_results/table3_field_fs_firm \
  --output-format both \
  --headless

Run the gentle-force evaluation:

cd "$TABERO_ROOT"
source scripts/tools/set_replay_env.sh inference

conda run --no-capture-output -n tabero python -u scripts/tools/run_task_evaluations.py \
  --policy-model openpi \
  --control-mode tactile \
  --server-host 127.0.1.1 \
  --server-port 18018 \
  --task-suites libero_object \
  --use-tabero-tasks \
  --num-total-experiments 50 \
  --hdf5-folder benchmarks/datasets/libero/assembled_hdf5 \
  --require-hdf5 \
  --prompt-adverbs gently \
  --output-dir evaluation_results/table3_field_fs_gentle \
  --output-format both \
  --headless

Outputs

Each evaluation writes a JSON and text summary under the selected output directory:

evaluation_results/table3_<model>_<firm_or_gentle>/success_rates_*.json
evaluation_results/table3_<model>_<firm_or_gentle>/success_rates_*.txt

Read the task-level and overall success rates from these files. The evaluation stdout also prints force metrics, including the hybrid contact metrics used for grip-force analysis.