Buran Motion Planning Framework
Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | List of all members
bmpf::GridPathFinder Class Reference

Базовый класс для всех планировщиков на сетке Базовый класс для всех планировщиков на сетке. Суть планирования на сетке заключается в том, что каждой вещественной координате состояния мы ставим в соответствие целочисленную координату из заданного диапазона. В данном планировщике предполагается, что каждая координата состояния разбивается на равное число точек (_gridSize) More...

#include <grid_path_finder.h>

Inheritance diagram for bmpf::GridPathFinder:
Inheritance graph
[legend]
Collaboration diagram for bmpf::GridPathFinder:
Collaboration graph
[legend]

Public Member Functions

 GridPathFinder (const std::shared_ptr< bmpf::Scene > &scene, bool showTrace, int gridSize, int threadCnt=1)
 
std::vector< double > coordsToState (std::vector< int > &coords) const
 
std::vector< double > coordsToState (std::vector< int > coords, unsigned long robotNum)
 
bool checkCoords (std::vector< int > coords)
 
std::vector< std::vector< double > > findGridPath (std::vector< int > &startCoords, std::vector< int > &endCoords, int &errorCode)
 
bool checkCoords (const std::vector< int > &coords, unsigned int robotNum)
 
virtual std::vector< int > stateToCoords (std::vector< double > state)
 
void prepare (const std::vector< double > &startState, const std::vector< double > &endState) override
 
virtual void prepare (std::vector< int > &startCoords, std::vector< int > &endCoords)
 
std::vector< std::vector< double > > checkTask (const std::vector< double > &startState, const std::vector< double > &endState, double opacity)
 проверка задания проверка задания, возвращает пустой вектор, если маршрут можно строить штатным образом, в противном случае сохраняет в _buildedPath готовый маршрут (из стартового и конечного положений) и возвращает его More...
 
const std::vector< std::vector< int > > & getBuildedGridPath () const
 
const std::vector< double > & getStartStateFromCoords () const
 
const std::vector< double > & getEndStateFromCoords () const
 
const std::vector< double > & getGridSteps () const
 
const double & getMaxDist () const
 
const std::vector< std::vector< double > > & getGroupedGridSteps () const
 
- Public Member Functions inherited from bmpf::PathFinder
 PathFinder (const std::shared_ptr< bmpf::Scene > &scene, bool showTrace, int threadCnt=1)
 
std::vector< std::vector< double > > findPath (const std::vector< double > &startState, const std::vector< double > &endState, int &errorCode)
 
virtual bool findTick (std::vector< double > &state)=0
 
virtual void buildPath ()=0
 
void updateCollider ()
 
virtual void paint (const std::vector< double > &state, bool onlyRobot)
 
bool divideCheckPathSegment (const std::vector< double > &prevPoint, std::vector< double > nextPoint, int checkCnt)
 
int divideCheckPath (std::vector< std::vector< double >> path, int checkCnt)
 
bool simpleCheckPath (const std::vector< std::vector< double >> &path, double maxDist)
 
bool checkState (const std::vector< double > &state)
 проверяет доступность состояния Проверяет доступность углов, после проверяет состояние на коллизии More...
 
std::vector< double > getRandomState ()
 
std::vector< double > getPathStateFromTM (double tm)
 получить состояние по времени две соседние точки считаются разделёнными единичным временным интервалом. More...
 
bool checkCollision (const std::vector< double > &state)
 
void addObjectToScene (std::string path)
 
void deleteObjectFromScene (long robotNum)
 
double getPathLength () const
 
bool isReady () const
 
bool getThreadCnt () const
 
void setReady (bool ready)
 
std::vector< double > & getStartState ()
 
std::vector< double > & getEndState ()
 
int getErrorCode () const
 
const std::vector< std::vector< double > > & getBuildedPath () const
 
const std::shared_ptr< bmpf::Scene > & getScene () const
 
const std::shared_ptr< bmpf::Collider > & getCollider () const
 
