Paper · 2023-10-13 · cs.RO
Open X-Embodiment: Robotic Learning Datasets and RT-X Models
Open X-Embodiment pools 60 robot datasets from 22 embodiments into one RLDS format and trains RT-1-X and RT-2-X policies on a shared action space. Author-reported: RT-1-X beats each dataset's own baseline on 4 of 5 small-data domains, and RT-2-X raises emergent-skill success from 27.3% to 75.8%.
Vision-language-action modelImitation learningAction tokenizationTransfer learningrobot-learningcross-embodimentrobot-datasetsvision-language-actionimitation-learning
arXivPDFCodeMarkdown11 min read
AI-compiled by claude-haiku-5-5 on 2026-10-19, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.
In plain words
Robot learning has a data problem. Most robot policies are trained on one robot, in one lab, on one narrow set of tasks, so each new robot starts from scratch. Language models got better by training on large, varied collections of text. This paper asks whether robots can get the same benefit.
The authors gathered robot demonstration datasets from many labs and 22 robot types, and converted them into one shared format. They then trained two general policies on the combined data. Each policy looks at camera images and a written instruction, and outputs the next robot action. Because the action values are shared, one model can be used across several robots. The main finding is that a policy trained on the mixed data often does better on each robot's own tasks than a policy trained only on that robot's data. This is the "positive transfer" the paper reports.
TL;DR
The paper releases the Open X-Embodiment dataset: 60 existing robot datasets from 22 embodiments, converted to RLDS and described in §3. It also trains two policies, RT-1-X and RT-2-X, on a mixture of robot data §4.3. Author-reported results show positive transfer: RT-1-X beats each dataset's own baseline on most small-data domains, and RT-2-X gains on emergent skills §5. Read this card for the data format, the discrete action tokens and the places where the released code differs from the text.
Problem
Robot policies are usually trained for one robot, one environment and one task family, and the data is too narrow to pool across labs §1. The paper asks whether a policy trained on data from many embodiments can improve on policies trained only on one embodiment's data (positive transfer), and whether organising such data into one repository makes future research easier §1. The two goals are stated as (1) evaluate positive transfer and (2) organise the datasets §1. The paper does not claim to invent new architectures; it applies two existing Transformer policies with minimal change §1.
Method
Dataset (§3). The repository stores episodes in the RLDS format, which keeps the sensor and action layout of each robot §3.1. It pools 60 datasets from 34 research labs and covers 22 embodiments §3.1; the paper reports over one million trajectories §3. The abstract reports 527 skills and 160,266 tasks [abstract]; §3.2 uses PaLM to extract objects and behaviours from the instructions §3.2.
Data format consolidation (§4.1).
- The policy input is a short history of images and a language instruction.
- Each dataset contributes one canonical camera view, resized to a common resolution. The paper does not state that resolution §4.1.
- Each dataset's actions are converted to a 7-DoF end-effector action (x, y, z, roll, pitch, yaw, gripper), normalised per dataset before discretisation §4.1.
- Coordinate frames are not aligned. Actions may be absolute, relative or velocity commands, so one output vector can move different robots differently §4.1.
Two policies (§4.2).
- RT-1-X is RT-1 trained on the robotics mixture only. RT-1 is a 35M parameter network: a per-image EfficientNet with FiLM conditioning on a language embedding, followed by a decoder-only Transformer §4.2 fig. 2. The visual and language representations are fused into 81 vision-language tokens, and the history is 15 images §4.2.
- RT-2-X is RT-2 with a vision-language backbone, here RT-2-PaLI-X §4.2. Actions are written as text tokens of the language model §4.2.
Both models use a categorical cross-entropy loss over their output tokens §4.3.
Action tokenisation (§4.2). Each action is split into 8 dimensions: one discrete termination value and seven end-effector values. Each dimension is binned into 256 uniform bins §4.2. The released code uses 11 action tokens instead, which adds base-displacement fields; see Paper vs code.
# Action tokenization: continuous action -> 11 integer tokens
# Input: action dict with the keys below, for one timestep
# Output: int tokens, shape (11,), values in [0, vocab_size - 1]
def tokenize_action(action, vocab_size, world_range):
# Terminate flag is a 3-way one-hot; keep its argmax (0, 1 or 2)
# [code: models/rt1.py#L287-L291]
tokens = [argmax(action["terminate_episode"])]
# Fixed bounds per field; the world-vector bound depends on the variant
# [code: models/rt1.py#L293-L299]
bounds = {
"world_vector": world_range,
"gripper_closedness_action": (-1.0, 1.0),
"base_displacement_vector": (-1.0, 1.0),
"rotation_delta": (-pi / 2, pi / 2),
"base_displacement_vertical_rotation": (-pi, pi),
}
for name, (low, high) in bounds.items():
# Clip to the bounds, then map linearly to [0, 1]
# [code: models/rt1.py#L300-L302]
value = clip(action[name], low, high)
value = (value - low) / (high - low)
# Scale to the vocabulary and truncate to an integer bin
# [code: models/rt1.py#L303-L304]
tokens.append(int(value * (vocab_size - 1)))
return concatenate(tokens)Inference for one control step (§4.2, §4.3). The released inference code takes 15 frames, resizes them, runs the tokenizer and decoder, and reads 11 action tokens from the last step.
# RT-1-X inference for one control step
# Input: frames (15, H, W, 3) uint8; instruction_embedding (15, 512)
# Output: action dict for the current step
def act(frames, instruction_embedding):
# Resize each frame to 300x300 and scale to [0, 1]
# [code: models/rt1_inference_example.py#L126-L131]
images = scale(resize(frames, 300, 300))
# Tokenize each frame into 81 tokens, conditioned on the instruction
# [§4.2] [code: models/rt1.py#L114-L189]
image_tokens = image_tokenizer(images, instruction_embedding)
# No action history: action slots are zero-filled
# [code: models/rt1.py#L449-L456]
action_tokens = zeros(15, 11, 512)
# Decoder-only Transformer over the interleaved sequence, causal mask
# [§4.2] [code: models/rt1.py#L468-L480] [code: models/rt1.py#L511-L551]
logits = transformer(image_tokens, action_tokens)
# Logits at the 11 action positions of the last step; each logit is
# read before the token it predicts
# [code: models/rt1_inference_example.py#L98-L102]
action_logits = logits[-1, 80:91]
# Greedy choice, one token per dimension
# [code: models/rt1_inference_example.py#L104-L105]
predicted = argmax(action_logits, axis=-1)
# Map bins back to continuous values
# [code: models/rt1.py#L311-L355]
return detokenize_action(predicted)Training mixture and co-fine-tuning (§4.3). The mixture uses data from 9 manipulators and 12 named datasets: RT-1, QT-Opt, Bridge, Task Agnostic Robot Play, Jaco Play, Cable Routing, RoboTurk, NYU VINN, Austin VIOLA, Berkeley Autolab UR5, TOTO and Language Table §4.3. RT-1-X is trained on this mixture alone. RT-2-X is co-fine-tuned with web vision-language data in an approximately one-to-one split §4.3.
Evaluation (§5). The study runs 3,600 trials across 6 robots §5. Baselines are each dataset's original method and an RT-1 trained on that dataset alone §5.1.
Hyperparameters
Values not listed by the paper are marked not stated. Values from the released code are labelled as such.
| Name | Value | Where | Notes |
|---|---|---|---|
| RT-1 parameter count | 35M | §4.2 | RT-1-X uses the same architecture fig. 3 |
| Image history length | 15 | §4.2 rt1_inference_example.py | |
| Vision-language tokens per frame | 81 | §4.2 rt1_inference_example.py | TokenLearner in code rt1_inference_example.py |
| Image resolution | not stated in paper | §4.1 | Code resizes to 300x300 rt1_inference_example.py |
| EfficientNet variant | not stated in paper | §4.2 | Code uses B3 rt1.py |
| Action dimensions | 8 (1 terminate + 7 end-effector) | §4.2 | Code emits 11 tokens; see Paper vs code |
| Bins per dimension | 256 | §4.2 | Inference script uses 512 rt1_inference_example.py |
| World-vector range | not stated in paper | §4.1 | RT-1-X code uses (-2, 2) rt1_inference_example.py; class default (-1, 1) rt1.py |
| Rotation delta range | not stated in paper | ±π/2 rt1.py | |
| Gripper range | not stated in paper | [-1, 1] rt1.py | |
| Base rotation / base vector ranges | not stated in paper | [-π, π] and [-1, 1] rt1.py | |
| Transformer layers | not stated in paper | 8 rt1.py | |
| Layer size | not stated in paper | 128 class default rt1.py; 256 in inference script rt1_inference_example.py | |
| Attention heads | not stated in paper | 8 rt1.py | |
| Feed-forward sizes | not stated in paper | 512 and 512 rt1.py | |
| Feed-forward type | not stated in paper | SwiGLU default rt1.py; linear labelled "RT-1 legacy" rt1.py | |
| Dropout | not stated in paper | 0.1 rt1.py | |
| Image feature channels | not stated in paper | 512 rt1.py | |
| TokenLearner bottleneck | not stated in paper | 64 rt1.py | |
| Language embedding | Universal Sentence Encoder | §4.2 | Code takes a precomputed 512-d embedding; the encoder is not in the repo |
| Loss | categorical cross-entropy | §4.3 | |
| Co-training split (RT-2-X) | ~1:1 with VLM data | §4.3 | Exact ratio not stated |
| Control rate | 3–10 Hz | §4.3 | README example runs at 3 Hz [README.md#L29] |
| Optimizer, learning rate, steps, batch size | not stated in paper | Example notebook only (not the paper's recipe): Adam, lr 1e-4, eps 1e-7 Minimal_Training_Example.ipynb; 1,000 example steps, notebook says the real run needs more than 1M Minimal_Training_Example.ipynb; per-device batch 2 Minimal_Training_Example.ipynb | |
| Evaluation trials | 3,600 across 6 robots | §5 | Trials per table cell not stated |
Results
Author-reported. Setup: the in-distribution Bridge and RT-1 evaluations on WidowX and Google Robot, the co-trained models described in §4.3 §5.1.
Large-data domains, success rate tab. 1.
| Setting | Original Method (LCBC) | RT-1 | RT-1-X | RT-2-X (55B) | Source |
|---|---|---|---|---|---|
| Bridge, IRIS (Stanford), WidowX | 13% | 40% | 27% | 50% | tab. 1 |
| Bridge, RAIL Lab (UCB), WidowX | 13% | 30% | 27% | 30% | tab. 1 |
| RT-1 paper, 6 skills, Google Robot | - | 92% | 73% | 91% | tab. 1 |
The paper states that RT-1-X underfits these large domains and does not beat RT-1; RT-2-X does §5.1 tab. 1.
Small-data domains. RT-1-X beats the Original Method on 4 of the 5 datasets (Kitchen Manipulation, Cable Routing, NYU Door Opening, AUTOLab UR5, Robot Play) §5.1. The per-dataset numbers are only in fig. 3, a bar plot, and the text does not give them. The caption says RT-1-X is "50% higher" than the Original Method or RT-1 on mean success rate fig. 3; the paper does not say whether this is relative or in percentage points.
Emergent skills and generalisation, RT-2-X ablations tab. 2.
| Row | Model | Size | History | Dataset | Co-trained w/ web | Initial checkpoint | Emergent skills (%) | RT-2 generalisation (%) |
|---|---|---|---|---|---|---|---|---|
| (1) | RT-2 | 55B | none | Google Robot action | Yes | Web-pretrained | 27.3 | 62 |
| (2) | RT-2-X | 55B | none | Robotics data | Yes | Web-pretrained | 75.8 | 61 |
| (3) | RT-2-X | 55B | none | Robotics data except Bridge | Yes | Web-pretrained | 42.8 | 54 |
| (4) | RT-2-X | 5B | 2 | Robotics data | Yes | Web-pretrained | 44.4 | 52 |
| (5) | RT-2-X | 5B | none | Robotics data | Yes | Web-pretrained | 14.5 | 30 |
| (6) | RT-2-X | 5B | 2 | Robotics data | No | From scratch | 0 | 1 |
| (7) | RT-2-X | 5B | 2 | Robotics data | No | Web-pretrained | 48.7 | 47 |
Source: tab. 2, §5.2, §5.3. The text says RT-2-X outperforms RT-2 by about 3x on emergent skills §5.2; the table gives 75.8 / 27.3 ≈ 2.8.
Paper vs code
The official repository is google-deepmind/open_x_embodiment at
code_commit README.md. It holds the dataset colabs and a JAX
RT-1 / RT-1-X model with an inference example. It does not contain RT-2-X,
the 55B or 5B models, or the training data mixture code. Differences:
- Action tokens. The paper uses 8 dimensions §4.2. The code emits 11 tokens: 1 terminate, 3 world vector, 3 rotation, 1 gripper, 1 base rotation, 2 base displacement rt1.py rt1_inference_example.py.
- Bins. The paper says 256 bins §4.2. The inference script builds the
model with
vocab_size = 512rt1_inference_example.py. The class default is 256 rt1.py. - Layer size. The paper gives no layer size §4.2. The class default is 128 rt1.py; the inference script uses 256 rt1_inference_example.py.
- Action ranges. The paper normalises each dataset's actions before discretising §4.1. The code instead clips to fixed bounds, with world vector (-2, 2) for RT-1-X rt1_inference_example.py and (-1, 1) as the class default rt1.py. The normalisation statistics are not in this repository.
- Input resolution. The paper says "a common resolution" without a number §4.1. The code resizes to 300x300 rt1_inference_example.py.
- Language input. The paper uses a USE embedding §4.2. The code takes a precomputed 512-d embedding and drops any string rt1_inference_example.py. The encoder that produced it is not in the repository.
- Gripper encoding. The training notebook maps the Bridge gripper signal
to
gripper_closedness_actionwith -1 for open and 1 for closed Minimal_Training_Example.ipynb. The paper does not describe this mapping §4.1. - Feed-forward block. The paper does not name one §4.2. The code defaults to SwiGLU rt1.py.
- Control rate. The paper gives 3–10 Hz §4.3. The README example uses 3 Hz [README.md#L29].
Checked and consistent: 15-frame history §4.2 vs seqlen=15
rt1_inference_example.py; 81 image tokens §4.2 vs
num_image_tokens=81 rt1_inference_example.py; the
decoder-only Transformer with a causal mask over action tokens §4.2 vs
rt1.py; EfficientNet with FiLM conditioning §4.2 vs
rt1.py.
Pitfalls
- Action dimension count. Implementers following the text will build an 8-dimensional head. The released model emits 11 tokens, so a checkpoint does not match the paper's layout. Check the checkpoint's output size before you train against it.
- Base fields default to zero. The training notebook starts every action with zeros, then lets each dataset's mapping overwrite them Minimal_Training_Example.ipynb. How a dataset without base data is handled is not stated in the paper; check its mapping before you read a zero base command as a measured "no motion".
- Binning is biased. Encoding truncates
value * (vocab - 1)to an integer rt1.py, and decoding returns the lower edge of the bin rt1.py. Decoded values are biased low by up to one bin width, so the error is not zero even on training data. - Greedy, per-dimension decoding. The inference script takes the argmax of each token separately rt1_inference_example.py. The paper does not say how actions are decoded §4.2. Per-token argmax can combine bins that never occur together in the data (inference, not stated in the paper).
- Termination fallback. If the model predicts no termination flag, the script sets the last one to the base-pose mode rt1_inference_example.py. This changes the emitted action and is not in the paper.
- Coordinate frames differ per robot. The same action vector can cause different motions on different robots §4.1. The policy input is images and an instruction only, with no embodiment field §4.1.
- Ablation confound. The text attributes the emergent-skill gap between 55B and 5B to model size, by comparing row (2) with row (4) §5.3 tab. 2. Row (2) has no history and row (4) has history 2, so the comparison changes two factors at once.
- Co-training ratio. The 1:1 split is approximate and the mixture weights are not stated §4.3.
- Trial counts. The paper reports 3,600 trials in total §5 but not the number per table cell. Small differences in Table 1 cannot be judged without it.
- Training recipe missing. Optimiser, learning rate, step count and batch size are not stated in the paper. The example notebook values are a minimal example, not the recipe behind the released checkpoints Minimal_Training_Example.ipynb.
- RT-2-X is not reproducible from this repository. No RT-2-X code or checkpoint is in the repository. The README links only an RT-1-X JAX checkpoint [README.md#L39-L43].
- Dataset licences. This card covers the paper and its code only. The licences of the 60 constituent datasets are not recorded here. Check the dataset spreadsheet linked from the project page before reusing any data.
Lineage
- Builds on: RT-1 (architecture; the released code cites this arXiv id rt1.py) and RT-2, with the RT-2-PaLI-X backbone §4.2. The arXiv id for RT-2 is not in the source tree.
- Compared against: each dataset's original method, for example LCBC on Bridge tab. 1, and RT-1 trained on the dataset alone §5.1.
Source and license
Adapted from “Open X-Embodiment: Robotic Learning Datasets and RT-X Models” by Open X-Embodiment Collaboration, Abby O'Neill, Abdul Rehman, Abhinav Gupta, Abhiram Maddukuri, Abhishek Gupta, Abhishek Padalkar, Abraham Lee, Acorn Pooley, Agrim Gupta, Ajay Mandlekar, Ajinkya Jain, Albert Tung, Alex Bewley, Alex Herzog, Alex Irpan, Alexander Khazatsky, Anant Rai, Anchit Gupta, Andrew Wang, Andrey Kolobov, Anikait Singh, Animesh Garg, Aniruddha Kembhavi, Annie Xie, Anthony Brohan, Antonin Raffin, Archit Sharma, Arefeh Yavary, Arhan Jain, Ashwin Balakrishna, Ayzaan Wahid, Ben Burgess-Limerick, Beomjoon Kim, Bernhard Schölkopf, Blake Wulfe, Brian Ichter, Cewu Lu, Charles Xu, Charlotte Le, Chelsea Finn, Chen Wang, Chenfeng Xu, Cheng Chi, Chenguang Huang, Christine Chan, Christopher Agia, Chuer Pan, Chuyuan Fu, Coline Devin, Danfei Xu, Daniel Morton, Danny Driess, Daphne Chen, Deepak Pathak, Dhruv Shah, Dieter Büchler, Dinesh Jayaraman, Dmitry Kalashnikov, Dorsa Sadigh, Edward Johns, Ethan Foster, Fangchen Liu, Federico Ceola, Fei Xia, Feiyu Zhao, Felipe Vieira Frujeri, Freek Stulp, Gaoyue Zhou, Gaurav S. Sukhatme, Gautam Salhotra, Ge Yan, Gilbert Feng, Giulio Schiavi, Glen Berseth, Gregory Kahn, Guangwen Yang, Guanzhi Wang, Hao Su, Hao-Shu Fang, Haochen Shi, Henghui Bao, Heni Ben Amor, Henrik I Christensen, Hiroki Furuta, Homanga Bharadhwaj, Homer Walke, Hongjie Fang, Huy Ha, Igor Mordatch, Ilija Radosavovic, Isabel Leal, Jacky Liang, Jad Abou-Chakra, Jaehyung Kim, Jaimyn Drake, Jan Peters, Jan Schneider, Jasmine Hsu, Jay Vakil, Jeannette Bohg, Jeffrey Bingham, Jeffrey Wu, Jensen Gao, Jiaheng Hu, Jiajun Wu, Jialin Wu, Jiankai Sun, Jianlan Luo, Jiayuan Gu, Jie Tan, Jihoon Oh, Jimmy Wu, Jingpei Lu, Jingyun Yang, Jitendra Malik, João Silvério, Joey Hejna, Jonathan Booher, Jonathan Tompson, Jonathan Yang, Jordi Salvador, Joseph J. Lim, Junhyek Han, Kaiyuan Wang, Kanishka Rao, Karl Pertsch, Karol Hausman, Keegan Go, Keerthana Gopalakrishnan, Ken Goldberg, Kendra Byrne, Kenneth Oslund, Kento Kawaharazuka, Kevin Black, Kevin Lin, Kevin Zhang, Kiana Ehsani, Kiran Lekkala, Kirsty Ellis, Krishan Rana, Krishnan Srinivasan, Kuan Fang, Kunal Pratap Singh, Kuo-Hao Zeng, Kyle Hatch, Kyle Hsu, Laurent Itti, Lawrence Yunliang Chen, Lerrel Pinto, Li Fei-Fei, Liam Tan, Linxi "Jim" Fan, Lionel Ott, Lisa Lee, Luca Weihs, Magnum Chen, Marion Lepert, Marius Memmel, Masayoshi Tomizuka, Masha Itkina, Mateo Guaman Castro, Max Spero, Maximilian Du, Michael Ahn, Michael C. Yip, Mingtong Zhang, Mingyu Ding, Minho Heo, Mohan Kumar Srirama, Mohit Sharma, Moo Jin Kim, Muhammad Zubair Irshad, Naoaki Kanazawa, Nicklas Hansen, Nicolas Heess, Nikhil J Joshi, Niko Suenderhauf, Ning Liu, Norman Di Palo, Nur Muhammad Mahi Shafiullah, Oier Mees, Oliver Kroemer, Osbert Bastani, Pannag R Sanketi, Patrick "Tree" Miller, Patrick Yin, Paul Wohlhart, Peng Xu, Peter David Fagan, Peter Mitrano, Pierre Sermanet, Pieter Abbeel, Priya Sundaresan, Qiuyu Chen, Quan Vuong, Rafael Rafailov, Ran Tian, Ria Doshi, Roberto Martín-Martín, Rohan Baijal, Rosario Scalise, Rose Hendrix, Roy Lin, Runjia Qian, Ruohan Zhang, Russell Mendonca, Rutav Shah, Ryan Hoque, Ryan Julian, Samuel Bustamante, Sean Kirmani, Sergey Levine, Shan Lin, Sherry Moore, Shikhar Bahl, Shivin Dass, Shubham Sonawani, Shubham Tulsiani, Shuran Song, Sichun Xu, Siddhant Haldar, Siddharth Karamcheti, Simeon Adebola, Simon Guist, Soroush Nasiriany, Stefan Schaal, Stefan Welker, Stephen Tian, Subramanian Ramamoorthy, Sudeep Dasari, Suneel Belkhale, Sungjae Park, Suraj Nair, Suvir Mirchandani, Takayuki Osa, Tanmay Gupta, Tatsuya Harada, Tatsuya Matsushima, Ted Xiao, Thomas Kollar, Tianhe Yu, Tianli Ding, Todor Davchev, Tony Z. Zhao, Travis Armstrong, Trevor Darrell, Trinity Chung, Vidhi Jain, Vikash Kumar, Vincent Vanhoucke, Vitor Guizilini, Wei Zhan, Wenxuan Zhou, Wolfram Burgard, Xi Chen, Xiangyu Chen, Xiaolong Wang, Xinghao Zhu, Xinyang Geng, Xiyuan Liu, Xu Liangwei, Xuanlin Li, Yansong Pang, Yao Lu, Yecheng Jason Ma, Yejin Kim, Yevgen Chebotar, Yifan Zhou, Yifeng Zhu, Yilin Wu, Ying Xu, Yixuan Wang, Yonatan Bisk, Yongqiang Dou, Yoonyoung Cho, Youngwoon Lee, Yuchen Cui, Yue Cao, Yueh-Hua Wu, Yujin Tang, Yuke Zhu, Yunchu Zhang, Yunfan Jiang, Yunshuang Li, Yunzhu Li, Yusuke Iwasawa, Yutaka Matsuo, Zehan Ma, Zhuo Xu, Zichen Jeff Cui, Zichen Zhang, Zipeng Fu, Zipeng Lin (arXiv:2310.08864), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors. Code citations refer to https://github.com/google-deepmind/open_x_embodiment at commit 9eeb68b989ef (Apache-2.0). Any quoted code is shown under that license.