SLAM学习三:C++命名规范

ORB-SLAM2中变量和函数很多,学会了命名结构,能让我们快速的理解是代表什么意思,方便我们后续写代码的时候,比如引用类的成员时,是用 . 还是用->。

代码示例:

    System.h文件:   
        eSensor mSensor;  
        ORBVocabulary* mpVocabulary; 
        bool mbActivateLocalizationMode;
        
    ORBextractor.h文件:   
        bool bNoMore; 
        std::vector<cv::Mat> mvImagePyramid;
        int nlevels;    
        std::vector<float> mvScaleFactor;    


命名规范:

接下来就是这些晦涩难懂的命名规范

	以小写字母m(member的首字母)开头的变量表示类的成员变量。比如:
	int mSensor;
	int mTrackingState;
	std::mutex mMutexMode;
	对于某些复杂的数据类型,第2个甚至第3个字母也有一定的意义,比如:
	mp开头的变量表示指针(pointer)型类成员变量;
	Tracking* mpTracker;
	LocalMapping* mpLocalMapper;
	LoopClosing* mpLoopCloser;
	Viewer* mpViewer;
	mb开头的变量表示布尔(bool)型类成员变量;
	bool mbOnlyTracking;
	mpt开头的变量表示指针(pointer)型类成员变量,并且它是一个线程(thread);
	std::thread* mptLocalMapping;
	std::thread* mptLoopClosing;
	std::thread* mptViewer;
	ml开头的变量表示列表(list)型类成员变量;
	mlp开头的变量表示列表(list)型类成员变量,并且它的元素类型是指针(pointer);
	mlb开头的变量表示列表(list)型类成员变量,并且它的元素类型是布尔型(bool);
	list<double> mlFrameTimes;
	list<bool> mlbLost;
	list<cv::Mat> mlRelativeFramePoses;
	list<KeyFrame*> mlpReferences;

我们能够简单区分一个变量的属性,会为我们阅读或者编写代码节约时间,比如在索引一个类对象的成员时,根据命名我们就能知道应该使用 . 还是–> 进行引用。

补充知识:

引用成员: 类对象: 用"."操作符

                  类指针: 用"->"操作符

class Data
{
public:
    Data(){cout << "Data::Data()" << endl;}
    ~Data(){}
    void setData(int data) { cout << "Data::setData" << endl; m_iData = data; }
    int getData() { return m_iData; }
private:
    int m_iData;
};


Data a; //实例化一个类对象a
a.setData(1);
 
// Data *b = new Data();
Data *b; //实例化一个类指针b
b =  new Data();
b->setData(2);

源码的总体框架:以mono_kitti.cc为例子

    1、加载图像数据,配置文件
    2、启动系统,然后for循环进行追踪
    3、系统停止
对应代码为

int main(int argc, char **argv){
	// 从关联文件中,获得所有RGB图像路径以及深度图路径
	LoadImages(string(argv[3]), vstrImageFilenames, vTimestamps);

    //初始化ORB-SLAM2系统
    ORB_SLAM2::System SLAM(argv[1],argv[2],ORB_SLAM2::System::MONOCULAR,true);

	//对图像序列中的每张图像展开遍历
    for(int ni=0; ni<nImages; ni++)
    	im = cv::imread(vstrImageFilenames[ni],CV_LOAD_IMAGE_UNCHANGED);
        double tframe = vTimestamps[ni];
        // 根据输入的图像进行追踪
        SLAM.TrackMonocular(im,tframe);

	 SLAM.Shutdown(); //系统停止
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值