KITTI里程计数据集 | 跑VINS-Fusion计算外参

本文详细介绍了如何使用KITTI数据集为VINS-Fusion视觉惯性里程计算法准备数据,包括计算IMU到相机的外参,以及对比不同内外参设置下VINS-Fusion的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、使用KITTI数据集跑VINS,数据集制作参考,本文使用的是2011_09_26_0056。使用双目 +IMU,及之后融合激光雷达

在这里插入图片描述
在这里插入图片描述

  • 根据kitti数据集给出的标定参数,计算IMU-to-Cam0,IMU-to-Cam1。
  • 本文使用的是未同步的imu数据和同步的相机激光雷达数据。
    在这里插入图片描述

2、计算外参py脚本。也可以直接用MATLAB、Sophus等

T i c 0 = T i v ∗ T v c 0 ; T i c 1 = T i c 0 ∗ T c 0 c 1 T_{ic_0} = T_{iv} * T_{vc_0}; T_{ic_1} = T_{ic_0} *T_{c_0c_1} Tic0=TivTvc0Tic1=Tic0Tc0c1

from numpy import *
import numpy as np

T_vi = np.mat( [[9.999976e-01, 7.553071e-04, -2.035826e-03, -8.086759e-01],
	       	    [-7.854027e-04, 9.998898e-01, -1.482298e-02, 3.195559e-01],
                [2.024406e-03, 1.482454e-02, 9.998881e-01, -7.997231e-01],
	            [0, 0, 0, 1]] )
T_c0v = np.mat( [[7.967514e-03, -9.999679e-01, -8.462264e-04, -1.377769e-02],
                [-2.771053e-03, 8.241710e-04, -9.999958e-01, -5.542117e-02],
                [9.999644e-01, 7.969825e-03, -2.764397e-03, -2.918589e-01],
		        [0, 0, 0, 1]] )
T_c0c1 = np.mat( [[9.993440e-01, 1.814887e-02, -3.134011e-02, -5.370000e-01],
                  [1.842595e-02, 9.997935e-01, 8.575221e-03, 5.964270e-03],
                  [3.117801e-02,9.147067e-03, 9.994720e-01, -1.274584e-02],
	              [0, 0, 0, 1]] )

T_vc1 = T_c0v.I * T_c0c1.I

print("T_vc1:")
print(T_vc1)
T_ic0 = T_vi.I * T_c0v.I
T_ic1 = T_vi.I  * T_vc1
print("T_ic0 is")
print(mat(T_ic0))
print("T_ic1 is")
print(mat(T_ic1))
  • 最后结果IMU to Cam 外参结果:

body_T_cam0: !!opencv-matrix
   rows: 4
   cols: 4
   dt: d
   data: [ 0.00875116, -0.00479609,  0.99995027,  1.10224312,
          -0.99986428, -0.01400249,  0.00868325, -0.31907194,
           0.01396015, -0.99989044, -0.00491798,  0.74606588,
           0.,          0.,          0.,          1.        ]

body_T_cam1: !!opencv-matrix
   rows: 4
   cols: 4
   dt: d
   data: [-0.02218873, -0.01354233,  0.99989895,  1.1031531,
          -0.99989259,  0.00435299, -0.02270281, -0.85632959,
           0.03227481, -1.00072563,  0.00467743,  0.76942567,
           0.,          0.,          0.,          1.        ]
  • bag的相机内参(Kitti中未校正的):
# Cam00
%YAML:1.0
---
model_type: PINHOLE
camera_name: camera
image_width: 1242
image_height: 375
distortion_parameters:
   k1: -3.728755e-01
   k2: 2.037299e-01
   p1: 1.383707e-03
   p2: -7.233722e-02
projection_parameters:
   fx: 9.842439e+02
   fy: 9.808141e+02
   cx: 6.900e+02
   cy: 2.331966e+02


# Cam01
%YAML:1.0
---
model_type: PINHOLE
camera_name: camera
image_width: 1242
image_height: 375
distortion_parameters:
   k1: -3.644661e-01
   k2: 1.790019e-01
   p1: -6.298563e-04
   p2: -5.314062e-02
