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

Упорядоченный планировщик со смещениями вдоль одной из координат More...

#include <one_direction_ordered_path_finder.h>

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

Public Member Functions

 OneDirectionOrderedPathFinder (const std::shared_ptr< bmpf::Scene > &scene, bool showTrace, unsigned int maxOpenSetSize, int gridSize, unsigned int maxNodeCnt, unsigned int kG=1, unsigned int kD=0, int threadCnt=1)
 
- Public Member Functions inherited from bmpf::OneDirectionPathFinder
 OneDirectionPathFinder (const std::shared_ptr< bmpf::Scene > &scene, bool showTrace, unsigned int maxOpenSetSize, int gridSize, unsigned int maxNodeCnt, unsigned int kG=1, unsigned int kD=0, int threadCnt=1)
 
- Public Member Functions inherited from bmpf::NodeGridPathFinder
 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
 
std::shared_ptr< PathNodetryToGetNeighborPtr (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)
 
- Public Member Functions inherited from bmpf::GridPathFinder
 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
 
- 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)
 
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
 

Protected Member Functions

std::vector< unsigned long > _getSizeOrderedOffsetIndexesSingleRobot (std::vector< int > &deltas)
 
std::vector< unsigned long > _getOrderedOffsetIndexesMultiRobot (std::vector< int > &deltas)
 
std::vector< unsigned long > _getOrderedOffsetIndexes (std::vector< int > &deltas)
 
std::shared_ptr< PathNode_forEachNeighbor (std::shared_ptr< PathNode > currentNode, std::vector< int > &endCoords) override
 
- Protected Member Functions inherited from bmpf::OneDirectionPathFinder
std::shared_ptr< PathNode_forEachNeighbor (std::shared_ptr< PathNode > currentNode, std::vector< int > &endCoords) override
 
- Protected Member Functions inherited from bmpf::NodeGridPathFinder
void _moveNodeFromOpenedToClosed (const std::shared_ptr< PathNode > &node)
 
bool _findCoordsInClosedList (std::vector< int > &coords)
 
bool _findCoordsInOpenedList (std::vector< int > &coords)
 
double _getPathNodeWeight (std::vector< int > curCoords, std::vector< int > &endCoords)
 
- Protected Member Functions inherited from bmpf::GridPathFinder
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...
 

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)
 
- Static Public Attributes inherited from bmpf::NodeGridPathFinder
static const int ERROR_REACHED_MAX_NODE_CNT = 4
 
- Static Public Attributes inherited from bmpf::GridPathFinder
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 Attributes inherited from bmpf::OneDirectionPathFinder
std::vector< unsigned long > _offsetStandartIndexes
 
std::vector< std::vector< int > > _offsetList
 
unsigned int _maxOpenSetSize
 
- Protected Attributes inherited from bmpf::NodeGridPathFinder
unsigned int _kG
 
unsigned int _kD
 
std::shared_ptr< PathNode_endNode
 
std::vector< std::shared_ptr< PathNode > > _closedNodes
 
std::unordered_set< long > _closedStateConvCodeSet
 
std::set< PathNodePtr_openSet
 
unsigned int _maxNodeCnt
 
- Protected Attributes inherited from bmpf::GridPathFinder
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
 

Detailed Description

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

Упорядоченный планировщик со смещениями вдоль одной из координат (поворот на каждом шаге ровно одного звена робота). Реализовано это с помощью списков смещений, которые перебираются при каждом вызове _forEachNeighbor Упорядоченность подразумевает, что робот двигается в первую очередь вдоль осей, которые имеют наибольшую ошибку

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

Планировщик основан на алгоритме A*, при этом в качестве ошибки используется две величины: ошибка по углам поворота робота и ошибка по положениям звеньев. Им соответствуют коэффициенты kG и kD

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

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

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

Constructor & Destructor Documentation

◆ OneDirectionOrderedPathFinder()

bmpf::OneDirectionOrderedPathFinder::OneDirectionOrderedPathFinder ( const std::shared_ptr< bmpf::Scene > &  scene,
bool  showTrace,
unsigned int  maxOpenSetSize,
int  gridSize,
unsigned int  maxNodeCnt,
unsigned int  kG = 1,
unsigned int  kD = 0,
int  threadCnt = 1 
)
inline

конструктор

Parameters
sceneсцена
showTraceфлаг, нужно ли выводить информацию во время поиска пути
maxOpenSetSizeмаксимальный размер открытого множества
gridSizeразмер сетки планирования
maxNodeCntмаксимальное кол-во нод в закрытом множестве
kGкоэффициент разницы в углах поворота сочленений робота
kDкоэффициент разницы в положениях звеньев робота
threadCntколичество потоков планировщика

Member Function Documentation

◆ _forEachNeighbor()

std::shared_ptr< PathNode > OneDirectionOrderedPathFinder::_forEachNeighbor ( std::shared_ptr< PathNode currentNode,
std::vector< int > &  endCoords 
)
overrideprotectedvirtual

для всех соседей текущей ноды метод должен добавить только подходящих в множество _openSet, если один из соседей имеет целевые указания (т.е. найден путь), то возвращаем указатель на эту ноду, в противном случае должен быть возвращён nullptr

Parameters
currentNodeтекущая нода
endCoordsцелевые координаты
Returns
найденная нода или null

Implements bmpf::NodeGridPathFinder.

◆ _getOrderedOffsetIndexes()

std::vector< unsigned long > OneDirectionOrderedPathFinder::_getOrderedOffsetIndexes ( std::vector< int > &  deltas)
protected

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

Parameters
deltasотклонения
Returns
список смещений по отклонениям от цели

◆ _getOrderedOffsetIndexesMultiRobot()

std::vector< unsigned long > OneDirectionOrderedPathFinder::_getOrderedOffsetIndexesMultiRobot ( std::vector< int > &  deltas)
protected

список смещений по отклонениям от цели (сцена из нескольких роботов)

Parameters
deltas
Returns
список смещений по отклонениям от цели

◆ _getSizeOrderedOffsetIndexesSingleRobot()

std::vector< unsigned long > OneDirectionOrderedPathFinder::_getSizeOrderedOffsetIndexesSingleRobot ( std::vector< int > &  deltas)
protected

список смещений по отклонениям от цели (сцена из одного робота)

Parameters
deltasотклонения
Returns
список смещений по отклонениям от цели

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