使用 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

- 验证方法:ldd /usr/lib/x86_64-linux-gnu/libpcl_io.so 2>/dev/null | grep -i usb
- 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
- 标定板参数:

参数说明
- marker_size ArUco: 二维码的边长
- delta_width_qr_center: 两二维码水平中心距的一半
- delta_height_qr_center: 两二维码垂直中心距的一半
- delta_width_circles: 两圆心水平距离
- delta_height_circles: 两圆心垂直距离
- circle_radius: 圆形靶标半径
- 距离滤波器:
- 对rosbag中的点云进行裁切,只留下大致在标定板上的点云,进行平面拟合;
- 这个参数越精准越好,可以通过scripts/distance_filter_tool.py脚本来获取;
- 输入输出路径:需要 rosbag 与 对应的一张图像路径;
4. 运行演示
从 rosbag 中解一张图像出来;
在三个终端种分别运行
roscore
rqt_image_view
rosbag play <YOUR_CALIB_DATA>.bag

- 设置输入输出路径;
- 运行单场景标定;
cd ~/calib_ws
source devel/setup.zsh
roslaunch fast_calib calib.launch
- 到路径 output/single_calib_result.txt 中查看结果;
运行多场景联合标定;
- 保证 config/qr_params.yaml 中的 output_path 不变;
- 运行至少三个单景标定,在 output/circle_center_record.txt 中会有记录;
- 运行 roslaunch fast_calib multi_calib.launch 即可;
问题1:PCL 链接到了错误的 libusb 版本;
解决方法与上面一样;
问题2:距离滤波器阈值设置不合理;

- 验证方法:在 Rviz 中订阅点云话题 /filtered_cloud,查看过滤后的点云;
- 解决方法:使用 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 进行修改;

