The AY-Robots SO-100 hub page, the entry point for building, teleoperating, recording and training with a low-cost SO-100 arm
deformable-objectscloth-manipulationlerobotso-100data-collection

Deformable Objects: Cloth and Cables on a Low-Cost Arm

AY-Robots ResearchAugust 23, 202620 min read

Cloth and cable manipulation breaks the assumptions behind pick-and-place. What the published folding results actually achieved, what a single low-cost arm can do, and what it cannot.

What holds up once the object changes shape

  • A rigid object has a pose: three numbers for position, three for orientation. A shirt does not. Every published cloth result works around that fact rather than solving it.
  • Every cloth-folding system with a published success rate runs on two arms: FlingBot, SpeedFolding, ALOHA Unleashed, X-VLA and the Physical Intelligence laundry demos are all bimanual.
  • The LeRobot shirt-folding release trained on all 5,688 recorded episodes and reached 40% success, 0% on the harder start state. Fine-tuning on a hand-picked 1,200-episode subset reached 90%. More data made it worse.
  • The pi0 paper scores one laundry fold out of four points, and the second is for flattening. Flattening is a separate skill, and it is the one that fails.
  • Slowness works in your favour. Cloth tasks are quasi-static, so the 485 ms per action step of Pi0.5 costs time, not success.
  • Platform minimums are 50 episodes for GR00T N1.7, GR00T N1.5, Pi0.5 and ACT, and 30 for SmolVLA. For cloth those are the start of the count, not the target.

A towel does not have a pose

Pick-and-place code carries an assumption nobody writes down: the thing you are grabbing has a state that fits in six numbers. Grasp planning inherits it, motion planning inherits it, and a learned policy that never sees those numbers still inherits it from the demonstrations, because rigid objects really do move as one piece when you pull them.

Fabric has none of that. The 2023 deformable-manipulation survey by Gu and colleagues opens on the reason: infinite dimensionality and complex dynamics compared with the rigid case. The practical consequence is not harder maths. It is that four parts of your pipeline stop being valid at the same time.

What the pipeline assumesRigid blockCotton towel
Object stateSix numbers, one poseNo finite pose. Shape is part of the state.
PerceptionOne decent view is enoughSelf-occlusion: a fold hides the layer beneath it.
Effect of a graspObject follows the gripper as one pieceOnly the grasped region follows. The rest drapes.
Reset between episodesPut it back on the tape markNo mark exists. Every reset is a new configuration.
Success checkIn the bin, yes or noStaged: picked, flattened, folded, stacked
Failure recoveryLet go, regrasp, retryThe failed attempt changed the object you meant to retry on

That last row is the expensive one. A bad grasp on a cube costs two seconds; a bad grasp on cloth leaves the fabric in a state nobody demonstrated, so the policy acts from an observation outside its training data. That is why cloth failures look like hesitation rather than collision, and why a policy freezing mid-motion is the usual symptom.

The fold is four points, not one

Appendix E of the pi0 paper scores its laundry-folding task out of 4: one point for picking an item out of the bin and putting it on the table, one for flattening it, one for folding it, one for placing it in the corner or stacking it on the existing pile. Each evaluation runs at most 15,000 steps, roughly five minutes. Score your own cloth policy as a single pass or fail and you will never see which stage regressed.

What the published cloth results actually say

The literature is more encouraging than most people expect and more discouraging than the demo videos suggest. The table lists only results I opened and read, with the hardware column taken from the same source as the number.

SystemYearHardwareDataReported result
FlingBot2021Dual UR5Self-supervised, sim then realOver 80% coverage within 3 actions on novel cloths, over 4x the coverage gain of the quasi-static baseline
SpeedFolding2022Bimanual ABB YuMi4,300 annotated and self-supervised actions93% from a random crumpled start, under 120 s average, 30 to 40 folds per hour
pi0, laundry folding2024Static bimanual10,000 h pre-training, then fine-tunedFine-tuned model passes 50% of the maximum rubric score on every task in the hard set
ALOHA Unleashed, shirt hanging2024ALOHA 2, bimanual8,658 demonstrations for this task alone75% from a flat start, 70% from a crumpled start
X-VLA-0.9B on Soft-Fold2025Bimanual Agilex1,200 episodes, DAgger-styleNear 100% success, 33 completed folds per hour
pi0.6 model cardNov 2025Static bimanualNo task-specific fine-tuningFolds laundry reliably out of the box; before it, folding needed fine-tuning to score above zero
LeRobot open shirt folding2026Bimanual OpenArm, custom grippers1,200 curated out of 5,688 recorded90% over 20 rollouts: 100% flat, 80% messy

