VINS-Fusion 外参标定效果分析(一)

本文介绍在EuRoC数据集上测试VINS-Fusion的外参估计效果,通过rpg_trajectory_evaluation工具对比不同外参下的轨迹误差,并分析外参估计前后精度提升的原因。

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

测试流程:

        在 EuRoC V1_01_easy 数据集上测试 VINS-Fusion 在线外参估计效果。使用估计前后不同的外参得到两条完整轨迹,使用 rpg_trajectory_evaluation 工具对比了两条轨迹相对 ground truth 的误差。

rpg_trajectory_evaluation 使用:

#依赖项
python -m pip install numpy matplotlib colorama

#安装
mkdir -p rpg_ws/src
cd rpg_ws/src
git clone https://github.com/uzh-rpg/rpg_trajectory_evaluation.git
git clone https://github.com/catkin/catkin_simple.git
cd ..
catkin_make

#使用
source devel/setup.bash
rosrun rpg_trajectory_evaluation asl_groundtruth_to_pose.py 轨迹保存路径/vio.csv
mv 轨迹保存路径/groundtruth.txt 轨迹保存路径/stamped_traj_estimate.txt
rosrun rpg_trajectory_evaluation analyze_trajectory_single.py 轨迹保存路径

另外,rpg_trajectory_evaluation 默认基于 sim3 对齐,对应纯单目视觉的情况,创建文件可以指定 align_type 和 align_num_frames。

        align_type:

                · sim3:相似变换(用于视觉单目情况)

                · se3:刚体变换(用于视觉双目情况)

                · posyaw:平移加上围绕重力的旋转(用于视觉惯性情况)

                · none:不对齐轨迹

        align_num_frames:

                将在轨迹对齐中使用的位姿数(从头开始)。-1 表示将使用所有位姿。

外参收敛过程:

        下图中 t 表示单位为 m 的平移外参,r 表示单位为 ° 的旋转向量形式的旋转外参。如下所示,外参的旋转部分和平移部分都基本收敛。

        外参的保存方法时在estimator.cpp文件里的optimization函数里,找到“ROS_DEBUG("Iterations : %d", static_cast<int>(summary.iterations.size()));”这行代码,并在这行代码下面添加如下代码:

std::ofstream outfile;
outfile.open(OUTPU_FOLDER+"extrinsic.txt", ios::app);
Eigen::Quaterniond temp_q(para_Ex_pose[0][6], para_Ex_pose[0][3], para_Ex_pose[0][4], para_Ex_pose[0][5]);
Eigen::AngleAxisd temp_rotation_vector(temp_q);
Eigen::Vector3d temp_rotation_v = 57.3 * temp_rotation_vector.angle() * temp_rotation_vector.axis();
outfile << std::to_string(curTime) << " " << para_Ex_pose[0][0] << " " << para_Ex_pose[0][1] << " " << para_Ex_pose[0][2] << " " << temp_rotation_v[0] << " " << temp_rotation_v[1] << " " << temp_rotation_v[2] << std::endl;
outfile.close();

        这样,左目相机与IMU之间的外参就保存在extrinsic.txt文件中,每行数据的顺序是Timestamp、tx、ty、tz、rx、ry、rz。最后使用python编写脚本,利用matplotlib即可画图。

外参估计前后的轨迹误差:

Rotation Error:

使用官方外参

使用估计得到的外参

Translation Error:

使用官方外参

使用估计得到的外参

Scale Error:

使用官方外参

使用估计得到的外参

侧面视角下的轨迹:

使用官方外参

使用估计得到的外参

总结:

现象:

        VIN-Fusion 在线估计得到的外参与官方外参有较大的差别,且使用估计得到的外参可以使轨迹整体精度明显提高。

原因:

        官方外参是在相机内参为 pinhole 模型下标定出来的,与 VIN-Fusion 自己标定出来的 mei 模型的相机内参不匹配,因此重新估计外参可以使精度有明显提升。

