2.在代码中分析VINS---图解特征点管理(feature_manager.h)

这篇博客主要讲解VINS中特征点的管理,它主要涉及3个类,位于feature_manager.h中的FeaturePerFrame、FeaturePerId、FeatureManager

1.特征点管理示意图


上图中有两个路标特征点P1,P2,分别被帧1~2,2~4观测到。

2.FeaturePerId

就特征点P1来说,它被两个帧观测到,第一次观测到P1的帧为frame1,即start_frame=1,最后一次观测到P1的帧为frame2,即endframe()=2,并把start_frame~endframe() 对应帧的属性存储起来,对应的示意图如下:

上述对应的代码为:

class FeaturePerId//管理一个特征点
{
  public:
    const int feature_id;//特征点id
    int start_frame;//第一次出现该特征点的帧号
    vector<FeaturePerFrame> feature_per_frame;//管理对应帧的属性
    int used_num;//出现的次数
    double estimated_depth;//逆深度
    int solve_flag; // 0 haven't solve yet; 1 solve succ; 2 solve fail;该特征点的状态,是否被三角化
    Vector3d gt_p;
    FeaturePerId(int _feature_id, int _start_frame)//以feature_id为索引,并保存了出现该角点的第一帧的id
        : feature_id(_feature_id), start_frame(_start_frame),
          used_num(0), estimated_depth(-1.0), solve_flag(0)
    {
    }
    int endFrame();//得到该特征点最后一次跟踪到的帧号
};

3.FeaturePerFrame

在上面提到对应帧的属性这个概念,它指的是空间特征点P1映射到frame1或frame2上对应的图像坐标、特征点的跟踪速度、空间坐标等属性都封装到类FeaturePerFrame中,对应的示意图如下:

它对应的代码为:

class FeaturePerFrame//一个特征点的属性
{
  public:
    FeaturePerFrame(const Eigen::Matrix<double, 7, 1> &_point, double td)
    {
        point.x() = _point(0);
        point.y() = _point(1);
        point.z() = _point(2);
        uv.x() = _point(3);
        uv.y() = _point(4);
        velocity.x() = _point(5); 
        velocity.y() = _point(6); 
        cur_td = td;
    }
    double cur_td;//imu-camera的不同步时的相差时间
    Vector3d point;//特征点空间坐标
    Vector2d uv;//特征点映射到该帧上的图像坐标
    Vector2d velocity;//特征点的跟踪速度
    double z;
    bool is_used;
    double parallax;
    MatrixXd A;
    VectorXd b;
    double dep_gradient;
};

4.FeaturePerId

上述是对一个特征点讨论的,如果是对所有的特征点进行讨论的话,则可以构建list容器,存储每一个特征点,对应的示意图如下:

对应代码为:

class FeatureManager//管理所有i特征点
{
list<FeaturePerId> feature;//存储每一个特征点,及其对应的每帧的属性
}

5.说明

前面只是对特征点的管理做了一个最简单的概述,其实真实特征点的管理很复杂,还得考虑特征点的三角化、两帧之间的视差处理等等。

全部评论

相关推荐

杨柳哥:这不是普通人,那这个钱的是天才
点赞 评论 收藏
分享
工作基本定了,比较满意。这深度学习真是难搞啊,论文看不懂,代码看不懂,不会改,创新点???&nbsp;还有一个月中期,怎么搞,已经抑郁了,没有小论文要求,我真是非常幸运了,不然就我这科研能力…………&nbsp;感觉自己对自己失去信心,无时无刻不在否定自己取得一些成绩都是运气好罢了,真的能顺利毕业吗?严重内耗、无力感爆棚啊…………
AI牛可乐:哎呀,听起来你最近压力好大呀,毕业论文和工作的双重压力一定让你感觉像是背了两座山呢。深度学习确实挺复杂的,就像是要在一片迷雾中找到出路一样。但是,你已经很棒了,工作都定好了,这是很大的成就呢! 论文的事情,别太担心。每个人都有看不懂代码和论文的时候,这是正常的。至于创新点嘛,有时候灵感就像小猫一样,需要一点一点地哄出来的。你可以先试试把你看过的资料整理一下,说不定就能找到新的思路呢。 中期答辩前,你可以列个计划,一步一步来,把大问题分解成小问题,一点一点克服。记得,你不是一个人在战斗,你的导师、同学都是你的战友哦。 至于信心嘛,别否定自己,每个人都会有低谷的时候。你已经取得的成绩,都是你实力的体现。毕业不是问题,只要你不放弃,就一定能顺利走过去的。加油哦,我相信你可以的! 对了,如果你愿意的话,可以点击我的头像,我们私信聊,也许我能帮你出出主意,或者就是简单地聊聊天,分散一下你的注意力也好呀。🐮💪🌟
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务