Skip to content

Code Index

Lukas Schmid edited this page Apr 21, 2021 · 7 revisions

This index contains a list of all available and default modules. A short description and mention of particular properties/parameters should render an overview and allow for convenient creation of new planners. For implementation details and full list of parameters see source code.

Modules by Type

ROS nodes

Trajectory Generators

Module Description
Uniform Expand selected segments with local motion primitives by uniformly sampling the control space, i.e. yaw-rate, ascent/descent angles.
RandomLinear Expand selected segments by sampling linear trajectories. Can sample yaws, planar or spherical.
MavTrajectoryGeneration Utilizes the mav_trajectory_generation library to create smooth polynomial trajectories. Currently mostly proof of concept, samples random target points as goal selection.
RRT Extend the trajectory tree by randomly sampling the allowed space and connecting to the closest existing segment. Can crop partially infeasible trajectories to encourage exploration of boundaries. Uses nanoflann for knn search.
RRTStar Based on the RRT generator. Furthermore allows attaching new segments to nearby highest value segments instead of closest ones, rewiring of existing trajectories to increase their value and rewiring of children of the root segment when they are not selected to keep their respective branches alive.
FeasibleRRT, FeasibleRRTStar Implementations of the RRT and RRTStar generator, that use the mav_trajectory_generation library to create trajectories with smooth derivatives.

Segment Selectors

Module Description
GreedySelector Selects the segment with the highest value in the trajectory tree. Can discriminate between the full tree and leaves only.
RandomWeighted Select segments at random, weighted with their values. The probability of a segment being selected is computed as P(x) = 1/Z value(x)^factor . Can add extra probability for leaves, uniform probabilities to guarantee non-zero probability for all segments and exclude already expanded segments.

Generator Updaters

Module Description
GeneratorUpdateNothing Default generator updater. Does not perform further actions.
GeneratorResetTree Discard all current segments and start building the trajectory tree from scratch.
RecheckCollision Remove all trajectory segments that are no longer collision free.

Trajectory Evaluators

Module Description
NaiveEvaluator Based on the SimulatedSensorEvaluator. Counts the number of unknown voxels visible by a simulated sensor model.
FrontierEvaluator Based on the SimulatedSensorEvaluator. Counts the number of frontier voxels (unknown voxels which are next to occupied voxels) visible by a simulated sensor model.
VoxelTypeEvaluator Based on the SimulatedSensorEvaluator. Assign custom gains for all voxels visible by a simulated sensor model. Can discriminate between occupied, free or unknown voxels, within or outside the target bounding volume.
SimpleYawPlanningEvaluator Samples different orientations by assigning different constant yaws to each trajectory segment. Then uses another evaluator to determine the best orientation and keep it.
VoxelWeightEvaluator Based on the SimulatedSensorEvaluator. Utilizes the TSDF voxel weights to estimate the impact a sensor view has on already existing surfaces, combined with a gain for unknown free-space or frontier voxels.

Cost Computers

Module Description
SegmentTime Assigns the execution time of a segment to its cost.
SegmentLength Use the length of each segment as its cost.

Value Computers

Module Description
LinearValue Compute the value of a segment as linear combination of its gain and cost. Value = a * Gain - b * Cost.
ExponentialDiscount Discount the gain with an exponential term of the form Value = Gain * exp(-Cost/scale). Can accumulate all gains and costs or only consider a single segment.
AccumulateValue Accumulate value by adding the value to the value of the parent node. Uses another value computer to evaluate the single segments.
RelativeGain Computes the value as the fraction of gain and cost Value = Gain / Cost. Can accumulate all gains and costs or only consider a single segment.

Next Selectors

Module Description
ImmediateBest Select the child of the root that has the highest value of all children of the root.
SubsequentBest Select the child of the root that has the overall highest value segment in its sub-tree.

Evaluator Updaters

