Buran Motion Planning Framework
|
Базовый класс для всех планировщиков на сетке Базовый класс для всех планировщиков на сетке. Суть планирования на сетке заключается в том, что каждой вещественной координате состояния мы ставим в соответствие целочисленную координату из заданного диапазона. В данном планировщике предполагается, что каждая координата состояния разбивается на равное число точек (_gridSize) More...
#include <grid_path_finder.h>
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) |
Базовый класс для всех планировщиков на сетке Базовый класс для всех планировщиков на сетке. Суть планирования на сетке заключается в том, что каждой вещественной координате состояния мы ставим в соответствие целочисленную координату из заданного диапазона. В данном планировщике предполагается, что каждая координата состояния разбивается на равное число точек (_gridSize)
Получается, что в данном планировщике одно и тоже пространство конфигураций описывается двумя пространствами: вещественным пространством состояний и целочисленным пространством координат. При этом размерности пространств совпадают.
Методы, реализованные в этом классе, позволяют переходить от вещественного пространства к целочисленному и наоброт.
Логика работы планировщика следующая: 1) подготовка к тактам поиска пути 2) выполнение тактов поиска пути с попутным заполнением тех или иных структур 3) если путь найден из этих структур собирается путь и сохраняется в переменную _buildedPath
GridPathFinder::GridPathFinder | ( | const std::shared_ptr< bmpf::Scene > & | scene, |
bool | showTrace, | ||
int | gridSize, | ||
int | threadCnt = 1 |
||
) |
конструктор
scene | сцена |
showTrace | флаг, нужно ли выводить информацию во время поиска пути |
gridSize | размер сетки планирования |
threadCnt | количество потоков планировщика |
|
protectedvirtual |
поиск координат соседней свободной точки Это - рекуррентный метод, он пробует прибавить -1, 0 и 1 к каждой из координат из интервала [pos, maxPos] включительно
coords | координаты исходной точки |
pos | начало интервала перебора |
maxPos | конец интервала перебора |
state | состояние |
bool GridPathFinder::checkCoords | ( | const std::vector< int > & | coords, |
unsigned int | robotNum | ||
) |
Проверка доступности целочисленных координат для робота с индексом robotNum
coords | координаты |
robotNum | номер робота |
bool GridPathFinder::checkCoords | ( | std::vector< int > | coords | ) |
Проверка доступности целочисленных координат для всей сцены
coords | координаты |
std::vector< std::vector< double > > GridPathFinder::checkTask | ( | const std::vector< double > & | startState, |
const std::vector< double > & | endState, | ||
double | opacity | ||
) |
проверка задания проверка задания, возвращает пустой вектор, если маршрут можно строить штатным образом, в противном случае сохраняет в _buildedPath готовый маршрут (из стартового и конечного положений) и возвращает его
startState | начальное состояние |
endState | конечное состояние |
opacity | точность проверки |
std::vector< double > GridPathFinder::coordsToState | ( | std::vector< int > & | coords | ) | const |
преобразование целочисленных координат в вещественное состояние
coords | координаты |
std::vector< double > GridPathFinder::coordsToState | ( | std::vector< int > | coords, |
unsigned long | robotNum | ||
) |
преобразование целочисленных координат в вещественное состояние
coords | координаты |
robotNum | номер робота, координаты нужно преобразовать |
std::vector< std::vector< double > > GridPathFinder::findGridPath | ( | std::vector< int > & | startCoords, |
std::vector< int > & | endCoords, | ||
int & | errorCode | ||
) |
поиск пути из состояния startCoords
в состояние endCoords
,
startCoords | начальные координаты |
endCoords | конечные координаты |
errorCode | в эту переменную записывается код ошибки |
|
inline |
получить построенный по координатам сетки планирования путь
|
inline |
получить состояние сцены, соответствующее конечным координатам планирования на сетке
|
inline |
получить цену шага сетки вдоль каждой из соответствующих координат
|
inline |
получить сгруппированные по роботам цены шага сетки вдоль каждой из соответствующих координат
|
inline |
получить максимальное расстояние между состояниями, соответствующими соседним узлам сетки планирования
|
inline |
получить состояние сцены, соответствующее стартовым координатам планирования на сетке
|
overridevirtual |
подготовка к планированию
startState | начальное состояние |
endState | конечное состояние |
Implements bmpf::PathFinder.
Reimplemented in bmpf::NodeGridPathFinder.
|
virtual |
построить путь, построенный путь должен быть сохранён в переменную _buildedPath
startCoords | начальные координаты |
endCoords | конечные координаты |
Reimplemented in bmpf::NodeGridPathFinder.
|
virtual |
преобразует состояние в координаты на сетке планирования, если свободных координат не найдено, возвращает пустой список {}
state | состояние |
|
protected |
построенный путь (по координатам сетки планирования) для удобства сопоставления с путём в конфигурационном пространстве первая и последняя точки маршрута дублируются
|
protected |
флаг, выполнялось ли последнее планирование по координатам
|
protected |
конечные координаты планирования на сетке
|
protected |
состояние сцены, соответствующее конечным координатам планирования на сетке
|
protected |
количество ячеек сетки планирования вдоль каждой из координат
|
protected |
цена шага сетки вдоль каждой из соответствующих координат
|
protected |
сгруппированные по роботам цены шага сетки вдоль каждой из соответствующих координат
|
protected |
максимальное расстояние между состояниями, соответствующими соседним узлам сетки планирования
|
protected |
стартовые координаты планирования на сетке
|
protected |
состояние сцены, соответствующее стартовым координатам планирования на сетке
|
static |
Ошибка планирования: не удалось найти конечную точку на сетке планирования
|
static |
Ошибка планирования: не удалось найти стартовую точку на сетке планирования