完美实现使用evo评估vins-mono(代码片段)

猛龙过江ing 猛龙过江ing     2022-12-14     223

关键词:

    过眼春光久已空,晒丝捣麦又匆匆。——(宋)陆游《夏日》

    EVO工具用于评估SLAM算法在现有数据集上的效果。源码在 https://github.com/MichaelGrupp/evo。目前支持 TUM KITTI Euroc 等格式。evo工具提供了3种误差评估方式:

  • evo_ape -absoulte pose error
  • evo_rpe -relative pose error
  • evo_rpe -for-each -sub-sequence-wise averaged pose error

    4种工具:

  • evo_traj - tool for analyzing, plotting or exporting one or more trajectories
  • evo_res - tool for comparing one or multiple result files from evo_ape or evo_rpe
  • evo_fig - (experimental) tool for re-opening serialized plots (saved with –serialize_plot)
  • evo_config - tool for global settings and config file manipulation

    本文以VINS为例子介绍如何使用evo评估其在Euroc数据集上的效果。数据集网站:The EuRoC MAV Dataset。数据集采用MH_01_easy.bag。

    euroc的评估支持 .csv的groudtruth 和 tum 格式的轨迹文件. 首先修改vins源码. 打开 visulization.cpp, 找到 写文件部分代码,并修改为:

        // write result with tum format, for evo tools
        ofstream foutC(VINS_RESULT_PATH, ios::app);
        foutC.setf(ios::fixed, ios::floatfield);
        foutC.precision(10);
        foutC << header.stamp.toSec()<< " ";
        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() << endl;
        foutC.close();

    现在我们有了 tum格式的轨迹输出以及数据集提供的真值state_groundtruth_estimate0/data.csv(由下载的zip格式的数据解压得到)。首先我们可以使用 evo_traj将轨迹画出来。

evo_traj tum vins_result_no_loop.csv -p --plot_mode=xyz

    而带有回环检测的可能报错:[ERROR] TUM trajectory files must have 8 entries per row and no trailing delimiter at the end of the rows (space),原因可能是数据中有逗号,需要将逗号换成空格,并且行末不能有。解决方法,使用Excel打开文件另存为TXT格式,再使用替换将所有逗号变为空格即可。

    使用evo_ape确定轨迹误差。

evo_ape euroc data.csv vins_result_no_loop.csv -va --plot --plot_mode xyz --save_results a.zip

    对于带有回环检测的数据可能报错:[ERROR] found no matching timestamps between data.csv and vins_result_loop.csv with max. time diff 0.01 (s) and time offset 0.0 (s)。时间戳错误,解决方法,使用文本编辑器打开,将第一列中的“E+018”改为“E+009”。

    最终的结果会保存在 result_vins.zip中:

"std": 0.02860583962864544, "rmse": 0.08262275867937034, "sse": 6.969877177077047, "max": 0.15694899033138723, "min": 0.022182102135421995, "median": 0.07525605040255529, "mean": 0.07751274857034607

    evo还可以将两个结果放在一个图中,进行对比。参数中的两个zip文件就是刚刚前面生成的。

evo_res a.zip b.zip -p --save_table table.csv

    总之,evo是一个很不错的工具。

参考:

1、使用evo评估VINS-MONO

ros实验笔记之——vins-mono在l515上的实现(代码片段)

...用》实现了用l515运行RTABmap,本博文试试在l515上实现vins-mono首先需要将vins-mono配置成功,如果出现像之前博客《ROS实验笔记之——SLAM无人驾驶初入门》提到的运行出错的问题也只能按里面的方法改改了。。。。首先可以... 查看详情

ros学习笔记之——evo工具的使用(代码片段)

