从0开始跑通VINS FUSION(KITTI数据集)

本文记录了一个SLAM新手使用VINS FUSION在虚拟机上从编译到运行KITTI数据集的全过程。VINS FUSION是HKUST的多功能SLAM系统,支持双目和GPS融合。文章详细描述了编译环境(Ubuntu 16.04, ceres1.13.0, ROS Kinect)的搭建,编译过程,数据集的获取与准备,以及运行Odometry和GPS Fusion的步骤。通过源码编译并在rviz中展示结果,过程中遇到的问题及解决方案也进行了分享。" 126311156,12431315,Python爬虫:BeautifulSoup详解与使用,"['python', '爬虫', 'BeautifulSoup']

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

背景:

VINS FUSION是香港科技大学在VINS MONO后做的推出的多功能版,有双目的数据,还有和GPS的融合。作为一个SLAM小白,记录一下整个的跑通过程。

代码连接:https://github.com/HKUST-Aerial-Robotics/VINS-Fusion

环境:

这里和作者github主页一致,但由于条件有限,我使用的是虚拟机。

Ubuntu 16.04 LTS,ceres1.13.0,ROS Kinect。opencv自己装的3.3。应该网上有很多安装这些软件/库的方法,印象中如果用最新的ceres需要把cmake版本提升,不能用16.04下sudo apt-get获得的默认版本。

一、编译

这里用作者github页面下的方法就行,但是博主我就是小白,还是写的清楚一点。

首先你要建个文件夹,博主建的文件夹就叫 vins-catkin_ws,里面再建一个叫src的文件夹,然后把解压好的代码(博主的文件夹叫VINS-FUSION-master)放进去。这时候就是/vins-catkin_ws/src/VINS-FUSION-master的目录顺序。

然后命令行进入到/vins-catkin_ws这一层,进行catkin make。

注意:这里博主遇到了问题,博主本来的虚拟机分配了1核1G内存,在前面15%的时候卡死了,查了下自己笔记本的配置,最后分配了2核4G内存,编译花了大概10分钟的时间。另外看到过网上部分人提到使用catkin make是默认-j2的,也有可能会卡主(反正我也小白不太懂),博主就是 -j1进行的编译。有兴趣的朋友可以试一下其他。

### 如何在KITTI数据集运行VINS 要在 KITTI 数据集运行 VINS(Visual-Inertial Navigation System),需要完成一系列配置和实现工作。以下是详细的说明: #### 1. **准备硬件与软件环境** 确保安装了必要的依赖项,包括 ROS(Robot Operating System)、Eigen 库以及 Ceres Solver 等工具。这些库对于处理传感器数据融合至关重要[^2]。 ```bash sudo apt-get install ros-noetic-cmake-modules python-catkin-tools libeigen3-dev libcxsparse3 libceres-dev ``` #### 2. **获取并编译 VINS-Mono 或其他变体** 下载适合的 VINS 实现版本,例如 `VINS-Fusion` 或者更简单的单目版本 `VINS-Mono`。按照官方文档中的指导进行源码克隆和编译。 ```bash git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git cd VINS-Mono catkin_make -j4 source devel/setup.bash ``` #### 3. **校准相机与 IMU 参数** 利用标定好的摄像头内参矩阵 \( \mathbf{K}=[f_x,f_y,c_x,c_y] \),畸变系数向量 \( d[k_1,k_2,p_1,p_2[,k_3]]\) 和时间同步后的外参数旋转平移关系 \( T_{cam\_imu}\)[^3] 来调整配置文件中的对应字段。常可以在 `/config/euroc_config.yaml` 中找到类似的设置模板。 ```yaml camera: fx: 718.8560 fy: 718.8560 cx: 607.1928 cy: 185.2157 distortion_coeffs: [0.0, 0.0, 0.0, 0.0] T_cam_imu: rows: 4 cols: 4 data: [0.0148655429818, -0.999880929698, 0.00414029679422, -0.0216401354008, 0.999555141449, 0.0149672133247, 0.0257155299485, -0.064676986768, -0.0257744366974, 0.00375624527817, 0.999660727178, 0.00104400161167, 0.0, 0.0, 0.0, 1.0 ] ``` #### 4. **加载 KITTI 数据流至 ROS 节点** 编写脚本读取 KITTI 提供的图像序列及其对应的 IMU 测量记录,并发布成标准话题形式以便于下游算法订阅使用。可以参考如下 Python 示例代码片段来启动节点: ```python import rospy from sensor_msgs.msg import Image, Imu import cv_bridge import numpy as np def kitti_to_ros(): bridge = cv_bridge.CvBridge() image_pub = rospy.Publisher("/camera/image_raw", Image, queue_size=10) imu_pub = rospy.Publisher("/imu/data", Imu, queue_size=10) rate = rospy.Rate(10) while not rospy.is_shutdown(): img = load_next_kitti_image() # 自定义函数用于逐帧抓取图片数组 msg_img = bridge.cv2_to_imgmsg(img, encoding="bgr8") accels_gyro = read_next_imu_measurement() # 同样由用户自行实现部分逻辑 orientation_quat = convert_euler_angles(accels_gyro[:3]) # 假设输入角度顺序为roll pitch yaw angular_velocity_vector = accels_gyro[3:] imu_msg = construct_imu_message(orientation_quat, angular_velocity_vector) image_pub.publish(msg_img) imu_pub.publish(imu_msg) rate.sleep() if __name__ == '__main__': try: rospy.init_node('kitti_publisher', anonymous=True) kitti_to_ros() except rospy.ROSInterruptException: pass ``` #### 5. **执行测试流程验证性能表现** 最后一步就是实际部署上述构建完毕的整体解决方案,在目标平台上观察其轨迹估计误差指标是否满足预期需求水平[^4]。 ---
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值