保姆级教程:在Ubuntu 18.04上从零标定ZED 2双目相机,并成功运行VINS-Fusion
从零开始Ubuntu 18.04下ZED 2双目相机标定与VINS-Fusion实战指南当你第一次拿到ZED 2双目相机时可能会被复杂的标定流程和ROS环境配置搞得晕头转向。本文将带你从零开始一步步完成从系统环境搭建到VINS-Fusion成功运行的完整过程。不同于简单的命令罗列我会重点分享那些容易踩坑的细节和实用技巧确保你能一次成功。1. 环境准备与ROS安装在开始标定前我们需要确保系统环境配置正确。Ubuntu 18.04是ROS Melodic的官方支持版本这也是我们选择它的原因。1.1 系统基础配置首先更新系统并安装必要的依赖sudo apt update sudo apt upgrade -y sudo apt install -y build-essential cmake git wget接下来设置正确的USB权限这对ZED相机至关重要sudo usermod -a -G dialout $USER echo SUBSYSTEMusb, ATTR{idVendor}2b03, MODE0666 | sudo tee /etc/udev/rules.d/99-zed.rules sudo udevadm control --reload-rules sudo service udev restart sudo udevadm trigger1.2 ROS Melodic完整安装ROS的安装需要特别注意网络环境国内用户建议使用镜像源sudo sh -c echo deb http://mirrors.ustc.edu.cn/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 -y ros-melodic-desktop-full安装后初始化rosdep时国内用户可能会遇到网络问题可以尝试sudo rosdep init rosdep update --include-eol-distros最后别忘了将ROS加入环境变量echo source /opt/ros/melodic/setup.bash ~/.bashrc source ~/.bashrc1.3 创建工作空间我们创建一个独立的工作空间来管理所有相关包mkdir -p ~/zed_vins_ws/src cd ~/zed_vins_ws catkin_make echo source ~/zed_vins_ws/devel/setup.bash ~/.bashrc source ~/.bashrc2. ZED相机驱动与工具安装2.1 ZED SDK安装从官网下载对应版本的ZED SDK建议3.5以上版本wget https://download.stereolabs.com/zedsdk/3.5/cu110/ubuntu18 -O ZED_SDK.run chmod x ZED_SDK.run ./ZED_SDK.run安装完成后可以通过以下命令验证/usr/local/zed/tools/ZED_Explorer2.2 ROS Wrapper安装在之前创建的工作空间中安装ZED ROS包cd ~/zed_vins_ws/src git clone --recursive https://github.com/stereolabs/zed-ros-wrapper.git cd .. rosdep install --from-paths src --ignore-src -r -y catkin_make -DCMAKE_BUILD_TYPERelease2.3 标定工具安装我们需要三个关键标定工具Kalibr- 用于相机和IMU标定imu_utils- 用于IMU单独标定code_utils- imu_utils的依赖安装顺序很重要必须先安装code_utilscd ~/zed_vins_ws/src git clone https://github.com/gaowenliang/code_utils.git cd code_utils mkdir build cd build cmake .. make接着安装imu_utilscd ~/zed_vins_ws/src git clone https://github.com/gaowenliang/imu_utils.git cd imu_utils mkdir build cd build cmake .. make最后安装Kalibr这个过程较为复杂sudo apt install -y python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-dev ros-melodic-vision-opencv ros-melodic-image-transport-plugins ros-melodic-cmake-modules python-software-properties software-properties-common libpoco-dev python-matplotlib python-scipy python-git python-pip ipython libtbb-dev libblas-dev liblapack-dev python-catkin-tools libv4l-dev pip install --upgrade pip pip install python-igraph --upgrade cd ~/zed_vins_ws/src git clone https://github.com/ethz-asl/kalibr.git cd ~/zed_vins_ws catkin build -DCMAKE_BUILD_TYPERelease -j43. 相机标定实战3.1 标定板准备Kalibr支持多种标定板我们选择AprilGrid 6x6从Kalibr官网下载标定板PDFA0尺寸用A4纸打印后精确测量大正方形边长如2cm和小正方形边长如0.6cm创建标定板配置文件aprilgrid.yamltarget_type: aprilgrid tagCols: 6 tagRows: 6 tagSize: 0.02 tagSpacing: 0.33.2 数据采集技巧采集高质量数据是标定成功的关键roslaunch zed_wrapper zed2.launch rosrun topic_tools throttle messages /zed2/zed_node/left/image_rect_color 4 /left rosrun topic_tools throttle messages /zed2/zed_node/right/image_rect_color 4 /right rosbag record -O zed_calib.bag /left /right采集时注意缓慢移动相机确保标定板出现在所有视野区域包含各种旋转和平移运动持续时间至少90秒保持标定板良好照明避免反光3.3 执行标定使用Kalibr进行双目标定source ~/zed_vins_ws/devel/setup.bash rosrun kalibr kalibr_calibrate_cameras \ --bag zed_calib.bag \ --topics /left /right \ --models pinhole-radtan pinhole-radtan \ --target aprilgrid.yaml \ --bag-from-to 5 150 \ --show-extraction标定完成后检查重投影误差理想值0.1-0.2并保存生成的camchain.yaml文件。4. IMU标定与联合标定4.1 IMU单独标定IMU标定需要长时间静止数据rosbag record -O zed_imu.bag /zed2/zed_node/imu/data_raw创建启动文件zed_imu.launchlaunch node pkgimu_utils typeimu_an nameimu_an outputscreen param nameimu_topic value/zed2/zed_node/imu/data_raw/ param nameimu_name valuezed_imu/ param namedata_save_path value$(find imu_utils)/data// param namemax_time_min value120/ param namemax_cluster value100/ /node /launch运行标定roslaunch imu_utils zed_imu.launch rosbag play -r 200 zed_imu.bag4.2 相机-IMU联合标定准备三个文件之前的camchain.yamlIMU标定结果imu.yaml标定板配置文件aprilgrid.yaml执行联合标定rosrun kalibr kalibr_calibrate_imu_camera \ --bag zed_calib.bag \ --cam camchain.yaml \ --imu imu.yaml \ --target aprilgrid.yaml \ --bag-from-to 5 150检查输出中的时间偏移和空间变换参数确保误差在可接受范围。5. VINS-Fusion配置与运行5.1 安装VINS-Fusioncd ~/zed_vins_ws/src git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git cd ~/zed_vins_ws catkin_make5.2 配置文件调整创建相机配置文件cam0.yaml和cam1.yaml%YAML:1.0 model_type: PINHOLE camera_name: camera image_width: 640 image_height: 360 distortion_parameters: k1: 0 k2: 0 p1: 0 p2: 0 projection_parameters: fx: 261.15583086682227 fy: 262.8592818059595 cx: 319.313424543224 cy: 184.9957507446628创建主配置文件zed2_stereo_config.yaml特别注意IMU到相机的变换矩阵%YAML:1.0 imu: 1 num_of_cam: 2 imu_topic: /zed2/zed_node/imu/data_raw image0_topic: /zed2/zed_node/left/image_rect_gray image1_topic: /zed2/zed_node/right/image_rect_gray output_path: /path/to/output body_T_cam0: !!opencv-matrix rows: 4 cols: 4 dt: d data: [0.0178199, 0.00393081, 0.999833, 0.00227199, -0.999839, -0.00199068, 0.0178278, 0.0173767, 0.00206042, -0.99999, 0.0038947, -0.00345778, 0, 0, 0, 1]5.3 运行与调试创建启动脚本run_vins.sh#!/bin/bash gnome-terminal -- bash -c roslaunch vins vins_rviz.launch; exec bash sleep 5 gnome-terminal -- bash -c rosrun vins vins_node ~/zed_vins_ws/src/VINS-Fusion/config/zed/zed2_stereo_config.yaml; exec bash sleep 5 gnome-terminal -- bash -c roslaunch zed_wrapper zed2.launch; exec bash常见问题排查如果轨迹漂移检查IMU噪声参数是否准确没有图像输入时确认话题名称是否正确轨迹方向错误时检查变换矩阵方向6. 进阶技巧与优化6.1 标定质量提升在标定前预热相机和IMU 10分钟使用更高精度的标定板如金属制在多个光照条件下采集数据6.2 VINS参数调优关键参数调整建议参数推荐值作用max_cnt150-200特征点数量min_dist20-30特征点最小间距acc_n0.02加速度计噪声gyr_n0.001陀螺仪噪声6.3 实时性能优化对于资源受限的设备rosrun topic_tools throttle messages /zed2/zed_node/left/image_rect_color 10 /left_throttle rosrun topic_tools throttle messages /zed2/zed_node/right/image_rect_color 10 /right_throttle然后在配置文件中使用这些降频后的话题。