Now read the hardware column again. Not one platform has a single arm, and that is mechanical rather than accidental: a fold needs one hand to pin the fabric while the other moves it. SpeedFolding does not even infer the fold lines, they are supplied as user-defined instructions, and it still needs two arms to execute them.

There is no single-arm folding baseline to copy

If you are planning a t-shirt fold on one SO-100 you are not reproducing anyone. A single arm can pin against the table instead of a second gripper, which works for a stiff face towel on a high-friction surface and stops working for a jersey t-shirt on laminate. Budget the time as research, not as a tutorial.

The AY-Robots arena page: a sortable table of 85 vision-language-action models with 332 benchmark results, each value linked to its source paper or model card
The /arena leaderboard checks whether a model has a benchmark number behind it. Deformable tasks are under-represented in every public benchmark suite, which is why the papers above matter more here.

Folding laundry and collecting laundry are different tasks

The Pi0.5 household demos get quoted as laundry results, and they are not quite that. In the Pi0 lineage, the Pi0.5 appendix defines Laundry Basket as plus one for navigating to and picking up the clothing, plus one for placing it into or on the basket, plus one for the clothing ending up fully inside. Nothing there requires knowing the shirt's shape. It is pick-and-place with a floppy object, and it is genuinely useful.

Folding is the other task. The pi0.6 model card of 17 November 2025 states that laundry folding and box assembly previously required fine-tuning with high-quality data to reach non-zero success rates. Take that as calibration: in late 2025, a 3-billion-parameter vision-language-action model on a bimanual research platform scored zero at out-of-the-box laundry folding.

The data number nobody quotes

The most useful cloth result of the past year is not a success rate, it is a failed ablation. LeRobot published both of its shirt-folding datasets to the Hub, so the numbers are checkable rather than quoted.

json
// lerobot/full_folding  meta/info.json
{ "codebase_version": "v3.0", "robot_type": "openarms_follower",
  "total_episodes": 5688, "total_frames": 14129038,
  "total_tasks": 1, "fps": 30 }

// lerobot/high_quality_folding  meta/info.json
{ "codebase_version": "v3.0", "robot_type": "openarms_follower",
  "total_episodes": 1200, "total_frames": 3254196,
  "total_tasks": 1, "fps": 30 }
Fetched from the Hub on 24 August 2026. One task, two arms, 16-dimensional actions: seven joints and a gripper per arm.

Training on all 5,688 episodes gave 40% total success and 0% on the messy start. Fine-tuning the best checkpoint on the hand-picked 1,200 gave 90%: 100% flat, 80% messy. The curation rules were mundane, which is the point. Drop episodes with a poor final state, drop suspiciously short outliers, keep only episodes where the operator used one consistent technique.

The trap that eats a week: recording more of the same bad episode

On rigid tasks sloppy episodes average out. On cloth they do not: there is no single correct trajectory for a crumpled shirt, so inconsistent operators teach several contradictory strategies at once, and the policy starts one and finishes another. If your loss falls and the arm still does nothing useful, read loss falls, policy does nothing before recording another 200 episodes.

X-VLA got to the same place from the other direction: retrain an ACT model after every 100 collected episodes, find its failure modes, record targeted demonstrations against them. Their appendix also gives the rate. One folding episode takes about 1.5 minutes, and an hour yields 20 to 25 episodes once resets and discarded attempts are counted, so 1,200 episodes is roughly 50 to 60 hours at the bench.

Three things that break on one low-cost arm

1. You only have one hand

