
CogACT hangs a diffusion transformer action head off a 7B VLM. The real SimplerEnv ablations, the 16-A100 training bill, and where the same split shows up in GR00T and Pi0.5.
CogACT is the clearest statement of an idea behind most current vision-language-action models: stop making the language model spell actions out as text tokens, and hang a dedicated action network off it instead. A 7B vision-language model emits one vector per timestep; a diffusion transformer turns it into a chunk of 16 actions.
The paper is arXiv:2411.19650, posted 29 November 2024 by a group from Tsinghua, Microsoft Research Asia, USTC and CAS. Still at v1. Code sits at github.com/microsoft/CogACT under MIT, with three checkpoints on Hugging Face. This describes the repo as of its last push, 30 October 2025.
What you need to know
- •Three parts: vision (DINOv2 plus SigLIP), language (LLAMA-2), and a diffusion transformer that generates the actions. 7.6B parameters.
- •The entire interface between the 7B brain and the action head is one learnable token.
- •At identical parameter count the head architecture is worth about 10 points: an 89M MLP head averaged 52.5 percent on SimplerEnv, an 89M DiT head 62.5.
- •The cost: CogACT does not freeze the VLM. Pre-training took 16 A100s for about 5 days, a 10K-step fine-tune 7.5 hours on 16 A100s.
- •CogACT wants RLDS data with end-effector delta actions. A LeRobot SO-100 recording is absolute joint positions, so it is not a drop-in.
- •AY-Robots does not train CogACT. It trains five policies, and three of them split a vision-language backbone from a separate action module the same way: GR00T N1.7, GR00T N1.5 and Pi0.5.
What CogACT actually is
Three blocks in a row. The paper is unusually explicit about the sizes, which makes it a good reference point for reasoning about where the parameters in a policy should go.
| Module | What it is | What it emits | Notes from the paper |
|---|---|---|---|
| Vision | DINOv2 and SigLIP vision transformers | 256 visual tokens by default | Feature maps concatenated, then linearly projected |
| Language | LLAMA-2 | One cognition feature vector | Visual and instruction tokens plus one learnable cognition token |
| Action | Diffusion transformer (DiT) | 16 actions of 7 DoF, shape [16, 7] | Conditioned on the cognition feature; DiT-B by default |
The action space is a 7-vector: three end-effector translation offsets, three rotation changes, one gripper bit. Vision and language weights are initialised from OpenVLA's checkpoint (arXiv:2406.09246), itself built on the Prismatic VLM design (arXiv:2402.07865). Pre-training uses the Open X-Embodiment subset Octo and OpenVLA also use, about 22.5 million frames.
"Componentized" describes the architecture, not the gradient flow. CogACT trains end to end: vision, language and action modules all receive gradients. If you expected a frozen backbone with a cheap head bolted on, that is a different design, and the difference costs an order of magnitude in training hardware.
The interface is one token
The language module gets visual tokens, instruction tokens, and one extra learnable token the paper calls the cognition token. The output feature at that position is the whole message passed to the action module. Everything the diffusion transformer knows about the scene and task arrives through that vector.
The action module denoises 17 slots: the current action, 15 future ones, and the conditioning. Training minimises MSE between predicted and true noise over 100 diffusion timesteps on a squaredcos_cap_v2 schedule. At inference the repo uses DDIM with 10 steps and classifier-free guidance at scale 1.5.
from PIL import Image
from vla import load_vla
import torch
model = load_vla(
'CogACT/CogACT-Base', # or CogACT-Small / CogACT-Large
load_for_training=False,
action_model_type='DiT-B', # must match the weights: DiT-S / DiT-B / DiT-L
future_action_window_size=15,
)
# about 30 GB of memory in fp32
model.to('cuda:0').eval()
actions, _ = model.predict_action(
image,
"move sponge near apple",
unnorm_key='fractal20220817_data', # dataset the action stats come from
cfg_scale=1.5, # 1.5 to 7 also works
use_ddim=True,
num_ddim_steps=10,
)
# actions.shape == (16, 7)Note unnorm_key. The model predicts normalised actions in [-1, 1] and needs per-dataset statistics to get back to metres and radians. Get it wrong and the arm moves confidently in the wrong units, which looks like a bad checkpoint until you check. It shows up here as a policy that only works in one setup.
What the split buys you
Ten points from architecture, at identical parameter count
Table 7 of the paper is the one to read twice, because it holds parameters fixed and varies only the head. GR is the Google robot in SIMPLER, WR the WidowX, VM visual matching, VA variant aggregation. Success rates in percent.
| Action head | Params | GR (VM) | GR (VA) | WR (VM) | Average |
|---|---|---|---|---|---|
| MLP, 3 layers | 3M | 52.2 | 52.4 | 47.1 | 50.6 |
| MLP, 7 layers | 89M | 61.4 | 48.0 | 48.1 | 52.5 |
| DiT-Small | 13M | 73.3 | 51.3 | 51.0 | 58.5 |
| DiT-Base | 89M | 74.8 | 61.3 | 51.3 | 62.5 |
| DiT-Large | 308M | 76.7 | 59.3 | 58.3 | 64.8 |
Read the two 89M rows against each other: same budget, same backbone, same data, 52.5 against 62.5. Then the 13M DiT against the 89M MLP, where a head seven times smaller wins by 6 points. The gain is not parameters. It is attention over the action horizon plus a generative objective.
Predicting the future is most of the win
The second ablation varies how many future actions the head predicts, which is action chunking by another name. Zero means single-step prediction.
| Future steps predicted | GR (VM) | GR (VA) | WR (VM) | Average |
|---|---|---|---|---|
| 0 | 73.4 | 49.0 | 6.3 | 42.8 |
| 3 | 70.4 | 58.9 | 37.1 | 55.5 |
| 15 (default) | 74.8 | 61.3 | 51.3 | 62.5 |
| 31 | 54.3 | 47.6 | 51.7 | 51.2 |
Going from 15 to 31 future steps lost 11 points of average success rate: open-loop prediction degrades once the horizon outruns what the observation supports. The same applies to chunkSize and nActionSteps when you train ACT here, both defaulting to 100 in the form. Bigger is not automatically better.
A third knob decides how overlapping chunks combine at inference. CogACT weights past predictions by cosine similarity to the current one, so different behaviour modes are not averaged into an action belonging to neither. Plain chunking scored 50.7, ACT's temporal ensemble (arXiv:2304.13705) 58.9, the adaptive ensemble 62.5.
The headline benchmark numbers
SIMPLER (arXiv:2405.05941) is built to correlate with real hardware. Visual matching replicates the real scene; variant aggregation perturbs background, lighting, distractors and table texture. Four tasks per setting:
| Model | Google robot VM | Google robot VA | WidowX VM |
|---|---|---|---|
| RT-1 | 52.4 | 43.7 | not reported |
| RT-1-X | 42.4 | 30.2 | 1.1 |
| RT-2-X (55B) | 46.3 | 54.4 | not reported |
| Octo-Base | 11.0 | 1.2 | 17.5 |
| OpenVLA (7B) | 34.3 | 39.3 | 4.2 |
| CogACT (7.6B) | 74.8 | 61.3 | 51.3 |
On real hardware the gap is wider. Over three Realman-arm tasks after fine-tuning on 391 demonstrations: Octo-Base 4.9, OpenVLA 12.1, CogACT 71.2. On a Franka with 400 demonstrations: 5.8, 6.8 and 61.4. All three CogACT variants sit in the Arena, which carries 85 VLA models and 332 benchmark results.