projection_parameters:
   fx: 9.895267e+02
   fy: 9.878386e+02
   cx: 7.020e+02
   cy: 2.45559e+02
  • Fusion自带的相机内参(Kitti中校正的):
%YAML:1.0
---
model_type: PINHOLE
camera_name: camera
image_width: 1241
image_height: 376
distortion_parameters:
   k1: 0
   k2: 0
   p1: 0
   p2: 0
projection_parameters:
   fx: 7.188560e+02
   fy: 7.188560e+02
   cx: 6.071928e+02
   cy: 1.852157e+02

3、最后跑vins结果:

双目,kitti_gps_test跑syn数据,VINS-Fusion自带参数(kitti中校正的rect):

在这里插入图片描述

单目+IMU,rosbag,bag的内外参:

  • 结果
    在这里插入图片描述

双目,rosbag,bag里的内外参数:

在这里插入图片描述

双目,rosbag,VINS-Fusion提供的内外参:

在这里插入图片描述

双目+IMU,rosbag,bag的内外参,飘的厉害,目前没找到原因(2020.6.17):

在这里插入图片描述

总结:目前bag跑kitti效果不是很好,按理说计算外参没有问题,另外一个可能原因是IMU数据与相机不是很同步

### 使用 KITTI 数据测试 VINS-Mono 单目 VO/VIO 算法 为了在 KITTI 数据上运行并测试 VINS-Mono 的性能,可以按照以下方式操作: #### 准备工作 1. **安装依赖环境** 需要先搭建适合的开发环境。推荐使用 Ubuntu 20.04 和 Docker 来部署所需的软件栈[^2]。Docker 提供了一个隔离的容器化环境,能够减少因系统配置不同而导致的问题。 2. **获取源码与数据** 下载 VINS-Mono 的官方开源代码库,并克隆到本地环境中。同时下载 KITTI Raw Data 数据中的双目或单目图像序列及其对应的 IMU 数据文件[^1]。 3. **修改数配置** 打开 `config` 文件夹下的相应配置文件(如 `euroc_config.yaml` 或其他类似的 YAML 数表),调整摄像头内矩阵、畸变系数以及其他传感器的时间同步设置以匹配 KITTI 数据中提供的具体设备型号和采条件。 #### 运行流程 以下是具体的执行命令及相关说明: ```bash # 编译项目 cd vins-mono/ mkdir build && cd build cmake .. make -j$(nproc) # 启动程序处理指定序列号的数据包 (假设为 2011_09_26_drive_0001) ./vins_mono ../../example/config/kitti_stereo_config.yaml \ /path/to/KITTI/raw_data/2011_09_26/2011_09_26_drive_0001_sync/image_00/data/ \ /path/to/KITTI/raw_data/2011_09_26/oxts/data/ \ ./results/output_kitti.txt ``` 上述脚本会读取路径下存储的所有帧图片以及 GPS/IMU 测量记录作为输入来完成位姿估计任务;最终轨迹预测会被保存至文本形式的结果文档当中以便后续可视化分析或者与其他真值对比计算误差指标等用途。 #### 结果验证 当算法成功完成后,可以通过 ROS 工具或者其他第三方绘图工具加载输出日志绘制三维地图点云分布情况或是二维平面投影上的行驶路线图形展示效果。此还可以借助 Python 脚本来量化评估定位准确性,比如均方根误差 RMSE 值等等统计学度量标准。 ```python import numpy as np def compute_rmse(ground_truth, estimated): diff = ground_truth[:, :3] - estimated[:, :3] mse = np.mean(diff ** 2, axis=0) rmse = np.sqrt(mse).sum() return rmse gt_poses = np.loadtxt('groundtruth.txt') est_poses = np.loadtxt('output_kitti.txt') rmse_value = compute_rmse(gt_poses, est_poses) print(f"RMSE Value: {rmse_value}") ``` 此段代码片段用于比较真实位置坐标同估算出来的对应关系之间的差异程度从而得出总体表现优劣结论。 ---
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值