VINS-Fusion轨迹评估

代码轨迹输出修改

  1. visualization.cpp
    VINS-Fusion-master\vins_estimator\src\utility\visualization.cpp的150行左右:
/*修改前
        // write result to file
        ofstream foutC(VINS_RESULT_PATH, ios::app);
        foutC.setf(ios::fixed, ios::floatfield);
        foutC.precision(0);
        foutC << header.stamp.toSec() * 1e9 << ",";
        foutC.precision(5);
        foutC << estimator.Ps[WINDOW_SIZE].x() << ","
              << estimator.Ps[WINDOW_SIZE].y() << ","
              << estimator.Ps[WINDOW_SIZE].z() << ","
              << tmp_Q.w() << ","
              << tmp_Q.x() << ","
              << tmp_Q.y() << ","
              << tmp_Q.z() << ","
              << estimator.Vs[WINDOW_SIZE].x() << ","
              << estimator.Vs[WINDOW_SIZE].y() << ","
              << estimator.Vs[WINDOW_SIZE].z() << "," << endl;
        foutC.close();
*/
//修改后
        double truetime = header.stamp.toSec();
        ofstream foutC("/home/cy/projects/VINS-Fusion/src/VINS-Fusion-master/data/result.csv", ios::app);
        foutC.setf(ios::fixed, ios::floatfield);
        foutC << truetime <<" ";
        foutC << estimator.Ps[WINDOW_SIZE].x() << " "
              << estimator.Ps[WINDOW_SIZE].y() << " "
              << estimator.Ps[WINDOW_SIZE].z() << " "
              << tmp_Q.x() << " "
              << tmp_Q.y() << " "
              << tmp_Q.z() << " "
              << tmp_Q.w() << endl;
        foutC.close();
  1. pose_graph.cpp(如果没开回环可以不改)
    VINS-Fusion-master\loop_fusion\src\pose_graph.cpp的190行左右
/*修改前
    if (SAVE_LOOP_PATH)
    {
        ofstream loop_path_file(VINS_RESULT_PATH, ios::app);
        loop_path_file.setf(ios::fixed, ios::floatfield);
        loop_path_file.precision(0);
        loop_path_file << cur_kf->time_stamp * 1e9 << ",";
        loop_path_file.precision(5);
        loop_path_file  << P.x() << ","
              << P.y() << ","
              << P.z() << ","
              << Q.w() << ","
              << Q.x() << ","
              << Q.y() << ","
              << Q.z() << ","
              << endl;
        loop_path_file.close();
    }
*/
//修改后
    if (SAVE_LOOP_PATH)
    {
        ofstream loop_path_file("/home/cy/projects/VINS-Fusion/src/VINS-Fusion-master/data/loop_result.csv", ios::app);
        double turetime = cur_kf->time_stamp;
        loop_path_file.setf(ios::fixed, ios::floatfield);
        loop_path_file << turetime << " ";
        loop_path_file  << P.x() << " "
              << P.y() << " "
              << P.z() << " "
              << Q.x() << " "
              << Q.y() << " "
              << Q.z() << " "
              << Q.w() << " "
              << endl;
        loop_path_file.close();
    }
  1. globalOptNode.cpp
    VINS-Fusion-master\global_fusion\src\globalOptNode.cpp的150行左右
/*修改前
    // write result to file
    std::ofstream foutC("/home/tony-ws1/output/vio_global.csv", ios::app);
    foutC.setf(ios::fixed, ios::floatfield);
    foutC.precision(0);
    foutC << pose_msg->header.stamp.toSec() * 1e9 << ",";
    foutC.precision(5);
    foutC << global_t.x() << ","
            << global_t.y() << ","
            << global_t.z() << ","
            << global_q.w() << ","
            << global_q.x() << ","
            << global_q.y() << ","
            << global_q.z() << endl;
    foutC.close();
*/
//修改后
    std::ofstream foutC("/home/cy/projects/VINS-Fusion/src/VINS-Fusion-master/data/vio_global.csv", ios::app);
    foutC.setf(ios::fixed, ios::floatfield);
    foutC.precision(0);
    foutC << pose_msg->header.stamp.toSec() << " ";
    foutC.precision(5);
    foutC << global_t.x() << " "
            << global_t.y() << " "
            << global_t.z() << " "
            << global_q.w() << " "
            << global_q.x() << " "
            << global_q.y() << " "
            << global_q.z() << endl;
    foutC.close();

修改后重新编译运行,在data文件夹中获取结果

EVO评测

  1. 数据集真值格式处理
    下载的数据集中真值以.csv格式存储,转换为.tum格式
evo_traj euroc data.csv --save_as_tum
  1. 计算绝对位姿误差
evo_ape tum data.tum loop_result.csv -va --plot

你可能感兴趣的:(slam)