第十章g2o_custombundle中的common文件夹中的BundleParams.h

来源:互联网 发布:数据分析师前景如何 编辑:程序博客网 时间:2024/05/21 17:20

这个文件就是定义BA优化中用到的所有参数变量。并利用CommandArgs类进行变量管理。比如赋默认值等。
这里再啰嗦一遍,CommandArgs类只是一个变量(这里就是BA用到的所有参数了)管理类,真正的变量(这里就是参数集了)定义是在这个头文件中,也就是所有参数都定义在BundleParams这个结构体中。
其中有一些参数因为还没看BA的代码,所以没搞清楚,只是大概写了写,但是在这里不是重点,重点是,这个结构体中定义BA所需要的所有参数,不管干啥用的,肯定是个参数而已。

贴代码:

#ifndef BUNDLEPARAMS_H#define BUNDLEPARAMS_H#include <string>#include "flags/command_args.h"using namespace std;/** * 这个结构体定义了Bundle Adjustment使用所有参数。 * 说一下整体的结构和逻辑: * 结构体名称非常直观,就是BA的参数,当然成员就是一堆参数了 * 那在最后用CommandArgs arg;这么一句,相当于创建了一个参数描述类, * 结构成员定义完毕,开始构造函数。 * 构造函数中首先调用arg这个类中的.param()函数,这个函数有两个功能: * 1、给上面定义的每一个参数后面挂一个结构体类型的描述,name、type等等描述 * 2、给这这些参数赋了一些值,也就是默认值了。 * 然后构造函数又调用了arg这个类中的.parseArgs()函数。这个函数功能就是检查一下命令行中有没有用户自定义的参数值,有的话读进来将默认值覆盖。 */struct BundleParams{public:    //构造函数,在后面定义,这里只声明。    BundleParams(int argc, char** argv);    //析构函数    virtual ~BundleParams(){};public:    //这里的一堆参数才是实打实的BA程序中要用的参数变量!!    //输入,那个文件被处理    string input;    //信赖域策略    string trust_region_strategy;    //线性求解器    string linear_solver;    //稀疏的线性代数求解器    string sparse_linear_algebra_library;    //稠密的线性代数求解器    string dense_linear_algebra_library;    //是否鲁棒??还没整明白    bool robustify; // loss function    // double eta;    //迭代次数    int num_iterations;    // for making noise    //噪声发生器    //随机种子    int random_seed;    //旋转sigma    double rotation_sigma;    //变换sigma    double translation_sigma;    //空间点sigma    double point_sigma;    // for point cloud file...    //原始点云    string initial_ply;    //优化后点云    string final_ply;    //此类在command_args.h中,用于解析用户输入的参数    //创建一个命令行参数类实例,通过下面的构造函数,对这个实例的成员进行赋值。    CommandArgs arg;};//构造函数定义,注意看,前面还是要加上类名称空间BundleParams:://这里看见,直接处理的命令行,也就是main()中的第一句:BundleParams params(argc,argv),用命令行实例化一个BundleParamsBundleParams::BundleParams(int argc, char** argv){    /**     * 这一堆瞅着有点蛋疼和复杂。。。     * 慢慢看用法结构:.para()是个函数,下面用法有多种,参数列表也有很多种,明显是一个重载。     * 点开定义去看,.param()在CommandArgs类中。     * 从用法上看出来:(参数名称,参数,参数值,参数描述)     */    //这个input就是要被BA的数据集。也就是要被处理的文件名。在这个程序里用的就是data文件夹下的problem-16-22106-pre.txt文件。    //发现默认值是空字符串,所以这种就是肯定要通过命令行输入进来值的参数。    arg.param("input", input, "", "file which will be processed");    arg.param("trust_region_strategy", trust_region_strategy, "levenberg_marquardt",              "Options are: levenberg_marquardt, dogleg.");    arg.param("linear_solver", linear_solver, "dense_schur",                             // iterative schur and cgnr(pcg) leave behind...              "Options are: sparse_schur, dense_schur");    // arg.param("sparse_linear_algebra_library", sparse_linear_algebra_library, "suite_sparse", "Options are: suite_sparse and cx_sparse.");    // arg.param("dense_linear_algebra_library", dense_linear_algebra_library, "eigen", "Options are: eigen and lapack.");    // arg.param("ordering",ordering,"automatic","Options are: automatic, user.");    arg.param("robustify", robustify, false, "Use a robust loss function");    // arg.param("num_threads",num_threads,1, "Number of threads.");    arg.param("num_iterations", num_iterations,20, "Number of iterations.");    arg.param("rotation_sigma", rotation_sigma, 0.0, "Standard deviation of camera rotation "            "perturbation.");    arg.param("translation_sigma", translation_sigma,0.0, "translation perturbation.");    arg.param("point_sigma",point_sigma,0.0,"Standard deviation of the point "            "perturbation.");    arg.param("random_seed", random_seed, 38401,"Random seed used to set the state ");    arg.param("initial_ply", initial_ply,"initial.ply","Export the BAL file data as a PLY file.");    arg.param("final_ply", final_ply, "final.ply", "Export the refined BAL file data as a PLY");    //解析命令行中的参数,看看有没有新值过来,有的话就覆盖。    arg.parseArgs(argc, argv);}#endif

2017年10月2日19:57 晟碟假期中的会议室 午饭还没吃。。。

原创粉丝点击