Conscience Core
Classes | Typedefs | Functions | Variables
conscience_core::ai::algorithms::path_finding Namespace Reference

Classes

struct  child
 
class  Dijkstra
 
struct  Grid
 

Typedefs

using State = tuple< int, int, int >
 
using QElem = std::pair< double, State >
 
typedef int DijkstraNodeId
 
typedef double DijkstraCost
 
typedef vector< vector< child > > DijkstraAdjacency
 

Functions

vector< CscPoint2dOriented * > planHybridAStar (const CscPoint2d &start, double startAngleRads, const CscPoint2d &goal, const vector< bool > &nodesIsAccessible, const Grid &grid, const CscPoint2d &robotDimensions, CscPoint2d **outClosestValidPosition, bool smoothingPathResult, optional< double > distanceForAddIntermediatePoints, double desiredClearanceToObstacleInCm, bool centerInCorridors)
 
void savePathFindingDebugFiles (const fs::path &basePath, const vector< bool > &nodesIsAccessible, const vector< CscPoint2dOriented * > &path, const CscPoint2dOriented &robotPose, const CscPoint2d &targetPose, const Grid &grid, const CscPoint2d &robotDimensions2d)
 
void addLidarScanToGrid (double gridXMin, double gridYMin, double cellSizeX, double cellSizeY, size_t gridWidth, size_t gridHeight, vector< bool > &nodesIsAccessible, const map< double, double > &lidarValues, const CscPoint2dOriented &robotPose)
 

Variables

std::unique_ptr< CscLoggerlogger = CscLogger::getForCategory("Dijkstra Algorithm")
 
const DijkstraCost MAX_WEIGHT = numeric_limits<double>::infinity()
 

Typedef Documentation

◆ DijkstraAdjacency

◆ DijkstraCost

◆ DijkstraNodeId

◆ QElem

using conscience_core::ai::algorithms::path_finding::QElem = typedef std::pair<double, State>

◆ State

using conscience_core::ai::algorithms::path_finding::State = typedef tuple<int, int, int>

Function Documentation

◆ addLidarScanToGrid()

void conscience_core::ai::algorithms::path_finding::addLidarScanToGrid ( double  gridXMin,
double  gridYMin,
double  cellSizeX,
double  cellSizeY,
size_t  gridWidth,
size_t  gridHeight,
vector< bool > &  nodesIsAccessible,
const map< double, double > &  lidarValues,
const CscPoint2dOriented robotPose 
)
Parameters
lidarValuesDistance (in centimeters) by angle from robot center, by angles in degrees from 0 in front of the robot to 360 rotating to the right

◆ planHybridAStar()

vector< CscPoint2dOriented * > conscience_core::ai::algorithms::path_finding::planHybridAStar ( const CscPoint2d start,
double  startAngleRads,
const CscPoint2d goal,
const vector< bool > &  nodesIsAccessible,
const Grid grid,
const CscPoint2d robotDimensions,
CscPoint2d **  outClosestValidPosition,
bool  smoothingPathResult,
optional< double >  distanceForAddIntermediatePoints,
double  desiredClearanceToObstacleInCm,
bool  centerInCorridors 
)

Planner with adaptive stop and empty-path on failure.

Computes Hybrid A* algorithm based on following parameters.

Note
2D reference frame is X to the right, Z to the bottom. Unit is assumed to be centimeters but could be something else
Parameters
startstart position in 2D reference frame
startAngleRadsstart angle - yaw from pi (left) to -pi (right)
goaltarget position in 2D reference frame
nodesIsAccessibleoccupandy values -> each value is a cell of the grid (see grid param). index = i + j * gridColumnCount, true if accessible, false is not accessible
gridgrid characteristics, such as width & height in 2D referential, position in 2D referential (xMin, yMin
robotDimensionsrobot dimensions in 2D reference frame
outClosestValidPositionif not nullptr, pointer will be set to the closest valid position
smoothingPathResultIf true, enables path smoothing to reduce small turns and generate a straighter path while avoiding collisions with obstacles.
distanceForAddIntermediatePointsinsert Intermediate points evry X cm. If empty optional, no add intermediate points.
Returns
computed path, or empty if unreachable with given parameters

◆ savePathFindingDebugFiles()

void conscience_core::ai::algorithms::path_finding::savePathFindingDebugFiles ( const fs::path &  basePath,
const vector< bool > &  nodesIsAccessible,
const vector< CscPoint2dOriented * > &  path,
const CscPoint2dOriented robotPose,
const CscPoint2d targetPose,
const Grid grid,
const CscPoint2d robotDimensions2d 
)

Variable Documentation

◆ logger

static auto conscience_core::bridging::commands::logger = CscLogger::getForCategory("Dijkstra Algorithm")

◆ MAX_WEIGHT

const DijkstraCost conscience_core::ai::algorithms::path_finding::MAX_WEIGHT = numeric_limits<double>::infinity()