Introduction#
Navground, short Navigation Playground, is a playground to experiment with navigation algorithms.
Core library#
At its core, there is a library of two-dimensional navigation algorithms implemented in C++, that provides a common API to interact with multi-agent dynamic obstacle avoidance. Behaviors take the current state of the environment and of the agent, a target and output a control command.
Some behaviors are included, more will be, and user can add their own as plugins.
Features#
navigation behaviors and modulations
environment states
targets
kinematics
behavior modulations
2D and 2.5D event-based controllers
collision computation
YAML serialization
CLI to inspect and test the system
Users can add their components (behaviors, kinematics, behavior modulations) which are auto-discovered by the rest of the system.
The core library is designed to be integrated in real-time run times to provide obstacle avoidance to real or simulated robots or other kind of agents. We already integrated it into the following run-times
Python bindings#
All core elements are exposed as a Python 3 package. Components can be extended from Python too: users can implement behaviors, kinematics, and modulations in Python, which are then fully integrated with the rest of the system.
Simulation#
The simulation library complements the navigation behaviors of core library with - tasks that generates targets to behaviors, - state estimations that feeds the environment state of the behaviors
The library provides everything needed to run offline experiments. Users select (or implement) scenarios that (randomly) generate worlds from a template and run experiments, recording data from a sequence of simulation runs.
Features#
very fast kinematical simulation with collision detection and resolution between basics shapes.
extensible tasks and state estimations,
generating world with agents and static obstacles from scenarios,
running experiments/benchmarks and recording data in HFD5 files,
using YAML to specify experiments,
Python bindings,
Real-time Python simulation with UI,
CLI to inspect and test the system, launch simulations, record videos, and more.
Extensions#
Navground is designed to be extensible from C++ and Python. We contributed the extensions listed below, and we encourage users to develop their own.
ROS#
- navground_ros:
A ROS 2 node to perform 2.5D obstacle avoidance, wrapping the core C++ library with a ROS 2 compliant interface: repository.
Simulators#
- navground_coppeliasim:
A CoppeliaSim plugin that exposes a lua interface to the C++ library: repository.
Machine-Learning#
- navground_learning:
A Python package that interfaces navground with Gymnasium and PetttingZoo to apply IL and RL to navigation: repository.
- navground_onnx:
A C++ package to speed up inference of ML policies in navground using ONNX: repository.
Path planning#
- navground_ri:
A Python package that provides a task to compute optimal path in indoor environments: repository.
Narrow spaces#
- navground_narrow:
A Python package that provides model-based modulations to handle navigating through narrow passages: repository.
Acknowledgement and disclaimer#
The work was supported in part by REXASI-PRO H-EU project, call HORIZON-CL4-2021-HUMAN-01-01, Grant agreement no. 101070028.

The work has been partially funded by the European Union. Views and opinions expressed are however those of the author(s) only and do not necessarily reflect those of the European Union or the European Commission. Neither the European Union nor the European Commission can be held responsible for them.