载入中...
搜索中...
未找到
frontend.h
浏览该文件的文档.
1
11#pragma once
12#include "camera.h"
13#include "common_include.h"
14#include "config.h"
15#include "dataset.h"
16#include "g2o_types.h"
17#include "map.h"
18#include "viewer.h"
19
21
31void printPose(const SE3d &pose);
32
37class Frontend {
38public:
39 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
40 typedef std::shared_ptr<Frontend> Ptr;
41 Frontend(const Frontend &) = delete;
42 Frontend &operator=(const Frontend &) = delete;
43
44 static Ptr getInstance() {
45 static Ptr frontend(new Frontend);
46 return frontend;
47 }
48
49 void run();
50
51 void addFrame(const Frame::Ptr &frame);
52
53 bool triangulate(const std::vector<SE3d> &poses, const std::vector<Vec2d> &pixelPoints,
54 Vec3d &worldPoint);
55
56 int triNewPoint(Frame::Ptr &frame, std::vector<MapPoint::Ptr> &newPoints);
57
58 void setCamera(const Camera::Ptr &camera) { m_camera = camera; }
59
60 void setMap(const Map::Ptr &map) { m_map = map; }
61
62 void setDataset(const Dataset::Ptr &dataset) { m_dataset = dataset; }
63
64 void setViewer(const Viewer::Ptr &viewer) { m_viewer = viewer; }
65
66 int trackCurrFrame();
67
68 void initTrack();
69
70 int estimatePose();
71
72 int detectOutlier(std::vector<Feature::Ptr> &features, std::vector<PoseEdge *> &edges,
73 g2o::SparseOptimizer &optimizer, PoseVertex *vertex);
74
75 void track() {
76 int trackNum = trackCurrFrame();
77 SPDLOG_INFO("==================================================================");
78 SPDLOG_INFO("参考帧: {:06}\t当前帧: {:06} 追踪成功的特征点数目为: {:03}", m_refFrame->m_id,
79 m_currFrame->m_id, trackNum);
80 int inlinerNum = estimatePose();
81
83 m_diffPose = m_currFrame->pose() * m_refFrame->pose().inverse();
84 SPDLOG_INFO("对当前帧: {:06} 进行位姿估计 非异常点数目为: {:03} 当前帧位姿为:",
85 m_currFrame->m_id, inlinerNum);
86 printPose(m_currFrame->pose());
87 if (inlinerNum < Config::MIN_MAPPOINTS_NUM_FOR_TRACK) {
88 initTrack();
89 }
90 SPDLOG_INFO("==================================================================\n");
91 }
92
93private:
94 Frontend() = default;
97 bool m_isStop = false;
104};
105
定义Camera相机类
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef std::shared_ptr< Camera > Ptr
Definition camera.h:27
static int MIN_MAPPOINTS_NUM_FOR_TRACK
track可执行的最少特征数目
Definition config.h:39
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef std::shared_ptr< Dataset > Ptr
Definition dataset.h:29
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef std::shared_ptr< Frame > Ptr
Definition map.h:79
进行相邻帧的位姿估计和局部稀疏地图构建
Definition frontend.h:37
TrackStatus m_status
Definition frontend.h:103
int estimatePose()
根据前端追踪的结果进行位姿估计和异常值检测
Definition frontend.cc:55
Viewer::Ptr m_viewer
可视化
Definition frontend.h:102
Frame::Ptr m_refFrame
参考帧,左图提供待追踪的Feature
Definition frontend.h:95
Frontend(const Frontend &)=delete
void setViewer(const Viewer::Ptr &viewer)
Definition frontend.h:64
void track()
Definition frontend.h:75
Map::Ptr m_map
地图
Definition frontend.h:100
SE3d m_diffPose
上次位姿估计的位姿差Tcr
Definition frontend.h:101
Frontend & operator=(const Frontend &)=delete
void run()
前端启动线程
Definition frontend.cc:16
Dataset::Ptr m_dataset
数据集
Definition frontend.h:99
Camera::Ptr m_camera
相机参数
Definition frontend.h:98
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef std::shared_ptr< Frontend > Ptr
Definition frontend.h:40
void setDataset(const Dataset::Ptr &dataset)
Definition frontend.h:62
void initTrack()
为前端开启循环做m_refFrame的准备
Definition frontend.cc:148
bool triangulate(const std::vector< SE3d > &poses, const std::vector< Vec2d > &pixelPoints, Vec3d &worldPoint)
Definition frontend.cc:177
int detectOutlier(std::vector< Feature::Ptr > &features, std::vector< PoseEdge * > &edges, g2o::SparseOptimizer &optimizer, PoseVertex *vertex)
Definition frontend.cc:99
void addFrame(const Frame::Ptr &frame)
Definition frontend.cc:31
static Ptr getInstance()
Definition frontend.h:44
bool m_isStop
前端线程结束标识
Definition frontend.h:97
void setMap(const Map::Ptr &map)
Definition frontend.h:60
int triNewPoint(Frame::Ptr &frame, std::vector< MapPoint::Ptr > &newPoints)
三角化新的点
Definition frontend.cc:209
int trackCurrFrame()
追踪m_refFrame中的特征点到m_currFrame
Definition frontend.cc:273
Frame::Ptr m_currFrame
当前帧,参考参考帧进行Feature追踪
Definition frontend.h:96
Frontend()=default
void setCamera(const Camera::Ptr &camera)
Definition frontend.h:58
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef std::shared_ptr< Map > Ptr
Definition map.h:125
位姿顶点
Definition g2o_types.h:11
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef std::shared_ptr< Viewer > Ptr
Definition viewer.h:29
引入所有所需头文件,定义所有所需超参数
#define NAMESPACE_END
Definition common_include.h:41
#define NAMESPACE_BEGIN
Definition common_include.h:40
Sophus::SE3d SE3d
Definition common_include.h:57
Eigen::Vector3d Vec3d
Definition common_include.h:47
编写slam系统的超参数信息类
定义Dataset数据集类
TrackStatus
TrackStatus来表示追踪和位姿估计后的状态 INIT_TRACKING 代表前端处在关键帧初始化状态 TRACK_GOOD 代表前端运转良好(可用MapPoint数目大于50) TRACK_BA...
Definition frontend.h:30
void printPose(const SE3d &pose)
Definition frontend.cc:5
定义slam系统的数据结构包括Feature、Frame、MapPoint、Map
展示Frontend的m_currFrame和Map的m_activeFrames和activePoints