【KITTI数据集Odometry序列00-10标定文件中的参数关系解读】

本文介绍了如何解读KITTI数据集Odometry序列00-10的标定文件,包括下载完整calib文件、calib.txt内容解析以及真值pose文件的解读。文章详细解释了相机内参、外参矩阵,以及雷达与相机之间的坐标转换关系,帮助读者理解如何将不同传感器数据统一到同一坐标系下进行分析和比较。

KITTI数据集Odometry序列00-10标定文件中的参数关系解读

KITTI Odometry数据集是大量研究感知、salm、跟踪学者经常接触的数据集。但是对于新手来说,下载相应数据集进行坐标转换的过程中,往往会碰到对calib、pose文件中诸多矩阵不理解的情况。本人查找相关资料的时候发现,针对KITTI Odometry数据集的参数文件解释很少。因此,本人将学习使用中自己对这块的理解做如下阐述。其中,所讲之处如有错误,欢迎各位批评指正。

一、下载完整的里程计calib文件

我们从官网下载原始数据以后,打开数据中的calib文件此时会发现文件中缺少雷达到camera0的外参Tr内容如下:

在这里插入图片描述
为了补全这个外参数,我们需要将从KITTI官网下载calibration files文件,如图下图所示:

在这里插入图片描述
然后打开下载好的参数文件,此时就会发现其内部的calib文件包含Tr矩阵,如图所示:

在这里插入图片描述
因此,将下载好的calibration files中的calib文件全部替换原始数据中的calib文件,此时便可得到完整的参数文件。

二、calib.txt文件内容解读

我们以00为例,该calib参数文件中一共包含了5个矩阵:其中P0代表0号左边灰度相机、P1代表1号右边灰度相机、P2代表2号左边彩色相机、P3代表3号右边彩色相机,Tr代表velodyne。
对于每个相机i而言,Pi矩阵可以理解为相机i的内参矩阵*相机0相对于相机i的外参矩阵即:

Pi= ∣ f x 0 c x 0 0 f y c y 0 0 0 1 0 ∣ \begin{vmatrix} fx & 0 & cx & 0\\ 0 & fy & cy & 0\\ 0 & 0 & 1 & 0 \end{vmatrix} fx000fy0cxcy1000 * ∣ r 11 r 12 r 13 T x r 21 r 22 r 23 T y r 31 r 32 r 33 T z 0 0 0 1 ∣ \begin{vmatrix} r11 & r12 & r13 & Tx\\ r21 & r22 & r23 & Ty\\ r31 & r32 & r33 & Tz\\ 0 & 0 & 0 & 1 \end{vmatrix} r11r21r310r12r22r320r13r23r330TxTyTz1
对于相机0而言,因为外参矩阵为I,所以相机0的内参矩阵K_cam0=P0(0:3, 0:3);
对于相机1、2、3而言,因为四个相机的安装在统一水平线上,所以相机0相对于他们的外参数旋转矩阵为I,平移矩阵仅相差一个Tx,所以相机1、2、3的矩阵P可以简化为:

Pi= ∣ f x 0 c x 0 0 f y c y 0 0 0 1 0 ∣ \begin{vmatrix} fx & 0 & cx & 0\\ 0 & fy & cy & 0\\ 0 & 0 & 1 & 0 \end{vmatrix} fx000fy0cxcy1000 * ∣ 1 0 0 T x 0 1 0 0 0 0 1 0 0 0 0 1 ∣ \begin{vmatrix} 1 & 0 & 0 & Tx\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1& 0\\ 0 & 0 & 0 & 1 \end{vmatrix} 100001000010Tx001 = ∣ f x 0 c x f x ∗ T x 0 f y c y 0 0 0 1 0 ∣ \begin{vmatrix} fx & 0 & cx & fx*Tx\\ 0 & fy & cy & 0\\ 0 & 0 & 1 & 0 \end{vmatrix} fx000fy0cxcy1fxTx00
所以相机1、2、3的内参矩阵K_cami=Pi(0:3, 0:3), 相机0相对于他们的外参矩阵Ti= ∣ 1 0 0 P i ( 0 , 3 ) / P i ( 0 , 0 ) 0 1 0 0 0 0 1 0 0 0 0 1 ∣ \begin{vmatrix} 1 & 0 & 0 & Pi(0, 3)/Pi(0, 0)\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1& 0\\ 0 & 0 & 0 & 1 \end{vmatrix} 100001000010Pi(0,3)/Pi(0,0)001
Tr表示雷达velodyne坐标系转换到相机0的变换矩阵。
所以我们利用calib文件得到四个相机内参数、外参数的同时,还可以得到雷达与四个相机之间的外参数即:

Tcami_velo=Ti*Tr

三、真值pose文件解读

KITTI官网下载的odometry里程计ground truth poses文件是以第一帧相机0的位置为原点,发布的各帧相机0的真实姿态变换矩阵。所以我们在利用激光雷达进行定位得到激光雷达位姿后,为了便于和真值进行比对,就需要将其转换到同一坐标系下:
我们先利用雷达和相机0之间的外参数,将相机0的位姿真值进行如下变换,便可得到在第一帧相机0原点下雷达的真实位姿:
aft_pose=pose*Tr
随后再进行如下变换,将坐标原点变换到第一帧雷达原点下,此刻便可得到第一帧雷达原点下雷达的真实位姿,由此便可与雷达slam得到的定位结果进行比对。
final_pose=Tr(-1)*aft_pose

<think>好的,我现在需要帮助用户了解如何使用ORB-SLAM3运行KITTI数据集。首先,我应该回顾一下用户提供的引用内容,看看里面有哪些有用的信息。 用户引用了三篇资料,其中提到了ORB-SLAM2的运行命令,包括单目模式、词袋参数文件数据集路径。还有关于evo工具安装和使用的内容,以及ORB-SLAM3适配KITTI数据集的操作步骤。用户现在关心的是ORB-SLAM3的具体配置和运行方法,可能还涉及轨迹评估。 首先,我应该整理ORB-SLAM3的基本运行步骤。通常,运行SLAM算法需要几个步骤:环境配置、数据集准备、修改配置文件、执行命令、结果评估。用户提到的引用中,ORB-SLAM2的命令分成四部分,包括可执行文件、词袋参数数据集路径,这可能对ORB-SLAM3也有参考价值。 ORB-SLAM3支持多种传感器模式,比如单目、双目、RGB-D等。KITTI数据集主要提供双目和激光雷达数据,但ORB-SLAM3可能更适合使用双目或者单目视觉。需要确认ORB-SLAM3对KITTI的支持情况,可能需要调整配置文件中的相机参数,比如基线、分辨率、内参等。 接下来,数据集准备。KITTI数据集需要按照一定的结构存放,比如图像序列、时间戳文件。用户可能需要下载数据集,并组织成ORB-SLAM3要求的格式。引用3中提到适配操作,可能包括时间戳的转换或路径设置。 然后是编译和安装ORB-SLAM3。需要确保依赖项安装正确,比如Pangolin、OpenCV、Eigen等。如果用户遇到编译错误,可能需要检查这些依赖的版本是否兼容。 修改配置文件部分,可能需要调整相机参数文件,比如KITTI的yaml文件。例如,在ORB-SLAM3的配置目录中,找到KITTI的示例配置文件,检查相机内参、畸变参数、图像尺寸等是否与数据集一致。如果有双目配置,还需要设置左右目图像的路径和基线长度。 运行命令部分,根据ORB-SLAM3的不同模式(单目、双目、立体惯性等),执行相应的可执行文件。例如,运行双目模式可能需要调用stereo_kitti的可执行文件,并传入词汇表文件、配置文件数据集路径。引用1中的ORB-SLAM2命令结构可以作为参考,但ORB-SLAM3可能有不同的参数顺序或可执行文件名称。 轨迹评估方面,用户可能需要使用evo工具,像在ORB-SLAM2中一样。保存轨迹文件后,用evo的指令计算绝对位姿误差或绘制轨迹。引用2详细介绍了evo的使用方法,包括不同数据集的评估步骤,这可能对用户有帮助。 用户可能遇到的常见问题包括:数据集路径错误、配置文件参数不匹配、依赖库版本问题、轨迹保存格式不正确导致evo无法解析等。需要提醒用户注意这些点,并提供解决建议,比如检查路径是否正确,确认时间戳文件存在,或者重新编译代码。 另外,引用3提到ORB-SLAM3适配KITTI的具体操作,可能包括修改数据集加载部分的代码,或者提供特定的启动脚本。用户可能需要参考相关的博客或文档进行调整,例如处理双目图像序列或调整时间戳同步。 总结下来,回答的结构应该是分步骤的:环境准备、数据集下载与配置、修改参数文件、运行命令、评估结果,最后是常见问题。同时,需要引用提供的资料,特别是关于evo工具的使用和ORB-SLAM3适配的部分。确保用户能够按照步骤操作,并处理可能出现的错误。</think>### 使用ORB-SLAM3运行KITTI数据集步骤详解 #### 1. **环境准备** - **安装依赖项** 确保已安装`Pangolin`、`OpenCV`、`Eigen3`和`DBoW2`等依赖库,并完成ORB-SLAM3的编译: ```bash git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git cd ORB_SLAM3 chmod +x build.sh ./build.sh ``` - **安装evo工具** 用于轨迹评估,通过以下命令安装: ```bash pip install evo --upgrade --no-binary evo ``` #### 2. **数据集准备** - **下载KITTI数据集** 从[KITTI官网](http://www.cvlibs.net/datasets/kitti/eval_odometry.php)下载双目图像序列(如`data_odometry_gray`)和对应的真值轨迹文件(如`poses`)[^3]。 - **组织数据集结构** 确保图像按以下格式存放: ``` KITTI_ROOT ├── sequences │ └── 00 │ ├── image_0 # 左目图像 │ ├── image_1 # 右目图像 │ └── times.txt └── poses └── 00.txt # 真值轨迹 ``` #### 3. **修改配置文件** - **调整相机参数** 在`ORB_SLAM3/Examples/Stereo/KITTI00-02.yaml`中,修改相机内参、畸变系数和基线等参数,需与KITTI相机的标定文件一致。例如: ```yaml Camera.fx: 718.856 Camera.fy: 718.856 Camera.cx: 607.1928 Camera.cy: 185.2157 Camera.bf: 0.53716 # 基线 × 焦距 ``` #### 4. **运行ORB-SLAM3** - **执行双目模式** 使用以下命令启动: ```bash ./Examples/Stereo/stereo_kitti \ Vocabulary/ORBvoc.txt \ Examples/Stereo/KITTI00-02.yaml \ /path/to/KITTI_ROOT/sequences/00 ``` 参数依次为:词袋文件、配置文件数据集路径[^1]。 #### 5. **轨迹评估** - **保存ORB-SLAM3输出轨迹** 运行时会生成`CameraTrajectory.txt`,需将其转换为KITTI格式(每行12个数值,表示3D位姿)。 - **使用evo计算误差** 执行以下命令对比估计轨迹与真值: ```bash evo_ape kitti KITTI_gt.txt ORB-SLAM3_traj.txt -va --plot ``` 此指令计算绝对位姿误差(APE)并可视化结果[^2]。 --- #### **常见问题与解决** 1. **图像路径错误** - 现象:程序报错`Unable to load image at path...` - 解决:检查`KITTI_ROOT`路径是否正确,确保图像文件名按序号排列(如`000000.png`)。 2. **轨迹格式不兼容** - 现象:evo无法解析轨迹文件 - 解决:将轨迹文件转换为KITTI标准格式,或使用`evo_traj kitti`指令强制转换。 3. **相机参数不匹配** - 现象:跟踪丢失或地图漂移 - 解决:核对`KITTI00-02.yaml`中的`fx/fy/cx/cy/bf`是否与数据集标定一致[^3]。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值