85 lines
2.9 KiB
C
85 lines
2.9 KiB
C
|
#ifndef SEMANTIC_MAP_H
|
|||
|
#define SEMANTIC_MAP_H
|
|||
|
|
|||
|
#include <iostream>
|
|||
|
#include <Eigen/Geometry>
|
|||
|
#include <opencv2/opencv.hpp>
|
|||
|
#include <opencv2/core/core.hpp>
|
|||
|
#include <opencv2/highgui/highgui.hpp>
|
|||
|
#include <pcl/point_types.h>
|
|||
|
#include <pcl/io/pcd_io.h>
|
|||
|
#include <pcl/filters/voxel_grid.h>
|
|||
|
#include <pcl/visualization/pcl_visualizer.h>
|
|||
|
#include <pcl/filters/statistical_outlier_removal.h>
|
|||
|
#include <pcl/visualization/pcl_visualizer.h>
|
|||
|
#include <pcl/visualization/cloud_viewer.h>
|
|||
|
|
|||
|
#include "KeyFrame.h"
|
|||
|
|
|||
|
using namespace std;
|
|||
|
using namespace cv;
|
|||
|
// 定义点云使用的格式:这里用的是XYZRGB
|
|||
|
typedef pcl::PointXYZ PointT;
|
|||
|
typedef pcl::PointCloud<PointT> PointCloud;
|
|||
|
|
|||
|
namespace ORB_SLAM2
|
|||
|
{
|
|||
|
class KeyFrame;
|
|||
|
|
|||
|
class Semantic_Map
|
|||
|
{
|
|||
|
public:
|
|||
|
Semantic_Map(const string &strSettingPath);
|
|||
|
void LoadLabel(const string &strLabelFilename, vector<vector<double>> &vvLabel);
|
|||
|
void get_bbx(const vector<double> &label1, std::vector<cv::Point> &pts, double scale);
|
|||
|
void Run();
|
|||
|
void InsertKeyFrame(KeyFrame *pKF);
|
|||
|
bool CheckNewKeyFrames();
|
|||
|
pcl::PointCloud<pcl::PointXYZRGB>::Ptr GenratePointCloudMap(KeyFrame *mpCurrentKF, cv::String cloudAddress, cv::String imgadress);
|
|||
|
pcl::PointCloud<pcl::PointXYZRGB>::Ptr GenratePointCloudMap(KeyFrame *mpCurrentKF, cv::String cloudAddress, cv::String imgadress, std::vector<std::vector<double>> vvlabel);
|
|||
|
void SetPose(Eigen::Isometry3d &T, cv::Mat &Twc);
|
|||
|
// void SetCurrentKeyFrame(KeyFrame *pkf);
|
|||
|
void Transform3DPointFromLidarToImage02KITTI(const cv::Mat &x3Dl, cv::Mat &x3Dc, cv::Point2i &point2D, float &d);
|
|||
|
/**请求终止当前线程 */
|
|||
|
void RequestFinish();
|
|||
|
/** 当前线程的run函数是否已经终止 */
|
|||
|
bool isFinished();
|
|||
|
bool CheckFinish();
|
|||
|
/** 设置当前线程已经真正地结束了,由本线程run函数调用 */
|
|||
|
void SetFinish();
|
|||
|
bool Stop();
|
|||
|
bool isStopped();
|
|||
|
|
|||
|
public:
|
|||
|
// pcl::PointCloud<pcl::PointXYZI>::Ptr mpPointCloud;
|
|||
|
std::vector<cv::String> mvpointcloud_adress;
|
|||
|
std::vector<cv::String> mvRGBIMG_adress;
|
|||
|
std::vector<std::vector<std::vector<double>>> mvvvLabel;
|
|||
|
vector<vector<double>> mvDynamic_label;
|
|||
|
cv::Mat mRGB;
|
|||
|
cv::Mat mDepth;
|
|||
|
cv::Mat P2;
|
|||
|
cv::Mat R0_rect;
|
|||
|
cv::Mat Tr_velo_to_cam;
|
|||
|
Mat trans;
|
|||
|
// Mat p_result;
|
|||
|
// Mat mimg;
|
|||
|
|
|||
|
float fx, fy, cx, cy, mDepthMapFactor;
|
|||
|
// cv::Mat Twc;
|
|||
|
std::vector<KeyFrame *> mlpSemanticKeyFrameQueue;
|
|||
|
// KeyFrame *mpCurrentKF;
|
|||
|
// PointCloud::Ptr mpPointCloud;
|
|||
|
|
|||
|
std::mutex mMutexSemanticQueue;
|
|||
|
|
|||
|
/// 当前线程是否收到了请求终止的信号
|
|||
|
bool mbFinishRequested;
|
|||
|
/// 当前线程的主函数是否已经终止
|
|||
|
bool mbFinished;
|
|||
|
// 和"线程真正结束"有关的互斥锁
|
|||
|
std::mutex mMutexFinish;
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
#endif
|