ADORe
ADORe is a modular open source software library and toolkit for decision making, planning, control and simulation of automated vehicles
adore::env::BorderBased::IndependentLaneChangeGeometry Class Reference

A class for computation of the geometric information required to perform lane changes. The class name contains the term "independent", as it computes its own smooth baseline function instead of using the smooth baseline function of the lane following geometry. Downside of the independence is an increase computational effort. Upside is an improved projection in cases where target lane steeply separates after the gate. In contrast to the "normal" lc-geometry, which uses a baseline in the center of the source lane, the independent smooth baseline is situated between source and target lane. There is still a minor dependence to the lane following geometry: To compute the lane change geometry, the borders collected by the lane following geometry have to be provided. More...

#include <independentlanechangegeometry.h>

Collaboration diagram for adore::env::BorderBased::IndependentLaneChangeGeometry:
Collaboration graph

Public Types

using function_type_scalar = adore::mad::function_type_scalar
 

Public Member Functions

void setSmoothness (double value)
 
void setMaximumNavCostIncrease (double value)
 
void setLookAhead (double value)
 
void setLookBehind (double value)
 
bool isValid () const
 
double getProgressGateOpen () const
 
double getProgressGateClosed () const
 
bool isNavigationCostFcnAvailable () const
 
function_type_scalargetLeftOffsetFct ()
 
function_type_scalargetRightOffsetFct ()
 
function_type_scalargetOffsetSourceOuterBordersFct ()
 
function_type_scalargetOffsetTargetOuterBordersFct ()
 
 IndependentLaneChangeGeometry (bool lc_direction_left, BorderSet *borderSet, BorderCostMap *borderCostMap)
 
template<typename Iterator >
void update (double position_on_current, Iterator current_lf, Iterator first_lf, Iterator last_lf)
 constructs a lane change geometry if a gate is available More...
 
bool sanityTest ()
 a set of tests making sure that lane change geometry is drivable in real conditions More...
 
double getMaximumTargetLaneWidth ()
 returns the maximum width of the lane change More...
 
bool computeGateInterval ()
 compute gate open and close in the domain of the baseline function More...
 
bool computeGateInterval_v2 ()
 compute gate open and close in the domain of the baseline function. this version uses offset functions instead of lcbs. More...
 
bool computeNavigationCostFunction ()
 projects navigation cost of borders in navigationCostBorders_ unto baseline More...
 
bool collectSeparatingBorders ()
 collects points describing the inner, separating border The separating borders are defined as a sequence of Border objects: If the lane change direction is left, it starts with the lane-following-view left Border objects, otherwise with the right Border Objects. At the end of the gate region, it switches to the target lanes right Border objects for a lane change left and to the left Border objects for a lane change right. More...
 
bool collectTargetOuterBorders ()
 collects points describing the target-side outer border More...
 
bool collectSourceOuterBorders ()
 collects points describing the source-side outer border More...
 
bool collectNavigationCostBorders ()
 collects points describing the navigation cost reference borders More...
 

Public Attributes

BorderSequence separatingBorders_
 
BorderSequence sourceOuterBorders_
 
BorderSequence targetOuterBorders_
 
BorderSequence navigationCostBorders_
 
LaneChangeBorders lcb_
 
Baseline baseline_
 
function_type_scalar offsetSeparatingBorders_
 
function_type_scalar offsetSourceOuterBorders_
 
function_type_scalar offsetTargetOuterBorders_
 
function_type_scalar navigationCost_fct_
 
function_type_scalar speedLimit_fct_
 
bool navigationCost_fcn_available_
 
double maximum_navcost_increase_
 

Private Attributes

BorderSetborderSet_
 
BorderCostMapborderCostMap_
 
bool valid_
 
double progressGateOpen_
 
double progressGateClosed_
 

Detailed Description

A class for computation of the geometric information required to perform lane changes. The class name contains the term "independent", as it computes its own smooth baseline function instead of using the smooth baseline function of the lane following geometry. Downside of the independence is an increase computational effort. Upside is an improved projection in cases where target lane steeply separates after the gate. In contrast to the "normal" lc-geometry, which uses a baseline in the center of the source lane, the independent smooth baseline is situated between source and target lane. There is still a minor dependence to the lane following geometry: To compute the lane change geometry, the borders collected by the lane following geometry have to be provided.

Member Typedef Documentation

◆ function_type_scalar

Constructor & Destructor Documentation

◆ IndependentLaneChangeGeometry()

adore::env::BorderBased::IndependentLaneChangeGeometry::IndependentLaneChangeGeometry ( bool  lc_direction_left,
BorderSet borderSet,
BorderCostMap borderCostMap 
)
inline

Member Function Documentation

◆ collectNavigationCostBorders()

bool adore::env::BorderBased::IndependentLaneChangeGeometry::collectNavigationCostBorders ( )
inline

collects points describing the navigation cost reference borders

Returns
true if successful
Here is the call graph for this function:
Here is the caller graph for this function:

◆ collectSeparatingBorders()

bool adore::env::BorderBased::IndependentLaneChangeGeometry::collectSeparatingBorders ( )
inline

collects points describing the inner, separating border The separating borders are defined as a sequence of Border objects: If the lane change direction is left, it starts with the lane-following-view left Border objects, otherwise with the right Border Objects. At the end of the gate region, it switches to the target lanes right Border objects for a lane change left and to the left Border objects for a lane change right.

Returns
true if successful
Here is the call graph for this function:
Here is the caller graph for this function:

◆ collectSourceOuterBorders()

bool adore::env::BorderBased::IndependentLaneChangeGeometry::collectSourceOuterBorders ( )
inline

collects points describing the source-side outer border

Returns
true if successful
Here is the call graph for this function:
Here is the caller graph for this function:

◆ collectTargetOuterBorders()

bool adore::env::BorderBased::IndependentLaneChangeGeometry::collectTargetOuterBorders ( )
inline

collects points describing the target-side outer border

Returns
true if successful
Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeGateInterval()

bool adore::env::BorderBased::IndependentLaneChangeGeometry::computeGateInterval ( )
inline

compute gate open and close in the domain of the baseline function

Returns
true if successful
Todo:
This method of computation encounters a problem, when lcbs look further behind than baseline and track circles around. First border of lcb and thus gate open may match to the end of baseline.
Here is the call graph for this function:

◆ computeGateInterval_v2()

bool adore::env::BorderBased::IndependentLaneChangeGeometry::computeGateInterval_v2 ( )
inline

compute gate open and close in the domain of the baseline function. this version uses offset functions instead of lcbs.

Returns
true if successful
Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeNavigationCostFunction()

bool adore::env::BorderBased::IndependentLaneChangeGeometry::computeNavigationCostFunction ( )
inline

projects navigation cost of borders in navigationCostBorders_ unto baseline

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

◆ getLeftOffsetFct()

function_type_scalar& adore::env::BorderBased::IndependentLaneChangeGeometry::getLeftOffsetFct ( )
inline
Here is the call graph for this function:

◆ getMaximumTargetLaneWidth()

double adore::env::BorderBased::IndependentLaneChangeGeometry::getMaximumTargetLaneWidth ( )
inline

returns the maximum width of the lane change

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

◆ getOffsetSourceOuterBordersFct()

function_type_scalar& adore::env::BorderBased::IndependentLaneChangeGeometry::getOffsetSourceOuterBordersFct ( )
inline

◆ getOffsetTargetOuterBordersFct()

function_type_scalar& adore::env::BorderBased::IndependentLaneChangeGeometry::getOffsetTargetOuterBordersFct ( )
inline

◆ getProgressGateClosed()

double adore::env::BorderBased::IndependentLaneChangeGeometry::getProgressGateClosed ( ) const
inline
Here is the caller graph for this function:

◆ getProgressGateOpen()

double adore::env::BorderBased::IndependentLaneChangeGeometry::getProgressGateOpen ( ) const
inline
Here is the caller graph for this function:

◆ getRightOffsetFct()

function_type_scalar& adore::env::BorderBased::IndependentLaneChangeGeometry::getRightOffsetFct ( )
inline
Here is the call graph for this function:

◆ isNavigationCostFcnAvailable()

bool adore::env::BorderBased::IndependentLaneChangeGeometry::isNavigationCostFcnAvailable ( ) const
inline

◆ isValid()

bool adore::env::BorderBased::IndependentLaneChangeGeometry::isValid ( ) const
inline
Here is the caller graph for this function:

