Este cambio convierte el esqueleto de Simulation en una celda autónoma de descarga y
paletizado con UR10e y ventosa OnRobot VGP20. La ejecución admite trece niveles —mesa,
cinta y camión, tres por tarea— definidos en configs/pallet.yaml.
src/cell/construye la celda en MJCF, controla el brazo y la ventosa, renderiza las cuatro vistas admitidas y expone un único contratoSupply.present()/release()para las tres fuentes.src/episode.pycose percepción, agarre, medida en muñeca, mapa de alturas, planificación, colocación, reasentamiento y medida completa del palé.src/measure.pypublica la medida geométrica y de estabilidad. El CoG usa elcog_offset_mmedido y también incluye cajas que tocan el palé aunque hayan quedado fuera de tolerancia.src/telemetry.pyconserva las filas verificadas deGuionized-simulationy añade fuente, nivel, catálogo, tamaño real del palé y desglose del score.src/vision/oracle.pyaporta los dos oráculos mínimos.src/planner/naive.pycontiene tanto la rejilla oráculo como el beam search real con lookahead.scripts/palletize.pyes el único entrypoint de episodios y siempre cierra run y episodio, también al interrumpirlo.- El panel ofrece dos modos visibles: EJECUCIÓN llama al entrypoint y publica si existen credenciales; DEPURACIÓN conserva el runner local y nunca abre telemetría.
- El demostrador original, sus escenarios y su suite completa viven en
tools/como referencia ejecutable.
La escena sigue generándose como una cadena MJCF. El origen ya compone la celda, las
mallas de Menagerie, la ventosa, la carga dinámica y los visuales de fallback de esta
forma; cambiar a MjSpec en esta migración duplicaría el constructor y dificultaría
recrear episodios mientras el visor está abierto. MuJoCo compila el mismo modelo final y
AGENTS.md permite explícitamente MJCF.
No se modifican las fronteras asignadas a visión y planificación:
src/vision/detect.py, src/vision/gauge.py, src/planner/heightmap.py,
src/planner/heuristic.py y src/contracts.py.
La báscula de muñeca completa (com_probe.py, com_estimator.py, tare.py,
wrench.py), el ensayo de transporte y la viga, el benchmark, el generador, los
marcadores de CoM y la reproducción permanecen en tools/stable_pallet/. Son ofertas
para sus respectivos módulos, no sustituciones impuestas desde ejecución. El indicador
publicado usa theker_telemetry.stability_margin; validate_stack continúa siendo una
herramienta interna del planificador y no crea una tercera definición del KPI.
BeamPlanner construye temporalmente su estado medido a partir de las colocaciones y
acepta el Heightmap del contrato sin depender de su contenido. Esta costura desaparece
cuando el equipo propietario implemente src/planner/heightmap.py.
- Palé europeo real: 1,20 × 0,80 m, escala 1.
- Tolerancia de alcance: 20 mm, por encima del suelo medido del servo.
- Corrección cartesiana: tres pasadas después de la solución IK.
- Tránsito: cartesiano a cota fija; no se sustituye por interpolación articular.
- Separación de ventosa: 1,5 mm; holgura entre cajas de una capa: 40 mm.
- Sobre del catálogo: 18–55 × 16–40 × 8–30 cm, 90–280 kg/m³ y hasta 8,5 kg.
- Bahía: 0,74 × 0,88 m; el barrido documentado deja 0 de 720 poses fuera de alcance.
- El brazo colisiona con la celda pero no consigo mismo ni con su propia herramienta.
Cada cifra está junto a su unidad y su procedencia en configs/scene.yaml o
configs/pallet.yaml.
python tests/test_pallet.py: contratos, vocabularios, niveles, CoG y oráculos.python -m src.measure: geometría, estabilidad y CoG descentrado.- Episodio headless de mesa N1: 4/4 intentos completados y artefactos escritos a disco.
- Beam search y rejilla ejecutados contra una escena real de MuJoCo.
uv run pytestentools/: 168 pruebas del demostrador tras la mudanza.
La comprobación física completa de tests/test_cell.py queda por repetir después del
último ajuste de la estación de cinta. Las verificaciones remotas de telemetría y del
estado en vivo requieren SUPABASE_URL y SUPABASE_SERVICE_KEY en
~/projects/STACKSPECT/.env; no se falsean si ese fichero no está disponible.
Además de las fronteras ajenas citadas arriba, faltan la calibración fina de fricción y consigna de la cinta bajo cargas adversariales, la validación remota con Supabase y una pasada manual por las trece tarjetas en ambos modos del panel. El contrato, los niveles y los caminos de ejecución quedan preparados para hacer esas comprobaciones sin cambiar la arquitectura.