SLAM 轨迹评估方法 evo(包括GPS坐标转换成TUM)

安装 evo

pip install evo --upgrade --no-binary evo 

SLAM轨迹

运行ORBSLAM

rosrun ORB_SLAM3 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/RealSense_T265.yaml false 

之后会生成一个TUM格式的轨迹FramTrajectory_TUM_Format.txt

GPS轨迹

我们也需要将获取的GPS轨迹转化成笛卡尔坐标下TUM格式坐标

import math 
import numpy as np 
import rospy
from std_msgs.msg import std_msgs
from plot_py.msg import INS_Data
import time
from matplotlib.animation import FuncAnimation
import os
from math import sin,cos,radians
a = 6378137. #长轴
f = 1 / 298.257223563 #扁率
fle = open("/home/jiangz/catkin_ws/src/plot_py/data/GPS_301_short.txt",mode = 'w')
def gps_to_cartesion(lat,lon,alt):
    lat = radians(lat)
    lon = radians(lon)
    print (lat,lon,alt)
    b = a * (1 - f)
    e = (a ** 2 - b ** 2) ** 0.5 / a
    N = a / (1 - e ** 2 * sin(lat) ** 2) ** 0.5

    # 计算XYZ坐标
    X = (N + alt) * cos(lat) * cos(lon)
    Y = (N + alt) * cos(lat) * sin(lon)
    Z = (N * (1 - e ** 2) + alt) * sin(lat)

    return X,Y,Z

def callback(data):
    
    x,y,z = gps_to_cartesion(data.latitude,data.longitude,data.altitude)
    stamp = data.header.stamp
    time = float(stamp.secs) + (stamp.nsecs / 1e+9 ) 
    fle.write(str(time) +" "+str(x) +" "+str(y) + " " + str(z))
    fle.write(" 0. 0. 0. 0.\n")
    # print(x,y,z)
    print(str(time) +" "+str(x) +" "+str(y) + " " + str(z))
    print("\n")

def save_as_txt():
    rospy.init_node('GPS',anonymous=True) 
    rospy.Subscriber("/ins_data",INS_Data,callback)
    rospy.spin() 
    fle.close()
    
save_as_txt()

使用此代码,将GPS的经纬度海拔信息转换成笛卡尔坐标下的坐标,并且保存成TUM格式

画出图像

轨迹对比图像

链接:https://www.guyuehome.com/18717
里详细介绍了evo方法
请添加图片描述
原谅我的GPS测量误差大得离谱。。。。

标题单一图像

在ORBSLAM里面自带了一个画图的工具
/evaluation/evaluate_ate_scale.py

python evaluation/evaluate_ate_scale.py FrameTrajectory_TUM_Format.txt FrameTrajectory_TUM_Format.txt --plot PLOT 

其中第一个txt文件是真实轨迹,后一个是测量轨迹,正常来说会对两个轨迹进行对比,但是犹豫GPS轨迹在转换成笛卡尔坐标系后,还需要求出R和T之后,才能得到SLAM轨迹相同Scale 的轨迹图,所以使用这个方法比对会比较麻烦。

执行完成后,会在当前目录下生成一个名为PLOT的文件。

请添加图片描述

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
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 ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值