◆ sanityTest()

bool adore::env::BorderBased::IndependentLaneChangeGeometry::sanityTest ( )
inline

a set of tests making sure that lane change geometry is drivable in real conditions

Returns
true if sane
Here is the call graph for this function:
Here is the caller graph for this function:

◆ setLookAhead()

void adore::env::BorderBased::IndependentLaneChangeGeometry::setLookAhead ( double  value)
inline
Here is the call graph for this function:
Here is the caller graph for this function:

◆ setLookBehind()

void adore::env::BorderBased::IndependentLaneChangeGeometry::setLookBehind ( double  value)
inline
Here is the call graph for this function:
Here is the caller graph for this function:

◆ setMaximumNavCostIncrease()

void adore::env::BorderBased::IndependentLaneChangeGeometry::setMaximumNavCostIncrease ( double  value)
inline
Here is the caller graph for this function:

◆ setSmoothness()

void adore::env::BorderBased::IndependentLaneChangeGeometry::setSmoothness ( double  value)
inline
Here is the call graph for this function:
Here is the caller graph for this function:

◆ update()

template<typename Iterator >
void adore::env::BorderBased::IndependentLaneChangeGeometry::update ( double  position_on_current,
Iterator  current_lf,
Iterator  first_lf,
Iterator  last_lf 
)
inline

constructs a lane change geometry if a gate is available

Parameters
Iteratoriterator for std::vector<Border*>, std::list<Border*>, etc.
position_on_currentlocation of vehicle on current border, used for lookahead and lookbehind measurement
current_lfiterator pointing to current border in lane following borders
first_lfstart of the lane following borders
last_lfend of the lane following borders (last valid entry)
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ baseline_

Baseline adore::env::BorderBased::IndependentLaneChangeGeometry::baseline_

◆ borderCostMap_

BorderCostMap* adore::env::BorderBased::IndependentLaneChangeGeometry::borderCostMap_
private

◆ borderSet_

BorderSet* adore::env::BorderBased::IndependentLaneChangeGeometry::borderSet_
private

◆ lcb_

LaneChangeBorders adore::env::BorderBased::IndependentLaneChangeGeometry::lcb_

◆ maximum_navcost_increase_

double adore::env::BorderBased::IndependentLaneChangeGeometry::maximum_navcost_increase_

◆ navigationCost_fcn_available_

bool adore::env::BorderBased::IndependentLaneChangeGeometry::navigationCost_fcn_available_

◆ navigationCost_fct_

function_type_scalar adore::env::BorderBased::IndependentLaneChangeGeometry::navigationCost_fct_

◆ navigationCostBorders_

BorderSequence adore::env::BorderBased::IndependentLaneChangeGeometry::navigationCostBorders_

lcl: source-right, gate-start,target-right

◆ offsetSeparatingBorders_

function_type_scalar adore::env::BorderBased::IndependentLaneChangeGeometry::offsetSeparatingBorders_

◆ offsetSourceOuterBorders_

function_type_scalar adore::env::BorderBased::IndependentLaneChangeGeometry::offsetSourceOuterBorders_

◆ offsetTargetOuterBorders_

function_type_scalar adore::env::BorderBased::IndependentLaneChangeGeometry::offsetTargetOuterBorders_

◆ progressGateClosed_

double adore::env::BorderBased::IndependentLaneChangeGeometry::progressGateClosed_
private

◆ progressGateOpen_

double adore::env::BorderBased::IndependentLaneChangeGeometry::progressGateOpen_
private

◆ separatingBorders_

BorderSequence adore::env::BorderBased::IndependentLaneChangeGeometry::separatingBorders_

lcl: source-left, gate-end, target-right

◆ sourceOuterBorders_

BorderSequence adore::env::BorderBased::IndependentLaneChangeGeometry::sourceOuterBorders_

lcl: source-right,gate-end, target-right

◆ speedLimit_fct_

function_type_scalar adore::env::BorderBased::IndependentLaneChangeGeometry::speedLimit_fct_

◆ targetOuterBorders_

BorderSequence adore::env::BorderBased::IndependentLaneChangeGeometry::targetOuterBorders_

lcl: source-left, gate-start,target-left

◆ valid_

bool adore::env::BorderBased::IndependentLaneChangeGeometry::valid_
private

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