激光雷达与惯导标定是自动驾驶和机器人定位中的关键环节,而Lidar_IMU_Init作为开源工具链中的明星项目,在实际部署时却让不少人"栽了跟头"。我花了整整三天时间才解决所有编译问题,其中最头疼的就是版本依赖陷阱。先说结论:Ubuntu 18.04+ROS Melodic是基础,但更关键的是Ceres必须锁定2.0.0版本——这是血泪教训换来的经验。
先检查你的系统是否满足这些硬指标:
安装基础依赖时有个细节容易忽略:
bash复制sudo apt-get install -y libsuitesparse-dev libboost-all-dev
这两个库在官方文档里没明确要求,但编译Ceres时会默默报错。另外提醒:如果之前装过其他版本的Ceres,务必先执行sudo rm -rf /usr/local/lib/cmake/Ceres彻底清理旧版本。
克隆源码看似简单,但这里藏着两个隐形炸弹:
bash复制git clone https://github.com/hku-mars/LiDAR_IMU_Init.git
cd LiDAR_IMU_Init
第一个坑:仓库默认分支可能是开发版。建议切到稳定tag:
bash复制git checkout v1.2.0 # 具体版本号以仓库最新release为准
第二个坑:子模块初始化。很多人直接编译会报livox_ros_driver缺失,其实需要手动初始化子模块:
bash复制git submodule update --init --recursive
我遇到过更诡异的情况:网络波动导致子模块下载不完整。建议完成后检查third_party目录是否包含:
Livox雷达用户必看!官方驱动安装有讲究:
bash复制git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK && mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release # 一定要加Release参数
make -j$(nproc)
sudo make install
验证是否安装成功的关键命令:
bash复制ldconfig -p | grep livox # 应该看到liblivox_sdk.so
常见报错处理:
sudo cp livox_usb.rules /etc/udev/rules.d/后重启/usr/local/include/livox_*为什么必须是2.0.0?新版本在SizedCostFunction实现上有破坏性变更。安装步骤如下:
bash复制sudo apt-get install libgoogle-glog-dev libgflags-dev \
libatlas-base-dev libsuitesparse-dev libeigen3-dev
bash复制git clone -b 2.0.0 https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver
mkdir build && cd build
cmake .. -DBUILD_TESTING=OFF # 关闭测试节省时间
make -j$(nproc)
sudo make install
验证安装成功的正确姿势:
bash复制cat /usr/local/lib/cmake/Ceres/CeresConfigVersion.cmake | grep 2.0.0
很多人直接catkin_make就报错,正确流程应该是:
bash复制cd ~/catkin_ws
catkin config --extend /opt/ros/melodic # 确保ROS环境继承
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
catkin build lidar_imu_init # 使用isolated模式更安全
错误1:Could NOT find PCL (missing: PCL_XXX)
解决方法:
bash复制sudo apt-get install libpcl-dev pcl-tools
export PCL_ROOT=/usr/include/pcl-1.8 # 对于18.04系统
错误2:eigen3::eigen3 not found
这是因为CMake找错了路径,强制指定:
bash复制cmake .. -DEigen3_DIR=/usr/include/eigen3
错误3:undefined reference to symbol 'pthread_create'
链接问题,修改CMakeLists.txt:
cmake复制list(APPEND CMAKE_CXX_FLAGS "-pthread")
编译通过只是开始,真正标定时还有这些经验之谈:
数据采集要点:
参数调整秘籍:
yaml复制# config/params.yaml
calibration:
gravity_norm: 9.81 # 当地重力加速度
time_offset: 0.0 # 初始猜测值
max_iterations: 50 # 迭代次数
gravity_vector输出是否接近[0,0,9.81]rviz观察点云与IMU坐标系对齐情况最后提醒:标定环境要避免强电磁干扰(比如靠近电梯或变电箱),我的设备就曾因此产生IMU偏差。如果多次标定结果不稳定,可以尝试用磁力计辅助初始化。