C++笔记-针对从0到1学习VIO中代码中的遗忘知识点

C+±项目笔记-针对从0到1学习VIO中代码中的遗忘知识点

代码举例

父类

class Edge {
public:
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW;

    /**
     * 构造函数,会自动化配雅可比的空间
     * @param residual_dimension 残差维度
     * @param num_verticies 顶点数量
     * @param verticies_types 顶点类型名称,可以不给,不给的话check中不会检查
     */
    //explicit关键字的作用就是防止类构造函数的隐式自动转换 
    explicit Edge(int residual_dimension, int num_verticies,
                  const std::vector<std::string> &verticies_types = std::vector<std::string>());

    virtual ~Edge();//基类的析构函数是虚函数
    
	virtual void ComputeResidual() = 0;
    ,,,
   }

子类

class CurveFittingEdge: public Edge
{
public:
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW
    CurveFittingEdge( double x, double y ): Edge(1,1, std::vector<std::string>{"abc"})//子类显示调用父类的构造函数
    {
        x_ = x;
        y_ = y;
    }
    // 计算曲线模型误差
    virtual void ComputeResidual() override //virtual override 同时修饰函数讲解 https://blog.csdn.net/quietbxj/article/details/112979555
    {
        Vec3 abc = verticies_[0]->Parameters();  // 估计的参数
        residual_(0) = std::exp( abc(0)*x_*x_ + abc(1)*x_ + abc(2) ) - y_;  // 构建残差
    }
    ,,,
}

1. 继承

以下代码表示公共继承,基类public中成员函数与成员变量均可以被子类继承

class CurveFittingEdge: public Edge 

以下代码表示子类显示调用父类的构造函数,即子类初始化前应该完成父类的初始化

    CurveFittingEdge( double x, double y ): Edge(1,1, std::vector<std::string>{"abc"})//子类显示调用父类的构造函数
    {
        x_ = x;
        y_ = y;
    }

2.explicit关键字

explicit关键字详细解释

以下代码中explicit关键字的作用就是防止类构造函数的隐式自动转换,但是在下面无意义,因为参数不是单独参数,而且多参数也没有默认值

    explicit Edge(int residual_dimension, int num_verticies,
                  const std::vector<std::string> &verticies_types = std::vector<std::string>());

2.virtual、override关键字同时修饰函数

详细解释

父类中用virtual修饰,不实现,纯虚函数,子类实现同名函数的时候重写函数,用基类指针或子类指针调用时,调用到的都是子类的函数。
父类

	virtual void ComputeResidual() = 0;

在派生类的成员函数中使用override时,如果基类中无此函数,或基类中的函数并不是虚函数,编译器会给出相关错误信息,子类中的virtual可加或者不加
子类

 virtual void ComputeResidual() override
    {
        Vec3 abc = verticies_[0]->Parameters();  // 估计的参数
        residual_(0) = std::exp( abc(0)*x_*x_ + abc(1)*x_ + abc(2) ) - y_;  // 构建残差
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以为您提供有关msckf-vio代码的分析。MSCKF-VIO是一种基于滑动窗口的多传感器融合视觉惯性里程计(Visual-Inertial Odometry)算法。它结合了相机和惯性测量单元(IMU)的数据,以实现高精度的相机位姿估计和三维结构重建。 MSCKF-VIO代码一般包括以下几个主要部分: 1. 特征提取和跟踪:通过图像处理技术,提取图像的特征点,并进行跟踪。这些特征点通常是具有良好纹理和独特性质的点,例如角点或边缘。 2. 视觉前端:视觉前端负责处理相机的图像数据,并提取特征点的深度信息。它使用视觉里程计(Visual Odometry)算法来估计相机的运动,并创建一个稀疏地图。 3. 惯性测量单元(IMU)预积分:IMU预积分模块将IMU的测量数据与相机的视觉估计结果进行融合。通过对IMU数据进行积分,得到相机的运动模型。这个模型用于优化相机位姿的估计。 4. 后端优化:后端优化模块使用滑动窗口优化(Smoothing and Mapping for Consistent Estimation,简称SAMC)算法,对相机和IMU的位姿进行优化。它通过最小化误差函数来提高位姿估计的精度,并维护一个一致的稀疏地图。 这只是对MSCKF-VIO代码的一个简要概述。实际上,代码可能还包括数据预处理、误差传播和滤波等其他模块。如果您需要更具体的代码分析,请提供相关的代码或问题,我会尽力为您解答。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值