File size: 4,136 Bytes
f53ed3f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5b5898e
f53ed3f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
---
license: apache-2.0
library_name: lerobot
pipeline_tag: robotics
tags:
- lerobot
- act
- robotics
- so-arm101
- coffee-automata
- simulation
- force-aware
---

# xlerobot-coffee-model-sim-b-force

> Part of the **[Robotic-Barista-XLerobot](https://huggingface.co/collections/IntelligentDecisionLab/robotic-barista-xlerobot-6a7035e6a9c710bbbdc7f4d1)** collection — 3 dataset repos + 4 model repos for autonomous coffee service on the XLeRobot platform.

**Method B — force-added, trained in simulation.** Force-aware ACT experts (architecture **A1**:
HPI token, multiscale dense window, 1D-CNN encoder) for the Coffee Automata chain.

**No models trained yet.** This repo holds the structure so that sim results land in a predictable
place rather than in a new repo each time.

One of four model repos on the domain × method grid:

| | A — vision + position | B — force-added |
|---|---|---|
| **real** | [`…-model-real-a-vision-pos`](https://huggingface.co/IntelligentDecisionLab/xlerobot-coffee-model-real-a-vision-pos) | [`…-model-real-b-force`](https://huggingface.co/IntelligentDecisionLab/xlerobot-coffee-model-real-b-force) |
| **sim** | [`…-model-sim-a-vision-pos`](https://huggingface.co/IntelligentDecisionLab/xlerobot-coffee-model-sim-a-vision-pos) | **this repo** |

## Planned contents

One folder per task, each a complete `pretrained_model` directory, with a
`<task>/checkpoints/<NNNNNN>/` step sweep alongside.

| task | sim training data available | status |
|---|---|---|
| `t1_place_cup` | ✅ `xlerobot-coffee-sim/sim-robosuite-so101/t1_place_cup` — 50 ep / 10,231 fr | ⬜ not trained |
| `t2_push_button` | ❌ none recorded | ⬜ blocked |
| `t3_cup_to_tray` | ✅ `…/t3_cup_to_tray` — 50 ep / 19,485 fr | ⬜ not trained |
| `t4_navigate` | ❌ none recorded | ⬜ blocked |
| `t5_tray_to_table` | ✅ `…/t5_tray_to_table` — 50 ep / 17,567 fr | ⬜ not trained |

The sim data **does** carry `observation.hpi[9]`, so unlike the real platform data it is
immediately trainable for Method B.

## The reason to train here at all

Simulation is the only place the force signal has ground truth. Alongside the estimated
`observation.hpi`, the sim datasets carry `observation.sim_contact_force[24]` and
`observation.sim_tcp_wrench[12]` — the true external torques and TCP wrench. That makes it possible
to separate two questions the real data confounds:

- does the *force channel* help the policy, or
- does the *estimator's error* limit how much it can help?

Train Method B on estimated HPI and again on ground-truth wrench; the gap is the estimator's cost.

## ⚠ Sim is not the platform

The available sim data is a single **6-DoF SO-101** arm in robosuite (`robot_type: robosuite_sim`,
`action[6]`, `observation.state[117]`), not the 17-DoF XLeRobot. Models trained here are comparable
to the **legacy** real models, not to anything trained on `xlerobot-coffee-real`. A genuine
sim→real transfer result needs the 17-DoF sim recollection reserved at
`xlerobot-coffee-sim/sim-xlerobot/`.

Camera keys also differ across domains — sim uses `observation.images.top`, real uses `…head`. Any
cross-domain policy needs an explicit key remap.

## Architecture

ACT + **Module A, variant A1**:

```
hpi_enabled  hpi_window_mode=multiscale  hpi_encoder=cnn1d  hpi_gate=none
```

`observation.state` = 6 joint positions; `observation.hpi` = 9-D signal
(`hpi/gripper/{tau_ext, q, dq}` + 6-D TCP wrench) in a dedicated token, read through a multiscale
dense window and a 1D-CNN encoder. No contact gate.

**Requires the `Coffee_Automata` / `hpi_act` branch code to instantiate.** Recipe will mirror the
real-domain runs (ACT · `chunk_size` 100 · `n_action_steps` 100 · batch 8 · seed 1000) so the
domain is the only variable.

## Loading

Once populated, load through the project helper — `PreTrainedPolicy.from_pretrained` has no
`subfolder` support:

```python
from scripts.coffee.load_coffee_policy import load_coffee_policy
policy = load_coffee_policy(domain="sim", method="b", task="t1")
```

Part of the **X-Lerobot Coffee Automata** project. AS-CITI Intelligent Decision Lab.