开源MSCKF对比

2023-05-16

开源MSCKF对比

  • 综述
    • 评价指标介绍
  • MSCKF_MONO
  • MSCKF_VIO

综述

本次将对比MSCKF里面主要的四种开源的方法,它们按时间顺序分别是msckf_mono,msckf_vio,r-vio,open_vins。主要是对比它们在EuROC数据集上的表现,对比将包括论文对比结果以及实际用数据集测试的结果。实际测试主要对比的是累计误差,初步想法应该是计算初始位置和结束位置之间的距离。

评价指标介绍

参考https://zhuanlan.zhihu.com/p/105428199

  • RPE(relative pose error):它描述的是固定时间差的两帧之间位姿差和真实位姿差之间的误差,它的定义如下:
    在这里插入图片描述
    简单推导如下:
    在这里插入图片描述

MSCKF_MONO

MSCKF_VIO

论文中的数据
在这里插入图片描述

自己测试
步骤如下:

  1. 更改S-MSCKF使之可以保存vio.txt轨迹数据,参考https://blog.csdn.net/slzlincent/article/details/105161113,细微调整如下:
  2. 更改都在msckf_vio.cpp中进行,首先在开头的头文件部分加入一个头文件
#include <thread> 
  1. 在bool MsckfVio::loadParameters()函数定义结束后面加入如下代码,注意更改 fopen("/home/lincent/s_msckf_ws/vio.txt",“w”);为自己对应的目录
#if 1
static const int p_max_cnt = 10000;
static const int p_cols = 8;
static double *p_log_data = new double[p_max_cnt * p_cols];
static int p_cnt = 0;
void mylog()
{
    FILE* fp = fopen("/home/lincent/s_msckf_ws/vio.txt","w");
    int k = 0;
    while(1)
    {
        if(k < p_cnt)
        {
            for(int i=0; i<p_cols; i++)
            {
                if(i > 0) fprintf(fp, " ");
                fprintf(fp, "%f", p_log_data[p_cols * k + i]);
            }
            fprintf(fp, "\n");
            fflush(fp);
            k++;
        }
        else
        {
            usleep(100000);
        }
    }
    fclose(fp);
}
static std::thread th_log(mylog);
#endif
  1. 在const CameraMeasurementConstPtr& msg)函数定义内部的最后部位,return;之前,加入如下代码:
#if 1
    const auto& s = state_server.imu_state;
    const auto& p = s.position;
    const auto& q = s.orientation;
    const auto& v = s.velocity;
    const auto& ba = s.acc_bias;
    const auto& bg = s.gyro_bias;
    double *lp = p_log_data + p_cnt * p_cols;
    lp[0] = s.time;
    lp[1] = p(0);
    lp[2] = p(1);
    lp[3] = p(2);
    lp[4] = q.w();
    lp[5] = q.x();
    lp[6] = q.y();
    lp[7] = q.z();
    //lp[8] = v(0);
    //lp[9] = v(1);
    //lp[10] = v(2);
    //lp[11] = ba(0);
    //lp[12] = ba(1);
    //lp[13] = ba(2);
    //lp[14] = bg(0);
    //lp[15] = bg(1);
    //lp[16] = bg(2);
    //lp[17] = processing_time;
    p_cnt++;
#endif
  1. 然后编译运行代码即可,参考https://blog.csdn.net/xiaoxiaoyikesu/article/details/106300423
  2. 评测首先要安装evo,参考https://github.com/MichaelGrupp/evo,如果安装后找不到evo,尝试重启电脑
  3. 先把euroc的真值转换为tum,记得更改data.csv目录,在euroc的zip包中可以找到
evo_traj euroc data.csv --save_as_tum
  1. 正式评测,记得更改相应目录和对应的文件名