double getCalculationTimeInSeconds () const
 

Static Public Attributes

static const int ERROR_CAN_NOT_FIND_FREE_START_POINT = 2
 
static const int ERROR_CAN_NOT_FIND_FREE_END_POINT = 3
 
- Static Public Attributes inherited from bmpf::PathFinder
static const int NO_ERROR = -1
 
static const int ERROR_CAN_NOT_FIND_PATH = 1
 

Protected Member Functions

virtual std::vector< int > _findFreePoint (std::vector< int > coords, unsigned long pos, unsigned long maxPos, const std::vector< double > &state)
 поиск координат соседней свободной точки Это - рекуррентный метод, он пробует прибавить -1, 0 и 1 к каждой из координат из интервала [pos, maxPos] включительно More...
 

Protected Attributes

std::vector< double > _gridSteps
 
std::vector< std::vector< double > > _groupedGridSteps
 
int _gridSize
 
std::vector< int > _startCoords
 
std::vector< int > _endCoords
 
std::vector< double > _startStateFromCoords
 
std::vector< double > _endStateFromCoords
 
double _maxDist
 
bool _coordsUsed = false
 
std::vector< std::vector< int > > _buildedGridPath
 
- Protected Attributes inherited from bmpf::PathFinder
double _pathLength {}
 
int _errorCode
 
std::shared_ptr< bmpf::Scene_scene
 
bool _showTrace
 
std::shared_ptr< bmpf::Collider_collider
 
bool _ready
 
bool _threadCnt
 
std::vector< double > _endState
 
std::vector< double > _startState
 
std::vector< std::vector< double > > _buildedPath
 
std::chrono::time_point< std::chrono::system_clock > _startTime
 
double _calculationTimeInSeconds
 

Additional Inherited Members

- Static Public Member Functions inherited from bmpf::PathFinder
static void infoPath (const std::vector< std::vector< double >> &path)
 
static Json::Value getJSONPath (std::vector< std::vector< double >> path)
 
static std::vector< std::vector< double > > getPathFromJSON (const Json::Value &json)
 
static void savePathToFile (std::vector< std::vector< double >> path, const std::string &filename)
 
static std::vector< std::vector< double > > loadPathFromFile (const std::string &filename, std::string &scenePath)
 
static std::vector< std::vector< std::vector< double > > > loadPathsFromFile (const std::string &filename, std::string &scenePath)
 
static std::vector< std::vector< double > > splitPath (std::vector< std::vector< double >> path, unsigned long partCnt)
 
static std::vector< double > getPathStateFromTM (std::vector< std::vector< double >> &path, double tm)
 получить состояние по времени две соседние точки считаются разделёнными единичным временным интервалом. More...
 
static double calculatePathLength (std::vector< std::vector< double >> path)
 

Detailed Description

Базовый класс для всех планировщиков на сетке Базовый класс для всех планировщиков на сетке. Суть планирования на сетке заключается в том, что каждой вещественной координате состояния мы ставим в соответствие целочисленную координату из заданного диапазона. В данном планировщике предполагается, что каждая координата состояния разбивается на равное число точек (_gridSize)

Получается, что в данном планировщике одно и тоже пространство конфигураций описывается двумя пространствами: вещественным пространством состояний и целочисленным пространством координат. При этом размерности пространств совпадают.

Методы, реализованные в этом классе, позволяют переходить от вещественного пространства к целочисленному и наоброт.

Логика работы планировщика следующая: 1) подготовка к тактам поиска пути 2) выполнение тактов поиска пути с попутным заполнением тех или иных структур 3) если путь найден из этих структур собирается путь и сохраняется в переменную _buildedPath

Constructor & Destructor Documentation

◆ GridPathFinder()

GridPathFinder::GridPathFinder ( const std::shared_ptr< bmpf::Scene > &  scene,
bool  showTrace,
int  gridSize,
int  threadCnt = 1 
)

конструктор

Parameters
sceneсцена
showTraceфлаг, нужно ли выводить информацию во время поиска пути
gridSizeразмер сетки планирования
threadCntколичество потоков планировщика

Member Function Documentation

◆ _findFreePoint()

std::vector< int > GridPathFinder::_findFreePoint ( std::vector< int >  coords,
unsigned long  pos,
unsigned long  maxPos,
const std::vector< double > &  state 
)
protectedvirtual

поиск координат соседней свободной точки Это - рекуррентный метод, он пробует прибавить -1, 0 и 1 к каждой из координат из интервала [pos, maxPos] включительно

Parameters
coordsкоординаты исходной точки
posначало интервала перебора
maxPosконец интервала перебора
stateсостояние
Returns
пустой вектор, если точку не удалось найти, в противном случае - вектор координат

◆ checkCoords() [1/2]

bool GridPathFinder::checkCoords ( const std::vector< int > &  coords,
unsigned int  robotNum 
)

Проверка доступности целочисленных координат для робота с индексом robotNum

Parameters
coordsкоординаты
robotNumномер робота
Returns
флаг, доступны ли целочисленных координаты

◆ checkCoords() [2/2]

bool GridPathFinder::checkCoords ( std::vector< int >  coords)

Проверка доступности целочисленных координат для всей сцены

Parameters
coordsкоординаты
Returns
флаг, доступны ли целочисленных координаты

◆ checkTask()

std::vector< std::vector< double > > GridPathFinder::checkTask ( const std::vector< double > &  startState,
const std::vector< double > &  endState,
double  opacity 
)

проверка задания проверка задания, возвращает пустой вектор, если маршрут можно строить штатным образом, в противном случае сохраняет в _buildedPath готовый маршрут (из стартового и конечного положений) и возвращает его

Parameters
startStateначальное состояние
endStateконечное состояние
opacityточность проверки
Returns
пустой вектор, если маршрут можно строить, вектор из стартового и конечного состояний, если нельзя

◆ coordsToState() [1/2]

std::vector< double > GridPathFinder::coordsToState ( std::vector< int > &  coords) const

преобразование целочисленных координат в вещественное состояние

Parameters
coordsкоординаты
Returns
состояние

◆ coordsToState() [2/2]

std::vector< double > GridPathFinder::coordsToState ( std::vector< int >  coords,
unsigned long  robotNum 
)

преобразование целочисленных координат в вещественное состояние

Parameters
coordsкоординаты
robotNumномер робота, координаты нужно преобразовать
Returns
состояние

◆ findGridPath()

std::vector< std::vector< double > > GridPathFinder::findGridPath ( std::vector< int > &  startCoords,
std::vector< int > &  endCoords,
int &  errorCode 
)

поиск пути из состояния startCoords в состояние endCoords,

Parameters
startCoordsначальные координаты
endCoordsконечные координаты
errorCodeв эту переменную записывается код ошибки
Returns
путь по сетке планирования

◆ getBuildedGridPath()

const std::vector<std::vector<int> >& bmpf::GridPathFinder::getBuildedGridPath ( ) const
inline

получить построенный по координатам сетки планирования путь

Returns
построенный по координатам сетки планирования путь

◆ getEndStateFromCoords()

const std::vector<double>& bmpf::GridPathFinder::getEndStateFromCoords ( ) const
inline

получить состояние сцены, соответствующее конечным координатам планирования на сетке

Returns
состояние сцены, соответствующее конечным координатам планирования на сетке

◆ getGridSteps()

const std::vector<double>& bmpf::GridPathFinder::getGridSteps ( ) const
inline

получить цену шага сетки вдоль каждой из соответствующих координат

Returns
цена шага сетки вдоль каждой из соответствующих координат

◆ getGroupedGridSteps()

const std::vector<std::vector<double> >& bmpf::GridPathFinder::getGroupedGridSteps ( ) const
inline

получить сгруппированные по роботам цены шага сетки вдоль каждой из соответствующих координат

Returns
ь сгруппированные по роботам цены шага сетки

◆ getMaxDist()

const double& bmpf::GridPathFinder::getMaxDist ( ) const
inline

получить максимальное расстояние между состояниями, соответствующими соседним узлам сетки планирования

Returns
максимальное расстояние между состояниями, соответствующими соседним узлам сетки планирования

◆ getStartStateFromCoords()

const std::vector<double>& bmpf::GridPathFinder::getStartStateFromCoords ( ) const
inline

получить состояние сцены, соответствующее стартовым координатам планирования на сетке

Returns
состояние сцены, соответствующее стартовым координатам планирования на сетке

◆ prepare() [1/2]

void GridPathFinder::prepare ( const std::vector< double > &  startState,
const std::vector< double > &  endState 
)
overridevirtual

подготовка к планированию

Parameters
startStateначальное состояние
endStateконечное состояние

Implements bmpf::PathFinder.

Reimplemented in bmpf::NodeGridPathFinder.

◆ prepare() [2/2]

void GridPathFinder::prepare ( std::vector< int > &  startCoords,
std::vector< int > &  endCoords 
)
virtual

построить путь, построенный путь должен быть сохранён в переменную _buildedPath

Parameters
startCoordsначальные координаты
endCoordsконечные координаты

Reimplemented in bmpf::NodeGridPathFinder.

◆ stateToCoords()

std::vector< int > GridPathFinder::stateToCoords ( std::vector< double >  state)
virtual

преобразует состояние в координаты на сетке планирования, если свободных координат не найдено, возвращает пустой список {}

Parameters
stateсостояние
Returns
координаты

Member Data Documentation

◆ _buildedGridPath

std::vector<std::vector<int> > bmpf::GridPathFinder::_buildedGridPath
protected

построенный путь (по координатам сетки планирования) для удобства сопоставления с путём в конфигурационном пространстве первая и последняя точки маршрута дублируются

◆ _coordsUsed

bool bmpf::GridPathFinder::_coordsUsed = false
protected

флаг, выполнялось ли последнее планирование по координатам

◆ _endCoords

std::vector<int> bmpf::GridPathFinder::_endCoords
protected

конечные координаты планирования на сетке

◆ _endStateFromCoords

std::vector<double> bmpf::GridPathFinder::_endStateFromCoords
protected

состояние сцены, соответствующее конечным координатам планирования на сетке

◆ _gridSize

int bmpf::GridPathFinder::_gridSize
protected

количество ячеек сетки планирования вдоль каждой из координат

◆ _gridSteps

std::vector<double> bmpf::GridPathFinder::_gridSteps
protected

цена шага сетки вдоль каждой из соответствующих координат

◆ _groupedGridSteps

std::vector<std::vector<double> > bmpf::GridPathFinder::_groupedGridSteps
protected

сгруппированные по роботам цены шага сетки вдоль каждой из соответствующих координат

◆ _maxDist

double bmpf::GridPathFinder::_maxDist
protected

максимальное расстояние между состояниями, соответствующими соседним узлам сетки планирования

◆ _startCoords

std::vector<int> bmpf::GridPathFinder::_startCoords
protected

стартовые координаты планирования на сетке

◆ _startStateFromCoords

std::vector<double> bmpf::GridPathFinder::_startStateFromCoords
protected

состояние сцены, соответствующее стартовым координатам планирования на сетке

◆ ERROR_CAN_NOT_FIND_FREE_END_POINT

const int bmpf::GridPathFinder::ERROR_CAN_NOT_FIND_FREE_END_POINT = 3
static

Ошибка планирования: не удалось найти конечную точку на сетке планирования

◆ ERROR_CAN_NOT_FIND_FREE_START_POINT

const int bmpf::GridPathFinder::ERROR_CAN_NOT_FIND_FREE_START_POINT = 2
static

Ошибка планирования: не удалось найти стартовую точку на сетке планирования


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