Базовый класс для всех планировщиков на сетке с нодами Базовый класс для всех планировщиков на сетке с нодами, у каждой из которых указывается предок и координаты на сетке. Суть планирования на сетке заключается в том, что каждой вещественной координате состояния мы ставим в соответствие целочисленную координату из заданного диапазона. В данном планировщике предполагается, что каждая координата состояния разбивается на равное число точек (_gridSize)
More...
|
| NodeGridPathFinder (const std::shared_ptr< bmpf::Scene > &scene, bool showTrace, int gridSize, unsigned int maxNodeCnt, unsigned int kG=1, unsigned int kD=0, int threadCnt=1) |
|
std::vector< std::vector< double > > | getAllProcessedStates () |
|
bool | findTick (std::vector< double > &state) override |
|
virtual std::shared_ptr< PathNode > | _forEachNeighbor (std::shared_ptr< PathNode > currentNode, std::vector< int > &endCoords)=0 |
|
std::shared_ptr< PathNode > | tryToGetNeighborPtr (std::vector< int > newCoords, const std::shared_ptr< PathNode > &parentNode, double sum) |
|
void | buildPath () override |
|
void | prepare (const std::vector< double > &startState, const std::vector< double > &endState) override |
|
void | prepare (std::vector< int > &startState, std::vector< int > &endState) override |
|
std::vector< double > | getCurrentState () |
|
void | nextNode () |
|
double | _findLinkDistance (std::vector< int > &a, std::vector< int > &b) |
|
| 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) |
|
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 |
|
| 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) |
|
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 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)
Планировщик основан на алгоритме A*, при этом в качестве ошибки используется две величины: ошибка по углам поворота робота и ошибка по положениям звеньев. Им соответствуют коэффициенты kG и kD
Получается, что в данном планировщике одно и тоже пространство конфигураций описывается двумя пространствами: вещественным пространством состояний и целочисленным пространством координат. При этом размерности пространств совпадают.
Методы, реализованные в этом классе, позволяют переходить от вещественного пространства к целочисленному и наоброт.
Логика работы планировщика следующая: 1) подготовка к тактам поиска пути 2) выполнение тактов поиска пути с попутным заполнением тех или иных структур 3) если путь найден из этих структур собирается путь и сохраняется в переменную _buildedPath