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
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题翻译成中文是:b'lidar_imu_calib标定过程'。 回答:lidar_imu_calib是指激光雷达和惯性测量单元(IMU)之间的标定过程,通过该过程可以解决激光雷达和IMU在安装中的相对姿态和时间同步问题。该过程需要收集一些基准数据,例如IMU的加速度计和陀螺仪数据,以及激光雷达的点云数据。然后将这些数据引入标定算法中,得到激光雷达和IMU之间的相对位姿和时间偏差,最后将它们纠正并同步,从而使系统达到更高的精度。 ### 回答2: Lidar_imu_calib是一种激光雷达和惯性测量单元的联合标定方法。它旨在从激光雷达的数据和惯性传感器的数据中获取相机、激光雷达和车辆的位姿(即位置和姿态)信息。 lidar_imu_calib标定过程可以分为以下几步: 1.采集数据:首先需要采集车辆在各种不同的姿态和运动条件下的数据,包括车速变化、车辆俯仰和横滚角变化等。同时,需要记录激光雷达和惯性传感器的输出数据。 2.匹配点云和IMU数据:利用系统时间戳进行点云数据和IMU数据的对齐,通过坐标系变换将两者的数据进行匹配。 3.计算位姿:根据匹配后的数据,计算车辆的位姿,包括车辆位置和姿态(即旋转角度),这是通过解决非线性优化问题来完成的。 4.评估误差:标定结果需要进行评估,通过比较计算出的车辆真实姿态和标定结果之间的差异来确定标定的准确性。 5.优化标定结果:根据评估结果进行标定结果的优化,即根据误差来调整标定结果,以提高标定准确性。 总之,lidar_imu_calib标定是激光雷达与惯性测量单元联合标定的方法,通过匹配点云和IMU数据,计算位姿,评估误差和优化标定结果等步骤,得到车辆的位姿信息,从而提高自动驾驶车辆的安全性和性能。 ### 回答3: Lidar_imu_calib是一种遥感设备,由激光雷达和惯性测量单元(IMU)组成,它的目的是3D空间中的可视化地图构建。Lidar可以测量环境中物体的位置和形状,而IMU可以测量设备的位置和运动状态。因此,Lidar_imu_calib的精度和准确性对于它的应用非常重要。为此,在使用Lidar_imu_calib之前,必须进行标定Lidar_imu_calib标定过程试图确定几何和姿态转换矩阵,这个矩阵用于将LidarIMU测量结果在同一个坐标系下进行配置。其中,几何变换矩阵被用来纠正从LidarIMU获得的点云数据中发生的误差,姿态变换矩阵则用于纠正导致视角变化的角度问题。 标定过程的首要步骤是采集数据,包括LidarIMU的原始数据以及因为设备不同而引起的差异。通过在一定时间内在多个场景下对数据进行采集,可以获得更加丰富的数据,并确保标定能够在多种条件下表示准确。 数据采集之后,接下来需要进行数据处理。主要是通过使用非线性最小二乘法以最小化两个矩阵的几何和姿态误差。 这个过程需要大量的计算能力和优秀的算法以最大化标定的准确度。最终的标定参数是由几何和姿态矩阵的组合产生的,并被应用到Lidar_imu_calib设备以及期望的应用程序中。 总之,Lidar_imu_calib标定是一项复杂的过程,它需要充分的数据采集、数据处理和优秀的算法来确保标定结果的准确性和精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值