armarx::navigation::evaluation Namespace Reference

This file is part of ArmarX. More...

Classes

struct  ClutterParameters
 
struct  CorridorParameters
 
struct  NamedPose
 A pose from the room's navigation graph, kept with its name so a failing request can be reported as something a reader recognises rather than a pair of coordinates. More...
 
struct  Record
 What one planning request produced. More...
 
struct  Request
 
struct  RoomScene
 The room as the planner sees it, assembled from PriorKnowledgeData. More...
 
struct  SamplingParameters
 
struct  SerpentineParameters
 

Enumerations

enum class  RequestKind { Uniform , NearObstacle , Location , CorridorExit }
 

Functions

int addClutter (analysis::Scene &scene, const ClutterParameters &parameters, std::mt19937 &rng)
 Scatter boxes through the room to create tight passages.
 
RoomScene buildRoomScene (const std::filesystem::path &priorKnowledge, const std::string &room, const std::vector< std::string > &sceneFiles, float wallThickness=200.F)
 Build the scene for a room from PriorKnowledgeData.
 
bool contains (const algorithms::SceneBounds &bounds, const Eigen::Vector2f &point)
 Whether a point lies within the bounds, edges included.
 
algorithms::SceneBounds makeCorridor (analysis::Scene &scene, const CorridorParameters &parameters)
 A dead-end corridor opening into the rest of the room.
 
float makeSerpentine (analysis::Scene &scene, const SerpentineParameters &parameters, float robotRadius)
 Replace the room's contents with transverse walls whose openings alternate sides.
 
Record measure (const Request &request, const std::optional< global_planning::GlobalPlannerResult > &result, const algorithms::Costmap &costmap, float plannedSeconds)
 Measure a planning result against the costmap.
 
std::vector< Request > sampleRequests (RequestKind kind, int count, const algorithms::Costmap &costmap, const RoomScene &room, const SamplingParameters &parameters, std::mt19937 &rng)
 Draw count requests of the given kind.
 
std::string summarize (const std::vector< Record > &records, float checkerClearance)
 Aggregate over a sweep, grouped by request kind.
 
std::string toString (const RequestKind kind)
 
void writeRecord (std::ostream &out, const Record &record)
 One JSON object per line, so a sweep streams to disk and can be diffed across revisions.
 

Variables

constexpr std::size_t roomWallCount = 4
 Number of wall boxes buildRoomScene puts at the front of the obstacle list.
 

Detailed Description

This file is part of ArmarX.

ArmarX is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.

ArmarX is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Enumeration Type Documentation

◆ RequestKind

enum class RequestKind
strong
Enumerator
Uniform 

Start and goal drawn uniformly from the cells in open space, i.e.

whose clearance is at least SamplingParameters::nearObstacleMaxClearance – the complement of NearObstacle, not all collision-free cells.

NearObstacle 

Start and goal drawn from cells whose clearance sits just above zero, so the poses hug obstacle edges.

This is where the smoother is actually under load.

Location 

Pairs of poses from the room's navigation graph – the requests the robot really receives here.

CorridorExit 

Start inside a narrow corridor, goal out in the open.

Directional on purpose. Every other kind draws both endpoints from the same population, which never produces the case where the robot is boxed in at the start and free at the end – and that asymmetry is the point, because the optimizer holds the start fixed. A start deep in a corridor constrains the first segments in a way no amount of optimizing downstream can relieve.

Definition at line 31 of file Sampling.h.

Function Documentation

◆ addClutter()

int addClutter ( analysis::Scene & scene,
const ClutterParameters & parameters,
std::mt19937 & rng )

Scatter boxes through the room to create tight passages.

Seeded from the caller's generator, so a cluttered sweep is as reproducible as a plain one. Returns the number actually placed, which falls short of count once the room saturates.

Definition at line 304 of file RoomScene.cpp.

+ Here is the call graph for this function:

◆ buildRoomScene()

RoomScene buildRoomScene ( const std::filesystem::path & priorKnowledge,
const std::string & room,
const std::vector< std::string > & sceneFiles,
float wallThickness = 200.F )

Build the scene for a room from PriorKnowledgeData.

Each object's oriented bounding box is transformed by the object's pose and projected to the ground plane. Room walls come from the room polygon's axis-aligned bounds.

Parameters
priorKnowledgeRoot of the PriorKnowledgeData data/PriorKnowledgeData directory.
roomRoom path within the scene collections, e.g. 50_19/R007.
sceneFilesScene descriptions to merge, e.g. static_scene, mobile_kitchen.
wallThicknessThickness [mm] of the boxes standing in for the room walls.

Definition at line 106 of file RoomScene.cpp.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ contains()

bool contains ( const algorithms::SceneBounds & bounds,
const Eigen::Vector2f & point )

Whether a point lies within the bounds, edges included.

Definition at line 99 of file RoomScene.cpp.

+ Here is the caller graph for this function:

◆ makeCorridor()

algorithms::SceneBounds makeCorridor ( analysis::Scene & scene,
const CorridorParameters & parameters )

A dead-end corridor opening into the rest of the room.

Models the case the serpentine does not: the robot starts inside tight space and has to get out. The difference matters because the optimizer holds the start fixed, so a start deep in a corridor constrains the path in a way a start in open space never does – the first segments have one free endpoint each and no room either side.

Removes the furniture, keeping only the room walls.

Returns
The region the corridor occupies, so requests can be drawn as exits from it.

Definition at line 386 of file RoomScene.cpp.

◆ makeSerpentine()

float makeSerpentine ( analysis::Scene & scene,
const SerpentineParameters & parameters,
float robotRadius )

Replace the room's contents with transverse walls whose openings alternate sides.

Forces a serpentine path: every wall is a tight passage followed by a reversal, so a single request exercises threading and turning repeatedly. Furniture is removed rather than added to, so the passage width is the only thing constraining the path and the scene stays interpretable.

Returns
The narrowest clearance [mm] the scene offers a robot of the given radius, so the caller can refuse to run a sweep that is unwinnable by construction.

Definition at line 421 of file RoomScene.cpp.

◆ measure()

Record measure ( const Request & request,
const std::optional< global_planning::GlobalPlannerResult > & result,
const algorithms::Costmap & costmap,
const float plannedSeconds )

Measure a planning result against the costmap.

Definition at line 137 of file Metrics.cpp.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sampleRequests()

std::vector< Request > sampleRequests ( RequestKind kind,
int count,
const algorithms::Costmap & costmap,
const RoomScene & room,
const SamplingParameters & parameters,
std::mt19937 & rng )

Draw count requests of the given kind.

Deterministic for a given seed, so a sweep can be repeated across revisions and the per-request records compared directly.

Definition at line 88 of file Sampling.cpp.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ summarize()

std::string summarize ( const std::vector< Record > & records,
float checkerClearance )

Aggregate over a sweep, grouped by request kind.

Parameters
checkerClearanceThe clearance [mm] the trajectory checker enforces, used to separate requests the smoother could never have satisfied from ones it failed.

Definition at line 294 of file Metrics.cpp.

+ Here is the call graph for this function:

◆ toString()

std::string toString ( const RequestKind kind)

Definition at line 70 of file Sampling.cpp.

+ Here is the caller graph for this function:

◆ writeRecord()

void writeRecord ( std::ostream & out,
const Record & record )

One JSON object per line, so a sweep streams to disk and can be diffed across revisions.

Definition at line 245 of file Metrics.cpp.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ roomWallCount

std::size_t roomWallCount = 4
inlineconstexpr

Number of wall boxes buildRoomScene puts at the front of the obstacle list.

Definition at line 66 of file RoomScene.h.