Learns joint-level torque for servo-driven arms instead of relying on a fixed current-to-torque conversion, capturing friction, hysteresis, saturation, thermal effects, and degraded motor behavior.
NeuralActuator: Neural Actuation Modeling for Robot Dynamics and External Force Perception
A neural actuator model for low-cost servo-driven robot platforms, linking actuator telemetry to differentiable dynamics, sensorless force perception, and force-aware sim-to-real control.
Robotics: Science and Systems (RSS) 2026
Finalist for the Outstanding Student Paper and Outstanding Paper Awards.
1 MIT 2 Amazon Robotics
* Research Assistant at MIT CDFG, equal contribution.
† The work of this author does not relate to their position at Amazon.
Abstract
Differentiable simulators have advanced policy learning and model-based control across diverse robotic tasks. To date, actuator dynamics remain underexplored and are a major source of sim-to-real error, especially on low-cost platforms where the linear current-torque model breaks down under commanded-target tracking due to friction, hysteresis, backlash, and thermal effects. Beyond forward dynamics, accurate actuator models also support force perception, which is crucial for jointly modeling force and position control in manipulation tasks. We present NeuralActuator, a neural actuator model that jointly predicts torques, external contact forces, force detection gates, and motor conditions. We introduce a twin-arm teleoperation system that collects motor states alongside ground-truth forces from interactions and known external forces, contributing a dataset named Neural Actuation Dataset (NAD). NeuralActuator is trained through differentiable simulation using only pose trajectories as supervision, eliminating the need for torque sensors. A Transformer-based architecture captures temporal dependencies while enabling efficient real-time inference. We validate NeuralActuator across three platforms spanning low-cost and industrial arms, and show that it enables accurate dynamics modeling, sensorless force estimation, motor condition estimation, and improved behavior-cloning control when used as a pretrained module.
Overview
Low-cost robot actuation as a path to dynamics, force perception, and real-robot control.
NeuralActuator targets the actuator-modeling gap that is especially visible on low-cost robot arms: affordable servos expose rich telemetry, but the conventional linear current-to-torque model breaks down under commanded-target tracking due to friction, hysteresis, backlash, and thermal effects. The model learns how commanded targets, measured states, current, temperature, and recent history translate into torque, then reuses the same temporal representation to estimate external contact forces and motor condition.
Estimates contact force and force gates from actuator-side signals, enabling contact onset, payload change, and release detection without deployment-time force sensors.
Method
Problem formulation, NAD, and Transformer actuator model.
Problem Formulation
NeuralActuator models each servo-driven joint as a history-dependent mapping from commanded pose, current, measured state, thermal state, and recent telemetry to real torque. The same input stream is also used to estimate end-effector contact force and motor condition, enabling dynamics modeling, sensorless force perception, and actuator health monitoring from actuator-side signals.
Neural Actuation Dataset (NAD)
NAD is collected with a twin-arm teleoperation setup that records commanded pose, measured pose, current, voltage, temperature, and force supervision from force sensors, force gauges, and known payloads.
Dataset composition. NAD includes free-motion, force-labeled, and motor-conditioned trajectories for actuator dynamics, force prediction, and condition monitoring.
| Component | Description | Duration |
|---|---|---|
| Free motion | No external force | ~34.15 min |
| Force labeled | Known weights or force sensing | ~46.24 min |
| Motor condition | Degraded actuation | ~14.13 min |
| Total | - | ~94.52 min |
NeuralActuator
NeuralActuator formulates actuation as a history-dependent mapping from commanded targets, proprioception, and actuator telemetry to torque, external force, contact gate, and motor condition. The torque head is trained through differentiable simulation from pose trajectories, while the force, gate, and condition heads use direct supervision when labels are available.
Learns joint torque from real pose trajectories by backpropagating through differentiable simulation, avoiding torque labels and reliable current-to-torque calibration on low-cost platforms.
Uses a Transformer over commands, proprioception, and actuator telemetry to model nonlinear and time-varying torque behavior associated with friction, backlash, saturation, hysteresis, and thermal drift.
Jointly predicts actuator torque (τ), the 3-axis end-effector external force (fext), contact gate (g), and motor condition (c), supporting sensorless force perception, motor-health monitoring, and force-aware downstream control.
Experiments
Rollout accuracy, force estimation, baselines, motor condition, and runtime.
Rollout and Force Estimation
Accuracy summary. Units are shown in the table header: joint errors in degrees, gripper errors in millimeters, and force errors in Newtons.
| Benchmark | Horizon (steps) | J1 (deg) | J2 (deg) | J3 (deg) | J4 (deg) | Grip (mm) | Force (N) |
|---|---|---|---|---|---|---|---|
| No-load rollout | 600 steps | 3.1 | 2.8 | 3.2 | 3.1 | 0.2 | - |
| Force-sensor test | 500 steps | 1.78 | 3.31 | 2.01 | 1.58 | 0.65 | 0.23 |
| Weight-based test | 600 steps | 2.97 | 4.06 | 3.51 | 3.77 | 0.50 | 0.11 |
Force-estimation baselines. All entries are force MAE in Newtons (N). NeuralActuator predicts external force from simulated rollout states, while classical baselines consume ground-truth states at each step.
| Method | Go Up 200g (N) | Go Up 300g (N) | Go Up 400g (N) | Pick 200g (N) | Pick 300g (N) | Pick 400g (N) | Pick 500g (N) | Avg. (N) |
|---|---|---|---|---|---|---|---|---|
| ID-Linear | 1.37 | 1.81 | 2.30 | 0.72 | 0.95 | 1.22 | 1.47 | 1.41 |
| ID-Friction | 1.06 | 1.59 | 2.15 | 0.62 | 0.82 | 1.10 | 1.31 | 1.23 |
| GMO | 0.58 | 0.66 | 1.23 | 0.33 | 0.47 | 0.63 | 0.75 | 0.66 |
| NeuralActuator | 0.12 | 0.20 | 0.07 | 0.24 | 0.00 | 0.19 | 0.05 | 0.12 |
Motor Condition and Runtime
Motor condition detection. A learned condition head separates normal operation from mechanically degraded trajectories.
| Method | Accuracy | Precision | Recall | AUC-ROC |
|---|---|---|---|---|
| Threshold | 58.6% | 0.0% | 0.0% | 0.45 |
| SVM | 59.9% | 52.6% | 31.7% | 0.62 |
| Random Forest | 67.1% | 62.3% | 52.4% | 0.72 |
| NeuralActuator | 91.0% | 84.5% | 96.2% | 0.95 |
Runtime performance. The model is lightweight enough for simulation and real-time control, with sub-millisecond GPU inference latency.
| Metric | Value | Unit | Metric | Value | Unit |
|---|---|---|---|---|---|
| Parameters | 1.42M | - | Mean time | 0.25 | ms |
| FLOPs (forward) | 5.46M | - | P95 time | 0.31 | ms |
| Parameter memory | 5.43 | MB | Throughput (batch=1) | 4,019 | Hz |
| - | - | - | Throughput (batch=32) | 10,992 | Hz |
Sim-to-Real Robot Control
Frozen actuator model for payload-aware behavior cloning.
Behavior cloning success rates. Results are averaged over 40 real-robot trials and compare position-only control against a force-aware policy using the frozen NeuralActuator module.
| Task | Without NeuralActuator | With NeuralActuator |
|---|---|---|
| Pick-and-place | 80% | 92.5% |
| Go up-and-stay | 85% | 95% |
Supporting Results
Cross-platform validation, force generalization, visual supervision, and dataset details.
These results expand the main experiments along four directions: transfer across robot platforms, robustness to unseen payloads, differentiable visual supervision, and the data collection details needed to reproduce NAD.
Cross-Platform Dynamics and Learned Torque
NeuralActuator is built around low-cost servo-driven platforms, where actuator nonlinearity is a dominant sim-to-real bottleneck. The same formulation is also evaluated on an industrial manipulator to test generality, and the learned torque traces expose the current-to-torque variation that motivates replacing a fixed linear actuator model.
Force Generalization
Force prediction is evaluated beyond the exact training objects with two unseen payload geometries and surface conditions. During the still-holding phase, the pretrained model predicts 2.80 N for a 261 g object with 2.56 N ground truth, and 2.40 N for a 226 g object with 2.21 N ground truth.
Visual Supervision
Because the actuator model sits inside a differentiable simulator, it can be combined with differentiable rendering. The visual-supervision example refines camera and robot state by aligning rendered robot silhouettes with image masks.
Dataset and Robot Details
NAD is built from a leader-follower collection rig, controlled payloads, force-sensor interactions, and motor-condition interventions. These setup figures document how the three supervision sources are produced and how the robot gripper is modeled in simulation.
Gauge Pushing
A separate gauge-pushing test isolates contact transitions from the payload tasks above. The predicted force tracks the measured force through contact onset, sustained pushing, and release.
Architecture and Adaptation
The final checks compare temporal model choices, show rapid online calibration from a small batch of new trajectories, and verify that NeuralActuator can be inserted into another differentiable physics backend.
Architecture ablation. Transformer history modeling improves force prediction while remaining competitive on rollout accuracy.
| Model | J1 | J2 | J3 | J4 | Grip | Force |
|---|---|---|---|---|---|---|
| MLP | 4.55 | 5.81 | 3.48 | 2.16 | 0.91 | 0.47 |
| GRU | 1.83 | 2.08 | 1.68 | 1.70 | 0.65 | 0.49 |
| LSTM | 2.91 | 7.66 | 3.21 | 3.08 | 0.71 | 0.41 |
| NeuralActuator | 1.78 | 3.31 | 2.01 | 1.58 | 0.65 | 0.23 |
Quantitative Results
Rollout accuracy, force prediction, adaptation, and cross-platform tests.
Dynamics and Force Prediction
Gradient behavior across rollout horizons.
| H | Torque Grad. | ||grad L|| | Cos. |
|---|---|---|---|
| 64 | 2.73e-2 | 8.77 | 0.96 |
| 128 | 2.59e-2 | 17.33 | 1.00 |
| 256 | 1.72e-2 | 22.35 | 0.99 |
| 320 | 1.45e-2 | 22.91 | 0.99 |
| 500 | 9.37e-3 | 20.29 | 0.98 |
Simulation accuracy on the test set. J1-J4: joint-angle MAE (deg). Grip: gripper-aperture MAE (mm).
| Task | @100 | @300 | @600 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| J1 | J2 | J3 | J4 | Grip | J1 | J2 | J3 | J4 | Grip | J1 | J2 | J3 | J4 | Grip | |
| backward_forward | 2.4 | 4.3 | 4.4 | 4.2 | 0 | 2.3 | 5.9 | 3.9 | 4.2 | 0 | 3.1 | 4.8 | 4.9 | 4.5 | 0 |
| circular_ccw | 1.7 | 5.2 | 2.2 | 2.6 | 0 | 1.5 | 3.1 | 2.0 | 3.4 | 0 | 2.5 | 2.3 | 2.1 | 2.8 | 0 |
| circular_cw | 3.6 | 3.2 | 1.4 | 2.2 | 0 | 3.1 | 1.9 | 1.2 | 2.6 | 0 | 2.6 | 1.7 | 2.0 | 2.8 | 0 |
| go_up_stay_still | 2.5 | 1.8 | 2.3 | 1.2 | 0 | 3.1 | 2.1 | 3.1 | 2.5 | 0 | 3.1 | 1.5 | 3.5 | 2.7 | 0 |
| joint_sweep_1 | 2.3 | 2.5 | 1.8 | 1.4 | 0 | 1.9 | 1.0 | 2.6 | 1.8 | 0 | 2.9 | 1.9 | 2.0 | 1.6 | 0 |
| joint_sweep_2 | 2.1 | 4.3 | 4.6 | 1.2 | 0 | 1.8 | 6.7 | 8.4 | 1.1 | 0 | 2.4 | 4.6 | 5.2 | 1.7 | 0 |
| joint_sweep_3 | 3.7 | 4.5 | 3.1 | 1.9 | 0 | 3.4 | 2.6 | 2.8 | 2.8 | 0 | 3.1 | 2.6 | 2.5 | 3.4 | 0 |
| joint_sweep_4 | 2.6 | 4.8 | 2.5 | 3.4 | 0 | 2.9 | 3.3 | 2.4 | 3.2 | 0 | 2.4 | 2.9 | 2.2 | 4.6 | 0 |
| joint_sweep_5 | 1.7 | 3.0 | 1.7 | 3.1 | 0.4 | 2.6 | 3.9 | 2.3 | 2.7 | 0.5 | 5.5 | 3.3 | 5.1 | 3.0 | 0.7 |
| pick_place_empty | 2.6 | 2.5 | 2.2 | 3.5 | 1.1 | 1.9 | 3.6 | 2.7 | 3.2 | 1.1 | 3.1 | 2.7 | 2.0 | 3.9 | 1.0 |
| Average | 2.5 | 3.6 | 2.6 | 2.5 | 0.2 | 2.5 | 3.4 | 3.1 | 2.8 | 0.2 | 3.1 | 2.8 | 3.2 | 3.1 | 0.2 |
Simulation and force prediction accuracy on the force-sensor test set. F: force MAE (N).
| Task | @100 | @300 | @500 | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| J1 | J2 | J3 | J4 | Grip | F | J1 | J2 | J3 | J4 | Grip | F | J1 | J2 | J3 | J4 | Grip | F | |
| force_X+ | 0.9 | 2.3 | 0.9 | 1.6 | 1.0 | 0.36 | 1.1 | 1.8 | 2.4 | 1.3 | 1.0 | 0.46 | 0.9 | 1.9 | 2.7 | 1.7 | 1.0 | 0.50 |
| force_X- | 1.4 | 1.1 | 0.8 | 1.1 | 1.0 | 0.39 | 1.6 | 2.3 | 1.3 | 2.3 | 1.0 | 0.42 | 2.0 | 2.9 | 1.5 | 3.0 | 1.0 | 0.44 |
| force_Y+ | 2.3 | 5.7 | 2.8 | 0.6 | 0.1 | 0.36 | 2.1 | 4.5 | 2.6 | 0.9 | 0.2 | 0.38 | 2.7 | 4.8 | 2.1 | 0.9 | 0.3 | 0.44 |
| force_Y- | 1.4 | 1.6 | 3.1 | 0.5 | 0.1 | 0.38 | 1.5 | 3.0 | 3.1 | 1.3 | 0.1 | 0.36 | 1.4 | 3.6 | 3.1 | 1.5 | 0.2 | 0.38 |
| force_Z+ | 3.3 | 6.2 | 3.3 | 0.8 | 0.1 | 0.39 | 2.3 | 5.6 | 2.5 | 1.9 | 0.2 | 0.43 | 2.5 | 4.4 | 2.2 | 2.3 | 0.3 | 0.46 |
| force_Z- | 1.0 | 5.9 | 0.6 | 0.6 | 1.0 | 0.36 | 2.9 | 6.6 | 2.8 | 2.5 | 1.0 | 0.64 | 3.8 | 6.4 | 3.5 | 2.0 | 1.0 | 0.57 |
| ref_X+ | 0.6 | 2.0 | 1.5 | 1.2 | 1.0 | 0.01 | 0.8 | 1.8 | 1.0 | 1.1 | 1.0 | 0.02 | 1.0 | 1.6 | 1.1 | 1.1 | 1.0 | 0.01 |
| ref_X- | 2.0 | 2.5 | 0.5 | 1.1 | 1.0 | 0.00 | 1.4 | 2.3 | 0.5 | 1.0 | 1.0 | 0.00 | 1.5 | 2.2 | 0.8 | 1.3 | 1.0 | 0.00 |
| ref_Y+ | 2.0 | 1.0 | 2.0 | 0.6 | 0.1 | 0.00 | 2.1 | 3.3 | 2.1 | 1.1 | 0.2 | 0.00 | 1.9 | 3.7 | 1.7 | 1.1 | 0.4 | 0.00 |
| ref_Y- | 1.0 | 1.8 | 1.2 | 1.3 | 0.1 | 0.00 | 1.6 | 4.5 | 2.0 | 2.2 | 0.1 | 0.00 | 1.2 | 4.0 | 2.4 | 1.6 | 0.3 | 0.00 |
| ref_Z+ | 1.2 | 1.7 | 2.1 | 0.5 | 0.1 | 0.00 | 1.6 | 3.8 | 2.2 | 1.2 | 0.2 | 0.00 | 1.5 | 2.9 | 2.0 | 1.3 | 0.3 | 0.00 |
| ref_Z- | 0.6 | 2.3 | 0.9 | 0.9 | 1.0 | 0.02 | 0.7 | 1.6 | 1.1 | 1.1 | 1.0 | 0.01 | 0.9 | 1.3 | 1.0 | 1.1 | 1.0 | 0.01 |
| Avg | 1.48 | 2.84 | 1.64 | 0.90 | 0.55 | 0.19 | 1.64 | 3.43 | 1.97 | 1.49 | 0.58 | 0.23 | 1.78 | 3.31 | 2.01 | 1.58 | 0.65 | 0.23 |
Simulation and force prediction accuracy on the weight-based test set.
| Task | Weight | @100 | @300 | @600 | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| J1 | J2 | J3 | J4 | Grip | F | J1 | J2 | J3 | J4 | Grip | F | J1 | J2 | J3 | J4 | Grip | F | ||
| go up and stay | 200g | 1.3 | 5.0 | 2.6 | 2.4 | 0.1 | 0.12 | 3.4 | 3.9 | 4.2 | 2.3 | 0.1 | 0.10 | 3.1 | 3.3 | 4.3 | 2.9 | 0.1 | 0.16 |
| go up and stay | 300g | 2.6 | 5.3 | 5.7 | 3.7 | 0.1 | 0.20 | 1.8 | 3.4 | 5.7 | 5.4 | 0.0 | 0.17 | 3.5 | 2.5 | 3.4 | 4.6 | 0.0 | 0.20 |
| go up and stay | 400g | 2.2 | 4.1 | 1.4 | 5.0 | 0.1 | 0.07 | 2.9 | 2.1 | 2.1 | 6.1 | 0.1 | 0.12 | 2.0 | 1.4 | 3.0 | 7.1 | 0.2 | 0.11 |
| pick and place | 200g | 0.7 | 3.1 | 4.3 | 3.4 | 1.1 | 0.24 | 2.7 | 3.9 | 4.0 | 4.0 | 1.1 | 0.08 | 2.9 | 5.1 | 2.9 | 3.0 | 1.0 | 0.11 |
| pick and place | 300g | 0.5 | 4.5 | 3.7 | 0.9 | 0.3 | 0.00 | 1.2 | 5.1 | 4.8 | 1.5 | 0.2 | 0.00 | 2.7 | 7.8 | 4.9 | 3.2 | 0.3 | 0.09 |
| pick and place | 400g | 0.8 | 2.1 | 2.8 | 2.9 | 1.1 | 0.19 | 2.8 | 1.4 | 3.4 | 3.6 | 1.1 | 0.06 | 2.4 | 2.0 | 3.8 | 3.3 | 1.0 | 0.03 |
| pick and place | 500g | 2.7 | 1.8 | 1.7 | 3.3 | 1.1 | 0.05 | 4.8 | 2.8 | 1.7 | 2.3 | 1.1 | 0.02 | 4.2 | 6.3 | 2.3 | 2.3 | 0.9 | 0.04 |
| Avg | 1.54 | 3.70 | 3.17 | 3.09 | 0.56 | 0.12 | 2.80 | 3.23 | 3.70 | 3.60 | 0.53 | 0.08 | 2.97 | 4.06 | 3.51 | 3.77 | 0.50 | 0.11 | |
Dataset and Adaptation
Task composition of the dataset.
| Category | Task | Variant | #Frames | Duration (s) |
|---|---|---|---|---|
| Free motion | Circular trajectory | Clockwise | 8615 | 147.06 |
| Free motion | Circular trajectory | Counterclockwise | 8428 | 143.90 |
| Free motion | Joint sweep | Motor 1 | 22935 | 392.04 |
| Free motion | Joint sweep | Motor 2 | 8688 | 148.47 |
| Free motion | Joint sweep | Motor 3 | 11357 | 193.95 |
| Free motion | Joint sweep | Motor 4 | 15012 | 256.57 |
| Free motion | Joint sweep | Motor 5 | 7338 | 125.21 |
| Free motion | Lean back and extend forward | 12261 | 209.35 | |
| Free motion | Pick & place (empty) | 15288 | 261.08 | |
| Free motion | Go up and stay still | 10011 | 171.14 | |
| Force-labeled | Go up and stay still | 200g | 10606 | 181.26 |
| Force-labeled | Go up and stay still | 300g | 11259 | 192.40 |
| Force-labeled | Go up and stay still | 400g | 11291 | 192.89 |
| Force-labeled | Pick and place | 200g | 13245 | 226.15 |
| Force-labeled | Pick and place | 300g | 13129 | 224.31 |
| Force-labeled | Pick and place | 400g | 15124 | 258.54 |
| Force-labeled | Pick and place | 500g | 13957 | 238.49 |
| Force-labeled | Force sensor | +X | 5005 | 85.17 |
| Force-labeled | Force sensor | +X w/o interaction | 5005 | 85.21 |
| Force-labeled | Force sensor | -X | 5169 | 87.94 |
| Force-labeled | Force sensor | -X w/o interaction | 5169 | 88.00 |
| Force-labeled | Force sensor | +Y | 7444 | 126.74 |
| Force-labeled | Force sensor | +Y w/o interaction | 7444 | 126.78 |
| Force-labeled | Force sensor | -Y | 6921 | 117.88 |
| Force-labeled | Force sensor | -Y w/o interaction | 6921 | 117.91 |
| Force-labeled | Force sensor | +Z | 6906 | 117.59 |
| Force-labeled | Force sensor | +Z w/o interaction | 6906 | 117.63 |
| Force-labeled | Force sensor | -Z | 5565 | 94.69 |
| Force-labeled | Force sensor | -Z w/o interaction | 5565 | 94.73 |
| Motor condition | Pick & place w/ weight | Motor restricted | 10113 | 168.26 |
| Motor condition | Pick & place w/ weight | Motor in good condition | 13245 | 226.15 |
| Motor condition | Pick & place w/o weight | Motor restricted | 11252 | 192.41 |
| Motor condition | Pick & place w/o weight | Motor in good condition | 15288 | 261.08 |
Visual-supervision and architecture settings.
| Group | Metric / Model | Value 1 | Value 2 | Value 3 | Value 4 | Value 5 |
|---|---|---|---|---|---|---|
| Silhouette IoU | Initialization | Mean 0.2589 | Std 0.0441 | |||
| Silhouette IoU | Robot refinement | Mean 0.2974 | Std 0.0754 | |||
| Silhouette IoU | Joint refinement | Mean 0.8515 | Std 0.0065 | |||
| Runtime | Joint refinement | 1845 iterations | 180.23 s | |||
| Architecture | MLP | Hidden 416 | Latent 208 | 1.14M params | LR 3e-5 | Clip 0.3 |
| Architecture | GRU | Hidden 325 | Latent 162 | 1.43M params | LR 1e-4 | Clip 1.0 |
| Architecture | LSTM | Hidden 275 | Latent 137 | 1.44M params | LR 1e-4 | Clip 1.0 |
| Architecture | NeuralActuator | Hidden 192 | Latent 96 | 1.44M params | LR 1e-4 | Clip 1.0 |
Online adaptation before (B) and after (A). J1-J4: joint-angle MAE (deg). Grip: gripper-aperture MAE (mm). F: force MAE (N).
| Task | @100 | @300 | @500 | |||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| J1 B | J1 A | J2 B | J2 A | J3 B | J3 A | J4 B | J4 A | Grip B | Grip A | F B | F A | J1 B | J1 A | J2 B | J2 A | J3 B | J3 A | J4 B | J4 A | Grip B | Grip A | F B | F A | J1 B | J1 A | J2 B | J2 A | J3 B | J3 A | J4 B | J4 A | Grip B | Grip A | F B | F A | |
| force_X+ | 0.9 | 0.3 | 2.1 | 0.7 | 1.0 | 0.8 | 0.8 | 0.8 | 1.0 | 1.0 | 0.36 | 0.37 | 2.1 | 1.2 | 2.3 | 1.0 | 0.7 | 1.5 | 0.9 | 0.8 | 1.0 | 1.0 | 0.46 | 0.41 | 2.7 | 1.6 | 4.0 | 1.3 | 0.6 | 1.9 | 0.9 | 0.8 | 1.0 | 1.0 | 0.52 | 0.41 |
| force_X- | 0.2 | 0.5 | 1.1 | 1.7 | 0.9 | 1.2 | 0.7 | 1.3 | 1.0 | 1.0 | 0.39 | 0.39 | 1.7 | 0.7 | 1.6 | 1.6 | 1.4 | 0.7 | 0.8 | 1.2 | 1.0 | 1.0 | 0.41 | 0.40 | 2.5 | 0.9 | 1.9 | 1.6 | 2.0 | 0.8 | 0.9 | 1.2 | 1.0 | 1.0 | 0.42 | 0.41 |
| force_Y+ | 2.1 | 1.8 | 5.4 | 3.4 | 0.8 | 1.1 | 1.2 | 1.3 | 0.0 | 0.1 | 0.37 | 0.37 | 2.3 | 1.5 | 4.5 | 3.2 | 1.1 | 1.1 | 1.6 | 1.0 | 0.1 | 0.1 | 0.39 | 0.37 | 3.0 | 1.2 | 3.7 | 2.3 | 2.5 | 1.2 | 3.1 | 1.7 | 0.3 | 0.3 | 0.45 | 0.39 |
| force_Y- | 1.1 | 1.2 | 0.6 | 1.3 | 1.1 | 1.8 | 1.8 | 1.8 | 0.1 | 0.1 | 0.38 | 0.38 | 1.6 | 1.0 | 3.1 | 2.6 | 1.2 | 1.4 | 2.1 | 2.0 | 0.1 | 0.1 | 0.36 | 0.36 | 1.7 | 1.0 | 2.3 | 2.0 | 2.5 | 1.1 | 2.1 | 1.6 | 0.2 | 0.2 | 0.38 | 0.37 |
| force_Z+ | 2.9 | 4.0 | 5.2 | 3.6 | 1.3 | 3.1 | 0.6 | 0.5 | 0.1 | 0.1 | 0.39 | 0.39 | 2.7 | 2.1 | 4.0 | 2.7 | 1.4 | 1.5 | 0.7 | 0.9 | 0.2 | 0.1 | 0.44 | 0.42 | 5.0 | 1.8 | 3.2 | 2.0 | 1.7 | 1.5 | 1.4 | 1.5 | 0.3 | 0.2 | 0.46 | 0.45 |
| force_Z- | 0.7 | 0.9 | 6.2 | 3.5 | 2.0 | 0.6 | 1.0 | 0.7 | 1.0 | 1.0 | 0.36 | 0.36 | 2.0 | 0.7 | 7.1 | 2.3 | 1.8 | 0.8 | 3.3 | 1.2 | 1.0 | 1.0 | 0.61 | 0.38 | 2.6 | 1.0 | 7.2 | 1.6 | 2.0 | 0.8 | 3.0 | 1.1 | 1.0 | 1.0 | 0.54 | 0.40 |
| ref_X+ | 1.4 | 0.4 | 1.6 | 0.4 | 1.0 | 1.0 | 0.8 | 0.8 | 1.0 | 1.0 | 0.01 | 0.08 | 1.5 | 0.5 | 1.3 | 0.6 | 0.8 | 0.8 | 1.0 | 1.2 | 1.0 | 1.0 | 0.02 | 0.08 | 1.3 | 0.5 | 1.1 | 0.6 | 0.6 | 1.0 | 1.4 | 1.9 | 1.0 | 1.0 | 0.01 | 0.05 |
| ref_X- | 0.4 | 0.7 | 3.2 | 0.6 | 2.4 | 0.5 | 0.7 | 1.0 | 1.0 | 1.0 | 0.00 | 0.00 | 0.7 | 0.6 | 2.4 | 1.2 | 1.9 | 0.5 | 0.9 | 0.9 | 1.0 | 1.0 | 0.00 | 0.04 | 0.8 | 0.6 | 2.2 | 1.0 | 2.2 | 0.7 | 1.1 | 0.8 | 1.0 | 1.0 | 0.00 | 0.05 |
| ref_Y+ | 1.4 | 1.8 | 1.0 | 2.8 | 1.4 | 1.4 | 1.3 | 1.9 | 0.1 | 0.1 | 0.00 | 0.00 | 2.2 | 1.7 | 3.3 | 3.3 | 1.0 | 1.2 | 1.8 | 1.4 | 0.2 | 0.2 | 0.00 | 0.01 | 2.2 | 1.2 | 4.4 | 2.4 | 1.0 | 1.1 | 1.3 | 1.3 | 0.4 | 0.3 | 0.00 | 0.01 |
| ref_Y- | 2.0 | 1.2 | 2.2 | 1.9 | 0.8 | 0.4 | 2.7 | 1.3 | 0.0 | 0.1 | 0.00 | 0.01 | 2.5 | 1.5 | 4.8 | 2.7 | 0.7 | 0.8 | 3.2 | 1.8 | 0.1 | 0.1 | 0.00 | 0.01 | 2.0 | 1.2 | 4.9 | 2.1 | 0.7 | 1.3 | 2.7 | 2.0 | 0.3 | 0.2 | 0.00 | 0.01 |
| ref_Z+ | 0.6 | 0.9 | 1.3 | 0.8 | 0.4 | 1.3 | 1.4 | 1.3 | 0.1 | 0.1 | 0.00 | 0.00 | 1.3 | 1.2 | 3.4 | 1.6 | 0.4 | 1.0 | 1.2 | 1.0 | 0.2 | 0.2 | 0.00 | 0.00 | 1.0 | 1.1 | 3.4 | 1.5 | 0.5 | 1.2 | 0.9 | 1.3 | 0.3 | 0.3 | 0.00 | 0.00 |
| ref_Z- | 1.8 | 0.5 | 1.9 | 0.8 | 1.1 | 0.9 | 0.5 | 0.7 | 1.0 | 1.0 | 0.03 | 0.14 | 1.7 | 0.6 | 0.9 | 0.7 | 1.1 | 0.8 | 0.8 | 0.8 | 1.0 | 1.0 | 0.02 | 0.11 | 1.6 | 0.5 | 0.8 | 0.7 | 1.0 | 0.7 | 0.8 | 1.1 | 1.0 | 1.0 | 0.01 | 0.08 |
| Avg | 1.28 | 1.19 | 2.65 | 1.81 | 1.19 | 1.17 | 1.13 | 1.12 | 0.55 | 0.55 | 0.19 | 0.21 | 1.86 | 1.09 | 3.22 | 1.96 | 1.11 | 1.02 | 1.53 | 1.18 | 0.59 | 0.58 | 0.23 | 0.22 | 2.20 | 1.04 | 3.25 | 1.58 | 1.44 | 1.10 | 1.64 | 1.35 | 0.66 | 0.65 | 0.23 | 0.22 |
Cross-Platform Evaluation
SO-101 arm evaluation. Joint errors are in degrees and force errors are in Newtons.
| Platform | Task | Lift & Hold / @500 | Pick & Place / @500 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| J1 | J2 | J3 | J4 | J5 | F | J1 | J2 | J3 | J4 | J5 | F | ||
| SO-101 | 300g | 2.27 | 8.20 | 6.40 | 5.40 | 2.37 | 0.64 | 3.73 | 5.63 | 4.17 | 6.17 | 2.47 | 0.73 |
| SO-101 | 400g | 2.83 | 9.30 | 9.63 | 4.00 | 5.73 | 0.57 | 3.53 | 6.83 | 2.43 | 5.23 | 5.13 | 0.63 |
| SO-101 | 500g | 2.27 | 7.63 | 9.77 | 7.13 | 2.67 | 0.47 | 3.80 | 5.60 | 1.53 | 6.73 | 3.33 | 0.54 |
7-DoF industrial arm per-joint, force, and torque MAE.
| Task | @100 | @500 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| J1 | J2 | J3 | J4 | J5 | J6 | J7 | F | Torque | J1 | J2 | J3 | J4 | J5 | J6 | J7 | F | Torque | |
| 200g | 0.6 | 1.1 | 3.7 | 1.7 | 0.7 | 0.4 | 1.5 | 0.42 | 0.50 | 0.8 | 1.2 | 3.7 | 1.9 | 1.4 | 2.3 | 1.2 | 0.31 | 0.50 |
| 300g | 0.4 | 1.2 | 2.8 | 2.0 | 0.8 | 0.5 | 1.1 | 0.35 | 0.68 | 0.6 | 1.0 | 2.7 | 1.7 | 1.1 | 1.7 | 0.9 | 0.28 | 0.59 |
| 400g | 1.0 | 1.2 | 1.9 | 1.8 | 0.7 | 0.5 | 0.8 | 0.36 | 0.79 | 1.0 | 0.8 | 1.3 | 1.4 | 0.9 | 1.5 | 0.6 | 0.27 | 0.69 |
| 500g | 1.4 | 1.1 | 0.9 | 1.7 | 0.8 | 0.6 | 0.4 | 0.27 | 0.87 | 1.7 | 0.7 | 0.7 | 1.4 | 0.8 | 1.3 | 0.5 | 0.26 | 0.79 |
| 600g | 2.0 | 1.3 | 1.0 | 1.6 | 0.7 | 0.9 | 0.4 | 0.30 | 0.98 | 2.4 | 0.7 | 1.4 | 1.4 | 0.7 | 1.1 | 0.5 | 0.28 | 0.90 |
| Avg | 1.1 | 1.2 | 2.0 | 1.8 | 0.7 | 0.6 | 0.8 | 0.34 | 0.76 | 1.3 | 0.9 | 2.0 | 1.6 | 1.0 | 1.6 | 0.8 | 0.28 | 0.69 |
Gauge pushing test set.
| Task | @100 | @300 | @600 | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| J1 | J2 | J3 | J4 | Grip | F | J1 | J2 | J3 | J4 | Grip | F | J1 | J2 | J3 | J4 | Grip | F | |
| high_push_front | 0.91 | 1.68 | 1.18 | 0.62 | 0.00 | 0.07 | 1.62 | 1.29 | 0.53 | 0.32 | 0.00 | 0.08 | 1.48 | 1.16 | 1.44 | 1.09 | 0.00 | 0.09 |
| high_push_top | 0.73 | 1.01 | 0.78 | 1.61 | 0.01 | 0.10 | 1.38 | 1.35 | 1.97 | 1.92 | 0.01 | 0.11 | 1.62 | 1.57 | 2.72 | 2.01 | 0.01 | 0.12 |
| mid_push_front | 0.66 | 0.52 | 0.96 | 0.61 | 0.30 | 0.06 | 0.85 | 0.51 | 0.60 | 0.99 | 0.31 | 0.07 | 0.95 | 0.56 | 0.48 | 0.98 | 0.31 | 0.08 |
| mid_push_top | 0.49 | 0.54 | 0.87 | 0.74 | 0.30 | 0.09 | 0.64 | 0.43 | 0.73 | 1.07 | 0.31 | 0.10 | 0.89 | 0.52 | 0.75 | 0.78 | 0.31 | 0.11 |
| low_push_front | 0.61 | 0.75 | 1.83 | 0.23 | 0.32 | 0.08 | 0.87 | 0.56 | 1.65 | 0.33 | 0.32 | 0.09 | 1.29 | 0.88 | 1.12 | 0.98 | 0.33 | 0.10 |
| low_push_top | 1.00 | 0.36 | 1.05 | 0.29 | 0.31 | 0.08 | 1.17 | 0.84 | 2.11 | 0.74 | 0.32 | 0.09 | 1.35 | 0.76 | 2.27 | 1.04 | 0.32 | 0.10 |
| Avg | 0.73 | 0.81 | 1.11 | 0.68 | 0.21 | 0.08 | 1.09 | 0.83 | 1.27 | 0.90 | 0.21 | 0.09 | 1.26 | 0.91 | 1.46 | 1.15 | 0.21 | 0.10 |
Future Directions
Scaling actuator learning across data, robot morphologies, and force-aware control.
Leverages large-scale synthetic actuator data for pretraining, followed by real-world fine-tuning, to reduce costly hardware data collection.
Extends NeuralActuator across robot morphologies and actuator families for more generalizable actuation modeling.
Moves beyond single-arm end-effector force estimation toward multi-joint and whole-body force-aware robot control.