Module Description
UpdateNothing Default evaluator updater. Does not perform any further actions.
ResetTree Clear all segments from the trajectory tree and start from scratch.
UpdateAll Recompute gain and/or cost and/or value for all segments from scratch. All combinations of the three are possible.
PruneByValue Remove all segments from the tree that don't match the minimum value. The minimum can be specified in absolute or relative terms. Can check segments individually or also consider their sub-tree.
UpdatePeriodic Only periodically call a follow-up updater to update the tree. Periodicity can be specified in number of calls or in wait time between updates.
SimulatedSensorUpdater Updater specific for simulated sensor evaluators. Recomputes the gain of the visible voxels (as they were when the gain was first computed) without ray casting again. Concretely, for the NaiveEvaluator all still unknown voxels are counted, for the Frontier unknown voxels currently next to occupied voxels are counted and for the VoxelType all voxels are reevaluated.
YawPlanningUpdateAdapter Updater specific for yaw planning evaluators. Allows a follow-up updater to update the gain stored in the currently best orientation. Does not change that orientation.
YawPlanningUpdater Updater specific for yaw planning evaluators. Uses a follow-up updater to update all orientations and select the new best one.

Sensor Models

Module Description
SimpleRayCaster Camera model, where the resolution is down-sampled to 1 voxel size at maximum range. Then a ray is cast through every pixel to determine the visible voxels. Timed at 98 +/- 30 ms for a 5m range camera and 10cm voxel size.
IterativeRayCaster Like the simple ray caster, except that rays start being cast at the range where the distance between two rays reaches a voxel size. This should reduce the number of redundant rays at short distances. Timed at 42 +/- 20 ms for a 5m range camera and 10cm voxel size.

Back Trackers

Module Description
RotateInPlace When no feasible trajectories can be found, start rotating in place until a feasible trajectory is found.
RotateReverse Like RoateInPlace, except that executed trajectories are stored on a stack. After a fixed number of rotations, if still no feasible trajectory is found the last executed segment is reversed.
FeasibleRotateReverse Like RotateReverse, but uses the mav_trajectory_generation library to generate trajectories with smooth derivatives.

Planner Node

The planner node runs the main loop and houses the other modules (todo: specify more, img)

Planner Execution Mode

The planner node has 5 parameters, which can be used to set the behavior of the main loop (expansion/execution policy):

  • max_new_segments: Limit the number of segments that are expanded between execution steps to this number (e.g. to keep the tree small for reduced update costs).
  • min_new_segments: Continue expanding until this amount of segments is added to the tree .
  • max_new_tries: Limit the number of expansion tries to guarantee the planner continues at some point.
  • min_new_tries: This minimum amount of expansions must be attempted before continuing with segment execution.
  • min_new_value: Continue expanding until there is at least one segment in the tree that exceeds this minimum value.

The planner will execute the next segment once the end point is reached and all additional conditions are satisfied. Parameters that are set to 0.0 will be ignored. Default for all parameters is 0.0.

The hierarchy of the conditions is as follows:

  1. max_new_tries: After this number of expansion tries, execution of the next segment is forced regardless of any other conditions.
  2. min_new_segments, min_new_tries, min_new_value: Execution only continues when all these conditions are met.
  3. max_new_segments: If the maximum number of new segments is found and the min_new_value condition is met, no further segments will be expanded (i.e. the planner goes to sleep until the current segment is finished).

Whenever a condition is set, setting max_new_tries is recommended to prevent the planner from getting stuck when no new segments can be found.

Experiment Nodes

eval_data_node

This node manages correct simulation setup and records raw data into a newly generated folder.

eval_plotting_node

This node manages evaluation of the raw data created by the eval_data_node.

eval_voxblox_node

This node is a c++ encapsulation for evaluation of the saved voxblox maps and is called by the eval_plotting_node during evaluation.

gps_odometry_simulator

Produces a random walk pose offset to model state estimation uncertainty.