Buran Motion Planning Framework
|
Базовый класс для всех планировщиков More...
#include <path_finder.h>
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 |
Базовый класс для всех планировщиков
Логика работы планировщика следующая: 1) подготовка к тактам поиска пути 2) выполнение тактов поиска пути с попутным заполнением тех или иных структур 3) если путь найден из этих структур собирается путь и сохраняется в переменную _buildedPath
PathFinder::PathFinder | ( | const std::shared_ptr< bmpf::Scene > & | scene, |
bool | showTrace, | ||
int | threadCnt = 1 |
||
) |
конструктор
scene | сцена |
showTrace | флаг, нужно ли выводить информацию во время поиска пути |
threadCnt | количество потоков планировщика |
void PathFinder::addObjectToScene | ( | std::string | path | ) |
добавить объект на сцену
path | путь к файлу с описанием |
|
pure virtual |
построить путь, построенный путь должен быть сохранён в переменную _buildedPath
Implemented in bmpf::NodeGridPathFinder, MultiRobotPathFinder, and ContinuousPathFinder.
|
static |
рассчитать общую протяжённость пути
path | путь |
bool PathFinder::checkCollision | ( | const std::vector< double > & | state | ) |
проверка сцены планировщика на коллизии
state | состояние |
bool PathFinder::checkState | ( | const std::vector< double > & | state | ) |
проверяет доступность состояния Проверяет доступность углов, после проверяет состояние на коллизии
state | состояние |
void PathFinder::deleteObjectFromScene | ( | long | robotNum | ) |
Удалить объект
robotNum | номер робота в списке роботов |
int PathFinder::divideCheckPath | ( | std::vector< std::vector< double >> | path, |
int | checkCnt | ||
) |
проверить путь с промежуточными точками на коллизии
path | путь |
checkCnt | количество промежуточных точек |
bool PathFinder::divideCheckPathSegment | ( | const std::vector< double > & | prevPoint, |
std::vector< double > | nextPoint, | ||
int | checkCnt | ||
) |
проверить отрезок с промежуточными точками на коллизии
prevPoint | первая точка отрезка |
nextPoint | вторая точка отрезка |
checkCnt | количество промежуточных точек |
std::vector< std::vector< double > > PathFinder::findPath | ( | const std::vector< double > & | startState, |
const std::vector< double > & | endState, | ||
int & | errorCode | ||
) |
Поиск пути
startState | стартовое состояние |
endState | конечное состояние |
errorCode | в эту переменную записывается код ошибки |
Поиск пути
startState | стартовое состояние |
endState | конечное состояние |
errorCode | в эту переменную записывается код ошибки |
|
pure virtual |
такт поиска
state | текущее состояние планировщика |
Implemented in bmpf::NodeGridPathFinder, MultiRobotPathFinder, and ContinuousPathFinder.
|
inline |
получить построенный путь
|
inline |
получить затраченное время на обработку
|
inline |
получить коллайдер
|
inline |
получить конечное состояние
|
inline |
получить код ошибки
|
static |
Получить json-представление пути
path | путь |
|
static |
Получить путь из json-представления
json | json-представление |
|
inline |
получить размер построенного пути
std::vector< double > PathFinder::getPathStateFromTM | ( | double | tm | ) |
получить состояние по времени две соседние точки считаются разделёнными единичным временным интервалом.
tm | время |
|
static |
получить состояние по времени две соседние точки считаются разделёнными единичным временным интервалом.
path | путь |
tm | время |
std::vector< double > PathFinder::getRandomState | ( | ) |
получить случайное разрешённое состояние
|
inline |
получить сцену
|
inline |
получить начальное состояние
|
inline |
получить количество потоков планировщика
|
static |
вывести на консоль путь
path | путь |
|
inline |
получить флаг, готов ли планировщик
|
static |
Загрузить список путь из файла
filename | путь к файлу с путями |
scenePath | путь к сцене (читается из файла, сохраняется в scenePath) |
|
static |
Загрузить список путей из файла
filename | путь к файлу с путями |
scenePath | путь к сцене (читается из файла, сохраняется в scenePath) |
|
virtual |
рисование сцены планировщика
state | состояние |
onlyRobot | флаг, нужно ли рисовать только роботов |
Reimplemented in MultiRobotPathFinder, and ContinuousPathFinder.
|
pure virtual |
подготовка к планированию
startState | начальное состояние |
endState | конечное состояние |
Implemented in bmpf::GridPathFinder, bmpf::NodeGridPathFinder, MultiRobotPathFinder, and ContinuousPathFinder.
|
static |
сохранить путь в файл
path | путь |
filename | путь к файлу |
|
inline |
задать флаг, готов ли планировщик
ready | флаг, готов ли планировщик |
bool PathFinder::simpleCheckPath | ( | const std::vector< std::vector< double >> & | path, |
double | maxDist | ||
) |
проверить опорные точки пути на коллизии
path | путь |
maxDist | максимальное расстояние между опорными точками |
|
static |
разбить путь на части (partCnt - кол-во частей)
path | путь |
partCnt | количество разбиений каждого этапа |
void PathFinder::updateCollider | ( | ) |
обновить коллайдер по сцене
|
protected |
построенный путь
|
protected |
затраченное время на планирование
|
protected |
коллайдер
|
protected |
конечное состояние
|
protected |
код ошибки
|
protected |
длина пути
|
protected |
флаг, готов ли планировщик, в конструкторе выставляется в false; бывает полезным, когда планировщику нужно подготовить значительный объём ресурсов, например, коллайдер может долго загружать модели
|
protected |
сцена
|
protected |
флаг, нужно ли выводить информацию во время поиска пути
|
protected |
начальное состояние
|
protected |
время начала работы планировщика
|
protected |
количество потоков планировщика
|
static |
Не удалось найти путь
|
static |
Нет ошибки