Skip to content
artificial_agent.
All publications

Zero to Autonomy in Real-Time: Online Adaptation of Dynamics in Unstructured Environments

William Ward, Sarah Etter, Jesse Quattrociocchi, Christian Ellis, Adam J. Thorpe, Ufuk Topcu

arXiv preprint arXiv:2509.12516, 2025

Diagram: odometry feeds a recursive coefficient update over grass, dirt and ice dynamics; a Jackal on ice follows accurate adapted rollouts, not unadapted ones.
Fig. 1. Our approach enables rapid adaptation of the dynamics model to a new terrain within seconds. We use recursive least squares to update an online estimate of function encoder coefficients using streaming, real-time data, leading to more accurate rollouts and improved MPPI performance.

Abstract

Autonomous robots must go from zero prior knowledge to safe control within seconds to operate in unstructured environments. Abrupt terrain changes, such as a sudden transition to ice, create dynamics shifts that can destabilize planners unless the model adapts in real-time. We present a method for online adaptation that combines function encoders with recursive least squares, treating the function encoder coefficients as latent states updated from streaming odometry. This yields constant-time coefficient estimation without gradient-based inner-loop updates, enabling adaptation from only a few seconds of data. We evaluate our approach on a Van der Pol system to highlight algorithmic behavior, in a Unity simulator for high-fidelity off-road navigation, and on a Clearpath Jackal robot, including on a challenging terrain at a local ice rink. Across these settings, our method improves model accuracy and downstream planning, reducing collisions compared to static and meta-learning baselines.

Cite

@misc{ward2025zero,
  title = {{Zero to Autonomy in Real-Time: Online Adaptation of Dynamics in Unstructured Environments}},
  author = {William Ward and Sarah Etter and Jesse Quattrociocchi and Christian Ellis and Adam J. Thorpe and Ufuk Topcu},
  year = {2025},
  eprint = {2509.12516},
  archivePrefix = {arXiv}
}