SLAM建图精度评估 by EVO

EVO是一个开源的评估SLAM建图精度的软件包

官方网址

其用来建立对轨迹的评估,从而验证SLAM算法的精度

通常用来评估slam建图中的轨迹误差.

支持的数据类型整理

evo支持多种数据包:KITTI,rosbag,Euroc,tum.

rosbag格式与基本使用命令

存储rosbag

rosbag record -O ~/Downloads/cartotest /tf /clock   //-O是指定存储文件名称
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/b0-2014-07-21-12-42-53.bag

evo-bag信息支持

对于ros_msgs支持以下几个格式的数据

geometry_msgs/PoseStamped
geometry_msgs/TransformStamped, geometry_msgs/PoseWithCovarianceStamped
nav_msgs/Odometry

另外对于第2,3数据,covariance和twist部分并未在程序中使用,但也支持

在ros环境下查看相应数据的格式

rosmsg show message_name ##rosmsg show geometry_msgs/PoseStamped

对于bag命令,通常只要包含里程计topic或者其他posestamped即可

一个简单例子:

rosbag info bagname  //查询rosbag包内的数据类型
//假设存在上述的信息
evo_traj bag room_z_m100.bag --all_topics -p --plot_mode xy //当然mode也可以为xyz

对于实际SLAM过程

​ 对于大多数SLAM建图过程而言,其输出的map frame通常会链接 odom 然后指向机器人的base_link或者base_footprint之类,那么通过对TF数的读取和转换就可以得到其各点的pose.

这个想法在evo的issue里面也有人提到了

关于TF引用

这个如果能够引用,那么起码可以提供里程计和tf的两组轨迹进行对比.效果就会较为明显.

要解决tf内信息转换,首先查看TF树与具体坐标变换:

rosrun rqt_tf_tree rqt_tf_tree
rosrun tf tf_echo [reference_frame] [target_frame]
rosrun tf tf_echo /robot1/map /robot1/base_footprint  //针对my_package

在了解该过程后,就是录制rosbag的过程.

在evo/contrib的目录下有一个 record_tf_as_posestamped_bag.py 脚本,使用方式:在运行slam或者rosbag的情况下

./record_tf_as_posestamped_bag.py  --lookup_frequency 15 --output_topic run_1_pose --bagfile run_1.bag map base_link

注意事项: 1.保证 use_sim_time = true

​ 2. rosbag play的时候要有 --clock

​ 3.最好打开rviz判断

之后就可以愉快地输出PoseStamped图片了

找一个merge rosbag的脚本

./merge_bag.py merge.bag  goodnight.bag 2223_filtered.bag

即可得到合并的数据包,从而评价其相对误差之类的.

evo_traj bag merge.bag --all_topics -p --plot_mode xy

不过还有一点不确定的就是odom在gazebo中是否可以看作groundtruth呢,另外如果是真实场景,那么groundtruth应该如何去测定呢.

如果之后继续深入再更新吧~

其他

这一块为目前参考过的一些相关资料,理论上也可以有空再挖掘一点知识

evo的issue中关于loam的一个参考回答

通过kitti数据集转换rostopic为kitti格式的txt文件

链接

loam官方提供的bag里面只有laser msg,故实际测试需要自己在gazebo中测试.

另外提一句,loam论文里面精度是根据对比gps和

关于两组数据时间不同步的问题

通过sim_time解决timestamp不同步问题

链接

关于一个依赖geometry_msg的package的编写过程参考

链接

不同依赖数据格式的详细内容,包含转换

链接

在gazebo中发布groundtruth的pose

由于不清楚odom和里程计的具体差别(gazebo中是否打滑),所以暂时没有测试

链接

通过gazebo中set_model_state/get_model_state获取模型状态(可能有用)

链接

  • 2
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
SLAM精度评估中的EVO是指使用EVO工具来评估SLAM系统的轨迹误差。EVO是一个开源的工具,用于评估SLAM系统的性能。它提供了一系列命令和功能,可以计算和可视化SLAM系统的轨迹误差。 在EVO中,有几个常用的命令可以用来评估SLAM系统的轨迹误差。其中,evo_traj命令用于评估轨迹误差,可以使用手写的ATE(绝对位姿误差)和RPE(相对位姿误差)来比较SLAM系统的性能。\[1\] 相对位姿误差主要用于比较运动(姿态增量),而不是进行绝对位姿的比较。相对位姿误差可以给出局部精度,例如SLAM系统每米的平移或旋转漂移量。可以使用evo_rpe命令来计算相对位姿误差,并通过设置参数来进行可视化和保存结果。\[2\] 另外,evo_ape命令可以用于计算ATE(绝对位姿误差),并提供了可视化和保存结果的功能。可以使用该命令来评估SLAM系统在KITTI数据集上的性能。\[3\] 总之,EVO是一个用于评估SLAM系统性能的工具,可以通过计算和可视化轨迹误差来评估SLAM系统的精度。可以使用evo_traj、evo_rpe和evo_ape等命令来进行评估和分析。 #### 引用[.reference_title] - *1* *2* [SLAM精度测评——EVO进阶](https://blog.csdn.net/Darlingqiang/article/details/123534388)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [ros中SLAMEVO、APE测评——SLAM精度测评(一)](https://blog.csdn.net/Yangy_Jiaojiao/article/details/124419966)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值