CERES高版本如何编译通过过浙大开源标定工具lidar_IMU_calib

版本:Ubuntu20.04+pcl1.10.0+ceres2.2.0

写在前面:因为要测试LOAM系列以及LIO系列的算法和改进效果,在公开数据集上已经测试完成,需要在自采数据集上进行测试,测试前需要对imu以及激光雷达进行标定(尴尬,我的小车是纯激光雷达16线的,所以又自己买了一个imu来做融合),但是网上那么多办法,兜兜转转总结下来就是:

苏黎世联邦理工的 lidar_align

哈工大的 lidar_imu_calib

浙江大学开发的 lidar_imu_calib

几种工具的优缺点我个人没有比较也没有测试,其他博主已经写的很清楚,请移步文末参考文献。

但是发现网上大家遇到的错误千篇一律,居然都可以编译通过,在自己的环境下实在是编译不过,于是换了不同的包,测了很多次,终于通过了一个版本,记录和分享一下。

一、官网标定工具包安装

笔者使用的是浙江大学开发的 lidar_imu_calib(GitHub源码),首先安装官网readme文件进行安装,这里我直接把这个文件复制一部分下来:

# init ROS workspace
# 创建工作空间(为了不影响别的包,我也直接新建了一个工作空间)
mkdir -p ~/catkin_li_calib/src
cd ~/catkin_li_calib/src
catkin_init_workspace

# Clone the source code for the project and build it. 
# 下载官网上的源码(我直接git下来的,没有用安装包,因为安装包我用的时候有不少问题)
git clone https://github.com/APRIL-ZJU/lidar_IMU_calib

# ndt_omp
# 环境配置
wstool init
wstool merge lidar_IMU_calib/depend_pack.rosinstall
wstool update
# Pangolin
# 环境配置
cd lidar_imu_calib_beta
./build_submodules.sh
## build
# 编译
cd ../..
catkin_make
source ./devel/setup.bash

请注意,你可能会遇到如下问题(由于我没有问题的截图,我尽可能描述清楚):

1.Cmake failed.

会提示你在cmake的时候缺少一个 velodyne-msgs包 

你需要执行以下命令来补充这个包:

sudo apt-get install ros-melodic-pcl-ros ros-melodic-velodyne-msgs

补充完成后即可开始进行编译。

2.error: ‘plus’ is not a member of ‘pcl::traits’

这个是因为pcl版本和C++版本不匹配导致的,需要将CmakeLists.txt中修改以下:

#set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD 14)

其实就是把C++版本对应到C++14上去,我们20.04的老生常谈了,但是需要注意一个问题:你按照上文的流程下载时,会发现src下有两个包,一个是标定工具另一个是ndt_omp,这两个包中的CmakeLists都需要修改为C++14!!!!(尴尬,我弄了半天没发现这个)

3.error: ‘LocalParameterization’ in namespace ‘ceres’ does not name a type

最恶心的地方来了,ceres版本问题。

因为ceres2.2.0开始就有这个变换

#ceres::LocalParameterization *q_parameterization = new ceres::EigenQuaternionParameterization();
#换成
ceres::Manifold *q_parameterization = new ceres::EigenQuaternionManifold();

Manifold这个函数替代了以前的LocalParametric,不止这里需要更换,比如以下这段:

template<typename T>
struct SO3SplineControlPointInfo : public ControlPointInfo<Eigen::Quaternion<T>, 4> {
  SO3SplineControlPointInfo() :
    parameterization_(new ceres::EigenQuaternionParameterization) { };

  void Validate(const Eigen::Quaternion<T> &cp) const override {
    if (!math::IsUnitQuaternion(cp)) {
      throw std::domain_error("Control point must be unit quaternion!");
    }
  }

####注意,只需要更换
parameterization_(new ceres::EigenQuaternionParameterization) { };
为
 parameterization_(new ceres::EigenQuaternionManifold) { };

没错,相信你也“感觉到了”,涉及到这个函数的,都需要进行更换。此外,发现在更换了这些之后,以下这个错误也自动解决了,应该是前面的函数没有正确使用,造成的以下这个错误:

error: class ‘entity::ParameterInfo<T>’ does not have any field named ‘parameterization’

按步骤来即可解决。

4. error: ‘struct ceres::Problem::Options’ has no member named ‘local_Manifold_ownership’; did you mean ‘manifold_ownership’?

是的,直接把对应的语句更换为提示的即可,这里应该也是ceres库的更换导致的成员不一致。

 至此,即可正常编译。

二、注意事项

你可能会遇到一些问题,但听我的千万不要进行以下两种操作:

1.重装pcl库

如果你使用原装的,可以重装,但是尽量不要按照很多博主说的方法去下载git上面新的版本,不是不对,而且很容易崩掉(哭)。

2.重装ceres

如果可能,去对照修改函数,尽量不要重装低版本的ceres库,为什么?因为ceres库的依赖很多,要求也很高,所以重装会带来很多库的错误,不建议这么干(哭*2)

此外,有人会觉得挨个修改是不是很麻烦,其实不会,据我修改后总结,总共也就没改超过15行的代码,只是文件比较杂,大多分布在.h文件中,我的办法是去vscode中编译,这样可以对应跳转到有问题的代码行,进行修改,注意!!!去改你的包下的代码,别动pcl的源码,看清楚再改(除非你有需求)。修改流程按上面的应该不会出什么问题。

最后,我还没有进行标定,我的imu还在路上,但是因为浙大的这个工具只适配Velodyne雷达,所以大家使用其他类型的雷达需要自己动手修改一下源码,具体修改方式网上有很多办法,我使用的是这个博主的办法(感谢大佬!!!!!!!):

ubuntu20.04使用浙大开源包lidar_IMU_calib_浙大标定-CSDN博客

其余办法我也列了几个在参考文献中,后续我标定成功后会补充后面的标定注意事项。

三、参考文献

激光雷达-IMU联合标定_激光雷达和imu联合标定-CSDN博客

Velodyne激光SLAM学习之激光雷达+IMU外参标定-lidar_align联合标定激光雷达和IMU外参_手眼标定imu和lidar-CSDN博客

ubuntu20.04使用浙大开源包lidar_IMU_calib_浙大标定-CSDN博客

【3D激光SLAM(四)】Velodyne激光SLAM学习之激光雷达+IMU外参标定-lidar_align联合标定激光雷达和IMU外参_激光imu联合外参标定-CSDN博客

ubuntu20.04 noetic部署A-Loam时遇到的问题与解决办法-CSDN博客

error: ‘LocalParameterization’ in namespace ‘ceres’ does not name a type · Issue #4 · chichengcn/gici-open (github.com)

使用lidar_align进行激光雷达与IMU的外参标定(超详细教程)_lidar与imu外参标定-CSDN博客

后续将会补充实车使用IMU和激光雷达标定的流程和遇到的问题,如果成功就记录下来~

欢迎各位交流~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值