The workaround is to make the table the second hand: pin one edge against a raised lip, drag with the jaws. That is why every realistic single-arm task below involves dragging, dropping, or folding against a fixed feature, and why fabric choice is load-bearing. A terry face towel on a rubber mat behaves almost like a semi-rigid object; a thin cotton t-shirt on a smooth desk behaves like a fluid.

2. The gripper cannot count layers

Grabbing exactly one layer is a research problem in its own right. Tirumala and colleagues put a ReSkin tactile sensor on one fingertip of a Franka arm and trained a classifier purely to decide how many layers were in the grasp, evaluated over 180 physical trials. The SO-100 has no tactile sensing and its end effector is a printed parallel jaw: two layers and one layer look identical in the joint stream. The LeRobot team redesigned their grippers with a larger contact surface and extended the upper arm by 5 cm before reaching 90%.

Do not fix a weak grip with a bigger power supply

The obvious reaction to jaws slipping on fabric is more force. SO-100 and SO-101 run Feetech STS3215 bus servos at 7.4 V; feeding them 12 V destroys them, quietly enough that you will blame the policy first. Change the fingertip geometry or the fabric, never the rail voltage. See gripper does not close.

3. The state you need is not in the joint angles

An SO-100 recording carries an observation.state of six values (shoulder pan, shoulder lift, elbow flex, wrist flex, wrist roll, gripper) plus camera streams. On a rigid task a policy can partly cheat by replaying proprioceptive trajectories. On cloth there is nothing to cheat with: every fact about the object lives in the pixels, and the wrist camera becomes the sensor that decides whether the jaws closed on an edge or on the middle of the fabric.

A single low-cost arm on deformable objects
What works in your favour
  • Cloth tasks are quasi-static. Nothing has to be caught, so 485 ms per action step costs time, not success.
  • A towel is cheap, does not chip, and resets in seconds. An evening of recording risks no hardware.
  • Failures are gentle: a bad grasp drags fabric instead of loading a servo against something rigid.
  • Fabric is visually rich. Edges, wrinkles and shadows are features a pretrained vision backbone already represents.
What does not
  • No published single-arm folding baseline exists, so you have no reference success rate to compare against.
  • Without tactile sensing, a two-layer grab is indistinguishable from a one-layer grab in the recorded state.
  • Reset variance is unbounded. You cannot repeat a start configuration, which inflates the episode count needed.
  • The fabric drifts during a session. A towel folded 40 times sits differently from a fresh one, and that reads as a mysterious afternoon regression.

What a single SO-100 can realistically do

This is a judgement call built from the results above, not a measured benchmark. Treat the middle column as guidance on where to spend your first 50 episodes.

TaskRealistic on one arm?Why
Drag a cloth into a marked zoneYesOne grasp, one continuous motion, success visible in a single overhead frame
Pick a towel up and drop it in a binYesThe shape of the Pi0.5 laundry-basket rubric: pick and place with a floppy object
Wipe a surface with a cloth in the gripperYesThe cloth never leaves the jaws, so deformation stays small and repeatable
Fold a stiff face towel against a table edgeSometimesThe table acts as the second hand. Works on high-friction surfaces, fails on laminate
Hang a cloth over a railSometimesALOHA Unleashed needed 8,658 bimanual demos for the hanger version; a rail is far more forgiving
Flatten a crumpled t-shirtNoThe stage FlingBot needed a dynamic two-arm fling for, and where the LeRobot run scored 0% before curation
Fold a t-shirt with sleevesNoEvery published result is bimanual and needs simultaneous pinning
Plug a USB-C connector into a socketSometimesThe connector is rigid: an insertion task with a floppy tail, not a deformable task
Route a cable through three clipsNoPublished work needs tactile fingertips or a second arm to hold tension
Untangle or untieNoHULK reached 61.7% physical success with a bilateral robot and an explicit geometric planner

Recording a deformable dataset that trains

