Benchmarking Classical & Learning-Based Control on a Real System
Under review for IEEE Robotics & Automation Magazine
Move mouse left/right to control cart · Scroll to zoom · Drag to orbit · Space to reset
Can you keep the ball centered? Move your mouse to control the cart.
13 controllers competed to do this on real hardware: 50 trials each.
A Deceptively Simple Challenge
A nonlinear, underactuated control problem with real-world sensing constraints.
Sensor blind zone: ToF sensors cannot see the ball near cart endpoints (|θ| > ~0.071 rad), creating unobservable states at the worst possible moment
Sensor noise: 7-9 mm peak-to-peak variation observed with ball stationary at center (σ ≈ 1.7 mm per sensor, no filtering applied, 12 Hz update)
Sensor zero-offset: replacing or repositioning ToF sensors introduces a variable offset (±several mm) from true center, silently biasing every controller differently each time
Sim-to-real gap: first-order lag model approximates the PLC's 7-phase motion profile; mismatch in cart acceleration transients couples directly into ball dynamics
Hard track limits: 1.56m track with no room for error; classical controllers need heuristic wall-override gains that introduce oscillations near endpoints
Industrial-Grade Hardware
Industrial servo, low-cost sensors, and rapid-prototyped mechanics : the noise and imprecision controllers actually face in deployment.
Fig. The ball-and-arc platform.
Why this setup matters: Asynchronous multi-rate sensing, communication latency, and sensor noise create conditions where simulation-optimal controllers can catastrophically fail.
PLC encoder (cart) -> RS232-USB -> Workstation
-> merge as [x, ẋ, θ, θ̇] -> Controller -> USB -> PLC -> Servo
13 Controllers Compared
5 classical + 5 learning-based + 3 data-driven controllers evaluated under identical conditions on real hardware: 50 stratified trials each.
Experimental Results
50 hardware trials per controller at 20 Hz. Difficulty-stratified initial conditions. Identical physical system.
Baseline Performance: 50 Trials per Controller
50 trials, 20 Hz, stratified ICs | Ball settled within ±0.01 rad (±21 mm of arc) for 1 s, 30 s timeout
Both axes increase toward worse outcomes, so the ideal corner is bottom-left. MPPI is best on both axes simultaneously (0% failures, 1.67 s median settling). Hover a point for details.
Data table
| Controller | Family | SR (%) | Median settle (s) | Mean settle (s) |
|---|---|---|---|---|
| MPPI | Real-Data | 100 | 1.67 | 2.06 |
| PPO (BZ+DR) | Sim RL | 98 | 2.55 | 5.11 |
| PD+WO | Classical | 96 | 3.38 | 5.80 |
| PPO (WM) | Real-Data | 100 | 3.64 | 6.84 |
| LQR+WO | Classical | 100 | 4.00 | 7.08 |
| NMPC | Predictive | 90 | 4.71 | 7.48 |
| TRPO (DR) | Sim RL | 90 | 4.80 | 8.09 |
| TQC (DR) | Sim RL | 86 | 6.61 | 9.77 |
| SMC+WO | Classical | 92 | 8.28 | 8.93 |
| SAC (DR) | Sim RL | 82 | 8.40 | 10.10 |
| MPC+WO | Predictive | 80 | 9.65 | 10.81 |
| IQL | Real-Data | 92 | 9.80 | 10.62 |
| TD3 (DR) | Sim RL | 92 | 10.06 | 11.45 |
BZ = Blind Zone sensor modelling, DR = Domain Randomization, WO = Wall Override, WM = World Model (LSTM-based next-state prediction). Data-driven methods (MPPI, PPO WM, IQL) use learned dynamics or logged data (no simulation SR reported).
Settling Time by Starting-Position Stratum
Median time to settle, by cart initial position (50 stratified trials, successful trials only). Bar color encodes the stratum (see legend below); controller category is shown in the first chart.
Hardware median settling time by starting-position stratum. MPPI is fastest and most consistent across all strata (1.2 to 2.7 s). Three equal-width bars per controller: center (left), near-wall (middle), at-wall (right). Empty bar = zero successful trials in that stratum. SR = successful trials / total.
Key Takeaways
Explicit constraint handling enables classical controllers. Adding a wall-override heuristic raises PD from 18% to 96% (+78 pp), LQR from 6% to 100% (+94 pp), and SMC from 12% to 92% (+80 pp). NMPC is the exception: it handles constraints natively through its internal optimization and reaches 90% (45/50) without any external override. On constrained hardware, boundary awareness is the first design priority.
A small LSTM trained on logged hardware data enables two deployment modes. MPPI uses it for online sampling-based planning: 100% SR, fastest median settling (1.67 s), and lowest control effort (0.354 RMS), with real-time rollouts of 42 ms per step for 800 parallel samples on CPU, within the 50 ms deadline. PPO-WM trains a policy inside the same model: identical 100% SR with sub-2 ms inference; it trains (~42 min) and deploys on CPU, no GPU needed anywhere. A data sweep shows prediction error plateauing around 50-100k transitions.
The residual sim-to-real gap is sensor-driven. Domain randomization does most of the heavy lifting, lifting PPO from 60% to 90%, then plateaus; modelling the dominant sensor failure (the ToF blind zone) closes the gap to 98%. The gap is perceptual: every RL agent reaches 100% SR in simulation yet hardware success spans 82-98%, and SAC, next-fastest in simulation, is least reliable (82%) because it overfits to perfect sensing.
IQL achieves 92% success with the lowest control effort of any learning-based method (0.395 RMS) using no simulator at all, trading speed for simplicity (median settling 9.80 s, roughly 4.7x slower than MPPI). Its training set was a by-product of normal evaluation runs, making offline RL a viable low-overhead option when simulation fidelity is uncertain.
Reproduce in Minutes
Fully open-source. Train a PPO policy on CPU, evaluate all controllers in simulation.
# download ball-on-arc-full.zip (~431.7 MB) from the anonymized OSF archive:
# https://osf.io/dxhvp/?view_only=afc8b9f9fed348bf912f4c6bc2bc9fa2
unzip ball-on-arc-full.zip -d ball-balancing-on-arc
cd ball-balancing-on-arc
make install-full
# Train PPO with blind-zone + domain randomization (about 40 min on CPU)
python training/scripts/train_all_cont.py \
--algos ppo --rewards balanced --dr --blind-zone \
--timesteps 3000000 --tag ppo_bz_dr
# Evaluate all controllers in simulation
make eval-sim
# Generate all paper figures
make figures Cite This Work
@article{anon2026controller,
title = {Which Controller Should You Deploy? A Hardware
Benchmark of Classical and Learning-Based
Methods on a Ball-on-Arc System},
journal = {IEEE Robotics \& Automation Magazine},
year = {2026},
note = {Under review}
}