Lidar - IMU 标定 #记录

# 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建图:

  • 42
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值