目录
安装direct_visual_lidar_calibration
1.参考
官网:https://github.com/koide3/direct_visual_lidar_calibration?tab=readme-ov-file
官方安装文档:Installation - direct_visual_lidar_calibration
部署整体参考:相机雷达标定direct_visual_lidar_calibration部署_direct lidar camera calibration-CSDN博客
基础环境:ubuntu20.04_ros1
2.安装依赖
# Install dependencies
sudo apt install libomp-dev libboost-all-dev libglm-dev libglfw3-dev libpng-dev libjpeg-dev
3.安装GTSM
最好使用官网推荐版本4.2a9
# Install GTSAM
git clone https://github.com/borglab/gtsam
cd gtsam && git checkout 4.2a9
mkdir build && cd build
# For Ubuntu 22.04, add -DGTSAM_USE_SYSTEM_EIGEN=ON
cmake .. -DGTSAM_BUILD_EXAMPLES_ALWAYS=OFF \
-DGTSAM_BUILD_TESTS=OFF \
-DGTSAM_WITH_TBB=OFF \
-DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF
make -j$(nproc)
sudo make install
GTSAM安装成功后,在使用catkin_make编译direct_visual_lidar_calib项目时,出现下面报错:
报错1:error: static assertion failed: Error: GTSAM was built against different version of Eigen
GTSAM_EIGEN_VERSION_WORLD==EIGEN_WORLD_VERSION
解决方法:这是因为GTSAM使用了自带的eigen,与计算机本地的冲突了。
打开gtsam/cmake/HandleEigen.cmake文件,在
if(GTSAM_USE_SYSTEM_EIGEN)
的上面添加
set(GTSAM_USE_SYSTEM_EIGEN ON),
修改如下:
报错2:fatal error: fmt/format.h: 或 /usr/bin/ld: could not found -lfmt
解决方法:需下8.8.1版本的fmt,不然报错error: static assertion failed: Cannot format an argument.
报错3:error while loading shared libraries: libmetis-gtsam.so:
解决方法:sudo apt-get install libparmetis-dev
4.安装Ceres
推荐安装ceres2.1及其以后的版本
# Install Ceres
git clone https://github.com/ceres-solver/ceres-solver
mkdir ceres-solver/build && cd ceres-solver/build
cmake .. -DBUILD_EXAMPLES=OFF -DBUILD_TESTING=OFF -DUSE_CUDA=OFF
make -j$(nproc)
sudo make install
Ceres安装成功后,在使用catkin_make编译direct_visual_lidar_calib项目时,出现下面报错:
报错1:fatal error: ceres/manifold.h:
解决方法:安装ceres2.1及其以后的版本,才有mainfold.h模块
5.安装Iridescence
不能直接在网页下载库,再进行编译,一定要进行子模块初始化
*--recursive,初始化和更新子模块。使用子模块可以将一个 Git 仓库嵌套在另一个 Git 仓库中,而且每个仓库可以独立进行版本控制和管理。
# Install Iridescence for visualization
git clone https://github.com/koide3/iridescence --recursive
mkdir iridescence/build && cd iridescence/build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install
没有进行子模块初始化,会在编译direct_visual_lidar_calib时出现以下错误:
报错1:could not find Iridescence
分析:在iridescence/cmake/FindIridescence.cmake中LIBRARIES重命名,由于最开始安装的库是直接从githu网页上下载的,没有经历子模块初始化,导致找不到对应的gl_imgui_lib.
6.安装SuperGlue [可选]
注意:
matplotlib>=3.1.3
torch>=1.1.0
opencv-python>=4.1.2.30
numpy>=1.18.1
pip3 install numpy opencv-python torch matplotlib
git clone https://github.com/magicleap/SuperGluePretrainedNetwork.git
echo 'export PYTHONPATH=$PYTHONPATH:/path/to/SuperGluePretrainedNetwork' >> ~/.bashrc
source ~/.bashrc
报错1:[W NNPACK.cpp:61] Could not initialize NNPACK! Reason: Unsupported hardware.
分析:这个警告是由于NNPACK无法初始化,原因是硬件不支持。NNPACK是一个用于神经网络推理加速的库,但它需要特定的硬件支持来执行优化的计算。如果你的硬件不支持NNPACK所需的指令集或功能,它就无法正常工作。
实际上不用管,也可以成功继续运行。
报错2:MatplotlibDeprecationWarning: The get_cmap function was deprecated in Matplotlib 3.7 and will be removed two minor releases later. Use ``matplotlib.colormaps[name]`` or ``matplotlib.colormaps.get_cmap(obj)`` instead.
cmap = matplotlib.cm.get_cmap('turbo')
解决方法:更新Matplotlib版本,并按照报错修改cmap = matplotlib.cm.get_cmap('turbo')为matplotlib.colormaps.get_cmap(obj).
7.安装direct_visual_lidar_calibration
# ROS1
cd ~/catkin_ws/src
git clone https://github.com/koide3/direct_visual_lidar_calibration.git --recursive
cd .. && catkin_make
# ROS2
cd ~/ros2_ws/src
git clone https://github.com/koide3/direct_visual_lidar_calibration.git --recursive
cd .. && colcon build
8.开始标定
此处使用的是官方给出的livox_ros1数据。
该项目里提供了ros1和ros2的数据读取,但由于 ROS2-ROS1 包转换问题,示例 ROS1 包文件中的 CameraInfo 消息显示的 MD5 校验和与标准 sensor_msgs/CameraInfo 消息的校验和不同。由于这会影响自动提取相机信息,因此需要手动指定相机参数进行预处理。
camera_info msg 必须是 plumb_bob 或 fisheye,否则也需手动指定相机参数。
若不指定相机参数,则会报错:不存在camera_info
所以首先需要提取出rosbag中camera_info内容:
# rostopic filter 提取主题内容
rosbag filter livox_ros1/rosbag2_2023_03_09-13_42_46.bag livox_ros1/extracted.bag "topic == '/camera_info'"
# rostopic echo 转换格式
rostopic echo -p -b livox_ros1/extracted.bag /camera_info > livox_ros1/camera_info.txt
得到distortion_coeffs:
和intrinsic:
查看代码可知:
最后得到我们要手动指定的相机外参为:
开始标定
Process
rosrun direct_visual_lidar_calibration preprocess livox_ros1 -av --camera_model=plumb_bob --camera_intrinsics=1452.71176245628,1455.87753161946,1265.25895179213,1045.8185936641 --camera_distortion_coeffs=-0.042035649,0.087317098,0.002386382,0.005629701,-0.042511493 livox_preprocessed
通过Iridescence可视化库的相机控件,鼠标左键控制yaw和pitch角围绕球心旋转,按住鼠标滚轮控制前后左右平移。可以调整视角得到下图:
Initial guess (Automatic)
rosrun direct_visual_lidar_calibration find_matches_superglue.py livox_preprocessed --rotate_camera 90
rosrun direct_visual_lidar_calibration initial_guess_auto livox_preprocessed
Initial guess (Manual)
rosrun direct_visual_lidar_calibration initial_guess_manual livox_preprocessed
Calibration result inspection
rosrun direct_visual_lidar_calibration calibrate livox_preprocessed