The commands are the ordinary LeRobot dataset commands, checked against the current LeRobot imitation-learning docs. What changes for cloth is the protocol around them, not the flags.

  1. 1
    Put a camera where the shape is

    One overhead camera that sees the whole fabric footprint, one wrist camera that sees what the jaws are about to close on. The LeRobot docs give the acceptance test: you should be able to do the task yourself looking only at the images. Run that test on a crumpled start, not a flat one.

    bash
    lerobot-teleoperate \
      --robot.type=so100_follower \
      --robot.port=/dev/ttyACM0 \
      --robot.id=my_so100 \
      --robot.cameras="{ top: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \
      --teleop.type=so100_leader \
      --teleop.port=/dev/ttyACM1 \
      --teleop.id=my_leader \
      --display_data=true
  2. 2
    Write the rubric before you record anything

    Copy the pi0 approach and split the task into scored stages: reached, grasped an edge, lifted clear, released over the bin. Four spreadsheet columns, used at every evaluation from now on. It is the only way to see partial progress.

  3. 3
    Record in blocks, with a reset budget that matches the fabric

    Record 50 episodes, not 400. Defaults are 60 s per episode, 60 s of reset and 50 episodes, already 100 minutes of clock time before a single retake. Use the reset window to re-crumple the fabric into a genuinely different configuration.

    bash
    lerobot-record \
      --robot.type=so100_follower \
      --robot.port=/dev/ttyACM0 \
      --robot.id=my_so100 \
      --robot.cameras="{ top: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \
      --teleop.type=so100_leader \
      --teleop.port=/dev/ttyACM1 \
      --teleop.id=my_leader \
      --dataset.repo_id=$HF_USER/so100_towel_to_bin \
      --dataset.single_task="Pick up the towel and drop it in the bin" \
      --dataset.num_episodes=50 \
      --dataset.episode_time_s=45 \
      --dataset.reset_time_s=30 \
      --display_data=true
  4. 4
    Throw away your bad episodes while you are still at the bench

    Left arrow (or r) cancels and re-records the episode you just botched. That is the cheapest possible version of the LeRobot curation step: free now, expensive later. Add episodes afterwards with --resume=true, remembering that num_episodes then means additional episodes.

    bash
    # add 30 more episodes to the same dataset
    lerobot-record \
      --robot.type=so100_follower \
      --robot.port=/dev/ttyACM0 \
      --robot.id=my_so100 \
      --dataset.repo_id=$HF_USER/so100_towel_to_bin \
      --dataset.root=/data/so100_towel_to_bin \
      --dataset.num_episodes=30 \
      --resume=true
  5. 5
    Train something fast, roll it out, let the failures pick the next block

    Short loop first. This is the DAgger-style cycle X-VLA used to get a competitive folding policy out of only 1,200 episodes. Do not collect a second large block until a rollout has told you which stage is broken.

    bash
    lerobot-train \
      --dataset.repo_id=$HF_USER/so100_towel_to_bin \
      --policy.type=act \
      --output_dir=outputs/train/act_towel \
      --job_name=act_towel \
      --policy.device=cuda \
      --policy.repo_id=$HF_USER/act_towel
  6. 6
    Overlap inference if the model is slow

    Every lerobot-rollout strategy accepts --inference.type=rtc, real-time chunking, which generates the next action chunk while the current one executes. The LeRobot folding write-up reports rollouts at least twice as fast as synchronous inference.

    bash
    lerobot-rollout \
      --strategy.type=episodic \
      --inference.type=rtc \
      --policy.path=$HF_USER/act_towel \
      --robot.type=so100_follower \
      --robot.port=/dev/ttyACM0 \
      --task="Pick up the towel and drop it in the bin" \
      --duration=120
The reset window is the experiment, not the break

With a cube you press the right arrow after five seconds. With fabric the reset is the variation you train against. Re-crumple the towel identically every time and you have 50 copies of one start state, which has its own failure page: policy only works in one setup. More on collection discipline in how to collect high-quality VLA training data.

The AY-Robots tutorial page for recording a first LeRobot dataset, showing the recording workflow step by step
The recording tutorial at /learn/record-your-first-dataset. Mechanically identical for a towel and a cube; the difference is what you do during the reset window.

Which policy to point at a deformable task

The five trainable policies differ in ways that matter more than usual here, because cloth tasks are long-horizon and vision-dominated. These numbers are the platform's.

