Robotics
LeRobot
Safetensors
diffusion
tactile
manipulation

dp_tactile_charger_20ep

Diffusion policy — vision + tactile — trained on 20 episodes.

Task: grab and remove the charger from the socket and put it in the black box

Trained with LeFlexiTac, a LeRobot fork adding FlexiTac tactile sensing. Docs: https://tna001-ai.github.io/LeFlexiTac/docs.html

Training data

dataset aryankakad/tactile_charger_inserting
episodes 20 (indices 0–19)
frames 10,717 @ 30 fps
cameras observation.images.top, observation.images.gripper (224×224)
tactile observation.tactile.primary (12×32)
state / action 6-DoF SO-100 follower

Configuration

steps 76,600
batch size 16
epochs 114.4
horizon 16
n_obs_steps 2
n_action_steps 8
frame_stride 3
resize_shape [144, 192]
crop_is_random True
optimizer_lr 0.0001
use_amp True
n_tactile_chunks 1
tactile_feature_dim 64

Every model in this series is epoch-matched at ~114.4 epochs, so dataset size and sensor modality are the only variables across the set.

Training command actually used

Run on 1× AMD Instinct MI300X (ROCm 6.2.4). HIP_VISIBLE_DEVICES selected the GPU, so --policy.device=cuda refers to that single card.

python -u -m lerobot.scripts.lerobot_train \
  --dataset.repo_id=aryankakad/tactile_charger_inserting \
  --dataset.episodes='[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]' \
  --policy.type=diffusion --policy.use_tactile=true \
  --policy.tactile_features='["observation.tactile.primary"]' \
  --policy.n_tactile_chunks=1 --policy.tactile_feature_dim=64 \
  --policy.crop_is_random=true --policy.resize_shape='[144,192]' \
  --policy.use_amp=true --policy.frame_stride=3 \
  --policy.repo_id=Dimios45/dp_tactile_charger_20ep \
  --policy.private=true --policy.device=cuda \
  --output_dir=outputs/train/C_dp_tactile_20ep --job_name=C_dp_tactile_20ep \
  --batch_size=16 --num_workers=8 --steps=76600 --save_freq=20000 --wandb.enable=true

Evaluation / rollout

Not run here — this machine has no robot attached. To evaluate, run on the machine with the SO-100 and sensors, loading the policy with --policy.path=Dimios45/dp_tactile_charger_20ep.

Reference: the lerobot-record eval invocations in tactile_cmd.txt and the project docs. You will need to supply your own robot port, camera serials, and a primary tactile sensor entry matching training.

Notes

  • Two ROCm-specific fixes were required in the fork: persistent_workers=True on the dataloader (epoch boundaries otherwise stalled ~410 s each), and keeping cudnn.benchmark off (on ROCm it triggers an exhaustive MIOpen search that can precede step 1 by hours).
  • Training loss is not a proxy for task success. Compare policies by rollout success rate, especially on contact-rich phases.
  • The source dataset's task string is labelled stack cup — a mislabel carried over from an earlier session. It does not affect Diffusion, which is not language-conditioned.
Downloads last month
14
Safetensors
Model size
0.3B params
Tensor type
F32
·
Video Preview
loading

Dataset used to train Dimios45/dp_tactile_charger_20ep