Parameter Reference#
Every key that each plugin type, the Agent and BoundingVolume read, with its code default and its
constraints, for anyone writing or changing a planner configuration. Sections follow the YAML tree from the agent
down; a role’s base-class table (such as RobotModel Keys) applies to every type of that role.
The module pages explain what the keys do.
Shipped is the value the shipped simulation runs with (run_experiment_sim.launch with its default planner:=nbs
and no task:=), listed only where it differs from the code default; a parenthesis limits it to a file, planner or
task:=; default means the shipped setup runs on the code default. The values come from open_apero_ros/config/
(planners/_common.yaml, planners/<planner>.yaml, tasks/_common.yaml, tasks/<task>.yaml,
tasks/_points_planning.yaml, scenes/HSSD/) and from the launch file’s <param> tags. A table without a Shipped
column runs on code defaults in every shipped setup.
How Parameters Are Read#
Every plugin is built from one namespace, a YAML block: its type: names the registered class, its other
scalar keys are the plugin’s parameters. A nested block is a child plugin, named after its role (robot,
generator, sensor_model, …); a <role>_args key in the parent points that child at another namespace
instead (-> below). The shipped NBS setup resolves to these namespaces; dbs, spt and tsp differ only
in the path_planner block, rrt and rrtstar where noted:
/open_apero_node Agent (RosAgent): the Agent keys
├── map/ type: VoxbloxMap
├── robot/ type: SimpleFallbackRobot bounding_volume_args -> /map_bounding_volume
├── cost_computer/ type: TrajectoryTime
└── layers/ one sub-namespace per layer; the key is the layer's instanceName()
├── planning/ type: PlanningLayer evaluator_args -> /task_evaluator
│ ├── generator/ type: RRAG (rrt, rrtstar: RRT, RRTStar)
│ ├── evaluator/ rrt, rrtstar only (no evaluator_args): type: SimpleYawPlanningEvaluator
│ │ following_evaluator_args -> /task_evaluator
│ └── path_planner/ type: GraphNodeWiseBeamSearch (rrt, rrtstar: TreeBestValue)
└── backtracking/ type: BacktrackingLayer
└── backtracker/ type: RotateReverse
/task_evaluator type: NaiveEvaluator bounding_volume_args -> /target_bounding_volume
└── sensor_model/ type: IterativeRayCaster
/map_bounding_volume BoundingVolume, from config/scenes/HSSD/_common.yaml and <scene_id>.yaml
/target_bounding_volume BoundingVolume, from the same files
The same layout in YAML, abridged from the shipped files; the launch file loads the first block into the
node’s private namespace and the second into /task_evaluator:
# open_apero_node's private namespace: config/planners/_common.yaml, then config/planners/nbs.yaml
cost_budget: 600 # an Agent key
robot: # child "robot" of the Agent
type: "SimpleFallbackRobot" # selects the class; its keys sit beside it
collision_sphere_r: 0.3 # a list key holding one sphere
bounding_volume_args: "/map_bounding_volume" # read the volume from a root namespace
layers:
planning: # the layer's instanceName()
type: "PlanningLayer"
replan_num_steps: 5
generator:
type: "RRAG"
min_edge_length: 1.5
evaluator_args: "/task_evaluator" # no evaluator: block; the evaluator lives there
path_planner:
type: "GraphNodeWiseBeamSearch"
objective: "expected_gain" # required
---
# /task_evaluator: config/tasks/_common.yaml, then config/tasks/<task>.yaml over it
type: "NaiveEvaluator"
bounding_volume_args: "/target_bounding_volume"
sensor_model:
type: "IterativeRayCaster"
ray_length: 3.0
A key with a default is optional. A key marked required has none: leaving it out throws
std::runtime_errorat startup (“Parameter ‘…’ not found in param map!”; forlayers, “Agent: ‘layers’ must be a non-empty dictionary …”).An error raised inside a plugin’s setup or validation carries the prefix “
<type>at ‘<namespace>’: “ of every plugin on its way down, such as “PlanningLayer at ‘/open_apero_node/layers/planning’: GraphNodeWiseBeamSearch at ‘/open_apero_node/layers/planning/path_planner’: Invalid parameters: beam_width expected >= 1” (see Fromtype:to Object).Every plugin namespace needs a
type:naming a registered class of its role, and every child plugin is required: the agent’smap,robotandcost_computer, aPlanningLayer’sgenerator,evaluatorandpath_planner, aBacktrackingLayer’sbacktracker, an evaluator’ssensor_model(SimpleYawPlanningEvaluator: itsfollowing_evaluator), … A missing namespace ortype:throwsPluginFactory: no plugin configured at '<ns>' (missing 'type'?); an unregistered name, or a class of another role, throws fromPluginRegistry.A
<role>_argskey (map_args,evaluator_args,bounding_volume_args, …) moves that child to another namespace; its default is<ns>/<role>,<ns>being the plugin’s own namespace./task_evaluator,/map_bounding_volumeand/target_bounding_volumeare root namespaces, shared by every planner node on the master.run_experiment_sim.launchfills/task_evaluatoraccording totask:=and the two volumes fromconfig/scenes/<scene_dataset>/.Each value is parsed with
operator>>and must be consumed whole; otherwise setup throwsstd::runtime_error(“Failed to parse parameter ‘…’”; for a list, “Failed to parse vector parameter ‘…’”). A string value can therefore be neither empty nor contain whitespace (a path with a space fails): omit a key to keep an empty default.infdoes not parse, and anintkey does not take1.5.A value that breaks a stated constraint (“must be > 0”, “in (0, 1]”, …) throws
std::invalid_argument(“Invalid parameters: …”) once that plugin’s setup has run. Some checks run inside the setup and throwstd::runtime_errorinstead, such as an unknown name for a key that takes a fixed set of names.After a plugin’s setup, the keys of its namespace that no setup read are reported once, as the warning “
<type>ignores parameters: a, b (namespace ‘<ns>’)” (open_apero::BoundingVolumefor a bounding volume). The agent’s own keys are checked after every plugin is built and reported asAgent; that check skipslog_level,run_dir,plugin_librariesand the keys of the embedded Voxblox server (seeVoxbloxMap). With the agent’sstrict_params: truean unread key throwsstd::runtime_errorinstead. Keys in a child’s sub-namespace belong to the child; a sub-namespace no child is created from (e.g. an inlineevaluator:block next toevaluator_args) is never checked, not even withstrict_params.typeis exempt.PluginFactoryRosgives a plugin at namespace<ns>the leaf parameters directly under<ns>/; a sibling that only shares the prefix (map_framenext tomap) is not among them.List keys (
double list) take one comma-separated scalar, such ascollision_sphere_x: 0.0, 0.1, with no space before a comma. A YAML list ([0.0, 0.1]) does not parse.Write YAML booleans unquoted (
true); a quoted"true"is a string and does not parse. WithPluginFactoryConfig(no ROS) every value is a string and aboolis"1"or"0";"true"does not parse.Angles are in radians unless a row says degrees; lengths are in meters, durations in seconds, costs in the cost computer’s unit (seconds for
TrajectoryTime).
Agent#
Agent Keys#
Top-level keys, in the node’s private namespace.
Key |
Type |
Default |
Meaning |
Shipped |
|---|---|---|---|---|
|
dictionary |
required |
One sub-namespace per layer, each a block with a |
|
|
string |
|
Namespace of the map. |
default |
|
string |
|
Namespace of the robot model. |
default |
|
string |
|
Namespace of the cost computer. |
default |
|
double |
unbounded |
Episode cost budget; below |
|
|
int |
|
Seed of every stochastic plugin; negative = nondeterministic. See random seeding. |
default |
|
bool |
|
Unread keys throw |
default |
|
double |
|
Sensor position tolerance of the settle gate [m]; must be > |
default |
|
double |
|
Sensor orientation tolerance of the settle gate [rad]; must be ≥ 2·acos(1 − |
|
|
double |
|
Position threshold of |
default |
|
double |
|
Geodesic orientation threshold paired with |
default |
|
bool |
|
The settle gate also waits for a mapped frame at the target pose. |
|
|
bool |
|
Run one warm-up pass through every layer at startup. |
|
|
bool |
|
Time every phase and write |
|
|
int |
|
N map snapshots saved to |
default |
|
bool |
|
Publish layer, map, robot and trajectory markers every cycle, with |
default |
|
bool |
|
Color the executed trajectory by budget used. |
|
|
bool |
|
Log the layer stack, replan timing and per-layer cycle summaries. |
default |
|
bool |
|
Log each plugin’s resolved parameters when it is created. |
default |
|
bool |
|
Add nearest-frame detail to settle-gate warnings, and report a frame-ledger shortfall (fewer frames mapped than commands dispatched) even for a map that reports no frame list. |
default |
RosAgent#
In open_apero_ros; reads the Agent keys plus:
Key |
Type |
Default |
Meaning |
Shipped |
|---|---|---|---|---|
|
bool |
|
Track the pose from TF and resolve commands by |
|
|
string |
|
World frame of commands, markers and TF lookups; a |
|
|
string |
|
Robot base frame (TF mode). |
default |
|
string |
|
Sensor frame (TF mode). |
default |
|
bool |
|
Shut the node down when an episode ends with the budget spent, a goal reached or no step; a |
default |
|
string |
empty |
Run output directory, read at the first |
set by |
|
string |
|
Console level: |
default |
|
string list |
|
Plugin libraries |
default |
Layers#
PlanningLayer#
Its generator, evaluator and path_planner children are listed under Generators,
Evaluators and Path Planners; the generator must be a GraphGenerator, or setup
throws.
Key |
Type |
Default |
Meaning |
Shipped |
|---|---|---|---|---|
|
int |
|
Arbitration priority; higher is asked first. Every priority a layer can report ( |
default |
|
int |
|
Expansion rounds (sample, connect, evaluate, price) per cycle; |
default |
|
int |
unlimited |
Cut the selected edge after this many time steps ( |
|
|
string |
|
Namespace of the generator. |
default |
|
string |
|
Namespace of the evaluator. |
|
|
string |
|
Namespace of the path planner. |
default |
BacktrackingLayer#
Its backtracker child is listed under Backtrackers.
Key |
Type |
Default |
Meaning |
Shipped |
|---|---|---|---|---|
|
int |
|
Baseline priority. It and |
default |
|
int |
|
Priority while the backtracker’s initial sweep runs or the robot’s state is untraversable. |
default |
|
string |
|
Namespace of the backtracker. |
default |
Map#
VoxbloxMap#
In open_apero_voxblox. Its own namespace holds only type:. The embedded Voxblox EsdfServer reads its
keys (tsdf_voxel_size, …; see the
open_apero_voxblox parameters)
from the node’s private namespace, beside the Agent keys, and the agent’s unread-key check skips them
(VoxbloxMap::nodeParamsReadByVoxblox()); that list also holds verbose and visualize, which the Agent
reads too. VoxbloxMap is a TsdfMap, hence an OccupancyMap: SimpleRobot and VoxelWeightEvaluator
require the former, the sensor models and the SimulatedSensorEvaluators the latter, and each refuses another map
type at setup (SimpleRobot in checkParamsValid()).
Robot Models#
RobotModel Keys#
Read by every robot model.
Key |
Type |
Default |
Meaning |
Shipped |
|---|---|---|---|---|
|
double |
|
Maximum linear speed [m/s]; must be > 0. |
|
|
double |
π/2 |
Maximum yaw rate [rad/s]; must be > 0. |
|
|
double |
|
Time between consecutive trajectory states [s]; must be > 0. |
|
|
bool |
|
Publish the robot body along the dispatched trajectory ( |
|
|
double |
|
Unobserved space within this distance of the initial sensor position counts as traversable [m]. |
default |
|
double |
|
Floor of the relative clearance scale; in (0, 1]. |
default |
|
int |
|
Evenly spaced yaws sampled per position; must be > 0. |
|
|
string |
|
|
default |
|
double |
−π/2 |
Lowest plannable gaze pitch [rad], positive looks down; finite and ≥ −π/2. Exposed to subclasses; no in-tree plugin plans pitch. |
default |
|
double |
π/2 |
Highest plannable gaze pitch [rad]; finite, ≥ |
default |
|
double |
|
Base position in the sensor frame [m]. |
default |
|
double |
|
Base orientation in the sensor frame (quaternion). |
default |
SimpleRobot#
Sphere body checked against a TsdfMap. Reads the RobotModel keys plus:
Key |
Type |
Default |
Meaning |
Shipped (as |
|---|---|---|---|---|
|
double list |
empty |
Collision spheres in the base frame [m]: centers and radii, one entry per sphere; the four lists must have equal length. |
one sphere, |
|
double list |
all |
Preferred obstacle margin per collision sphere [m]; nodes must keep it in full. If given, one entry per collision sphere. |
default |
|
double list |
empty |
Spheres that must touch an obstacle (e.g. the ground) for a state to be traversable; the four lists must have equal length. |
default |
|
bool |
deduced |
Whether traversability depends on yaw; deduced |
default |
|
int |
|
Collision and contact spheres that must be observed for |
default |
|
int |
|
Draw the body at every Nth trajectory state (endpoints always). |
default |
|
bool |
|
Sample the z coordinate; |
default |
|
bool |
|
Sample only inside the mapped part of the bounding volume; the whole volume while that part is empty. Skipped for a rotated volume. |
default |
|
string |
|
Namespace of the bounding volume that bounds sampling and every planned state. It must be active: sampling draws from its x/y/z extents, so an unset volume samples only x = y = 0. |
|
SimpleFallbackRobot#
SimpleRobot that falls back to an OMPL planner in a local window when the straight-line steer is
blocked. Reads the SimpleRobot keys plus:
Key |
Type |
Default |
Meaning |
Shipped |
|---|---|---|---|---|
|
string |
empty |
|
|
|
double |
|
Time limit per fallback query [s]. |
|
|
double |
|
State-space segment resolution [m]; only the |
|
|
double |
|
OMPL planner range, and the margin of the local window around start and goal, which is clipped to the bounding volume when that is active and unrotated [m]. |
|
|
string |
|
|
default |
|
string |
|
|
default |
|
string |
|
|
|
With a planner set and random_seed ≥ 0, setup seeds OMPL’s process-global generator from the seed and the
robot’s namespace; see random seeding.
Bounding Volumes#
The keys of the namespace a bounding_volume_args names;
Bounding Volumes explains what a volume bounds and when it is active.
Key |
Type |
Default |
Meaning |
Shipped |
|---|---|---|---|---|
|
string |
empty |
Folder of the stage meshes; with |
HSSD stages folder |
|
string |
empty |
Stage mesh |
per-scene file |
|
double |
|
Padding added to the mesh bounds [m]; unused for an |
|
|
double |
|
Box corners [m]; read unless both |
default |
|
double |
|
Counter-clockwise yaw of the box about the world z axis through the origin [degrees]. |
default |
The shipped /map_bounding_volume and /target_bounding_volume come from
open_apero_ros/config/scenes/HSSD/.
Cost Computers#
No keys: type alone selects IdentityCost, TrajectoryLength or TrajectoryTime (shipped);
Cost Computers compares them.
Generators#
Generator and GraphGenerator Keys#
Read by every generator.
Key |
Type |
Default |
Meaning |
Shipped |
|---|---|---|---|---|
|
double |
|
A sample closer than this to its nearest node is rejected [m]; must be > 0. |
|
|
double |
|
A sample farther than this is moved to |
|
|
bool |
|
Draw every graph edge. |
default |
RRAG#
Rapidly-exploring random annulus graph: node clusters (one node per orientation) joined by rotation and translation edges. Keys, besides the shared ones:
Key |
Type |
Default |
Meaning |
|---|---|---|---|
|
int |
|
At most this many sampling attempts per expansion round; |
|
string |
|
Which orientation pairs a translation edge joins: |
RRT, RRTStar#
Trees grown from the robot; RRTStar also rewires for lower cost. Keys, besides the shared ones:
Key |
Type |
Default |
Meaning |
|---|---|---|---|
|
int |
|
At most this many sampling attempts per expansion round; |
Evaluators#
Evaluator Keys#
Read by every evaluator.
Key |
Type |
Default |
Meaning |
Shipped |
|---|---|---|---|---|
|
string |
|
Bounding volume of the target: only voxels inside it earn gain ( |
|
SimulatedSensorEvaluator Keys#
Read by NaiveEvaluator, SurfaceFrontierEvaluator, VoxelWeightEvaluator and PointsEvaluator,
which ray-cast a simulated view from each node.
Key |
Type |
Default |
Meaning |
Shipped |
|---|---|---|---|---|
|
string |
|
Namespace of the sensor model. |
default |
|
bool |
|
Count only voxels no tree ancestor sees; tree generators only. Under |
default |
|
bool |
|
Draw the sensor view of the selected path’s first evaluated node. |
|
|
double |
|
A frontier node sees more than this fraction of unknown voxels. |
|
|
double |
|
…and more than this fraction of the most voxels any node has seen. Both below |
|
|
double |
|
Re-evaluate only nodes with more gain than this, or frontier nodes. |
default |
|
bool |
|
Re-evaluate only nodes whose view overlaps the region the map updated. |
default |
NaiveEvaluator#
Gain: one per unknown voxel in view. Accumulated gain: the map’s explored volume. No keys beyond
the SimulatedSensorEvaluator ones.
SurfaceFrontierEvaluator#
Gain: frontier_voxel_weight per unknown voxel that borders the mapped surface,
new_voxel_weight per other unknown voxel. Accumulated gain: the mapped surface area. Requires an
OccupancyMap: setup throws std::runtime_error on another map type. Keys, besides the
SimulatedSensorEvaluator ones:
Key |
Type |
Default |
Meaning |
Shipped |
|---|---|---|---|---|
|
bool |
|
Check all 26 neighbors instead of the 6 face neighbors. |
|
|
bool |
|
The first observed neighbor (fixed scan order) must be occupied, not just observed; |
default |
|
double |
|
Neighbor offset [voxels]. |
|
|
double |
|
Gain of a surface-frontier voxel. |
default |
|
double |
|
Gain of any other unknown voxel. |
|
VoxelWeightEvaluator#
SurfaceFrontierEvaluator that also credits occupied voxels by how much a new observation would
add to their TSDF weight. Requires a TsdfMap: setup throws std::runtime_error on another map
type. Keys, besides the SurfaceFrontierEvaluator ones:
Key |
Type |
Default |
Meaning |
|---|---|---|---|
|
double |
|
Occupied voxels with a smaller relative weight gain earn nothing. |
|
double |
|
Horizontal angle between rays [rad]. |
|
double |
|
Vertical angle between rays [rad]. |
Not shipped: no shipped setup selects VoxelWeightEvaluator or sets these keys.
SimpleYawPlanningEvaluator#
Wraps a following evaluator and keeps each node’s best yaw; tree generators only (one node per
call). It reads the Evaluator key but never uses its own volume: the following evaluator’s
bounding_volume_args bounds the gain. Keys, besides the Evaluator one:
Key |
Type |
Default |
Meaning |
Shipped |
|---|---|---|---|---|
|
string |
|
Namespace of the evaluator that scores each yaw. It must be a |
|
|
double |
|
Re-evaluate only yaws with at least this gain, or frontier yaws. |
default |
|
bool |
|
Also draw the following evaluator’s markers for the selected yaw. |
default |
PointsEvaluator#
In open_apero_ros. Gain from a set of points to observe and collect. Keys, besides the
SimulatedSensorEvaluator ones:
Key |
Type |
Default |
Meaning |
Shipped |
|---|---|---|---|---|
|
string |
empty |
CSV with rows |
|
Sensor Models#
SensorModel Keys#
Read by every sensor model.
Key |
Type |
Default |
Meaning |
Shipped |
|---|---|---|---|---|
|
double |
|
Maximum ray length [m], the mapping range; |
|
|
bool |
|
Time every ray cast and log the mean and standard deviation [ms] every 20 casts; safe when an evaluator casts from several threads. |
default |
SimpleRayCaster, IterativeRayCaster#
Pinhole camera models (CameraModel); the field of view is 2·atan(resolution / (2·focal_length))
per axis. SimpleRayCaster marches one fixed grid of rays; IterativeRayCaster starts coarse and
doubles the ray density in each farther distance section. Both stop a ray at the first occupied voxel, which counts as
visible.
Keys, besides the SensorModel ones:
Key |
Type |
Default |
Meaning |
Shipped |
|---|---|---|---|---|
|
int |
|
Image width [px]; must be > 0. |
|
|
int |
|
Image height [px]; must be > 0. |
|
|
double |
|
Focal length [px]; must be > 0. |
|
|
string |
|
Where the view ends: |
|
|
double |
map voxel size |
Step along each ray [m]; must be > 0. |
default |
|
double |
|
Ray spacing at the observation boundary, in voxels; the ray count never exceeds the resolution. Must be > 0, and the resulting grid must have at least 2 rays per axis. |
|
IterativeRayCasterLidar#
Spinning LiDAR model (LidarModel). Keys, besides the SensorModel ones:
Key |
Type |
Default |
Meaning |
|---|---|---|---|
|
int |
|
Horizontal beams; must be > 0. |
|
int |
|
Vertical beams; must be > 0. |
|
double |
|
Horizontal field of view [degrees]; must be > 0. |
|
double |
|
Vertical field of view [degrees]; must be > 0. |
|
double |
map voxel size |
Step along each ray [m]; must be > 0. |
|
double |
|
Ray spacing at |
Path Planners#
PathPlanner Keys#
Read by every path planner except NoOpPathPlanner. GraphTspSearch reads all four and uses none; its
objective is optional (default path_gain) but must still be one of the four names.
Key |
Type |
Default |
Meaning |
Shipped |
|---|---|---|---|---|
|
string |
required ( |
|
|
|
bool |
|
Count a gain anchor shared by several nodes once per path. |
|
|
double |
|
Radius [m] of the non-maximum suppression over node clusters before each search: a cluster closer than this to a better one is a waypoint worth 0. |
default |
|
bool |
|
Reduce the |
default |
GraphNodeWiseBeamSearch, GraphDepthWiseBeamSearch#
Beam search over the graph: each step NBS keeps beam_width paths per end node, DBS
beam_width paths in total. Keys, besides the PathPlanner ones:
Key |
Type |
Default |
Meaning |
Shipped NBS / DBS |
|---|---|---|---|---|
|
int |
|
Maximum path length [edges]; must be ≥ 1. With |
|
|
int |
|
Paths kept per step; must be ≥ 1. |
default / |
|
bool |
|
Also score the rest of the previous path and its one-edge extensions. |
|
GraphShortestPathTreeSearch, GraphTspSearch#
Both route to candidate nodes: the nodes whose gain lies in the top top_node_percentage of the
gain range, plus frontier nodes. SPT scores the shortest path to each. TSP returns an open route from the
robot through all of them that minimizes the summed edge cost (a random neighbor if the solver finds
none), and ignores objective and the cost budget, which the agent enforces during execution. Keys,
besides the PathPlanner ones:
Key |
Type |
Default |
Meaning |
Shipped SPT / TSP |
|---|---|---|---|---|
|
double |
|
Fraction of the gain range, from the top, whose nodes are candidates; |
default / |
|
double |
|
TSP only: shortest-path costs between nodes are multiplied by it before they are truncated to the integers OR-Tools takes; |
default |
TreeBestValue#
Tree planner for RRT and RRTStar: scores the path from the root to every node. No keys beyond the
PathPlanner ones. With a graph generator such as RRAG, planning throws.
NoOpPathPlanner#
Placeholder for layers that select their own step; reads no keys and returns no path.
Backtrackers#
RotateInPlace#
Rotates on the spot.
Key |
Type |
Default |
Meaning |
Shipped (as |
|---|---|---|---|---|
|
double |
π |
Yaw swept by one recovery trajectory [rad], rounded up to whole steps of |
|
|
double |
2π |
Total yaw of the initial sweep at episode start [rad]; |
|
Reverse#
Replays the most recent executed edge backwards.
Key |
Type |
Default |
Meaning |
|---|---|---|---|
|
int |
|
Executed edges remembered; must be > 0. |
RotateReverse#
RotateInPlace, then Reverse (Backtrackers). Reads the
RotateInPlace keys (shipped: see above) plus:
Key |
Type |
Default |
Meaning |
|---|---|---|---|
|
int |
|
Executed edges remembered; must be > 0. |