<think>好的,用户想在Ubuntu系统上安装和配置VINS-Fusion。我需要根据提供的引用信息来整理步骤。首先,检查用户使用的Ubuntu版本,因为不同版本安装步骤可能有差异,比如ROS的安装。引用中提到了Ubuntu 20.04和18.04,可能需要分情况说明。 第步应该是安装ROS。根据引用[1]和[3],Ubuntu 20.04需要安装ROS Noetic,而18.04安装Melodic。用户需要根据系统版本选择正确的ROS版本,并注意可能遇到的rosdep初始化错误,如引用[3]中提到的,可能需要手动处理或更换源。 接下来是安装依赖库,比如Eigen、Ceres Solver、OpenCV等。引用[4]提到安装Ceres 1.14.0和OpenCV 4.6.0,可能需要编译安装。需要注意版本兼容性,特别是OpenCV的版本是否与VINS-Fusion兼容,可能需要特定版本或配置。 然后,下载和编译VINS-Fusion的代码。用户需要从GitHub克隆仓库,可能需要调整CMakeLists.txt中的依赖路径,尤其是如果自行安装了某些库的情况。编译过程中可能出现依赖缺失,需要确保所有必要的库都已正确安装。 此,可能还需要配置GPU支持,如引用[4]提到的VINS-Fusion-gpu,这需要CUDA和cuDNN的环境,需要检查用户的显卡驱动是否安装,CUDA版本是否匹配。 最后,测试安装是否成功,使用数据集运行VINS-Fusion,并检查是否有报错。可能需要指导用户如何下载数据集和运行不同的节点,比如单目、双目或融合GPS的数据。 用户可能遇到的问题包括ROS安装中的网络问题、依赖库版本冲突、编译错误等,需要提供常见问题的解决方法,比如替换rosdep的源,或者调整CMake文件中的路径。 另,需要提醒用户仔细遵循步骤,确保每个环节正确,尤其是环境变量和路径的设置,避免后续步骤出错。可能还需要提供考链接或进步阅读材料,方便用户深入排查问题。</think>### 在Ubuntu系统中安装和配置VINS-Fusion的步骤 #### 1. **安装ROS(根据Ubuntu版本选择对应ROS版本)** - **Ubuntu 20.04**:安装ROS Noetic ```bash sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install ros-noetic-desktop-full echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential sudo rosdep init rosdep update ``` - **注意**:若`sudo rosdep init`失败(如引用[3]所述),可手动下载`20-default.list`并放置到`/etc/ros/rosdep/sources.list.d/`目录下[^3]。 - **Ubuntu 18.04**:安装ROS Melodic(步骤类似,替换`noetic`为`melodic`)。 #### 2. **安装依赖库** - **Eigen3**: ```bash sudo apt install libeigen3-dev ``` - **Ceres Solver(需源码编译,推荐1.14.0)**: 根据引用[4],从源码安装Ceres 1.14.0[^4]: ```bash git clone https://github.com/ceres-solver/ceres-solver.git cd ceres-solver && git checkout 1.14.0 mkdir build && cd build cmake .. && make -j$(nproc) sudo make install ``` - **OpenCV(推荐4.6.0)**: 若系统自带OpenCV版本不兼容,需源码编译[^4]: ```bash git clone https://github.com/opencv/opencv.git cd opencv && git checkout 4.6.0 mkdir build && cd build cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_CUDA=OFF .. make -j$(nproc) sudo make install ``` #### 3. **下载并编译VINS-Fusion** ```bash mkdir -p ~/vins_ws/src cd ~/vins_ws/src git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git cd .. && catkin_make ``` - **可能遇到的问题**: - 若提示`ceres`或`opencv`未找到,需在`CMakeLists.txt`中手动指定路径(如`set(Ceres_DIR /path/to/ceres)`)[^4]。 - 若编译报错,检查ROS环境变量是否生效(`source /opt/ros/<version>/setup.bash`)。 #### 4. **运行测试** - **示例数据集测试(单目+IMU)**: ```bash roslaunch vins vins_rviz.launch rosrun vins vins_node src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml rosbag play YOUR_DATASET.bag ``` - **双目相机测试**: 修改配置文件中相机数,替换为实际标定值。 --- ###
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值