代码轨迹输出修改
- visualization.cpp
VINS-Fusion-mastervins_estimatorsrcutilityvisualization.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();
- pose_graph.cpp(如果没开回环可以不改)
VINS-Fusion-masterloop_fusionsrcpose_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();
}
- globalOptNode.cpp
VINS-Fusion-masterglobal_fusionsrcglobalOptNode.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评测
以下都是Euroc数据集的运行测评
- 数据集真值格式处理
下载的数据集中真值以.csv格式存储,转换为.tum格式
evo_traj euroc data.csv --save_as_tum
- 计算绝对位姿误差
#data.tum为真值,result.csv为系统运行结果,-va显示详细计算结果,--plot显示图像(或-p)
evo_ape tum data.tum result.csv -va --plot
- 绘制多条轨迹
#--correct_scale(尺度矫正) --align(对齐)
evo_traj tum result.csv data.tum --ref=data.tum -p --correct_scale --align
bag包播放
- 倍速播放
rosbag play -r 2 filename.bag #2倍速
- 从第几秒开始播放
rosbag play -s 3 filename.bag #第3秒
- 仅使用包的前几秒信息
rosbag play -u 20 filename.bag #前20秒
最后
以上就是老实鞋垫最近收集整理的关于VINS-Fusion轨迹评估的全部内容,更多相关VINS-Fusion轨迹评估内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复