- Continuous actions, so no quantisation floor on precision.
- One forward pass produces a whole chunk: 16 actions against OpenVLA's 1.
- A generative head represents several valid trajectories instead of regressing to their mean.
- Capacity is cheap where it sits: growing the DiT from 13M to 308M moved the average from 58.5 to 64.8, 6.3 points, while the backbone stayed the same size.
- The interface is one vector. Anything the cognition token did not encode is gone.
- CogACT trains end to end, so you pay full 7B fine-tuning cost.
- The head learns one action parameterisation. Switch from end-effector deltas to joint positions and it must be retrained.
- More to get wrong at inference: cfg_scale, DDIM steps, ensemble horizon and alpha all change behaviour without retraining.
What the split costs you
It is not a frozen backbone, and the hardware bill says so
The common misreading is that the VLM is frozen and only the head trains. It is not. Pre-training ran on 16 A100s for roughly 5 days under PyTorch FSDP: batch 256, constant learning rate 2e-5, 135K iterations, 8 diffusion steps per example. Fine-tuning for the real-robot experiments also used 16 A100s at batch 256, with the tested checkpoint at 10K steps, or 7.5 hours.
The README says it plainly: "We recommend using fully finetune on your dataset instead of LoRA, because the model with fully finetuning performs better in a shorter training time." The checkpoint is a 30 GB download and wants about 30 GB in fp32. Not a weekend project on one consumer card. A full run on the A100/H100 tier here costs 4 to 12 USD, but that fine-tunes a 3B model, not a 7.6B one across 16 cards.
The data format tax
CogACT trains on RLDS, the format Open X-Embodiment uses. Your data has to be converted with rlds_dataset_builder, dropped into a custom_finetuning directory and selected with vla.data_mix="custom_finetuning". That part is mechanical. The action convention is not.
The README requires actions as EEF Delta XYZ (3) + Roll-Pitch-Yaw (3) + Gripper Open/Close (1). A LeRobot dataset from an SO-100 is absolute joint positions: six angles plus a gripper value. The LeRobot action representations guide says it directly: joint space is the default, and "Most beginner setups (SO-100, Koch) use joint-space actions." Converting means a URDF, inverse kinematics and re-derived rotation deltas, and every step can introduce a systematic offset that looks like a model problem and is not.
This is the general tax on the pattern, not a CogACT quirk: a head is trained against one action parameterisation and does not transfer across conventions for free. What differs is how tightly that convention is baked in. GR00T N1.7 descends from a design that puts an embodiment-specific MLP encoder in front of the action head and a matching decoder behind it, so the shared head takes whatever the dataset holds rather than a fixed 7-DoF end-effector vector. That is why a joint-space teleoperated recording works with it, and with Pi0.5, without the conversion CogACT demands.
The published numbers came from code that has since changed
On 13 January 2025 the repo landed commit 5ddf9b1: "fix a bug in forward_with_cfg, which cause a slight decrease in average performance during inference when using cfg". The diff moves two tensor slices from dimension 1 to dimension 2. Every headline number used CFG at 1.5, so reproducing the tables exactly against current main is not guaranteed. Worth knowing before you lose a week to being half a point off.
Adoption, measured rather than asserted
Papers get cited; weights get downloaded. Hugging Face API figures for the 30 days to 23 August 2026.
| Checkpoint | Downloads, 30 days | Likes | Weights last modified |
|---|---|---|---|
| CogACT/CogACT-Base | 2,254 | 18 | 2024-12-04 |
| CogACT/CogACT-Small | 141 | 5 | 2024-12-04 |
| CogACT/CogACT-Large | 103 | 5 | 2024-12-04 |
| openvla/openvla-7b (reference) | 74,695 | 248 | 2026-02-17 |
The weights have not moved since December 2024. The repo has, last on 30 October 2025 for Azure ML integration, and carries 431 stars and 40 forks. Treat CogACT as a reference implementation of an idea, not a maintained production stack.
Running CogACT yourself
To reproduce the SIMPLER numbers or fine-tune on your own arm, this is the path. README requirements: Python 3.10, PyTorch 2.2.0 or newer, CUDA 12.0 or newer.
- 1Install the package
The base install is inference only. The
[train]extra pulls in Flash Attention 2, which is what takes the time.bashconda create --name cogact python=3.10 -y conda activate cogact git clone https://github.com/microsoft/CogACT cd CogACT pip install -e . # training only: adds flash-attn 2.5.5 pip install -e .[train] - 2Pull a checkpoint
30 GB over git-lfs, or pass the model id to the training script and let it download.
bashgit lfs install git clone https://huggingface.co/CogACT/CogACT-Base export HF_TOKEN=hf_... - 3Evaluate in SIMPLER
Install SimplerEnv, copy the adapter in, register it in
main_inference.py. One script ships per task and setting.bashcp ./sim_cogact <your_path_to_simpler>/simpler_env/policies -r cd <your_path_to_simpler> bash simpler_env/policies/sim_cogact/scripts/cogact_put_in_drawer_visual_matching.sh - 4Fine-tune on your own data
Eight A100s in the README example; the paper used sixteen. Around 30 epochs already yields good results.
bashtorchrun --standalone --nnodes 1 --nproc-per-node 8 scripts/train.py \ --pretrained_checkpoint CogACT/CogACT-Base \ --vla.type prism-dinosiglip-224px+oxe+diffusion \ --vla.data_mix custom_finetuning \ --vla.expected_world_size 8 \ --vla.global_batch_size 256 \ --vla.per_device_batch_size 32 \ --vla.learning_rate 2e-5 \ --data_root_dir <path_to_dataset_dir> \ --run_root_dir <path_to_checkpoint_dir> \ --image_aug True \ --repeated_diffusion_steps 8 \ --future_action_window_size 15 \ --action_model_type DiT-B \ --is_resume False - 5Serve it to the robot
scripts/deploy.pystarts an HTTP server; the client needs onlyrequests.--action_ensembleand--action_chunkingare mutually exclusive, enforced by an assert.bashpython scripts/deploy.py \ --saved_model_path <your_model_path> \ --unnorm_key custom_finetuning \ --action_ensemble \ --use_bf16 \ --action_ensemble_horizon 2 \ --adaptive_ensemble_alpha 0.1 \ --cfg_scale 1.5 \ --port 5500
One easily missed detail: the ensemble horizon is not a constant. The supplement gives the rule, not the numbers. It fixes K x std(action) = 0.2 across datasets, so a faster robot or a higher observation frequency gets a different K. The values that rule produced sit in the repo: sim_cogact/cogact_policy.py sets K = 2 for the Google robot setup and K = 7 for the WidowX BridgeData setup, and the deploy script defaults to 2.
Two routes to the same goal
Say the goal is a diffusion-transformer action head, conditioned on a pre-trained VLM, driving a real low-cost arm on a task you recorded. The honest comparison:
Fine-tune CogACT-Base directly. Right if you are studying the architecture, need the 7B backbone, or must compare against CogACT on equal footing.
- Record demonstrations. The paper used 391 and 400, so plan for hundreds of episodes, not dozens.
- Convert to RLDS with rlds_dataset_builder, and joint actions to end-effector deltas with a URDF and inverse kinematics.
- Rent 8 to 16 A100 80 GB cards. FSDP, global batch 256, learning rate 2e-5.
- Run roughly 10K steps for a first checkpoint: 7.5 hours on 16 A100s.
- Serve with
scripts/deploy.py, tuningcfg_scale,action_ensemble_horizonandadaptive_ensemble_alphaagainst your control rate. - Then debug the action-space conversion, because that is where the time goes.
Full control, a 7.6B model, MIT-licensed weights, ablations you can extend. You also own every part of the pipeline, including the parts that break.
Being direct: you cannot train CogACT here. It is not one of the five trainable policies. You can train models using the same split, on data recorded from a real SO-100, without owning 16 A100s.
| Policy | Family | Params | GPU tier | Min episodes | Cost per run |
|---|---|---|---|---|---|
| GR00T N1.7 | VLA with diffusion action head | ~3B, ~40M trained during fine-tuning | A100 or H100 80 GB | 50 | 4 to 12 USD |
| GR00T N1.5 | VLA foundation model, predecessor | ~3B | A100 or H100 80 GB | 50 | 4 to 12 USD |
| Pi0.5 | Flow-matching VLA (policy type pi05) | ~3B, PaliGemma backbone | A100 or H100 80 GB | 50 | 4 to 12 USD |
| SmolVLA | Compact VLA | ~450M | RTX 4090 or any 24 GB card | 30 | 1 to 3 USD |
| ACT | Action chunking transformer, from scratch | ~80M | RTX 4090 or any 24 GB card | 50 | 1 to 3 USD |
Closest in spirit to CogACT is GR00T N1.7 on the SO-100: a vision-language backbone with a diffusion transformer head, except fine-tuning touches about 40M of its 3B parameters. That is the difference between one spot-market GPU for an afternoon and a 16-card cluster.
- 1Record a dataset
The desktop client writes LeRobot-format episodes from a teleop session, or start from one in the public directory.
- 2Pick model and hyperparameters
The training form sets model, dataset and hyperparameters. GR00T N1.7 defaults: batch 32, learning rate 1e-4, 20000 max steps.
- 3Let the backend rent the GPU
It picks a spot-market card by required VRAM, runs the trainer and writes checkpoints to object storage. An A100/H100-tier run takes 3 to 6 hours.
- 4Serve and drive
/api/inference/podprovisions a pod serving the policy, the local client talks to it, and an idle watchdog destroys the pod so nothing bills silently.
The GR00T loader crashes on a LeRobot v3.0 dataset; it must be converted down to v2.1 first. If your run dies at load time, check this first, and see /fix/dataset-rejected-v3. Separately, GR00T's fine-tuning entry point exposes no seed flag, so GR00T runs are not bit-for-bit reproducible. lerobot's default seed is 1000.
The same pattern in policies you can actually train
CogACT is one point in a design space most current VLAs occupy. Side by side, the interesting variable is not the backbone but what sits after it.
| Model | Backbone | Action head | Head size | Actions per forward pass |
|---|---|---|---|---|
| OpenVLA | Prismatic 7B | Discretised tokens, autoregressive | reuses the LM head: 256 bins overwrite the 256 least-used Llama tokens | 1 (7 tokens) |
| Octo-Base | Transformer trained on OXE, 93M total | Small diffusion head, DDPM objective | 3-layer MLP, hidden 256; parameter count not stated | chunk |
| CogACT-Base | DINOv2 + SigLIP + LLAMA-2, ~7B | Diffusion transformer (DiT-B) | 89M | 16 |
| Pi0 | PaliGemma, a 3B VLM (3.3B with the expert) | Flow-matching action expert | ~300M | chunk of 50 |
| GR00T N1 | Eagle-2 VLM (System 2) | Diffusion transformer (System 1), flow matching | not itemised; 2.2B total, 1.34B of it in the VLM | 16 |
| OpenVLA-OFT | Prismatic 7B | Continuous actions, L1 regression | not a diffusion head | chunk |
Two deserve a note. Pi0 routes tokens to two weight sets inside one transformer: images and language to the PaliGemma backbone, state and noisy actions to a 300M expert, interacting only through self-attention. Tighter coupling than CogACT's single token, and it uses flow matching rather than DDPM-style diffusion. OpenVLA-OFT (RSS 2025) is the counterexample: it drops diffusion for continuous actions with plain L1 regression and parallel decoding, reporting 26x higher throughput than OpenVLA and LIBERO success from 76.5 to 97.1 percent. A diffusion head is not the only fix.

