开源SLAM方案评价与比较
开源SLAM方案评价与比较:ORB-SLAM2,VIORB,VINS-MONO
- 一、简介
- 二、EVO安装及测试
- 三、运行数据集
- 四、APE,RPE计算并绘图
- 五、evo_res 进行结果比较
一、简介
网上开源框架较多,本篇博客选择为人熟知的三个框架,orb-slam2,viorb(清华大学王京版本),vins-mono。在自己的笔记本上运行Euroc数据集,并采用evo和matlab来评价他们的性能。
- orb-slam2网址:https://github.com/raulmur/ORB_SLAM2
- viorb网址:https://github.com/jingpang/LearnVIORB
- vins-mono网址:https://github.com/HKUST-Aerial-Robotics/VINS-Mono
- Euroc数据集网址:https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
- evo网址:https://github.com/MichaelGrupp/evo
注:
- 数据集选择 MH_01_easy ,MH_03_medium,MH_05_difficult
- 运行环境为ubuntu16.04 ros Kinetic
- 处理器为Intel®Core™ i5-4210U CPU @1.7GHz
- 内存容量为16G
二、EVO安装及测试
2.1 安装evo(可根据以上链接参考官网教程)
终端输入如下指令:
Sudo apt install python-pip
Pip install evo --upgrade --no-binary evo --user
2.2 测试
在数据集目录下打开终端,或
cd /media/chengjun/Passport/Eurocdaset/MH_01_easy/mav0/state_groundtruth_estimate0(这是我移动硬盘中MH_01_easy 数据集的路径)
终端输入如下指令:
evo_traj euroc data.csv –plot
其中data.csv为参考系统采集的数据
成功运行截图如下:
三、运行数据集
3.1 ORB-SLAM2
在ROS环境下分别将MH_01_easy , MH_03_medium, MH_05_difficult数据集送入orb-slam2方案中,分别在三个终端运行如下命令。
roscore
rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml true
rosbag play --pause /media/chengjun/Passport/Eurocdaset/XX.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw
运行截图如下:
运行完之后会生成FrameTrajectory_KITTI_Format.txt , FrameTrajectory_TUM_Format.txt , KeyFrameTrajectory_TUM_Format.txt文件,本文选择 FrameTrajectory_TUM_Format.txt进行评价。
3.2 VIORB
分别将MH_01_easy ,MH_03_medium,MH_05_difficult数据集送入viorb方案中,分别在两个终端下运行如下命令。
roslaunch Examples/ROS/ORB_VIO/launch/testeuroc.launch
rosbag play /media/chengjun/Passport/Eurocdaset/MH_01_easy.bag
运行截图如下:
viorb输出的轨迹和oeb-slam2不同,它并非标准的tum格式文件,这里我用matlab做了一下处理,按照tum格式提取出“timestamp tx ty tz qx qy qz qw”几列数据。
之后在用evo评价的过程当中,出现以下报错:(被这个问题困扰了一段时间)
[ERROR] TUM trajectory files must have 8 entries per row and no trailing delimiter at the end of the rows (space)
应该是每行数据结尾或开头存在空格,导致evo报错。(可参考本人上一篇博客)终端输入如下命令即可解决此问题:
cat results.txt | tr -s [:space:] > results_new.txt
VINS-MONO
分别将MH_01_easy ,MH_03_medium,MH_05_difficult数据集送入Vins-mono方案中,分别打开三个终端。
roslaunch vins_estimator euroc.launch
roslaunch vins_estimator vins_rviz.launch
rosbag play /media/chengjun/Passport/Eurocdaset/MH_01_easy.bag
原始的vins_mono输出轨迹是无法用evo评价的,还是因为格式不对,我在源码中做了改动,将pose_graph.cpp中的if(SAVE_LOOP_PATH){…}改动如下。
原版本
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 << (*it)->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(VINS_RESULT_PATH, ios::app);loop_path_file.setf(ios::fixed, ios::floatfield);loop_path_file.precision(6); //时间戳精度loop_path_file << (*it)->time_stamp << " ";loop_path_file.precision(9); //位姿精度loop_path_file << P.x() << " "<< P.y() << " "<< P.z() << " "<< Q.x() << " "<< Q.y() << " "<< Q.z() << " "<< Q.w() << ""<< endl;loop_path_file.close();
}
四、APE,RPE计算并绘图
用EVO评价ATE(绝对位姿误差),RPE(相对位姿误差),首先将 EuRoC 数据集中 .csv 文件形式的 groundtruth 转换为 TUM 形式的轨迹文件。(如果格式不统一将无法评价,会出现各种错误)转换命令如下:
evo_traj euroc data.csv --save_as_tum
TUM 形式的轨迹文件格式:
每行8个数,用空格分隔,包含时间戳(单位:秒)、位置和旋转(四元素表示)
timestamp x y z q_x q_y q_z q_w
4.1 MH_01_easy数据集
4.1.1 ORB-SLAM2
1) APE
输入如下指令
evo_ape tum data.tum FrameTrajectory_TUM_Format.txt -va --plot --plot_mode xz --save_results results/orbslam_MH01.zip
终端打印结果:
max 1.113401mean 0.353434median 0.252514min 0.035743rmse 0.404936sse 234.973862std 0.197631
2) RPE
运行指令如下:
evo_rpe tum data.tum FrameTrajectory_TUM_Format.txt -r angle_deg --delta 1 --delta_unit m -va --plot --plot_mode xz --save_plot ./orbslam_MH01plot --save_results ./orbslam_MH01.zip
终端打印结果:
max 60.199544mean 13.238829median 7.799912min 0.757630rmse 18.165707sse 27059.419543std 12.438904
画图如下:
4.1.2 VIORB
1) APE
运行指令如下:
evo_ape tum data.tum result_new.txt -va --plot --plot_mode xz --save_results results/viorb_MH01.zip
终端打印结果:
max 0.189119mean 0.087045median 0.089040min 0.017692rmse 0.096279sse 1.603644std 0.041143
画图如下:
2) RPE
运行指令如下:
evo_rpe tum data.tum result_new.txt -r angle_deg --delta 1 --delta_unit m -va --plot --plot_mode xz --save_plot ./viorb_MH01plot --save_results ./viorb_MH01.zip
终端打印结果如下:
max 0.386955mean 0.107066median 0.100100min 0.008053rmse 0.132134sse 0.907890std 0.077436
画图如下:
4.1.3 Vins-mono
1) APE
运行指令:
evo_ape tum data.tum vins_result_loop.txt -va --plot --plot_mode xz --save_results results/vinsmono_MH01.zip
终端打印结果:
max 0.158527mean 0.065242
median 0.061928min 0.002101rmse 0.072769sse 4.162072std 0.032230
画图如下:
2) RPE
运行指令:
evo_rpe tum data.tum vins_result_loop.txt -r angle_deg --delta 1 --delta_unit m -va --plot --plot_mode xz --save_plot ./vinsmono_MH01plot --save_results ./vinsmono_MH01.zip
终端打印结果:
max 1.021268mean 0.176637median 0.123731min 0.011836rmse 0.246504sse 4.375030std 0.171941
画图如下:
4.2 MH_03_medium数据集(运行指令和上述一样,但是要修改对应数据集的名称)
4.2.1 ORB-SLAM2
1) APE
终端打印结果:
max 1.061202mean 0.111301median 0.056120min 0.009595rmse 0.176068sse 29.883937std 0.136426
画图如下:
2)RPE
终端打印结果:
max 111.690464mean 15.040676median 10.132911min 1.439042rmse 22.873176sse 53887.766924std 17.232535
画图如下:
4.2.2 VIORB
1) APE
终端打印结果:
max 0.104126mean 0.039126median 0.039083min 0.003429rmse 0.043359sse 0.259436std 0.018685
画图如下:
2) RPE
终端打印结果:
max 0.316922mean 0.083542median 0.074673min 0.013891rmse 0.098279sse 0.647133std 0.051763
画图如下:
4.2.3 Vins-mono
1) APE
终端打印结果:
max 0.173256mean 0.065392median 0.057324min 0.003779rmse 0.073921sse 3.885096std 0.034470
画图如下:
2) RPE
终端打印结果
max 1.107526mean 0.129639median 0.100093min 0.010756rmse 0.182452sse 3.794913std 0.128384
画图如下:
4.3 MH_05_difficult数据集(运行指令和上述一样,但是要修改对应数据集的名称)
4.3.1 ORB-SLAM2
1)APE
终端打印结果:
max 0.394046mean 0.226045median 0.232689min 0.042808rmse 0.236454sse 56.413871std 0.069387
绘图显示如下:
2) RPE
终端打印结果:
max 55.212829mean 9.444248median 4.749272min 0.081534rmse 14.280667sse 18354.370652std 10.711845
画图如下:
4.3.2 VIORB
1) APE
终端打印结果:
max 0.280075mean 0.164725median 0.160054min 0.042744rmse 0.174695sse 4.486188std 0.058171
画图如下:
2) RPE
终端打印结果:
max 0.116591mean 0.052993median 0.048396min 0.008256rmse 0.059098sse 0.220034std 0.026160
画图如下:
4.3.3 Vins-mono
1) APE
终端打印结果:
max 0.403776mean 0.176394median 0.147831min 0.014606rmse 0.197973sse 24.142979std 0.089880
画图如下:
2) RPE
终端打印结果:
max 1.448455mean 0.111824median 0.069696min 0.015246rmse 0.204431sse 3.594113std 0.171136
画图如下:
五、evo_res 进行结果比较
进行ATE和RPE评价之后会产生.zip文件。我们将这些.zip文件放到同一级目录下,通过evo_res对三者结果进行比较评价。
运行指令如下:
1) APE
evo_res results/*.zip -p --save_table results/table.csv
结果如下:
1.1) MH_01_easy数据集
画图如下:
1.2) MH_03_medium数据集
画图如下:
1.3) MH_05_difficult数据集
画图如下:
2) RPE
evo_res results/*.zip -p --save_table results/table.csv
结果如下:
2.1) MH_01_easy数据集
2.2) MH_03_medium数据集
画图如下:
2.3) MH_05_difficult数据集
画图如下:
友情提示:代码下载需要C币,请事先判断是否对您有帮助,谨慎下载哦!!!
开源SLAM方案评价与比较相关推荐
- 视觉SLAM方案整理及摄像头选型调研(他首推ZED)
他首推ZED,让我想起李ji也是用的ZED 摘自:https://mp.weixin.qq.com/s/BHFxSbGab_TVr_PxG17VaA 视觉SLAM方案整理及硬件选型调研 新机器视觉 7 ...
- 视觉SLAM方案分类及选型调研
经典视觉SLAM框架 SLAM至今已历经三十多年的研究,这里给出经典视觉SLAM框架,这个框架本身及其包含的算法已经基本定型,并且已经在许多视觉程序库和机器人程序库中提供. 我们把整个视觉 SLAM ...
- 超全总结!视觉SLAM方案整理及硬件选型(附项目地址)
编辑丨智东西公开课 本文已获CSDN博主「Mega_Li」授权发布,如需转载请与原作者联系.原文链接:https://blog.csdn.net/lwx309025167/article/detail ...
- java开源图像处理ku_83 项开源视觉 SLAM 方案够你用了吗?
原标题:83 项开源视觉 SLAM 方案够你用了吗? 公众号:3D视觉工坊 主要关注:3D视觉算法.SLAM.vSLAM.计算机视觉.深度学习.自动驾驶.图像处理以及技术干货分享 运营者和嘉宾介绍:运 ...
- 使用开源激光SLAM方案LIO-SAM运行KITTI数据集,如有用,请评论雷锋
第一次写博客~ LIOSAM作为优秀的激光slam方案,当然想尝试着运行更多数据啦,然而没有发现类似的方法分享到底如何实现,在B站看到有伙伴发布了测试视频,但是仍然没有写出方法.所以我跑通了之后记录一 ...
- 常见不同3D激光SLAM方案对比
不同SLAM方案对比 一.测试的SLAM方案 本次我共测试了github上开源的8种方案,按照特点可分为 特点 方案 纯Lidar A-LOAM(港科大版本的LOAM),hdl_graph_slam, ...
- 【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案--2 数据分析
目录 相关信息 1 赛题 2 数据分析 2.1 加载数据 2.2 查看缺失值 2.3 标签分布 2.4 文本长度 2.5 标题摘要合并后字符长度 3 总结 相关信息 [NLP]讯飞英文学术论文分类挑战 ...
- Mule,目前综合状态最良好的开源ESB方案
原文地址: http://blog.csdn.net/calvinxiu/archive/2007/06/19/1657989.aspx ,版权所有,转载请保留原文链接,谢谢.-- 江南白衣 Mule ...
- Mule,目前综合状态最良好的开源ESB方案引文
Mule,目前综合状态最良好的开源ESB方案收藏 http://blog.csdn.net/zhangliulin/archive/2007/10/16/1826703.aspx 新一篇: 设计一个美 ...
最新文章
- Linux的文件管理
- 1、C++招聘笔试--C++中的C
- LIST-PROCESSING命令的使用
- springboot整合jdbc
- 【若依(ruoyi)】table定制列宽
- Python之30秒就能学会的漂亮短程序代码
- struts 模块化开发学习
- 编译log4cplus-2.0.x备忘录
- 树莓派3显示服务器SSH拒绝了密码,脚本封杀尝试树莓派SSH密码的来源IP
- 考研笔记-物理层协议
- 配电脑时什么配置可以缩水?
- 使用WinIO库实现保护模式下的IO和内存读写(_inp,_outp)
- flowable设计器节点属性扩展_gooflow设计器API说明书
- java 微信公众号消息推送 微信发送消息
- wintc的安装方法
- android高德地图清除marker,删除多个点标记-点标记-示例中心-JS API 示例 | 高德地图API...
- python中float和double有什么区别_关于C++:float和double的区别是什么?
- scala 相关基础知识
- Xshell光标消失
- 冒泡排序保姆级心得分享