避坑指南:在Ubuntu 20.04上搞定浙大lidar_imu_calib(附Ceres 1.14安装)
当你在Ubuntu 20.04上尝试部署浙大开源的lidar_imu_calib工具时,可能会遇到各种依赖冲突和编译错误。官方推荐使用Ubuntu 18.04,但现实中很多开发者已经升级到更新的系统版本。本文将带你一步步解决这些跨版本适配问题,无需降级系统就能成功运行lidar_imu_calib。
1. 环境准备与依赖安装
在开始之前,确保你的Ubuntu 20.04系统已经安装了ROS Noetic(对应Ubuntu 20.04的ROS版本)。如果你还在使用Melodic,建议先升级到Noetic,因为不同ROS版本间的依赖关系可能会导致更多问题。
首先安装基础依赖:
sudo apt-get install ros-noetic-pcl-ros ros-noetic-velodyne-msgs接下来需要处理几个关键依赖项:
- Pangolin:用于3D可视化的轻量级库
- Ceres Solver 1.14:非线性优化库的特定版本
- GLEW:OpenGL扩展加载库
安装这些依赖时,Ubuntu 20.04的默认软件源可能不包含所需版本,特别是Ceres Solver。我们需要手动编译安装。
2. 手动编译安装Ceres Solver 1.14
Ceres Solver 1.14是lidar_imu_calib的关键依赖,但Ubuntu 20.04的软件源通常提供的是更新版本。以下是编译安装步骤:
# 安装依赖 sudo apt-get install libgoogle-glog-dev libgflags-dev libatlas-base-dev libeigen3-dev libsuitesparse-dev # 下载源码 wget https://github.com/ceres-solver/ceres-solver/archive/refs/tags/1.14.0.tar.gz tar zxf 1.14.0.tar.gz cd ceres-solver-1.14.0 # 编译安装 mkdir build cd build cmake .. make -j$(nproc) sudo make install安装完成后,可以通过以下命令验证版本:
pkg-config --modversion ceres应该输出1.14.0。如果显示其他版本,可能需要调整PKG_CONFIG_PATH环境变量。
3. 解决常见依赖冲突
3.1 LZ4头文件冲突
在编译过程中,你可能会遇到LZ4头文件冲突的错误:
conflicting declaration 'typedef struct LZ4_stream_t LZ4_stream_t'解决方法如下:
sudo mv /usr/include/flann/ext/lz4.h /usr/include/flann/ext/lz4.h.bak sudo mv /usr/include/flann/ext/lz4hc.h /usr/include/flann/ext/lz4.h.bak sudo ln -s /usr/include/lz4.h /usr/include/flann/ext/lz4.h sudo ln -s /usr/include/lz4hc.h /usr/include/flann/ext/lz4hc.h3.2 GLEW缺失问题
另一个常见错误是找不到GLEW库:
Could NOT find GLEW安装以下依赖可以解决:
sudo apt-get install libx11-dev libxmu-dev libglu1-mesa-dev libgl2ps-dev libxi-dev g++ libzip-dev libpng-dev libcurl4-gnutls-dev libfontconfig1-dev libsqlite3-dev libglew-dev libssl-dev如果遇到特定版本问题,可以尝试:
sudo apt install libglew-dev4. 构建lidar_imu_calib工作空间
现在我们可以按照标准流程构建lidar_imu_calib,但需要做一些调整以适应Ubuntu 20.04环境。
# 创建工作空间 mkdir -p ~/catkin_li_calib/src cd ~/catkin_li_calib/src catkin_init_workspace # 克隆源码 git clone https://github.com/APRIL-ZJU/lidar_IMU_calib # 初始化wstool wstool init wstool merge lidar_IMU_calib/depend_pack.rosinstall wstool update # 构建Pangolin cd lidar_IMU_calib ./build_submodules.sh5. 编译与问题排查
在编译前,我们需要确保CMake能找到正确版本的Ceres:
cd ~/catkin_li_calib catkin_make -DCeres_DIR=/usr/local/lib/cmake/Ceres如果编译过程中出现Python相关错误,可能是因为ROS Noetic使用Python3,而原项目可能基于Python2。解决方法:
- 检查所有Python脚本的shebang是否为
#!/usr/bin/env python3 - 确保所有ROS包都兼容Python3
6. 测试与验证
编译成功后,可以测试校准功能:
source devel/setup.bash roslaunch lidar_imu_calib calib.launch常见测试问题及解决方案:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 启动后立即崩溃 | Pangolin初始化失败 | 检查OpenGL驱动和GLEW安装 |
| 无法加载点云 | PCL版本不兼容 | 确保使用ROS Noetic的pcl_ros |
| 优化不收敛 | Ceres版本不正确 | 验证Ceres是否为1.14.0 |
7. 性能优化建议
成功运行后,可以考虑以下优化措施:
- 多线程处理:修改代码以利用现代CPU的多核性能
- GPU加速:对于大规模点云,考虑使用CUDA加速
- 内存优化:调整Pangolin的缓冲区大小以减少内存占用
// 示例:启用Ceres的多线程 ceres::Solver::Options options; options.num_threads = std::thread::hardware_concurrency();8. 维护与更新
由于这是在非官方支持的环境下运行,建议:
- 定期检查上游仓库的更新
- 备份成功编译的环境配置
- 记录所有自定义修改,便于未来迁移或升级
遇到问题时,可以尝试以下调试步骤:
- 检查ROS日志:
roscd && grep -r "ERROR" - 验证依赖版本:
dpkg -l | grep -E 'ceres|glew|pcl' - 使用gdb调试核心转储:
gdb -c core
最后提醒,这类跨版本适配工作虽然可行,但会增加维护复杂度。对于生产环境,建议考虑使用Docker容器化方案,将成功配置的环境打包为镜像,便于部署和分享。