The latency arithmetic, stated carefully
The repo reports a real measurement: CogACT-Base in bfloat16 on a single A6000, called 100 times, averages about 181 ms per inference, roughly 5.5 Hz. OpenVLA on the same card averaged 307 ms. The reason given is that one cognition token generates the whole sequence, while an OpenVLA-style model emits seven tokens for one 7-dimensional action.
181 ms is per inference call, each returning 16 actions. The policy latency figures here are per action step: 20 ms for ACT, 152 ms for GR00T N1.7, 245 ms for SmolVLA, 485 ms for Pi0.5. Different units. Executing all 16 actions open-loop gives 16x the rate and worse accuracy. The GR00T N1 paper reports 63.9 ms for a chunk of 16 on an L40 in bfloat16, also per call, and for N1 rather than N1.7.
The honest limit applies to all of them: inference latency has to sit next to the servos for fast tasks. The control loop is 20 to 485 ms per action step, and public-internet round trips turn a working policy into a hesitant one. Remote inference is viable for slow pick-and-place, not fast reactive motion.

What I would actually do with this
CogACT is more valuable as an argument than as a checkpoint. At fixed parameter budget the shape of the action head is worth about 10 points, chunk length about 20, the ensemble rule about 12. Large numbers for decisions that cost nothing at training time.
- Choosing a policy for a real arm: start from the head design, not backbone size.
- Do not raise chunk length past what your camera view supports. 31 future steps beat 15 in nothing.
- With 16 A100s and an RLDS pipeline, fine-tuning CogACT is a reasonable research move. With one arm and a laptop, SmolVLA on the SO-100 at 1 to 3 USD a run teaches more per day.
- Read the ablations, not the headline. "Beats OpenVLA by 35 percent" tells you less than "89M MLP scored 52.5, 89M DiT scored 62.5".
- Check adoption first. Weights untouched since December 2024 is a reference implementation, not infrastructure.
For why VLAs are structured this way, the VLA overview covers the lineage, the RT-2 article the token-based approach CogACT argues against, and the Pi-Zero article the flow-matching branch. Never trained a policy? Train your first policy is the shortest useful path, and the training docs describe what the backend does with your run.
Is the VLM frozen in CogACT?▾
No, and this is the most common misconception about the paper. Vision, language and action modules all train end to end by minimising MSE on the predicted diffusion noise. "Componentized" refers to the architecture, not to which parameters receive gradients. Pre-training ran on 16 A100s for roughly 5 days.
Can I fine-tune CogACT on a LeRobot dataset from an SO-100?▾
Not without conversion work. CogACT expects RLDS data with actions as end-effector delta XYZ, roll-pitch-yaw and a gripper bit. LeRobot recordings from an SO-100 are absolute joint positions. You need a URDF, inverse kinematics, delta computation and an RLDS build, and each step can introduce a systematic offset that looks like a model failure.
Which CogACT variant should I use?▾
CogACT-Base with DiT-B is the default in every script in the repo and the paper's main model. CogACT-Large scored higher in the ablation, 64.8 against 62.5, but is a 308M head instead of 89M. Base also has far more downloads: 2,254 against 103 in the 30 days to 23 August 2026.
How fast is CogACT at inference?▾
The repo measured CogACT-Base in bfloat16 on a single A6000 over 100 calls at about 181 ms per call, roughly 5.5 Hz, each returning 16 actions. OpenVLA on the same hardware averaged 307 ms for one action.
Can I train CogACT on AY-Robots?▾
No. The platform trains five policies: GR00T N1.7, GR00T N1.5, Pi0.5, SmolVLA and ACT. The nearest equivalent is GR00T N1.7, a roughly 3B VLA with a diffusion transformer head where fine-tuning trains about 40M parameters and a run costs 4 to 12 USD. CogACT's published results are in the Arena at /arena.
Does the adaptive action ensemble actually matter?▾
By the paper's own ablation, yes. Plain action chunking scored 50.7 across the three SIMPLER settings, ACT's temporal ensemble 58.9, the adaptive ensemble 62.5. It weights past predictions by cosine similarity to the current one, so different behaviour modes are not blended together.
85 VLA models, 332 benchmark results, every number sourced
CogACT, OpenVLA, Octo, Pi0, GR00T and 80 more in one sortable table. Each value links back to its paper or model card, so you can check the claim instead of trusting the chart.
Open the ArenaSources
- CogACT: A Foundational Vision-Language-Action Model for Synergizing Cognition and Action in Robotic Manipulation (arXiv, 29 Nov 2024)
- microsoft/CogACT source repository (MIT, last push 30 Oct 2025)
- CogACT project page
- CogACT/CogACT-Base model card on Hugging Face
- Evaluating Real-World Robot Manipulation Policies in Simulation (SIMPLER)
- OpenVLA: An Open-Source Vision-Language-Action Model
- Fine-Tuning Vision-Language-Action Models: Optimizing Speed and Success (OpenVLA-OFT)
- pi0: A Vision-Language-Action Flow Model for General Robot Control
- GR00T N1: An Open Foundation Model for Generalist Humanoid Robots
- NVIDIA Isaac-GR00T repository
- LeRobot documentation: Action Representations
- Scalable Diffusion Models with Transformers (DiT)
- Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware (ACT)
- Octo: An Open-Source Generalist Robot Policy
- SimplerEnv evaluation environments
Sources
- CogACT: A Foundational Vision-Language-Action Model for Synergizing Cognition and Action in Robotic Manipulation
- microsoft/CogACT source repository
- CogACT project page
- CogACT/CogACT-Base model card
- Evaluating Real-World Robot Manipulation Policies in Simulation (SIMPLER)
- OpenVLA: An Open-Source Vision-Language-Action Model
- Fine-Tuning Vision-Language-Action Models: Optimizing Speed and Success
- pi0: A Vision-Language-Action Flow Model for General Robot Control
- GR00T N1: An Open Foundation Model for Generalist Humanoid Robots
- NVIDIA Isaac-GR00T repository
- LeRobot documentation: Action Representations
- Scalable Diffusion Models with Transformers (DiT)
- Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware (ACT)
- Octo: An Open-Source Generalist Robot Policy
- SimplerEnv evaluation environments
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started