#输出轨迹、ape、rpe, p表示plot, va进行轨迹对齐
evo_traj tum vio.txt --ref groundtruth.tum -p -va
evo_ape tum groundtruth.tum vio.txt -p -va
evo_rpe tum groundtruth.tum vio.txt -p -va
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开源MSCKF对比 的相关文章

  • 【泡泡机器人公开课】第一O五课:MSCKF介绍-邱笑晨

    转载自 xff1a https mp weixin qq com s sGSxJAZcSJ9uoGyXvx3gEg 泡泡机器人公开课 第一O五课 xff1a MSCKF介绍 邱笑晨 原创 邱笑晨 泡泡机器人SLAM 2019 06 30 欢
  • MSCKF那些事(二)S-MSCKF试用与源码解析

    转载自 xff1a https zhuanlan zhihu com p 76347723
  • 有MSCKF讲解的课程

    有MSCKF讲解的课程 https blog csdn net sinat 16643223 article details 114456269 https www shenlanxueyuan com course 201 source
  • MSCKF_VIO作者就是用小觅双目摄像头跑的

    https gitee com maxibooksiyi msckf vio GPS 我在youtube上也看到有人用小觅摄像头跑MSCKF VIO 还有小觅自己也写过用小觅摄像头跑MSCKF https blog csdn net sin
  • 任何的卡尔曼滤波器的研究都要紧紧围绕状态与方差的传播特性。 让我想起MSCKF是误差状态的EKF模型。

    任何的卡尔曼滤波器的研究都要紧紧围绕状态与方差的传播特性 让我想起MSCKF是误差状态的EKF模型 传播特性应该就是指预测方差或者递推方程 xff1f https blog csdn net sinat 16643223 article d
  • MSCKF

    https github com TurtleZhong msckf mono
  • 运行msckf_vio

    1 编译 cd span class token operator span span class token operator span msckf catkin make span class token operator span p
  • MSCKF代码梳理

    梳理一遍MSCKF代码 xff0c 也作为复习
  • MSCKF-vio源码阅读

    作为一个菜狗来说 xff0c 一开始弄明白kf ekf等滤波方法实属不易 xff0c 但是一旦理解原理之后再发散到基于滤波的状态估计方法 xff0c 学习起来就会事半功倍 xff0c 就像导航包中的robot pose ekf xff0c
  • ubuntu16.04运行MSCKF Mono

    仅作为笔记 环境 xff1a ROS Kinetic Boost OpenCV Eigen fast 依赖 span class token function sudo span span class token function apt
  • 视觉惯性里程计 综述 VIO Visual Inertial Odometry msckf ROVIO ssf msf okvis ORB-VINS VINS-Mono gtsam

    视觉惯性里程计 VIO Visual Inertial Odometry 视觉 惯性导航融合SLAM方案 博文末尾支持二维码赞赏哦 视觉惯性SLAM专栏 VINS技术路线与代码详解 VINS理论与代码详解0 理论基础白话篇 vio data
  • 开源MSCKF对比

    开源MSCKF对比 综述评价指标介绍 MSCKF MONOMSCKF VIO 综述 本次将对比MSCKF里面主要的四种开源的方法 xff0c 它们按时间顺序分别是msckf mono msckf vio r vio open vins 主要
  • S-MSCKF代码阅读

    阅读学习代码 文章目录 第一部分 xff1a 相关库函数介绍1 pluginlib理解与示例2 nodelet3 launch文件4 Eigen内存分配器5 std map的第三个参数6 image transport7 message f
  • MSCKF

    主要数据结构 xff1a StateServer当前里程计状态 imu状态 若干相机位姿 状态协方差矩阵 噪声协方差 struct StateServer IMUState imu state CamStateServer cam stat
  • 运行msckf_vio

    MSCKF vio是一种基于多状态约束卡尔曼滤波器的双目视觉里程计 其中多状态约束是指将多帧图像的相机位姿加入卡尔曼状态向量中 xff0c 在进行卡尔曼增益之前通过多帧图像之间的约束进行最小二乘优化来估计特征点的空间位置 xff0c 然后根
  • ROS kinetic 运行s_msckf和 vins_fusion

    s msckf xff1a 采用多状态约束的双目vio系统 注意 imuCallback xff1a 接收IMU数据 xff0c 将IMU数据存到imu msg buffer中 xff0c 这里只会利用开头200帧IMU数据进行静止初始化
  • 20.9.24 msckf_vio学习——源码试用问题

    msckf vio学习参考文见 xff1a https zhuanlan zhihu com p 76347723 本文主要解决在运行时的一些报错问题 xff1a 1 编译时出现没有random numbers的问题 博文 2 测试时 xf
  • msckf_vio使用记录

    使用环境 xff1a ubuntu14 04 indigo indigo版本的ros默认支持的是opencv2 4 8 xff0c 其带的库cv bridge依赖于opencv2 但是 xff0c msckf vio使用的是Ubuntu 1
  • MSCKF 源码解析 一

    论文 xff1a https arxiv org abs 1712 00036 源码路径 https github com daniilidis group msckf mono 源码框架 上图展示了整个msckf源码框架 xff0c 每当
  • msckf_mono构建运行方法

    背景 博主是在读Davide Scaramuzza投稿到ICRA 2018的VIO综述文章 A Benchmark Comparison of Monocular Visual Odometry Algorithms for Flying

随机推荐