PolicyParamsInference per stepGPU tierMin episodesDataset format
GR00T N1.7~3 B, ~40 M trained during fine-tuning152 msA100 80 GB or H100 80 GB50LeRobot v2.0 or v2.1
GR00T N1.5~3 B165 msA100 80 GB or H100 80 GB50LeRobot v2.0 or v2.1
Pi0.5~3 B, PaliGemma backbone485 msA100 80 GB or H100 80 GB50LeRobot v3.0
SmolVLA~450 M245 msRTX 4090 or any 24 GB card30LeRobot v3.0
ACT~80 M20 msRTX 4090 or any 24 GB card50LeRobot v3.0

For cloth, inference latency is the least of your problems. A folding motion is quasi-static, so Pi0.5 at 485 ms spends time rather than failing, and this is the one task family where remote inference over the public internet is defensible. That is also the limit of the excuse: it works for slow pick-and-place, not for reactive motion, and a dynamic fling of the FlingBot kind dies on a round trip.

The argument for ACT is iteration speed, not final quality. It trains in hours on a 24 GB card, which is what the DAgger cycle needs, but it has no base model at all: it exists only after training on your task, so it starts with zero visual knowledge about fabric. X-VLA trained ACT from scratch on Soft-Fold and reported it failed to match the pretrained model's throughput. Use ACT to find failure modes, then move to GR00T N1.7 or Pi0.5 once the data is clean.

The AY-Robots policies comparison table listing GR00T N1.7, GR00T N1.5, Pi0.5, SmolVLA and ACT with parameter counts, GPU tier, inference latency and minimum episode counts
The /policies comparison table. For a deformable task the columns that decide your week are minimum episodes and dataset format, not latency.
Format mismatch costs an afternoon

The open folding datasets are LeRobot v3.0, and a v3.0 dataset crashes the GR00T loader: it has to be converted down to v2.1 first. Pi0.5, SmolVLA and ACT take v3.0 directly. Check before you queue a run. If a job rejects your data, start at dataset rejected as v3.

You own the whole chain: arm, cameras, recording discipline, GPU rental, format conversion, serving endpoint. For a deformable task that is not obviously wrong, because the things that decide your success rate (fabric, lighting, reset protocol, operator consistency) sit on your side of the line regardless.

bash
pip install lerobot

# record (full flags in the step list above)
lerobot-record --robot.type=so100_follower ... --dataset.num_episodes=50

# train something fast first
lerobot-train \
  --dataset.repo_id=$HF_USER/so100_towel_to_bin \
  --policy.type=smolvla \
  --policy.device=cuda \
  --output_dir=outputs/train/smolvla_towel

# run it on the arm
lerobot-rollout --strategy.type=base --inference.type=rtc \
  --policy.path=$HF_USER/smolvla_towel \
  --robot.type=so100_follower --duration=120
  • You rent and babysit the GPU, and you pay for hours you forget to shut down.
  • You convert LeRobot v3.0 down to v2.1 by hand if you want to try GR00T.
  • You stand up your own inference server and keep it near the arm.
  • Full control over trainer flags, which matters for a custom chunk size or a fixed seed.

Cables fail differently from cloth

A deformable linear object is lower-dimensional than fabric but has a property cloth does not: topology. Two cable configurations can look nearly identical in an image and differ only in whether a crossing goes over or under, which decides whether your next pull tightens a knot or removes it. No amount of pixel-level policy learning resolves that from one view.

  • Untangling needs explicit structure. HULK combined learned keypoints with a geometric planner and reached 97.9% over 378 simulation trials but 61.7% on the physical bilateral system, at 8.48 actions per trial.
  • Routing needs touch. The tactile cable-routing work put a GelSight sensor on the fingertip and drove motion primitives from it, reporting that the tactile version significantly outperformed the same approach without it.
  • Goal images work better for cables than for cloth. Deformable Ravens puts cables, fabrics and bags into one goal-conditioned Transporter Network benchmark, and cables are the tractable end of it.
  • Connectors are rigid. A USB or barrel end has a pose. Model that part as insertion and let the flexible tail be a disturbance rather than a state you track.
