# IMU 内参标定 (使用imu_utils)
配置部分直接看这一位博主Ubuntu20.04编译并运行imu_utils,并且标定IMU-CSDN博客
# IMU外参标定 (使用浙大开源)GitHub - APRIL-ZJU/lidar_IMU_calib: Targetless Calibration of LiDAR-IMU System Based on Continuous-time Batch Estimation
##一定先配置code utils
##推荐使用ceres 2.0.0 (最先开始使用2.2.0,不通过;换成2.0.0,成功)
主要记录一下自己遇到的问题:
#IMU内参标定方面:
问题:imu utils 一直显示wait for imu data. 即使bag播放完成,依旧不出结果。(不要相信说一直显示wait for imu data.是正常的,一直等待浪费了很多时间。)
解决办法:修改launch文件的这一行 <param name="max_time_min" type="int" value= "120"/>;会卡的原因在于录制的bag时长不够设定的120,我录制的是2小时左右的bag,改为60(这个数字自定义,小于录制bag实际用时就可以)之后立刻出内参标定结果了。
# IMU外参标定
按照网上教程走之后,catkin_make依旧报错;
报错内容:/usr/bin/ld: calib_helper.cpp:(.text+0xbf5): undefined reference to `boost::filesystem::path::compare_v3(boost::filesystem::path const&) const'
/usr/bin/ld: calib_helper.cpp:(.text+0xc7f): undefined reference to `boost::filesystem::path::stem_v3() const'
/usr/bin/ld: calib_helper.cpp:(.text+0xc8c): undefined reference to `boost::filesystem::path::find_parent_path_size() const'
/usr/bin/ld: calib_helper.cpp:(.text+0xdc6): undefined reference to `boost::filesystem::detail::create_directory(boost::filesystem::path const&, boost::filesystem::path const*, boost::system::error_code*)'
collect2: error: ld returned 1 exit status
我的解决办法:boost::filesystem 改成 std::filesystem (c17 和 c11 的不同)
这时候如果继续用c14编译,还会报错,内容大概是:
error: ‘std::filesystem’ has not been declared
lidar_IMU_calib/src/ui/calib_helper.cpp:101:17: error: ‘p’ was not declared in this scope
原因是没有修改lidar_IMU_calib的cmakelist,进行一通修改之后成功编译(主要是用c17,外面的cmakelist不用再修改,保持c14即可):
cmake_minimum_required(VERSION 3.0.2)
project(li_calib)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-std=c++17")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -msse4.2")
set(CMAKE_BUILD_TYPE "RELEASE")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -msse4.2 -mavx")
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()
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
rosbag
geometry_msgs
nav_msgs
velodyne_msgs
ndt_omp
tf
pcl_ros
)
find_package(Eigen3 REQUIRED)
find_package(Boost REQUIRED COMPONENTS system filesystem thread date_time)
set(PANGOLIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/build-pangolin")
find_package(Pangolin REQUIRED)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/Kontiki)
set(BOOST_DIR "usr/include/boost")
# Set link libraries used by all binaries
list(APPEND thirdparty_libraries
${Boost_LIBRARIES}
${catkin_LIBRARIES}
${Pangolin_LIBRARIES}
Kontiki
)
catkin_package(
INCLUDE_DIRS include
# LIBRARIES li_calibr_lib
# CATKIN_DEPENDS geometry_msgs nav_msgs roscpp std_msgs velodyne_msgs
# DEPENDS system_lib
)
include_directories( include
${catkin_INCLUDE_DIRS}
${EIGEN3_INCLUDE_DIR}
${Boost_INCLUDE_DIRS}
${Pangolin_INCLUDE_DIRS}
)
add_library(li_calib_lib
src/core/trajectory_manager.cpp
src/core/inertial_initializer.cpp
src/core/lidar_odometry.cpp
src/core/surfel_association.cpp
)
target_link_libraries(li_calib_lib ${thirdparty_libraries})
add_executable(li_calib_gui
test/li_calib_gui.cpp
src/ui/calib_helper.cpp
src/ui/calib_ui.cpp)
target_link_libraries(li_calib_gui li_calib_lib ${thirdparty_libraries})
###更新
成功标定了IMU_LiDAR
在使用lidar_IMU_calib的时候,尽可能让LiDARtoIMU的欧拉角为0,0,0;
同时选择比较空旷的房间,或者走廊,建议第一帧斜对着天花板,然后尽可能旋转手持的设备(roll,pitch,yaw都要旋转,我基本是站在原地的,xy平面移动距离3m左右,z轴高度变化0.5m),以获得准确的欧拉角(参考终端显示的)
手持设备: VLP-16激光雷达 + handsfree A9 IMU
通过Fastlio2建图: