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

Базовый класс для всех планировщиков More...

#include <path_finder.h>

Inheritance diagram for bmpf::PathFinder:
Inheritance graph
[legend]

Public Member Functions

 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 prepare (const std::vector< double > &startState, const std::vector< double > &endState)=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 Member Functions

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)
 

Static Public Attributes

static const int NO_ERROR = -1
 
static const int ERROR_CAN_NOT_FIND_PATH = 1
 

Protected Attributes

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
 

Detailed Description

Базовый класс для всех планировщиков

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

Constructor & Destructor Documentation

◆ PathFinder()

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

конструктор

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

Member Function Documentation

◆ addObjectToScene()

void PathFinder::addObjectToScene ( std::string  path)

добавить объект на сцену

Parameters
pathпуть к файлу с описанием

◆ buildPath()

virtual void bmpf::PathFinder::buildPath ( )
pure virtual

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

Implemented in bmpf::NodeGridPathFinder, MultiRobotPathFinder, and ContinuousPathFinder.

◆ calculatePathLength()

double PathFinder::calculatePathLength ( std::vector< std::vector< double >>  path)
static

рассчитать общую протяжённость пути

Parameters
pathпуть
Returns
общая протяжённость пути

◆ checkCollision()

bool PathFinder::checkCollision ( const std::vector< double > &  state)

проверка сцены планировщика на коллизии

Parameters
stateсостояние
Returns
флаг, соответствует ли состояние коллизии

◆ checkState()

bool PathFinder::checkState ( const std::vector< double > &  state)

проверяет доступность состояния Проверяет доступность углов, после проверяет состояние на коллизии

Parameters
stateсостояние
Returns
флаг, допустимо ли состояние

◆ deleteObjectFromScene()

void PathFinder::deleteObjectFromScene ( long  robotNum)

Удалить объект

Parameters
robotNumномер робота в списке роботов

◆ divideCheckPath()

int PathFinder::divideCheckPath ( std::vector< std::vector< double >>  path,
int  checkCnt 
)

проверить путь с промежуточными точками на коллизии

Parameters
pathпуть
checkCntколичество промежуточных точек
Returns
флаг, является ли путь безколлизионным

◆ divideCheckPathSegment()

bool PathFinder::divideCheckPathSegment ( const std::vector< double > &  prevPoint,
std::vector< double >  nextPoint,
int  checkCnt 
)

проверить отрезок с промежуточными точками на коллизии

Parameters
prevPointпервая точка отрезка
nextPointвторая точка отрезка
checkCntколичество промежуточных точек
Returns
флаг, является ли отрезок безколлизионным

◆ findPath()

std::vector< std::vector< double > > PathFinder::findPath ( const std::vector< double > &  startState,
const std::vector< double > &  endState,
int &  errorCode 
)

Поиск пути

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

Поиск пути

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

◆ findTick()

virtual bool bmpf::PathFinder::findTick ( std::vector< double > &  state)
pure virtual

такт поиска

Parameters
stateтекущее состояние планировщика
Returns
возвращает true, если планирование закончено

Implemented in bmpf::NodeGridPathFinder, MultiRobotPathFinder, and ContinuousPathFinder.

◆ getBuildedPath()

const std::vector<std::vector<double> >& bmpf::PathFinder::getBuildedPath ( ) const
inline

получить построенный путь

Returns
построенный путь

◆ getCalculationTimeInSeconds()

double bmpf::PathFinder::getCalculationTimeInSeconds ( ) const
inline

получить затраченное время на обработку

Returns
затраченное время на обработку

◆ getCollider()

const std::shared_ptr<bmpf::Collider>& bmpf::PathFinder::getCollider ( ) const
inline

получить коллайдер

Returns
коллайдер

◆ getEndState()

std::vector<double>& bmpf::PathFinder::getEndState ( )
inline

получить конечное состояние

Returns
конечное состояние

◆ getErrorCode()

int bmpf::PathFinder::getErrorCode ( ) const
inline

получить код ошибки

Returns
код ошибки

◆ getJSONPath()

Json::Value PathFinder::getJSONPath ( std::vector< std::vector< double >>  path)
static

Получить json-представление пути

Parameters
pathпуть
Returns
json-представление

◆ getPathFromJSON()

std::vector< std::vector< double > > PathFinder::getPathFromJSON ( const Json::Value &  json)
static

Получить путь из json-представления

Parameters
jsonjson-представление
Returns
путь

◆ getPathLength()

double bmpf::PathFinder::getPathLength ( ) const
inline

получить размер построенного пути

Returns
размер построенного пути

◆ getPathStateFromTM() [1/2]

std::vector< double > PathFinder::getPathStateFromTM ( double  tm)

получить состояние по времени две соседние точки считаются разделёнными единичным временным интервалом.

Parameters
tmвремя
Returns
состояние, соответствующее полученной временной меткой

◆ getPathStateFromTM() [2/2]

std::vector< double > PathFinder::getPathStateFromTM ( std::vector< std::vector< double >> &  path,
double  tm 
)
static

получить состояние по времени две соседние точки считаются разделёнными единичным временным интервалом.

Parameters
pathпуть
tmвремя
Returns
состояние, соответствующее полученной временной меткой

◆ getRandomState()

std::vector< double > PathFinder::getRandomState ( )

получить случайное разрешённое состояние

Returns
случайное разрешённое состояние

◆ getScene()

const std::shared_ptr<bmpf::Scene>& bmpf::PathFinder::getScene ( ) const
inline

получить сцену

Returns
сцена

◆ getStartState()

std::vector<double>& bmpf::PathFinder::getStartState ( )
inline

получить начальное состояние

Returns
начальное состояние

◆ getThreadCnt()

bool bmpf::PathFinder::getThreadCnt ( ) const
inline

получить количество потоков планировщика

Returns
количество потоков планировщика

◆ infoPath()

void PathFinder::infoPath ( const std::vector< std::vector< double >> &  path)
static

вывести на консоль путь

Parameters
pathпуть

◆ isReady()

bool bmpf::PathFinder::isReady ( ) const
inline

получить флаг, готов ли планировщик

Returns
флаг, готов ли планировщик

◆ loadPathFromFile()

std::vector< std::vector< double > > PathFinder::loadPathFromFile ( const std::string &  filename,
std::string &  scenePath 
)
static

Загрузить список путь из файла

Parameters
filenameпуть к файлу с путями
scenePathпуть к сцене (читается из файла, сохраняется в scenePath)
Returns
список путей

◆ loadPathsFromFile()

std::vector< std::vector< std::vector< double > > > PathFinder::loadPathsFromFile ( const std::string &  filename,
std::string &  scenePath 
)
static

Загрузить список путей из файла

Parameters
filenameпуть к файлу с путями
scenePathпуть к сцене (читается из файла, сохраняется в scenePath)
Returns
список путей

◆ paint()

void PathFinder::paint ( const std::vector< double > &  state,
bool  onlyRobot 
)
virtual

рисование сцены планировщика

Parameters
stateсостояние
onlyRobotфлаг, нужно ли рисовать только роботов

Reimplemented in MultiRobotPathFinder, and ContinuousPathFinder.

◆ prepare()

virtual void bmpf::PathFinder::prepare ( const std::vector< double > &  startState,
const std::vector< double > &  endState 
)
pure virtual

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

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

Implemented in bmpf::GridPathFinder, bmpf::NodeGridPathFinder, MultiRobotPathFinder, and ContinuousPathFinder.

◆ savePathToFile()

void PathFinder::savePathToFile ( std::vector< std::vector< double >>  path,
const std::string &  filename 
)
static

сохранить путь в файл

Parameters
pathпуть
filenameпуть к файлу

◆ setReady()

void bmpf::PathFinder::setReady ( bool  ready)
inline

задать флаг, готов ли планировщик

Parameters
readyфлаг, готов ли планировщик

◆ simpleCheckPath()

bool PathFinder::simpleCheckPath ( const std::vector< std::vector< double >> &  path,
double  maxDist 
)

проверить опорные точки пути на коллизии

Parameters
pathпуть
maxDistмаксимальное расстояние между опорными точками
Returns
флаг, является ли путь безколлизионным

◆ splitPath()

std::vector< std::vector< double > > PathFinder::splitPath ( std::vector< std::vector< double >>  path,
unsigned long  partCnt 
)
static

разбить путь на части (partCnt - кол-во частей)

Parameters
pathпуть
partCntколичество разбиений каждого этапа
Returns
новый путь с промежуточными точками

◆ updateCollider()

void PathFinder::updateCollider ( )

обновить коллайдер по сцене

Member Data Documentation

◆ _buildedPath

std::vector<std::vector<double> > bmpf::PathFinder::_buildedPath
protected

построенный путь

◆ _calculationTimeInSeconds

double bmpf::PathFinder::_calculationTimeInSeconds
protected

затраченное время на планирование

◆ _collider

std::shared_ptr<bmpf::Collider> bmpf::PathFinder::_collider
protected

коллайдер

◆ _endState

std::vector<double> bmpf::PathFinder::_endState
protected

конечное состояние

◆ _errorCode

int bmpf::PathFinder::_errorCode
protected

код ошибки

◆ _pathLength

double bmpf::PathFinder::_pathLength {}
protected

длина пути

◆ _ready

bool bmpf::PathFinder::_ready
protected

флаг, готов ли планировщик, в конструкторе выставляется в false; бывает полезным, когда планировщику нужно подготовить значительный объём ресурсов, например, коллайдер может долго загружать модели

◆ _scene

std::shared_ptr<bmpf::Scene> bmpf::PathFinder::_scene
protected

сцена

◆ _showTrace

bool bmpf::PathFinder::_showTrace
protected

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

◆ _startState

std::vector<double> bmpf::PathFinder::_startState
protected

начальное состояние

◆ _startTime

std::chrono::time_point<std::chrono::system_clock> bmpf::PathFinder::_startTime
protected

время начала работы планировщика

◆ _threadCnt

bool bmpf::PathFinder::_threadCnt
protected

количество потоков планировщика

◆ ERROR_CAN_NOT_FIND_PATH

const int bmpf::PathFinder::ERROR_CAN_NOT_FIND_PATH = 1
static

Не удалось найти путь

◆ NO_ERROR

const int bmpf::PathFinder::NO_ERROR = -1
static

Нет ошибки


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