The cable task that works on one arm

Grasp the connector, not the cable. Anything where the arm holds a rigid end and the flexible part trails behind is an ordinary manipulation task with extra noise, and a 50-episode fine-tune can get there. Anything that needs reasoning about where the middle of the cable is, or tension held between two contact points, is a two-arm or tactile problem and should be scoped as research.

What it costs to find out

A deformable pilot is cheap in GPU terms and expensive in bench hours, the opposite of most robot-learning projects. The GPU side is fixed and small; the recording side scales with how disciplined you are.

Line itemWhat it costsNote
Recording 50 episodesAbout 2 hours at the bench45 s episodes, 30 s resets, plus retakes
One SmolVLA or ACT run1 to 3 USD, 2 to 5 hoursRTX 4090 or any 24 GB card
One GR00T N1.7 or Pi0.5 run4 to 12 USD, 3 to 6 hoursA100 80 GB or H100 80 GB tier
Three DAgger rounds to a working towel task6 to 8 bench hours, under 40 USD of GPURealistic for a drag or drop, not for a fold
Reproducing a published shirt foldRoughly 50 to 60 bench hours and a second armFrom the X-VLA rate of 20 to 25 episodes per hour

Start on the data collection side rather than the model side. If you have not built an arm yet, the three ways to start page includes driving a real one with no signup, and the SO-100 complete guide covers the build. The imitation learning hub covers the training side.

Five policies, five sets of real numbers

GR00T N1.7, GR00T N1.5, Pi0.5, SmolVLA and ACT compared on parameters, GPU tier, inference latency per action step, minimum episodes and dataset format. Pick the one that matches your data before you pay for a run.

Compare the policies
Can a single SO-100 fold a t-shirt?

Not with anything currently published to copy. Every folding result with a reported success rate, from SpeedFolding in 2022 to the LeRobot open folding release, runs on a two-arm platform, because a fold needs one hand to pin while the other moves. A stiff face towel folded against a table edge is a reasonable first project. A sleeved t-shirt is not.

How many episodes do I need for a cloth task?

More than the platform minimum, which is 50 for GR00T N1.7, GR00T N1.5, Pi0.5 and ACT, and 30 for SmolVLA. Those floors assume a task you already do reliably in teleoperation from a repeatable start state. For a towel drag or drop, 50 to 100 consistent episodes is a sensible first block. For anything involving flattening the published reference points are 1,200 curated episodes, and 8,658 demonstrations for ALOHA Unleashed shirt hanging.

Does the 485 ms inference latency of Pi0.5 ruin cloth tasks?

Less than you would expect. Cloth manipulation is quasi-static, so a slow action step costs wall-clock time rather than success, and this is the one task family where remote inference across the internet is defensible. It stops being defensible as soon as the task needs a dynamic motion such as the fling FlingBot used, because that is reactive and a round trip turns it into a hesitation.

Should I train ACT or a VLA for a deformable task?

Both, in that order. ACT trains in a few hours on a 24 GB card for 1 to 3 USD and gives you a same-day loop to find which stage of the task is broken. But ACT has no base model, it exists only after training on your task, and X-VLA reported that ACT trained from scratch on their folding dataset failed to match the pretrained model's throughput. Move to GR00T N1.7 or Pi0.5 once the dataset is clean.

Can I fine-tune on the open LeRobot folding datasets?

You can download them and they are worth studying, but they will not transfer. Both were recorded on a bimanual OpenArm with 16-dimensional actions, seven joints and a gripper per arm, while an SO-100 recording has six values. They are also LeRobot v3.0, which the GR00T loader rejects until converted to v2.1. Study the task structure and curation criteria, then record your own data on your own embodiment.

Take the ablation rather than the headline: 5,688 episodes gave 40%, 1,200 hand-picked ones gave 90%. Deformable manipulation punishes volume and rewards consistency, and consistency is the one lever a single low-cost arm has as much of as a research lab. Start with a towel, write the rubric first, and run your first policy on the easiest deformable task you can define.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started