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 the arc edges (|θ| > ~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 about 40 ms per step for 800 parallel samples on CPU (95th percentile 42 ms), 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 second-lowest control effort of any controller (0.395 RMS, behind only MPPI) using no simulator at all, trading speed for simplicity (median settling 9.80 s, roughly six times slower than MPPI on median settling). 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}
}