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的文件。

请添加图片描述

<think>好的,我现在要处理用户关于KITTI数据集真值系统的查询。首先,我需要回顾用户提供的引用内容,确定哪些信息与真值系统相关。引用1提到了Ground Truth序列00-10的对应关系和标定参数,还有处理轨迹方法。引用3详细说明了KITTI数据集包含的标定真值,如2D和3D包围框以及跟踪轨迹。引用4讨论了真值数据的格式转换问题,特别是时间、位置和姿态四元数的要求。引用2则主要是数据集的下载链接,可能关联性不大。 接下来,我需要将这些信息整合一个结构清晰的回答。用户的问题集中在真值系统的说明上,所以需要涵盖真值的类型、数据格式、传感器支持、应用场景以及处理工具。需要注意用户提到的数据格式问题,如引用4提到的evo工具对TUM格式的要求,这可能涉及真值数据的实际使用步骤。 另外,用户希望回答中自然地添加引用标识,所以每部分信息都要对应正确的引用来源。例如,提到轨迹真值时引用1和3,数据格式问题引用4,传感器数据引用3。同时,生的相关问题需要与真值系统相关,比如评估方法、数据转换、应用场景等。 需要确保使用正确的中文表达,并且所有数学公式或代码块遵循用户指定的格式。虽然当前问题可能不涉及数学公式,但如果有需要,比如轨迹坐标转换,可能需要用行内或独立公式展示。例如,姿态四元数的表示可以用$q_w, q_x, q_y, q_z$的形式。 最后,检查回答是否覆盖了用户的所有需求:真值类型、数据格式、传感器基础、处理工具,以及相关引用是否正确。确保回答结构清晰,分点明确,帮助用户逐步理解KITTI的真值系统。</think>### KITTI数据集真值系统说明 KITTI数据集的真值系统是其核心价值之一,主要包含以下关键技术特性: 1. **真值类型与标注方法** - **轨迹真值**:通过高精度GPS/IMU组合导航系统记录车辆的绝对位姿,提供厘米级精度的6自由度运动轨迹,格式为$4 \times 4$齐次变换矩阵[^3][^4]。 - **目标检测真值**:包含2D图像边界框与3D点云包围框标注,覆盖车辆、行人等9类目标,标注参数包含尺寸、朝向角等信息[^3]。 - **语义分割真值**:部分子数据集提供像素级语义标签,用于场景理解任务。 2. **数据格式规范** 轨迹真值文件(如`00.txt`)每行对应一个位姿矩阵: ``` 时间戳 R11 R12 R13 tx R21 R22 R23 ty R31 R32 R33 tz ``` 需转换为TUM格式$(t_x, t_y, t_z, q_x, q_y, q_z, q_w)$时,需进行矩阵分解提取平移向量和四元数。 3. **多传感器时空对齐** 通过离线标定实现: - 激光雷达与相机外参矩阵$T_{lidar}^{cam}$ - IMU与车身坐标系转换参数 - 所有传感器时间同步误差<3ms 4. **应用验证场景** 真值系统支持: - SLAM算法绝对轨迹误差(ATE)计算:$$ATE = \sqrt{\frac{1}{N}\sum_{i=1}^{N} \| \mathbf{t}_i^{est} - \mathbf{t}_i^{gt} \|^2 }$$ - 目标检测的mAP指标验证 - 里程计精度评估(平移/旋转误差)[^1][^3]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值