OrientationOptimizerParams Struct Reference

#include <armarx/navigation/global_planning/optimization/OrientationOptimizer.h>

Public Attributes

double degenerateSegmentFraction {0.1}
 How short a segment has to be, relative to the path's own spacing, before the turn-rate check stops asking it anything.
 
int iterations {5}
 
double maxTurnRate {0.8 / 150.0}
 Most the heading may turn per millimetre travelled [rad/mm].
 
float movementDirWeightEnd {0.5F}
 
float movementDirWeightStart {0.0F}
 
RotationDirection predefinedRotationDirection {RotationDirection::Any}
 
float priorEndWeight {1.F}
 
float priorStartWeight {1.F}
 
float smoothnessWeight {0.4F}
 
float smoothnessWeightStartGoal {1.F}
 
float startGoalDistanceThreshold {500}
 

Detailed Description

Definition at line 38 of file OrientationOptimizer.h.

Member Data Documentation

◆ degenerateSegmentFraction

double degenerateSegmentFraction {0.1}

How short a segment has to be, relative to the path's own spacing, before the turn-rate check stops asking it anything.

A segment far shorter than its neighbours carries no reliable direction: the heading across it is atan2 of numerical noise, and dyaw/ds on it is that noise divided by nothing. It is a position defect, and spfa::smoothing::GeometryLimits already owns it – findGeometryViolations reports any segment under minSegmentLength (1 mm).

The floor here is deliberately relative where that one is absolute, and an absolute gate would be worse than useless: on a path whose spacing is legitimately around a millimetre it excludes every segment, so the turn rate comes back as zero, the smoothing loop never runs and orientation-unturnable can no longer fire at all. The guard would go quiet exactly where it is needed. TrajectoryFollowingController hit the same wall from the other side and lowered its own gate to 1e-3 mm for it. Only the ratio to the path's own scale separates a defect from a small path, so do not unify the three floors in this repo – they answer different questions.

A tenth, rather than something larger: the smoothing upstream can legitimately leave a 40 mm segment among 200 mm ones, and excluding that would under-report a real turn rate. The splice artefacts this exists for are three to four orders of magnitude below their neighbours, so the margin is ample either way.

Definition at line 97 of file OrientationOptimizer.h.

◆ iterations

int iterations {5}

Definition at line 40 of file OrientationOptimizer.h.

◆ maxTurnRate

double maxTurnRate {0.8 / 150.0}

Most the heading may turn per millimetre travelled [rad/mm].

The rotation a profile needs is fixed by its start and goal; how much path it is spread over is this optimizer's choice, and that choice decides whether the result can be executed at all – the yaw rate asked of the base is ‘yaw’(s) * v`.

Nothing in the cost function is expressed per unit distance. The movement-direction prior pulls every interior heading onto the path tangent and only the smoothness term resists, so the profile holds the tangent as long as it can and then swings the whole rotation across a narrow band – the same band whether the path is one metre or six. On ARMAR-7 that put a 116 deg rotation into 300 mm of a 3212 mm path and asked for 3.9 rad/s against a 0.8 rad/s limit.

The default is what a base holding 0.8 rad/s can turn while still making the 150 mm/s the profile is floored at. Deliberately not an aron parameter: it is a property of the drive, and every shipped config would have to grow a member to add it.

Definition at line 72 of file OrientationOptimizer.h.

◆ movementDirWeightEnd

float movementDirWeightEnd {0.5F}

Definition at line 42 of file OrientationOptimizer.h.

◆ movementDirWeightStart

float movementDirWeightStart {0.0F}

Definition at line 41 of file OrientationOptimizer.h.

◆ predefinedRotationDirection

RotationDirection predefinedRotationDirection {RotationDirection::Any}

Definition at line 52 of file OrientationOptimizer.h.

◆ priorEndWeight

float priorEndWeight {1.F}

Definition at line 48 of file OrientationOptimizer.h.

◆ priorStartWeight

float priorStartWeight {1.F}

Definition at line 47 of file OrientationOptimizer.h.

◆ smoothnessWeight

float smoothnessWeight {0.4F}

Definition at line 44 of file OrientationOptimizer.h.

◆ smoothnessWeightStartGoal

float smoothnessWeightStartGoal {1.F}

Definition at line 45 of file OrientationOptimizer.h.

◆ startGoalDistanceThreshold

float startGoalDistanceThreshold {500}

Definition at line 50 of file OrientationOptimizer.h.


The documentation for this struct was generated from the following file: