官方安装方式
Installation - direct_visual_lidar_calibration
安装依赖
sudo apt install libomp-dev libboost-all-dev libglm-dev libglfw3-dev libpng-dev libjpeg-dev
安装GTSAM
git clone https://github.com/borglab/gtsam
cd gtsam && git checkout 4.2a9
mkdir build && cd build
//ubuntu20.04
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
安装ceres
# Install Ceres
git clone --recurse-submodules https://github.com/ceres-solver/ceres-solver
cd ceres-solver
git checkout e47a42c2957951c9fafcca9995d9927e15557069
mkdir build && cd build
cmake .. -DBUILD_EXAMPLES=OFF -DBUILD_TESTING=OFF -DUSE_CUDA=OFF
make -j$(nproc)
sudo make install
安装Iridescence
# 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
Install SuperGlue (Optional)
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
Build direct_visual_lidar_calibration
# ROS1
cd ~/catkin_ws/src
git clone https://github.com/koide3/direct_visual_lidar_calibration.git --recursive
cd .. && catkin_make
在编译的时候遇到了这个问题,查看官方文档,发现别人也有遇到这个问题。我使用的版本是ubuntu20.04,ubuntu20.04遇到这个问题可以参考我的博客。
使用vim
/usr/local/lib/cmake/iridescence/iridescence-config.cmake添加以下这行
set_property(TARGET Iridescence::iridescence PROPERTY IMPORTED_GLOBAL TRUE
/usr/bin/ld: 找不到 -lfmt
sudo apt-get install libfmt-dev
opencv库版本不兼容,opencv是因为我之前安装orb-slam换掉了opencv的版本,opencv版本冲突是比较常见并且比较难解决的问题。如果出现了这个问题,可以按照我下面的解决方法解决。undefined reference to `cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)' · Issue #28872 · microsoft/vcpkg · GitHub
1.查看opencv版本
pkg-config --modversion opencv4
我的opencv版本为4.2
2.直接修改cmakelist文件,可以直接将我的cmakelist文件复制过去。主要修改在27行,添加opencv的版本,83行增加opencv相关库的查找,95,99,103行,ros编译时opencv库的查找。
cmake_minimum_required(VERSION 3.16)
project(direct_visual_lidar_calibration)
add_compile_options(-std=c++17)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR}/cmake")
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build." FORCE)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif()
if($ENV{ROS_VERSION} EQUAL 1)
# ROS1
find_package(catkin REQUIRED COMPONENTS rosbag sensor_msgs cv_bridge)
catkin_package()
else()
# ROS2
find_package(ament_cmake_auto REQUIRED)
find_package(ament_cmake_python REQUIRED)
ament_auto_find_build_dependencies()
endif()
find_package(PCL REQUIRED)
find_package(Ceres REQUIRED)
find_package(GTSAM REQUIRED)
# find_package(OpenCV CONFIG REQUIRED)
find_package(OpenCV 4.2 REQUIRED COMPONENTS core imgproc highgui)
find_package(Boost REQUIRED COMPONENTS filesystem program_options)
find_package(Iridescence REQUIRED)
set(OLD_DISTRO "humble;galactic;foxy")
if($ENV{ROS_DISTRO} IN_LIST OLD_DISTRO)
add_definitions(-DCV_BRIDGE_INCLUDE_H)
else()
add_definitions(-DCV_BRIDGE_INCLUDE_HPP)
endif()
find_package(OpenMP)
if (OPENMP_FOUND)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()
# direct_visual_lidar_calibration
add_library(direct_visual_lidar_calibration SHARED
src/camera/create_camera.cpp
src/vlcal/common/frame.cpp
src/vlcal/common/frame_cpu.cpp
src/vlcal/common/ivox.cpp
src/vlcal/common/cloud_covariance_estimation.cpp
src/vlcal/common/time_keeper.cpp
src/vlcal/common/estimate_fov.cpp
src/vlcal/common/estimate_pose.cpp
src/vlcal/common/points_color_updater.cpp
src/vlcal/common/visual_lidar_data.cpp
src/vlcal/common/visual_lidar_visualizer.cpp
src/vlcal/preprocess/preprocess.cpp
src/vlcal/preprocess/generate_lidar_image.cpp
src/vlcal/preprocess/static_point_cloud_integrator.cpp
src/vlcal/preprocess/dynamic_point_cloud_integrator.cpp
src/vlcal/calib/cost_calculator_nid.cpp
src/vlcal/calib/view_culling.cpp
src/vlcal/calib/visual_camera_calibration.cpp
)
target_include_directories(direct_visual_lidar_calibration PUBLIC
include
thirdparty/json/include
thirdparty/Bonxai/include
thirdparty/nanoflann/include
thirdparty/Sophus
${Boost_INCLUDE_DIRS}
${CERES_INCLUDE_DIRS}
${GTSAM_INCLUDE_DIRS}
${PCL_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
)
target_link_libraries(direct_visual_lidar_calibration
fmt
${Boost_LIBRARIES}
${PCL_LIBRARIES}
${CERES_LIBRARIES}
${GTSAM_LIBRARIES}
${OpenCV_LIBS}
Iridescence::Iridescence
)
if($ENV{ROS_VERSION} EQUAL 1)
# ROS1
add_executable(preprocess
src/preprocess_ros1.cpp
)
target_link_libraries(preprocess
direct_visual_lidar_calibration
${OpenCV_LIBS}
)
target_include_directories(preprocess PUBLIC
${catkin_INCLUDE_DIRS}
${OpenCV_LIBS}
)
target_link_libraries(preprocess
${catkin_LIBRARIES}
${OpenCV_LIBS}
)
else()
# ROS2
ament_auto_add_executable(preprocess
src/preprocess_ros2.cpp
)
target_link_libraries(preprocess
direct_visual_lidar_calibration
)
endif()
# preprocess_map
add_executable(preprocess_map
src/preprocess_map.cpp
)
target_include_directories(preprocess_map PRIVATE
${catkin_INCLUDE_DIRS}
)
target_link_libraries(preprocess_map
direct_visual_lidar_calibration
)
# initial_guess_manual
add_executable(initial_guess_manual
src/initial_guess_manual.cpp
)
target_include_directories(initial_guess_manual PRIVATE
${catkin_INCLUDE_DIRS}
)
target_link_libraries(initial_guess_manual
direct_visual_lidar_calibration
)
# initial_guess_auto
add_executable(initial_guess_auto
src/initial_guess_auto.cpp
)
target_include_directories(initial_guess_auto PRIVATE
${catkin_INCLUDE_DIRS}
)
target_link_libraries(initial_guess_auto
direct_visual_lidar_calibration
)
# calibrate
add_executable(calibrate
src/calibrate.cpp
)
target_include_directories(calibrate PRIVATE
${catkin_INCLUDE_DIRS}
)
target_link_libraries(calibrate
direct_visual_lidar_calibration
)
# viewer
add_executable(viewer
src/viewer.cpp
)
target_include_directories(viewer PRIVATE
${catkin_INCLUDE_DIRS}
)
target_link_libraries(viewer
direct_visual_lidar_calibration
)
install(
TARGETS
direct_visual_lidar_calibration
)
install(
TARGETS
preprocess_map
initial_guess_manual
initial_guess_auto
calibrate
viewer
DESTINATION
lib/${PROJECT_NAME}
)
if($ENV{ROS_VERSION} EQUAL 1)
# ROS1
else()
# ROS2
ament_python_install_package(${PROJECT_NAME})
install(PROGRAMS scripts/find_matches_superglue.py DESTINATION lib/${PROJECT_NAME})
ament_export_libraries(direct_visual_lidar_calibration)
ament_auto_package()
endif()
使用direct_visual_lidar_calibration标定
1.先下载官方数据集,查看官方运行效果再采集自己的数据集,官方标定使用文档