之前博客《ROS学习笔记之——VICON的使用》用vincon获得了机器人的真实轨迹,并且通过amcl可以获得了机器人的定位结果,下面通过EVO包来表征performance(本文不像网上大部分博客复制粘贴别人的图,连跑都没跑过&#... 查看详情

realsense435i,运行vins-mono(代码片段)

准备工作:安装realsenseSDK2.0:参考官方教程安装realsenseroswarp:参考官方教程安装vins-mono:参考官方教程传感器标定:参考教程(下一篇博客)测试vins-mono:下载数据集:https://projects.asl.ethz.ch/datasets/doku.php?id=kmav 查看详情

realsense435i,运行vins-mono(代码片段)

准备工作:安装realsenseSDK2.0:参考官方教程安装realsenseroswarp:参考官方教程安装vins-mono:参考官方教程传感器标定:参考教程(下一篇博客)测试vins-mono:下载数据集:https://projects.asl.ethz.ch/datasets/doku.php?id=kmav 查看详情

slam的评测工具evo(代码片段)

...Trajectory.txt--ref=data.tum-p--plot_mode=xy--align--correct_scaleevo基本使用方法evo_traj显示轨迹evo_trajeurocdata.csv-p--plot_mode=xyevo_trajtumdata.tum-p--plot_mode=xyevo_ape计算绝对位姿误差evo_apetumdata.tumCameraTrajectory.txt-va--plot--plot_modexyzevo_rpe计算相对位姿误... 查看详情

flutter扫码功能完美实现(代码片段)

如何快速完美地实现Flutter扫码效果预览笔者非常执着于能使用直观的效果展示,但是因为CSDN的大小限制,笔者做了很强的压缩,大致还是能看出代码的最终结果实现需求实现需求是否实现自定义扫码区域大小(可全屏... 查看详情

vins-mono:雅可比矩阵的推导(代码片段)

imu残差公式我们计算雅可比采用加扰动形式以下是位置增量偏差对旋转qbk的雅可比推导对应的雅可比矩阵的代码jacobian_pose_i.block<3,3>(O_P,O_R)=Utility::skewSymmetric(Qi.inverse()*(0.5*G*sum_dt*sum_dt+Pj-Pi-Vi*sum_dt));  查看详情

realsense435i运行vins-mono,标定部分(代码片段)

相机标定1.安装kalibr;参考:https://blog.csdn.net/wangbaodong070411209/article/details/112248834https://blog.csdn.net/weixin_40628128/article/details/959459452.生成棋盘格生成棋盘格:rosrunkalibrkalibr 查看详情

realsense435i运行vins-mono,标定部分(代码片段)

相机标定1.安装kalibr;参考:https://blog.csdn.net/wangbaodong070411209/article/details/112248834https://blog.csdn.net/weixin_40628128/article/details/959459452.生成棋盘格生成棋盘格:rosrunkalibrkalibr 查看详情

vins-mono初始化(代码片段)

视觉和IMU的对齐1.求陀螺仪的零偏(b_g)视觉计算出了帧间的旋转,IMU也计算出了帧间的旋转,这两者之间并不太一致,那么谁是对的呢?这里采用视觉计算出的值,认为IMU由于零偏的不准确导致计算的旋转不准确。通过调整零偏... 查看详情

使用篇webview实现嵌套滑动,丝滑般实现吸顶效果,完美兼容x5webview(代码片段)

背景最近项目在开发中,需要实现WebView吸顶的效果。刚开始在Demo实现的时候,使用的是普通的WebView。切换到项目的时候,由于使用的是X5WebView,在解决过程中。又遇到了一些问题,觉得挺有代表性的,就... 查看详情

使用篇webview实现嵌套滑动,丝滑般实现吸顶效果,完美兼容x5webview(代码片段)

本文首发我的公众号徐公,收录于Github·AndroidGuide,这里有Android进阶成长知识体系,希望我们能够一起学习进步,关注公众号徐公,5年中大厂程序员,一起建立核心竞争力背景最近项目在开发中,需要实现W... 查看详情

ros实验笔记之——evo(代码片段)

Errorwhileprocessing"dvs_trackingflyingroom"·Issue#4·uzh-rpg/rpg_dvs_evo_open·GitHub之前博客《ROS仿真笔记之——基于gazebo的eventcamera仿真(dvsgazebo)》介绍了DVS的gazebo仿真。博客《ROS学习笔记之——ESVO复现及DAVIS346测试》介绍了ESVO以及事件... 查看详情

realsense435i,运行vins-mono(代码片段)

...nseSDK2.0:参考官方教程安装realsenseroswarp:参考官方教程安装vins-mono:参考官方教程传感器标定:参考教程(下一篇博客)测试vins-mono:下载数据集:https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets打开终端... 查看详情

realsense435i,运行vins-mono(代码片段)

...nseSDK2.0:参考官方教程安装realsenseroswarp:参考官方教程安装vins-mono:参考官方教程传感器标定:参考教程(下一篇博客)测试vins-mono:下载数据集:https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets打开终端... 查看详情

hkust-aerial-robotics/vins-mono测试过程中遇到的问题(代码片段)

ubuntu18.041、sudoapt-getupdate失败:GPGerror:http://packages.ros.org/ros/ubuntubionicInRelease:详细错误信息:Thefollowingsignatureswereinvalid:EXPKEYSIGF42ED6FBAB17C654OpenRobotics<info@osrfoundat 查看详情

springboot+activiti完美结合,快速实现工作流(最详细版)(代码片段)

点击关注公众号,实用技术文章及时了解本篇介绍如何在SpringBoot项目中使用Activiti7。其他框架实现工作流,可以移步:SpringBoot+flowable快速实现工作流,超级方便(附源码)一、依赖<!--添加activiti和Spr... 查看详情

matlab实现网络相关的仿真(附上完整仿真源码)(代码片段)

...络相关的仿真。在本文中,我们将介绍如何使用MATLAB实现网络仿真,并附上简单的代码和完整仿真源码。网络仿真是指通过计算机模拟网络环境,以评估网络性能、验证网络协议和测试网络应用程序。网络仿真通常包... 查看详情