navground_sim#
This package extend navigation playground with all you need to perform simulations and record data.
Dependencies#
navground_core the core library
GEOS for computational geometry
HighFive to write HDF5 files
Libraries#
navground_sim#
A C++ library to perform navigation simulations; see the API reference.
To use the library in a C++ CMake project:
add the dependency in
CMakeLists.txt
find_package(navground_sim REQUIRED) # if using ament # ament_target_dependencies(<MYTARGET> navground_sim) # else target_link_libraries(<MYTARGET> PRIVATE navground_sim::navground_sim)
include the appropriate headers in your code
#include "navground/sim/world.h"
Executables#
info#
Lists registered components (behaviors, kinematics, behavior modulations, state estimations, tasks, and scenarios) implemented in C++.
usage: info [-h] [--no-plugins] [-v] [--build] [--properties] [--description] [--behaviors [BEHAVIORS]] [--kinematics [KINEMATICS]]
[--modulations [MODULATIONS]] [--state_estimations [STATE ESTIMATIONS]] [--tasks [TASKS]] [--scenarios [SCENARIOS]]
Named Arguments#
- --no-plugins
Do not load plugins
- -v, --version
show program’s version number and exit
- --build
Include build infos
- --properties
Include properties
- --description
Include property descriptions
- --behaviors
selects behaviors
- --kinematics
selects kinematics
- --modulations
selects modulations
- --state_estimations
selects state estimations
- --tasks
selects tasks
- --scenarios
selects scenarios
Example#
$ info --properties
Installed components
====================
Behaviors
---------
CppPolicy
flat: false (bool)
include_angular_speed: false (bool)
include_target_direction: false (bool)
include_target_distance: false (bool)
include_target_speed: false (bool)
include_velocity: false (bool)
max_acceleration: 10 (float)
max_angular_acceleration: 0 (float)
policy_path: (str)
shared: false (bool)
use_acceleration_action: false (bool)
Dummy
environment: (str)
HL
aperture: 3.14159 (float)
...
echo#
Load and then print a YAML representation of an object (behavior, kinematic, behavior modulation, state estimation, task, scenarios, agent, world, experiment, sampler).
usage: echo [-h] [--no-plugins] [-v] [--chdir] [--type {bool,int,float,str,vector,[bool],[int],[float],[str],[vector]}] kind YAML
Positional Arguments#
- kind
The kind of object to load: behavior, modulation, kinematics, state_estimation, task, scenario, world, agent, experiment, sampler
- YAML
YAML string, or path to a YAML file, describing an experiment
Named Arguments#
- --no-plugins
Do not load plugins
- -v, --version
show program’s version number and exit
- --chdir
Whether to change working directory to the directory containing the file. Useful when the config contains relative paths.
- --type
Possible choices: bool, int, float, str, vector, [bool], [int], [float], [str], [vector]
The sampled type
Example#
$ echo scenario "{type: Corridor, agent_margin: 0.25, width: 2}"
type: Corridor
add_safety_to_agent_margin: true
agent_margin: 0.25
length: 10
width: 2
obstacles:
[]
schema#
Print JSON-Schema of YAML-convertible navground sim classes.
usage: schema [-h] [--no-plugins] [-v] [--register] [--type TYPE]
[{kinematics,scenario,agent,core,experiment,sim,world,behavior_modulation,behavior,task,state_estimation}]
Positional Arguments#
- kind
Possible choices: kinematics, scenario, agent, core, experiment, sim, world, behavior_modulation, behavior, task, state_estimation
The target type of the scheme
Named Arguments#
- --no-plugins
Do not load plugins
- -v, --version
show program’s version number and exit
- --register
Whether to generate the register schema instead of the base class schema
- --type
If provided, generates the schema for the sub-class registered under this name
Example#
$ schema sim
$id: http://navground/sim
$schema: https://json-schema.org/draft/2020-12/schema
$defs:
vector2:
type: array
items:
type: number
minItems: 2
maxItems: 2
$id: http://navground/vector2
$schema: https://json-schema.org/draft/2020-12/schema
line_segment:
type: array
items:
$ref: vector2
minItems: 2
maxItems: 2
$id: http://navground/line_segment
$schema: https://json-schema.org/draft/2020-12/schema
disc:
...
plugins#
Load and list plugins.
usage: plugins [-h] [-v] [--dependencies]
Named Arguments#
- -v, --version
show program’s version number and exit
- --dependencies
Display dependencies of C++ plugins
Example#
$ plugins
navground_demos
---------------
Scenarios: ThymioDemo
navground_examples
------------------
Behaviors: Idle
Scenarios: Empty
sample#
Samples a world from a scenario containing components implemented in C++, or from a sampler.
usage: sample [-h] [--no-plugins] [-v] [--seed SEED] [--type TYPE] [--number NUMBER] [--chdir] YAML
Positional Arguments#
- YAML
YAML string, or path to a YAML file, describing an experiment or a sampler
Named Arguments#
- --no-plugins
Do not load plugins
Default:
False
- -v, --version
show program’s version number and exit
- --seed
The random seed
Default:
0
- --type
The sampled value
Default:
''
- --number
The number of samples
Default:
1
- --chdir
Whether to change working directory to the directory containing the file. Useful when the config contains relative paths.
Default:
False
Example (scenario)#
$ sample "{type: Antipodal, groups: [{number: 2}]}"
Sampled world
=============
obstacles:
[]
walls:
[]
agents:
- behavior:
optimal_speed: 0
optimal_angular_speed: 0
rotation_tau: 0.5
safety_margin: 0
horizon: 5
path_look_ahead: 1
path_tau: 0.5
radius: 0
heading: velocity
social_margin:
modulation:
...
Example (sampler)#
$ sample "{sampler: uniform, from: 0, to: 10}" --type int --number 5
Sampled int
===========
0: 5
1: 0
2: 3
3: 3
4: 7
run#
Run an experiment limited to components implemented in C++.
usage: run [-h] [--no-plugins] [-v] [--tqdm] [--run_index RUN_INDEX] [--runs RUNS] [--threads THREADS] [--processes PROCESSES]
[--save_directory SAVE_DIRECTORY] [--save_single_hdf5] [--use_multiprocess] [--chdir]
YAML
Positional Arguments#
- YAML
YAML string, or path to a YAML file, describing an experiment
Named Arguments#
- --no-plugins
Do not load plugins
Default:
False
- -v, --version
show program’s version number and exit
- --tqdm
Display tqdm bar
Default:
False
- --run_index
Will overwrite the experiment own run_index if positive.
Default:
-1
- --runs
Will overwrite the experiment own runs if positive.
Default:
-1
- --threads
Number of threads
Default:
1
- --processes
Number of processes
Default:
1
- --save_directory
Where to save the experiment. If not specified, it reads the value from the configuration
- --save_single_hdf5
Whether to store a single HDF5 file when using multiple processes
Default:
False
- --use_multiprocess
Whether to use the multiprocess package instead of multiprocessings
Default:
False
- --chdir
Whether to change working directory to the directory containing the file. Useful when the config contains relative paths.
Default:
False
If the experiment is recording data, it will create a directory named <experiment_name>_<experiment_hash>_<datestamp>
with
an HDF5 file data.h5` with data recorded during the experiment,
a YAML file experiment.yaml with the configuration of the experiment.
Example#
$ run "{save_directory: "/tmp", scenario: {type: Antipodal, groups: [{number: 20}]}}"
Performing experiment ...
Experiment done
Duration: 0.0362629 s
Saved to: "/tmp/experiment_1622124573627242003_2025-06-07_16-32-21/data.h5"
Note
Although individual runs execute in a single thread, we can speed up experiments consisting of multiple runs by parallelizing them. Check out the related guide to know more.
navground#
A command that contains all other commands of this package as sub-commands, installed in the binary directory. Using it, you can run
$ naground <command> [arguments]
instead of
$ install/lib/navground_sim/<command> [arguments]
Example#
$ navground run --help
Usage: run [--help] [--version] [--tqdm] [--run_index VAR] [--runs VAR] [--threads VAR] [--processes VAR] [--save_directory VAR] [--chdir] YAML
Runs an experiment.
Positional arguments:
YAML YAML string, or path to a YAML file, describing an experiment
Optional arguments:
-h, --help shows help message and exits
-v, --version prints version information and exits
--tqdm Display tqdm bar
--run_index Will overwrite the experiment own run_index if positive. [nargs=0..1] [default: -1]
--runs Will overwrite the experiment own runs if positive. [nargs=0..1] [default: -1]
--threads Number of threads [nargs=0..1] [default: 1]
--processes Number of processes [only supported by Python] [nargs=0..1] [default: 1]
--save_directory Where to save the experiment. If not specified, it reads the value from the configuration
--chdir Whether to change working directory to the directory containing the file. Useful when the config contains relative paths
...