Function bodies 2,155 total
computeError method · c · L680-L685 (6 LOC)include/G2oTypes.h
void computeError(){
const VertexAccBias* VA1= static_cast<const VertexAccBias*>(_vertices[0]);
const VertexAccBias* VA2= static_cast<const VertexAccBias*>(_vertices[1]);
_error = VA2->estimate()-VA1->estimate();
}linearizeOplus method · c · L686-L690 (5 LOC)include/G2oTypes.h
virtual void linearizeOplus(){
_jacobianOplusXi = -Eigen::Matrix3d::Identity();
_jacobianOplusXj.setIdentity();
}GetHessian method · c · L691-L698 (8 LOC)include/G2oTypes.h
Eigen::Matrix<double,6,6> GetHessian(){
linearizeOplus();
Eigen::Matrix<double,3,6> J;
J.block<3,3>(0,0) = _jacobianOplusXi;
J.block<3,3>(0,3) = _jacobianOplusXj;
return J.transpose()*information()*J;
}GetHessian2 method · c · L699-L703 (5 LOC)include/G2oTypes.h
Eigen::Matrix3d GetHessian2(){
linearizeOplus();
return _jacobianOplusXj.transpose()*information()*_jacobianOplusXj;
}ConstraintPoseImu class · c · L705-L730 (26 LOC)include/G2oTypes.h
class ConstraintPoseImu
{
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
ConstraintPoseImu(const Eigen::Matrix3d &Rwb_, const Eigen::Vector3d &twb_, const Eigen::Vector3d &vwb_,
const Eigen::Vector3d &bg_, const Eigen::Vector3d &ba_, const Matrix15d &H_):
Rwb(Rwb_), twb(twb_), vwb(vwb_), bg(bg_), ba(ba_), H(H_)
{
H = (H+H)/2;
Eigen::SelfAdjointEigenSolver<Eigen::Matrix<double,15,15> > es(H);
Eigen::Matrix<double,15,1> eigs = es.eigenvalues();
for(int i=0;i<15;i++)
if(eigs[i]<1e-12)
eigs[i]=0;
H = es.eigenvectors()*eigs.asDiagonal()*es.eigenvectors().transpose();
}
Eigen::Matrix3d Rwb;
Eigen::Vector3d twb;
Eigen::Vector3d vwb;
Eigen::Vector3d bg;
Eigen::Vector3d ba;
Matrix15d H;
};EdgePriorPoseImu class · c · L731-L765 (35 LOC)include/G2oTypes.h
class EdgePriorPoseImu : public g2o::BaseMultiEdge<15,Vector15d>
{
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
EdgePriorPoseImu(ConstraintPoseImu* c);
virtual bool read(std::istream& is){return false;}
virtual bool write(std::ostream& os) const{return false;}
void computeError();
virtual void linearizeOplus();
Eigen::Matrix<double,15,15> GetHessian(){
linearizeOplus();
Eigen::Matrix<double,15,15> J;
J.block<15,6>(0,0) = _jacobianOplus[0];
J.block<15,3>(0,6) = _jacobianOplus[1];
J.block<15,3>(0,9) = _jacobianOplus[2];
J.block<15,3>(0,12) = _jacobianOplus[3];
return J.transpose()*information()*J;
}
Eigen::Matrix<double,9,9> GetHessianNoPose(){
linearizeOplus();
Eigen::Matrix<double,15,9> J;
J.block<15,3>(0,0) = _jacobianOplus[1];
J.block<15,3>(0,3) = _jacobianOplus[2];
J.bloGetHessian method · c · L743-L752 (10 LOC)include/G2oTypes.h
Eigen::Matrix<double,15,15> GetHessian(){
linearizeOplus();
Eigen::Matrix<double,15,15> J;
J.block<15,6>(0,0) = _jacobianOplus[0];
J.block<15,3>(0,6) = _jacobianOplus[1];
J.block<15,3>(0,9) = _jacobianOplus[2];
J.block<15,3>(0,12) = _jacobianOplus[3];
return J.transpose()*information()*J;
}Repobility — same analyzer, your code, free for public repos · /scan/
GetHessianNoPose method · c · L753-L761 (9 LOC)include/G2oTypes.h
Eigen::Matrix<double,9,9> GetHessianNoPose(){
linearizeOplus();
Eigen::Matrix<double,15,9> J;
J.block<15,3>(0,0) = _jacobianOplus[1];
J.block<15,3>(0,3) = _jacobianOplus[2];
J.block<15,3>(0,6) = _jacobianOplus[3];
return J.transpose()*information()*J;
}EdgePriorAcc class · c · L768-L790 (23 LOC)include/G2oTypes.h
class EdgePriorAcc : public g2o::BaseUnaryEdge<3,Eigen::Vector3d,VertexAccBias>
{
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
EdgePriorAcc(const Eigen::Vector3f &bprior_):bprior(bprior_.cast<double>()){}
virtual bool read(std::istream& is){return false;}
virtual bool write(std::ostream& os) const{return false;}
void computeError(){
const VertexAccBias* VA = static_cast<const VertexAccBias*>(_vertices[0]);
_error = bprior - VA->estimate();
}
virtual void linearizeOplus();
Eigen::Matrix<double,3,3> GetHessian(){
linearizeOplus();
return _jacobianOplusXi.transpose()*information()*_jacobianOplusXi;
}
const Eigen::Vector3d bprior;
};computeError method · c · L777-L781 (5 LOC)include/G2oTypes.h
void computeError(){
const VertexAccBias* VA = static_cast<const VertexAccBias*>(_vertices[0]);
_error = bprior - VA->estimate();
}GetHessian method · c · L783-L787 (5 LOC)include/G2oTypes.h
Eigen::Matrix<double,3,3> GetHessian(){
linearizeOplus();
return _jacobianOplusXi.transpose()*information()*_jacobianOplusXi;
}EdgePriorGyro class · c · L791-L814 (24 LOC)include/G2oTypes.h
class EdgePriorGyro : public g2o::BaseUnaryEdge<3,Eigen::Vector3d,VertexGyroBias>
{
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
EdgePriorGyro(const Eigen::Vector3f &bprior_):bprior(bprior_.cast<double>()){}
virtual bool read(std::istream& is){return false;}
virtual bool write(std::ostream& os) const{return false;}
void computeError(){
const VertexGyroBias* VG = static_cast<const VertexGyroBias*>(_vertices[0]);
_error = bprior - VG->estimate();
}
virtual void linearizeOplus();
Eigen::Matrix<double,3,3> GetHessian(){
linearizeOplus();
return _jacobianOplusXi.transpose()*information()*_jacobianOplusXi;
}
const Eigen::Vector3d bprior;
};computeError method · c · L801-L805 (5 LOC)include/G2oTypes.h
void computeError(){
const VertexGyroBias* VG = static_cast<const VertexGyroBias*>(_vertices[0]);
_error = bprior - VG->estimate();
}GetHessian method · c · L807-L811 (5 LOC)include/G2oTypes.h
Eigen::Matrix<double,3,3> GetHessian(){
linearizeOplus();
return _jacobianOplusXi.transpose()*information()*_jacobianOplusXi;
}Edge4DoF class · c · L815-L843 (29 LOC)include/G2oTypes.h
class Edge4DoF : public g2o::BaseBinaryEdge<6,Vector6d,VertexPose4DoF,VertexPose4DoF>
{
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
Edge4DoF(const Eigen::Matrix4d &deltaT){
dTij = deltaT;
dRij = deltaT.block<3,3>(0,0);
dtij = deltaT.block<3,1>(0,3);
}
virtual bool read(std::istream& is){return false;}
virtual bool write(std::ostream& os) const{return false;}
void computeError(){
const VertexPose4DoF* VPi = static_cast<const VertexPose4DoF*>(_vertices[0]);
const VertexPose4DoF* VPj = static_cast<const VertexPose4DoF*>(_vertices[1]);
_error << LogSO3(VPi->estimate().Rcw[0]*VPj->estimate().Rcw[0].transpose()*dRij.transpose()),
VPi->estimate().Rcw[0]*(-VPj->estimate().Rcw[0].transpose()*VPj->estimate().tcw[0])+VPi->estimate().tcw[0] - dtij;
}
// virtual void linearizeOplus(); // numerical implementation
Eigen::Matrix4d dTij;
Eigen::Matrix3d dRij;
Eigen::Vector3d dtij;
};Repobility · open methodology · https://repobility.com/research/
Edge4DoF method · c · L819-L826 (8 LOC)include/G2oTypes.h
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
Edge4DoF(const Eigen::Matrix4d &deltaT){
dTij = deltaT;
dRij = deltaT.block<3,3>(0,0);
dtij = deltaT.block<3,1>(0,3);
}computeError method · c · L830-L836 (7 LOC)include/G2oTypes.h
void computeError(){
const VertexPose4DoF* VPi = static_cast<const VertexPose4DoF*>(_vertices[0]);
const VertexPose4DoF* VPj = static_cast<const VertexPose4DoF*>(_vertices[1]);
_error << LogSO3(VPi->estimate().Rcw[0]*VPj->estimate().Rcw[0].transpose()*dRij.transpose()),
VPi->estimate().Rcw[0]*(-VPj->estimate().Rcw[0].transpose()*VPj->estimate().tcw[0])+VPi->estimate().tcw[0] - dtij;
}GeometricTools class · c · L31-L75 (45 LOC)include/GeometricTools.h
class GeometricTools
{
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
// Compute the Fundamental matrix between KF1 and KF2
static Eigen::Matrix3f ComputeF12(KeyFrame* &pKF1, KeyFrame* &pKF2);
//Triangulate point with KF1 and KF2
static bool Triangulate(Eigen::Vector3f &x_c1, Eigen::Vector3f &x_c2,Eigen::Matrix<float,3,4> &Tc1w ,Eigen::Matrix<float,3,4> &Tc2w , Eigen::Vector3f &x3D);
template<int rows, int cols>
static bool CheckMatrices(const cv::Mat &cvMat, const Eigen::Matrix<float,rows,cols> &eigMat) {
const float epsilon = 1e-3;
// std::cout << cvMat.cols - cols << cvMat.rows - rows << std::endl;
if(rows != cvMat.rows || cols != cvMat.cols) {
std::cout << "wrong cvmat size\n";
return false;
}
for(int i = 0; i < rows; i++)
for(int j = 0; j < cols; j++)
if ((cvMat.at<float>(i,j) > (eigMat(i,j) + epsilon)) ||
(cvMat.at<float>(i,j) < (eigMat(i,j) - epCheckMatrices method · c · L41-L59 (19 LOC)include/GeometricTools.h
template<int rows, int cols>
static bool CheckMatrices(const cv::Mat &cvMat, const Eigen::Matrix<float,rows,cols> &eigMat) {
const float epsilon = 1e-3;
// std::cout << cvMat.cols - cols << cvMat.rows - rows << std::endl;
if(rows != cvMat.rows || cols != cvMat.cols) {
std::cout << "wrong cvmat size\n";
return false;
}
for(int i = 0; i < rows; i++)
for(int j = 0; j < cols; j++)
if ((cvMat.at<float>(i,j) > (eigMat(i,j) + epsilon)) ||
(cvMat.at<float>(i,j) < (eigMat(i,j) - epsilon))){
std::cout << "cv mat:\n" << cvMat << std::endl;
std::cout << "eig mat:\n" << eigMat << std::endl;
return false;
}
return true;
}CheckMatrices method · c · L60-L73 (14 LOC)include/GeometricTools.h
template<typename T, int rows, int cols>
static bool CheckMatrices( const Eigen::Matrix<T,rows,cols> &eigMat1, const Eigen::Matrix<T,rows,cols> &eigMat2) {
const float epsilon = 1e-3;
for(int i = 0; i < rows; i++)
for(int j = 0; j < cols; j++)
if ((eigMat1(i,j) > (eigMat2(i,j) + epsilon)) ||
(eigMat1(i,j) < (eigMat2(i,j) - epsilon))){
std::cout << "eig mat 1:\n" << eigMat1 << std::endl;
std::cout << "eig mat 2:\n" << eigMat2 << std::endl;
return false;
}
return true;
}Point class · c · L46-L59 (14 LOC)include/ImuTypes.h
class Point
{
public:
Point(const float &acc_x, const float &acc_y, const float &acc_z,
const float &ang_vel_x, const float &ang_vel_y, const float &ang_vel_z,
const double ×tamp): a(acc_x,acc_y,acc_z), w(ang_vel_x,ang_vel_y,ang_vel_z), t(timestamp){}
Point(const cv::Point3f Acc, const cv::Point3f Gyro, const double ×tamp):
a(Acc.x,Acc.y,Acc.z), w(Gyro.x,Gyro.y,Gyro.z), t(timestamp){}
public:
Eigen::Vector3f a;
Eigen::Vector3f w;
double t;
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};Bias class · c · L62-L89 (28 LOC)include/ImuTypes.h
class Bias
{
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & bax;
ar & bay;
ar & baz;
ar & bwx;
ar & bwy;
ar & bwz;
}
public:
Bias():bax(0),bay(0),baz(0),bwx(0),bwy(0),bwz(0){}
Bias(const float &b_acc_x, const float &b_acc_y, const float &b_acc_z,
const float &b_ang_vel_x, const float &b_ang_vel_y, const float &b_ang_vel_z):
bax(b_acc_x), bay(b_acc_y), baz(b_acc_z), bwx(b_ang_vel_x), bwy(b_ang_vel_y), bwz(b_ang_vel_z){}
void CopyFrom(Bias &b);
friend std::ostream& operator<< (std::ostream &out, const Bias &b);
public:
float bax, bay, baz;
float bwx, bwy, bwz;
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};serialize method · c · L65-L75 (11 LOC)include/ImuTypes.h
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & bax;
ar & bay;
ar & baz;
ar & bwx;
ar & bwy;
ar & bwz;
}Repobility's GitHub App fixes findings like these · https://github.com/apps/repobility-bot
Calib class · c · L92-L126 (35 LOC)include/ImuTypes.h
class Calib
{
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
serializeSophusSE3(ar,mTcb,version);
serializeSophusSE3(ar,mTbc,version);
ar & boost::serialization::make_array(Cov.diagonal().data(), Cov.diagonal().size());
ar & boost::serialization::make_array(CovWalk.diagonal().data(), CovWalk.diagonal().size());
ar & mbIsSet;
}
public:
Calib(const Sophus::SE3<float> &Tbc, const float &ng, const float &na, const float &ngw, const float &naw)
{
Set(Tbc,ng,na,ngw,naw);
}
Calib(const Calib &calib);
Calib(){mbIsSet = false;}
//void Set(const cv::Mat &cvTbc, const float &ng, const float &na, const float &ngw, const float &naw);
void Set(const Sophus::SE3<float> &sophTbc, const float &ng, const float &na, const float &ngw, const float &naw);
public:
// Sophus/Eigen implementation
Sophus::SE3<float> mTcb;
serialize method · c · L95-L105 (11 LOC)include/ImuTypes.h
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
serializeSophusSE3(ar,mTcb,version);
serializeSophusSE3(ar,mTbc,version);
ar & boost::serialization::make_array(Cov.diagonal().data(), Cov.diagonal().size());
ar & boost::serialization::make_array(CovWalk.diagonal().data(), CovWalk.diagonal().size());
ar & mbIsSet;
}Calib method · c · L106-L112 (7 LOC)include/ImuTypes.h
public:
Calib(const Sophus::SE3<float> &Tbc, const float &ng, const float &na, const float &ngw, const float &naw)
{
Set(Tbc,ng,na,ngw,naw);
}IntegratedRotation class · c · L129-L140 (12 LOC)include/ImuTypes.h
class IntegratedRotation
{
public:
IntegratedRotation(){}
IntegratedRotation(const Eigen::Vector3f &angVel, const Bias &imuBias, const float &time);
public:
float deltaT; //integration time
Eigen::Matrix3f deltaR;
Eigen::Matrix3f rightJ; // right jacobian
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};Preintegrated class · c · L143-L251 (109 LOC)include/ImuTypes.h
class Preintegrated
{
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & dT;
ar & boost::serialization::make_array(C.data(), C.size());
ar & boost::serialization::make_array(Info.data(), Info.size());
ar & boost::serialization::make_array(Nga.diagonal().data(), Nga.diagonal().size());
ar & boost::serialization::make_array(NgaWalk.diagonal().data(), NgaWalk.diagonal().size());
ar & b;
ar & boost::serialization::make_array(dR.data(), dR.size());
ar & boost::serialization::make_array(dV.data(), dV.size());
ar & boost::serialization::make_array(dP.data(), dP.size());
ar & boost::serialization::make_array(JRg.data(), JRg.size());
ar & boost::serialization::make_array(JVg.data(), JVg.size());
ar & boost::serialization::make_array(JVa.data(), JVa.size());
ar & boost::serialization::make_array(JPgserialize method · c · L146-L169 (24 LOC)include/ImuTypes.h
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & dT;
ar & boost::serialization::make_array(C.data(), C.size());
ar & boost::serialization::make_array(Info.data(), Info.size());
ar & boost::serialization::make_array(Nga.diagonal().data(), Nga.diagonal().size());
ar & boost::serialization::make_array(NgaWalk.diagonal().data(), NgaWalk.diagonal().size());
ar & b;
ar & boost::serialization::make_array(dR.data(), dR.size());
ar & boost::serialization::make_array(dV.data(), dV.size());
ar & boost::serialization::make_array(dP.data(), dP.size());
ar & boost::serialization::make_array(JRg.data(), JRg.size());
ar & boost::serialization::make_array(JVg.data(), JVg.size());
ar & boost::serialization::make_array(JVa.data(), JVa.size());
ar & boost::serialization::make_array(JPg.data(), JPg.size());
ar & boost::serialization::make_array(JprintMeasurements method · c · L201-L208 (8 LOC)include/ImuTypes.h
void printMeasurements() const {
std::cout << "pint meas:\n";
for(int i=0; i<mvMeasurements.size(); i++){
std::cout << "meas " << mvMeasurements[i].t << std::endl;
}
std::cout << "end pint meas:\n";
}serialize method · c · L233-L239 (7 LOC)include/ImuTypes.h
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & boost::serialization::make_array(a.data(), a.size());
ar & boost::serialization::make_array(w.data(), w.size());
ar & t;
}Want this analysis on your repo? https://repobility.com/scan/
integrable method · c · L240-L242 (3 LOC)include/ImuTypes.h
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
integrable(){}KeyFrameDatabase class · c · L45-L99 (55 LOC)include/KeyFrameDatabase.h
class KeyFrameDatabase
{
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive& ar, const unsigned int version)
{
ar & mvBackupInvertedFileId;
}
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
KeyFrameDatabase(){}
KeyFrameDatabase(const ORBVocabulary &voc);
void add(KeyFrame* pKF);
void erase(KeyFrame* pKF);
void clear();
void clearMap(Map* pMap);
// Loop Detection(DEPRECATED)
std::vector<KeyFrame *> DetectLoopCandidates(KeyFrame* pKF, float minScore);
// Loop and Merge Detection
void DetectCandidates(KeyFrame* pKF, float minScore,vector<KeyFrame*>& vpLoopCand, vector<KeyFrame*>& vpMergeCand);
void DetectBestCandidates(KeyFrame *pKF, vector<KeyFrame*> &vpLoopCand, vector<KeyFrame*> &vpMergeCand, int nMinWords);
void DetectNBestCandidates(KeyFrame *pKF, vector<KeyFrame*> &vpLoopCand, vector<KeyFrame*> &vpMergeCand, int nNumCandidates);
// Relocalization
std::vecserialize method · c · L50-L55 (6 LOC)include/KeyFrameDatabase.h
template<class Archive>
void serialize(Archive& ar, const unsigned int version)
{
ar & mvBackupInvertedFileId;
}KeyFrameDatabase method · c · L56-L60 (5 LOC)include/KeyFrameDatabase.h
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
KeyFrameDatabase(){}serialize method · c · L55-L193 (139 LOC)include/KeyFrame.h
template<class Archive>
void serialize(Archive& ar, const unsigned int version)
{
ar & mnId;
ar & const_cast<long unsigned int&>(mnFrameId);
ar & const_cast<double&>(mTimeStamp);
// Grid
ar & const_cast<int&>(mnGridCols);
ar & const_cast<int&>(mnGridRows);
ar & const_cast<float&>(mfGridElementWidthInv);
ar & const_cast<float&>(mfGridElementHeightInv);
// Variables of tracking
//ar & mnTrackReferenceForFrame;
//ar & mnFuseTargetForKF;
// Variables of local mapping
//ar & mnBALocalForKF;
//ar & mnBAFixedForKF;
//ar & mnNumberOfOpt;
// Variables used by KeyFrameDatabase
//ar & mnLoopQuery;
//ar & mnLoopWords;
//ar & mLoopScore;
//ar & mnRelocQuery;
//ar & mnRelocWords;
//ar & mRelocScore;
//ar & mnMergeQuery;
//ar & mnMergeWords;
//ar & mMergeScore;
//ar & mnPlaceRecogniweightComp method · c · L277-L280 (4 LOC)include/KeyFrame.h
static bool weightComp( int a, int b){
return a>b;
}lId method · c · L281-L284 (4 LOC)include/KeyFrame.h
static bool lId(KeyFrame* pKF1, KeyFrame* pKF2){
return pKF1->mnId<pKF2->mnId;
}PrintPointDistribution method · c · L526-L537 (12 LOC)include/KeyFrame.h
void PrintPointDistribution(){
int left = 0, right = 0;
int Nlim = (NLeft != -1) ? NLeft : N;
for(int i = 0; i < N; i++){
if(mvpMapPoints[i]){
if(i < Nlim) left++;
else right++;
}
}
cout << "Point distribution in KeyFrame: left-> " << left << " --- right-> " << right << endl;
}Repobility — same analyzer, your code, free for public repos · /scan/
LocalMapping class · c · L40-L198 (159 LOC)include/LocalMapping.h
class LocalMapping
{
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
LocalMapping(System* pSys, Atlas* pAtlas, const float bMonocular, bool bInertial, const string &_strSeqName=std::string());
void SetLoopCloser(LoopClosing* pLoopCloser);
void SetTracker(Tracking* pTracker);
// Main function
void Run();
void InsertKeyFrame(KeyFrame* pKF);
void EmptyQueue();
// Thread Synch
void RequestStop();
void RequestReset();
void RequestResetActiveMap(Map* pMap);
bool Stop();
void Release();
bool isStopped();
bool stopRequested();
bool AcceptKeyFrames();
void SetAcceptKeyFrames(bool flag);
bool SetNotStop(bool flag);
void InterruptBA();
void RequestFinish();
bool isFinished();
int KeyframesInQueue(){
unique_lock<std::mutex> lock(mMutexNewKFs);
return mlNewKeyFrames.size();
}
bool IsInitializing();
double GetCurrKFTime();
KeyFrame* GetCurrKF();
std::mutex mMutexImuInit;KeyframesInQueue method · c · L73-L77 (5 LOC)include/LocalMapping.h
int KeyframesInQueue(){
unique_lock<std::mutex> lock(mMutexNewKFs);
return mlNewKeyFrames.size();
}LoopClosing class · c · L44-L250 (207 LOC)include/LoopClosing.h
class LoopClosing
{
public:
typedef pair<set<KeyFrame*>,int> ConsistentGroup;
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<KeyFrame* const, g2o::Sim3> > > KeyFrameAndPose;
public:
LoopClosing(Atlas* pAtlas, KeyFrameDatabase* pDB, ORBVocabulary* pVoc,const bool bFixScale, const bool bActiveLC);
void SetTracker(Tracking* pTracker);
void SetLocalMapper(LocalMapping* pLocalMapper);
// Main function
void Run();
void InsertKeyFrame(KeyFrame *pKF);
void RequestReset();
void RequestResetActiveMap(Map* pMap);
// This function will run in a separate thread
void RunGlobalBundleAdjustment(Map* pActiveMap, unsigned long nLoopKF);
bool isRunningGBA(){
unique_lock<std::mutex> lock(mMutexGBA);
return mbRunningGBA;
}
bool isFinishedGBA(){
unique_lock<std::mutex> lock(mMutexGBA);
return mbFinishedGBA;
}
void RequestFinish();
boolisRunningGBA method · c · L72-L76 (5 LOC)include/LoopClosing.h
bool isRunningGBA(){
unique_lock<std::mutex> lock(mMutexGBA);
return mbRunningGBA;
}isFinishedGBA method · c · L77-L80 (4 LOC)include/LoopClosing.h
bool isFinishedGBA(){
unique_lock<std::mutex> lock(mMutexGBA);
return mbFinishedGBA;
} MapDrawer class · c · L35-L75 (41 LOC)include/MapDrawer.h
class MapDrawer
{
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
MapDrawer(Atlas* pAtlas, const string &strSettingPath, Settings* settings);
void newParameterLoader(Settings* settings);
Atlas* mpAtlas;
void DrawMapPoints();
void DrawKeyFrames(const bool bDrawKF, const bool bDrawGraph, const bool bDrawInertialGraph, const bool bDrawOptLba);
void DrawCurrentCamera(pangolin::OpenGlMatrix &Twc);
void SetCurrentCameraPose(const Sophus::SE3f &Tcw);
void SetReferenceKeyFrame(KeyFrame *pKF);
void GetCurrentOpenGLCameraMatrix(pangolin::OpenGlMatrix &M, pangolin::OpenGlMatrix &MOw);
private:
bool ParseViewerParamFile(cv::FileStorage &fSettings);
float mKeyFrameSize;
float mKeyFrameLineWidth;
float mGraphLineWidth;
float mPointSize;
float mCameraSize;
float mCameraLineWidth;
Sophus::SE3f mCameraPose;
std::mutex mMutexCamera;
float mfFrameColors[6][3] = {{0.0f, 0.0f, 1.0f},
{0.8f, 0.4Map class · c · L40-L204 (165 LOC)include/Map.h
class Map
{
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & mnId;
ar & mnInitKFid;
ar & mnMaxKFid;
ar & mnBigChangeIdx;
// Save/load a set structure, the set structure is broken in libboost 1.58 for ubuntu 16.04, a vector is serializated
//ar & mspKeyFrames;
//ar & mspMapPoints;
ar & mvpBackupKeyFrames;
ar & mvpBackupMapPoints;
ar & mvBackupKeyFrameOriginsId;
ar & mnBackupKFinitialID;
ar & mnBackupKFlowerID;
ar & mbImuInitialized;
ar & mbIsInertial;
ar & mbIMU_BA1;
ar & mbIMU_BA2;
}
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
Map();
Map(int initKFid);
~Map();
void AddKeyFrame(KeyFrame* pKF);
void AddMapPoint(MapPoint* pMP);
void EraseMapPoint(MapPoint* pMP);
void EraseKeyFrame(KeyFrame* pKF);
void SetReferenceMapPoints(cserialize method · c · L44-L68 (25 LOC)include/Map.h
template<class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & mnId;
ar & mnInitKFid;
ar & mnMaxKFid;
ar & mnBigChangeIdx;
// Save/load a set structure, the set structure is broken in libboost 1.58 for ubuntu 16.04, a vector is serializated
//ar & mspKeyFrames;
//ar & mspMapPoints;
ar & mvpBackupKeyFrames;
ar & mvpBackupMapPoints;
ar & mvBackupKeyFrameOriginsId;
ar & mnBackupKFinitialID;
ar & mnBackupKFlowerID;
ar & mbImuInitialized;
ar & mbIsInertial;
ar & mbIMU_BA1;
ar & mbIMU_BA2;
}Repobility · open methodology · https://repobility.com/research/
MapPoint class · c · L43-L252 (210 LOC)include/MapPoint.h
class MapPoint
{
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & mnId;
ar & mnFirstKFid;
ar & mnFirstFrame;
ar & nObs;
// Variables used by the tracking
//ar & mTrackProjX;
//ar & mTrackProjY;
//ar & mTrackDepth;
//ar & mTrackDepthR;
//ar & mTrackProjXR;
//ar & mTrackProjYR;
//ar & mbTrackInView;
//ar & mbTrackInViewR;
//ar & mnTrackScaleLevel;
//ar & mnTrackScaleLevelR;
//ar & mTrackViewCos;
//ar & mTrackViewCosR;
//ar & mnTrackReferenceForFrame;
//ar & mnLastFrameSeen;
// Variables used by local mapping
//ar & mnBALocalForKF;
//ar & mnFuseCandidateForKF;
// Variables used by loop closing and merging
//ar & mnLoopPointForKF;
//ar & mnCorrectedByKF;
//ar & mnCorrectedReference;
serialize method · c · L48-L103 (56 LOC)include/MapPoint.h
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & mnId;
ar & mnFirstKFid;
ar & mnFirstFrame;
ar & nObs;
// Variables used by the tracking
//ar & mTrackProjX;
//ar & mTrackProjY;
//ar & mTrackDepth;
//ar & mTrackDepthR;
//ar & mTrackProjXR;
//ar & mTrackProjYR;
//ar & mbTrackInView;
//ar & mbTrackInViewR;
//ar & mnTrackScaleLevel;
//ar & mnTrackScaleLevelR;
//ar & mTrackViewCos;
//ar & mTrackViewCosR;
//ar & mnTrackReferenceForFrame;
//ar & mnLastFrameSeen;
// Variables used by local mapping
//ar & mnBALocalForKF;
//ar & mnFuseCandidateForKF;
// Variables used by loop closing and merging
//ar & mnLoopPointForKF;
//ar & mnCorrectedByKF;
//ar & mnCorrectedReference;
//serializeMatrix(ar,mPosGBA,version);
//ar & mnBAGlGetFound method · c · L140-L142 (3 LOC)include/MapPoint.h
inline int GetFound(){
return mnFound;
}