AutelicaResearchStudy · Humanoid on a bicycle

A Unitree G1 rides a bicycle after a cyclist we filmed.

We filmed a cyclist on a park trail with three drones, measured his ride in 3D, and gave a simulated Unitree G1 the same 20-second, 69 m stretch to ride on a bicycle with no motor and nothing holding it up. With balance feedback, it rode the whole stretch in 100% of randomised runs on flat ground, at 100.1–100.6% of the rider’s speed. Playing back the rider’s own motion without feedback, it fell in about a second, every time.

Autelica researchFrom capture 02Updated 6 figures

Fig. 1The simulated G1 on its bicycle (silver robot, red bike) riding the rider’s 20-second stretch, with the captured rider’s measured 3D motion and fitted bicycle replayed in blue 1.4 m to its left. Right: the G1 from the side. Balance controller with the learned residual, nominal run, flat ground. Physics simulation; the rider’s replay is drawn for comparison and does not touch the physics.

A robot team that wants a humanoid to ride a bicycle, or to do any whole-body task a person does, needs two things from a capture: a reference motion to start from and a measured outcome to test against. We took one 20-second stretch of a cyclist from Capture 02 and checked whether a simulated Unitree G1 could ride it.

In short. On flat ground the G1 rode the full 20 s, 69 m stretch in 100% of runs at all three randomisation levels, with or without the learned residual, at 100.1–100.6% of the rider’s speed. Over bumps up to 2 cm it also rode through in 100% of runs. Over bumps up to 4 cm it rode through in 76% of runs with the balance controller and 86% with the learned residual. Playing back the rider’s motion with no feedback, it rode 0% of the time and fell after about 1.0 s. The bike has no motor and nothing holds it upright; the feet, hands and seat assists are listed below. The ground is flat or has synthetic bumps, not yet the measured trail.

Why start from a measured rider

The capture gives three things. The rider’s path on the ground, in metres: 69 m over 20 s, a turn at the start and then a nearly straight trail. His speed along it, a median of 3.4 m/s. And his body on the bike in 3D, with the bicycle’s lean and steering fitted to the footage, at 100 fps. His pedalling rhythm, a median of 46 rpm, comes from his ankles and knees.

The path and speed become the test: did the robot get to the end of the stretch, at the rider’s pace, along his line? The body motion is the reference to start from, the seated pose, the forward lean of the torso and the pedalling phase. What it cannot be is a script. A bicycle stays up only if the rider keeps steering into its lean, and the rider’s steering was right for his body, his bike and that moment. That is the question this study answers: how far a robot gets on the measured motion alone, and how far it gets with balance feedback that uses the measured path and speed as its target.

The ride

Drone view from behind of a cyclist in a blue shirt on a dirt trail under treesA second drone view of the same cyclist from behind, at the same instant
Fig. 2The rider at 3.9 s into the stretch, seen by two of the three drones at the same instant (Capture 02, October 10, 2026). The drone footage is where the path, the speed and the body motion come from.

The controller that rides reads the bike’s lean and steers into it through the arms, which pull on the bars. The lean it aims for comes from the curve of the rider’s path and from how far the robot is off that path. The legs push the pedals to hold the rider’s speed, following the pedal angle. A small learned residual, trained in simulation with reinforcement learning, adds corrections on top of that controller. In the nominal run, with no randomisation, the G1 held 100.3% of the rider’s speed and stayed a median 2.7 cm from his path (95th percentile 10.3 cm).

Three line charts: speed of the G1 and the rider over 20 seconds, bike lean of both, and the G1's distance from the rider's path
Fig. 3The nominal run against the rider, over the 20 s window. Left: speed, the G1 (blue) and the captured rider (orange). Middle: bicycle lean, the G1’s bike against the rider’s fitted bike. Right: the G1’s distance from the rider’s path, median 2.7 cm.

Its bike leans about as much as the rider’s did. The rider’s bike leaned between −3.7° and 7.4° (5th to 95th percentile); in the nominal run, 95% of the G1’s lean stays within 5.2°. Across every randomised condition the robot’s average speed stays at 98.9–100.6% of the rider’s. Its joints run at their torque limits between 0% and 2.5% of the time, the most on the 4 cm bumps.

Playing back the motion is not enough

The baseline drives the G1’s joints to the rider’s motion moved onto the robot: his pedalling phase, the steering angle measured from the footage and his torso. Nothing reacts to the bike’s lean. It falls in every run, 1.0–1.1 s in on average, on flat ground and on bumps alike.

Fig. 4The baseline: the G1’s joints follow the rider’s motion moved onto the robot (his pedalling phase, his measured steering angle and his torso), with no balance feedback. It falls about 1 s in, on every run.

That is what we expected, and it is why the baseline is there. The captured motion shows what a good ride looks like, but staying on the bike takes feedback.

Randomised runs and bumps

