Buran Motion Planning Framework
solid_collider.h
1 #pragma once
2 
3 
4 #include <MT_Quaternion.h>
5 #include <vector>
6 #include <map>
7 #include <utility>
8 #include <thread>
9 #include <memory>
10 #include <mutex>
11 
12 #include "base/collider.h"
13 #include "log.h"
14 
15 namespace bmpf {
24  class SolidCollider : public Collider {
25  public:
26 
30  SolidCollider() = default;
31 
35  virtual ~SolidCollider();
36 
46  void init(std::vector<std::vector<std::string>> groupedModelPaths, bool subCollider) override;
47 
55  void paint(std::vector<Eigen::Matrix4d> matrices, bool onlyRobot) override;
56 
62  bool isCollided(std::vector<Eigen::Matrix4d> matrices) override;
63 
70  std::vector<float> getPoints(std::vector<Eigen::Matrix4d> matrices) override;
71 
83  std::vector<double> getBoxCoords(unsigned long robotNum, std::vector<Eigen::Matrix4d> matrices) override;
84 
94  bool isCollided(std::vector<Eigen::Matrix4d> matrices, std::vector<int> robotIndexes) override;
95 
108  std::vector<double> getBoxPoints(unsigned long robotNum, std::vector<Eigen::Matrix4d> matrices) override;
109 
110 
111  private:
112 
113 
122  static std::vector<std::vector<std::string>> _getSubGroupedModelPaths(
123  const std::vector<std::vector<std::string>> &groupedModelPaths, const std::vector<int> &indexes
124  );
125 
134  void _populateColliderMap(const std::vector<std::vector<std::string>> &groupedModelPaths) {
135  _populateColliderMap(groupedModelPaths, {}, 0, 0);
136  }
137 
147  void _populateColliderMap(
148  const std::vector<std::vector<std::string>> &groupedModelPaths,
149  std::vector<int> indexes, int pos, int val
150  );
151 
152 
156  void _makeFree() { _setTransformMutex.unlock(); };
157 
169  void _setTransformMatrices(unsigned long robotNum, std::vector<Eigen::Matrix4d> matrices);
170 
180  void _setTransformMatrices(std::vector<Eigen::Matrix4d> matrices);
181 
188  static double *_eigenToDouble(Eigen::Matrix4d m);
189 
194  bool _isCollided();
195 
200  bool _isSingleObject{};
201 
205  std::vector<std::pair<long, long>> _objectIndexRanges;
206 
210  DT_SceneHandle _scene{};
214  std::vector<std::shared_ptr<Solid3Object>> _links;
220  std::vector<std::vector<std::shared_ptr<Solid3Object>>> _groupedLinks;
224  std::mutex _setTransformMutex;
229  std::map<std::vector<int>, std::shared_ptr<SolidCollider>> _collidersMap;
230 
231  };
232 }
bmpf::Collider
Базовый класс для всех коллайдеров Базовый класс для всех коллайдеров, все функции являются чисто вир...
Definition: collider.h:23
bmpf::SolidCollider
Класс однопоточного коллайдера Класс однопоточного коллайдера. Класс работает по следующему принципу:...
Definition: solid_collider.h:24
bmpf::SolidCollider::isCollided
bool isCollided(std::vector< Eigen::Matrix4d > matrices) override
Definition: solid_collider.cpp:380
bmpf::SolidCollider::SolidCollider
SolidCollider()=default
bmpf::SolidCollider::getBoxPoints
std::vector< double > getBoxPoints(unsigned long robotNum, std::vector< Eigen::Matrix4d > matrices) override
получить точки куба, ограничивающего объём робота получить точки куба, ограничивающего объём,...
Definition: solid_collider.cpp:275
bmpf::SolidCollider::getPoints
std::vector< float > getPoints(std::vector< Eigen::Matrix4d > matrices) override
Definition: solid_collider.cpp:410
bmpf::SolidCollider::init
void init(std::vector< std::vector< std::string >> groupedModelPaths, bool subCollider) override
Definition: solid_collider.cpp:81
bmpf::SolidCollider::getBoxCoords
std::vector< double > getBoxCoords(unsigned long robotNum, std::vector< Eigen::Matrix4d > matrices) override
получить координаты куба, ограничивающего объём робота получить координаты куба, ограничивающего объё...
Definition: solid_collider.cpp:229
bmpf::SolidCollider::~SolidCollider
virtual ~SolidCollider()
Definition: solid_collider.cpp:8
bmpf::SolidCollider::paint
void paint(std::vector< Eigen::Matrix4d > matrices, bool onlyRobot) override
Definition: solid_collider.cpp:211