【参数标定二】外参标定,适用于FAST-LIVO2(手持设备)

2026/01/19

使用 FAST-Calib 进行外参标定

1. 数据准备

  • 准备好手持设备与标定板;
  • 平稳放置手持设备,保证相机和雷达能同时看到完整的标定板,之后就不要动了;
roslaunch livox_ros_driver livox_lidar_rviz.launch # 启动雷达可视化
roslaunch mvs_ros_driver mvs_camera_trigger.launch # 启动相机可视化,并保存一张图片
rqt_image_view
  • 录制雷达与相机 rosbag 数据包,大致10秒;
rosbag record -O <YOUR_CALIB_DATA>.bag /livox/lidar left_camera/image
  • 如果想使用多场景联合标定,可以从不同角度对标定板进行录制(至少三个角度);

2. 下载代码并编译

1.创建工作空间

mkdir -p ~/calib_ws/src
cd ~/calib_ws/src

2.下载项目源码

确保在 src 目录下!!!

git clone https://github.com/hku-mars/FAST-Calib.git

(可选)检查依赖

dpkg -l | grep libpcl # PCL>=1.8
opencv_version        # OpenCV>=4.0

3.编译工作空间

cd ~/calib_ws
catkin_make

4.刷新环境

source devel/setup.zsh

5. 可能出现的问题

5.1 PCL 库链接到了错误的 libusb

  1. 验证方法:ldd /usr/lib/x86_64-linux-gnu/libpcl_io.so 2>/dev/null | grep -i usb
  2. PCL 链接到了 /opt/MVS/lib/64/ 下的 libusb(海康威视 MVS 相机 SDK 的库),其中的 libusb 版本较旧,没有 libusb_set_option 函数;

5.2 解决方法

临时修改 LD_LIBRARY_PATH,移除 MVS 路径;

export LD_LIBRARY_PATH=$(echo $LD_LIBRARY_PATH | sed 's|/opt/MVS/lib/64:||g; s|/opt/MVS/lib/32:||g')

或者直接指定 libusb 库的位置;

export LD_PRELOAD=/lib/x86_64-linux-gnu/libusb-1.0.so.0

再次编译;

catkin_make

3. 查看 launch 文件与配置文件

  • launch 文件:
    • calib.launch --> 单场景标定;
    • multi_calib.launch --> 多场景联合标定;
  • 配置文件 qr_params.yaml:
    • 相机内参:fx, fy, cx, cy, k1, k2, p1, p2
    • 标定板参数:

参数说明

  1. marker_size ArUco: 二维码的边长
  2. delta_width_qr_center: 两二维码水平中心距的一半
  3. delta_height_qr_center: 两二维码垂直中心距的一半
  4. delta_width_circles: 两圆心水平距离
  5. delta_height_circles: 两圆心垂直距离
  6. circle_radius: 圆形靶标半径
  • 距离滤波器:
    • 对rosbag中的点云进行裁切,只留下大致在标定板上的点云,进行平面拟合;
    • 这个参数越精准越好,可以通过scripts/distance_filter_tool.py脚本来获取;
  • 输入输出路径:需要 rosbag 与 对应的一张图像路径;

4. 运行演示

从 rosbag 中解一张图像出来;

在三个终端种分别运行

roscore
rqt_image_view
rosbag play <YOUR_CALIB_DATA>.bag

  1. 设置输入输出路径;
  2. 运行单场景标定;
cd ~/calib_ws
source devel/setup.zsh
roslaunch fast_calib calib.launch
  1. 到路径 output/single_calib_result.txt 中查看结果;

运行多场景联合标定;

  1. 保证 config/qr_params.yaml 中的 output_path 不变;
  2. 运行至少三个单景标定,在 output/circle_center_record.txt 中会有记录;
  3. 运行 roslaunch fast_calib multi_calib.launch 即可;

问题1:PCL 链接到了错误的 libusb 版本;

解决方法与上面一样;

问题2:距离滤波器阈值设置不合理;

  1. 验证方法:在 Rviz 中订阅点云话题 /filtered_cloud,查看过滤后的点云;
  2. 解决方法:使用 scripts/distance_filter_tool.py 脚本;

修改话题名称,326行改为:

topic_name="/livox/lidar",  # 如有不同,可改成 topic 名称

python <脚本路径> <rosbag路径> <结果保存路径>

python src/FAST-Calib/scripts/distance_filter_tool.py <YOUR_CALIB_DATA_PATH> <YOUR_OUTPUT_PATH>

到 <YOUR_OUTPUT_PATH>/sensor_PointCloud2_inten_ascii.txt 中复制阈值。并在 config/qr_params.yaml 进行修改;

bilibili:重建世界LAB

【参数标定二】外参标定,适用于FAST-LIVO2(手持设备) | 博客