Each condition was run 50 times on seeds that were not used to tune the controller or train the residual. Every run randomises the masses, tyre friction and motor strength, the starting lean, and gives the robot two sideways pushes on the torso; levels 2 and 3 widen those ranges. The bump conditions add rounded bars across the path at random heights up to 2 or 4 cm, about the size of the roots on the real trail.

Fig. 5Share of runs that ride the full 20 s window, by condition and controller. 50 randomised runs per bar.
Fig. 6Six randomised runs, first 10 s. Top: flat ground at randomisation level 2. Bottom: rounded bumps up to 3 cm across the path. All six ride through. Balance controller with the learned residual.
ConditionRides the window, balance controllerWith the learned residualDistance from the rider’s path, median, balance controllerWith the residualSpeed, % of the rider, balance controllerWith the residualBike lean, 95th percentile
Flat ground, randomisation level 1100%100%5.2 cm3.9 cm100.1%100.3%5.2° / 5.3°
Flat ground, level 2100%100%7.8 cm5.7 cm100.2%100.4%5.8° / 5.7°
Flat ground, level 3100%100%11.2 cm7.7 cm100.4%100.6%6.6° / 6.3°
Bumps up to 2 cm, level 1100%100%10.5 cm7.3 cm100.3%99.9%6.5° / 5.2°
Bumps up to 4 cm, level 176%86%32.9 cm21.8 cm100.2%98.9%14.6° / 13.4°

On 4 cm bumps the falls are mostly the robot bouncing off the saddle or the body reaching the ground: with the balance controller, 12% of runs end with the body on the ground, 6% off the saddle and 6% with the bike leaning past 40°. Pedalling rate stays at 102.1–117.6% of the rider’s. With a fixed gear it follows the wheel speed, and it runs higher on bumps because the rear wheel slips and the bike jolts.

The learned residual

On the 4 cm bumps the residual raised the ride-through rate from 76% to 86%. With 50 runs per condition a difference of that size is within the run-to-run noise, so we read it as a modest gain at best. Its clearer effect is on how closely the robot follows the rider’s line. The median distance from his path is lower with the residual in every condition: 3.9 against 5.2 cm on flat ground at level 1, 7.7 against 11.2 cm at level 3, and 21.8 against 32.9 cm on the 4 cm bumps.

What is held, and what is not

The simulation gives the robot some help. This is all of it.

Not used. There is no motor on the bicycle: the only drive is the robot’s legs on the pedals. There is no stabilising force or torque on the bike or the robot, and the frame is not held upright. If the robot stops balancing, the bike falls over, as the baseline shows.

Assists.

  • The feet are fixed to the pedals, like clipless cycling shoes. The pedals still turn freely on their spindles.
  • The palms are held to the grips at a point, so the hands can rotate around the grips but not let go.
  • The chain is a fixed gear: the rear wheel turns 2.6 times per crank turn, with no freewheel, so the robot cannot coast.
  • The pelvis sits on the saddle by contact only. It is not attached, and it can bounce off, which is one of the ways runs fail on bumps.
  • Every run starts already rolling at the rider’s starting speed, 2.05 m/s, seated and upright. The robot does not mount the bike or start from a standstill.

Bike size. The bicycle is built from the one fitted to the footage, with every length scaled to 74% so the 1.3 m G1 reaches the pedals, and a 10 cm shorter stem so its arms reach the bars at full steer. Wheel radius 27.4 cm, wheelbase 81 cm, trail 5.9 cm, cranks 128 mm.

Protocol

CaptureCapture 02, October 10, 2026, a cyclist on a park trail filmed by three drones. One 20 s window at 100 fps: 69 m, median speed 3.4 m/s, median pedalling rate 46 rpm
RobotUnitree G1, 29 joints, with the G1’s own joint torque limits; control at 50 Hz
PhysicsMuJoCo. Tyres roll on the ground with friction; rolling resistance and air drag on the bike
ControllersBaseline: the joints follow the captured motion moved onto the G1, no feedback. Balance controller: steers into the measured lean toward the rider’s path, legs hold the rider’s speed; gains tuned on separate seeds. Learned residual: corrections on top of the balance controller, trained with reinforcement learning on separate seeds
ConditionsFlat ground at randomisation levels 1, 2 and 3; rounded bumps across the path up to 2 cm and up to 4 cm at level 1
Test50 runs per condition and controller on held-out seeds. A run succeeds if it rides the full window; it fails if the body touches the ground, the bike leans past 40° or the pelvis leaves the saddle

Credits

  • Robot: Unitree G1 model from the mjlab asset collection (BSD-3-Clause). Physics: MuJoCo.
  • Footage: Capture 02, October 10, 2026. The drone frames on this page are ones with no other people in view.

The capture behind this study: Capture 02. Related: five ways retargeting to a G1 goes wrong and a G1 trained on the real ground of a site. Numbers on this page are generated from the result files.