Robotics
LeRobot
Safetensors
LeRobot
act
so101

ACT · SO-101 coge una linterna tumbada (act_tumbada)

Política ACT (Action Chunking Transformer) que hace que un brazo SO-101 coja una linterna tumbada sobre la mesa y la levante. Es la fase 1 del proyecto del hackathon. En la fase 2, con la linterna ya cogida, el robot ilumina un punto de una PCB señalado con un boli, con control visual (IBVS) desde la cámara de arriba, y esquiva los obstáculos que tapan el haz.

Entrada / salida

  • Entrada: observation.state (6 articulaciones) y dos cámaras 640×480: wrist (en la pinza) y top (fija, diagonal sobre la mesa).
  • Salida: action (6 posiciones de articulación), en chunks de 100 pasos.

Entrenamiento

Checkpoint publicado paso 18.000 (entrenamiento planificado a 20.000; parado en 18.000)
Batch / lr 4 / 1e-5 (backbone 1e-5)
Arquitectura ACT: ResNet-18 (ImageNet), dim 512, 8 cabezas, 4 capas encoder / 1 decoder, VAE (latente 32, kl 10)
Chunk 100
Augmentation image_transforms de LeRobot al vuelo (hasta 4: brillo, contraste, saturación, tono, nitidez, afín ±5°/±5 %)
Validación últimos 5 episodios (eval_split=0.08)
Hardware RTX 3050 Laptop 4 GB, 3,4 pasos/s (1 h 40 min)
Software LeRobot 0.6.1, PyTorch 2.11.0+cu128, Python 3.12
lerobot-train --dataset.repo_id=FlipiFlopi007/so101_tumbada_full --dataset.image_transforms.enable=true --dataset.image_transforms.max_num_transforms=4 --dataset.eval_split=0.08 --policy.type=act --policy.device=cuda --batch_size=4 --steps=20000 --save_freq=2000 --output_dir=outputs/train/act_tumbada --job_name=act_tumbada

Pérdida de validación (L1): se queda plana desde el paso 6.000 (0,255–0,268; la mejor, 0,255 en el paso 8.000), mientras la de entrenamiento sigue bajando (0,137 en el paso 14.000). Es decir, memoriza. En este proyecto la validación no predijo el comportamiento en el robot, así que el checkpoint se eligió probándolo en el robot.

Cómo usarlo

Pon el brazo en la postura de inicio de las demos, [0.4, -103.1, 96.2, 53.4, -7.5, 0.6], y lanza:

lerobot-rollout --strategy.type=base --policy.path=FlipiFlopi007/act_tumbada --policy.n_action_steps=60 "--robot.max_relative_target={shoulder_pan: 10, shoulder_lift: 10, elbow_flex: 10, wrist_flex: 10, wrist_roll: 10, gripper: 3}" --robot.type=so101_follower --robot.port=COM13 --robot.id=mi_follower --robot.cameras="{ wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" --task="Coger la linterna tumbada" --duration=15

Ajustes que mejor funcionaron en el robot:

  • n_action_steps=60: recalcula cada 2 s, sin temporal ensembling.
  • Duración de 15 s: con 20 s, al acabar el agarre se queda arriba temblando, algo que casi no aparece en las demos.
  • Límite de la pinza a 3 por orden: con 10, la pinza aprieta tanto la linterna que el motor 6 entra en protección por sobrecarga.

Resultados en el robot

  • Checkpoint 14.000: 2 de 2 agarres. En uno, la linterna rodó dentro de la pinza.
  • Checkpoint 18.000 (el publicado): cogió la linterna en todas las ejecuciones de la demo completa del 24–25/10. No se llevó un recuento formal de aciertos.

Limitaciones

  • Depende de la escena: la cámara top tiene que estar exactamente donde se grabaron las demos. Si se mueve, el brazo sube y baja sin llegar a coger.
  • Hay que arrancar en la postura de inicio de las demos.
  • Solo funciona con la linterna tumbada, con la misma orientación y en la zona de agarre de las demos.
  • Calibración: la de los brazos usados está en el repo de GitHub. Con otros SO-101 hay que calibrarlos con el mismo criterio.
Downloads last month
-
Safetensors
Model size
51.7M params
Tensor type
F32
·
Video Preview
loading

Dataset used to train FlipiFlopi007/act_tumbada