19 typedef std::vector<std::shared_ptr<ALandmark>>
LmkPolygon;
35 Mesh3D(
double ZNCC_tsh,
double max_length_tsh) : _ZNCC_tsh(ZNCC_tsh), _max_length_tsh(max_length_tsh) {}
39 std::lock_guard<std::mutex> lock(
_mesh_mtx);
43 std::lock_guard<std::mutex> lock(
_pc_mtx);
47 std::lock_guard<std::mutex> lock(
_mesh_mtx);
48 return _reference_frame;
51 std::unordered_map<std::shared_ptr<ALandmark>, std::shared_ptr<Vertex>>
getMap() {
return _map_lmk_vertex; }
58 void updateMesh(std::vector<FeatPolygon> feats_polygon, std::shared_ptr<Frame> frame);
63 bool checkTriangle(std::vector<std::shared_ptr<Vertex>> vertices);
81 std::lock_guard<std::mutex> lock(
_mesh_mtx);
82 for (
int i = _polygons.size() - 1; i >= 0; i--) {
83 if (_polygons.at(i) == polygon) {
84 _polygons.erase(_polygons.begin() + i);
113 std::unordered_map<std::shared_ptr<ALandmark>, std::shared_ptr<Vertex>>
115 std::vector<std::shared_ptr<Polygon>> _polygons;
116 std::vector<Eigen::Vector3d> _point_cloud;
117 std::unordered_map<std::shared_ptr<Polygon>, std::vector<Eigen::Vector2d>>
121 std::shared_ptr<Frame> _reference_frame;
122 std::shared_ptr<ImageSensor> _cam0, _cam1;
123 cv::Mat _img0, _img1;
124 Eigen::Affine3d _T_w_cam0;
127 double _ZNCC_tsh = 0.8;
128 double _max_length_tsh = 5;
140 Vertex(std::shared_ptr<ALandmark> lmk) : _lmk(lmk) {}
144 std::lock_guard<std::mutex> lock(_lmk_mtx);
145 return _lmk->getPose().translation();
148 std::vector<std::shared_ptr<Polygon>>
getPolygons()
const {
return _polygons; }
149 std::shared_ptr<ALandmark>
getLmk()
const {
return _lmk; }
151 void addPolygon(std::shared_ptr<Polygon> polygon) { _polygons.push_back(polygon); }
153 for (
int i = _polygons.size() - 1; i >= 0; i--) {
154 if (_polygons.at(i) == polygon) {
155 _polygons.erase(_polygons.begin() + i);
161 std::shared_ptr<ALandmark> _lmk;
162 Eigen::Vector3d _vertex_normal;
163 std::vector<std::shared_ptr<Polygon>> _polygons;
165 mutable std::mutex _lmk_mtx;
173 struct Polygon : std::enable_shared_from_this<Polygon> {
177 Polygon(std::vector<std::shared_ptr<Vertex>> vertices) : _vertices(vertices) { _outlier =
false; }
180 void setNormal(Eigen::Vector3d normal) { _normal = normal; }
181 void setBarycenter(Eigen::Vector3d barycenter) { _barycenter = barycenter; }
182 void setCovariance(Eigen::Matrix2d covariance) { _covariance = covariance; }
183 void setScore(
double score) { _traversability_score = score; }
189 std::vector<std::shared_ptr<Vertex>>
getVertices()
const {
return _vertices; }
190 double getScore()
const {
return _traversability_score; }
194 Eigen::Vector3d _normal;
195 Eigen::Vector3d _barycenter;
196 Eigen::Matrix2d _covariance;
197 double _traversability_score;
199 std::vector<std::shared_ptr<Vertex>> _vertices;