保姆级教程:在Ubuntu 22.04上从零编译运行GICI-LIB组合导航库(含ROS2踩坑记录)

张开发
2026/4/19 7:34:14 15 分钟阅读

分享文章

保姆级教程:在Ubuntu 22.04上从零编译运行GICI-LIB组合导航库(含ROS2踩坑记录)
在Ubuntu 22.04上从零构建GICI-LIB组合导航库的完整指南最近在机器人导航领域多传感器融合技术正成为研究热点。作为一款开源的GNSS/INS/Camera组合导航库GICI-LIB因其优秀的因子图优化框架和丰富的传感器支持而备受关注。本文将带你从零开始在Ubuntu 22.04系统上完整构建GICI-LIB特别针对ROS2环境下的特殊配置进行详细说明。1. 系统环境准备Ubuntu 22.04作为最新的LTS版本带来了许多底层改进但也引入了一些兼容性挑战。以下是全新系统的基础配置步骤# 更新系统软件包 sudo apt update sudo apt upgrade -y # 安装基础编译工具链 sudo apt install -y build-essential cmake git wget unzip对于ROS2 Humble的安装官方提供了便捷的一键脚本# 设置ROS2 apt仓库 sudo apt install -y software-properties-common sudo add-apt-repository universe sudo apt update sudo apt install -y curl curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg # 安装ROS2 Humble完整版 sudo apt install -y ros-humble-desktop注意Ubuntu 22.04默认的Python版本是3.10与ROS2 Humble完全兼容。如果系统中有其他Python版本建议使用虚拟环境隔离。2. 关键依赖库的安装与配置2.1 Eigen库的特殊处理GICI-LIB对Eigen版本有严格要求而Ubuntu 22.04默认仓库中的版本可能不满足需求# 移除系统自带的Eigen sudo apt purge -y libeigen3-dev # 从源码安装Eigen 3.4.0 wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz tar -xzvf eigen-3.4.0.tar.gz cd eigen-3.4.0 mkdir build cd build cmake .. sudo make install安装后需要创建符号链接以确保兼容性sudo ln -s /usr/local/include/eigen3/Eigen /usr/local/include/Eigen2.2 Ceres Solver的定制安装Ceres Solver是GICI-LIB的核心依赖之一但最新版本可能存在兼容性问题# 安装Ceres的依赖项 sudo apt install -y libgoogle-glog-dev libgflags-dev libatlas-base-dev libsuitesparse-dev # 下载并编译Ceres 2.1.0 git clone https://ceres-solver.googlesource.com/ceres-solver cd ceres-solver git checkout 2.1.0 mkdir build cd build cmake .. -DBUILD_TESTINGOFF -DBUILD_EXAMPLESOFF make -j$(nproc) sudo make install3. ROS2环境下的特殊配置3.1 创建工作空间与传统ROS1不同ROS2使用colcon作为构建工具mkdir -p ~/gici_ws/src cd ~/gici_ws source /opt/ros/humble/setup.bash3.2 编译GICI-LIB核心库cd ~/gici_ws/src git clone https://github.com/chichengcn/gici-open.git cd gici-open mkdir build cd build cmake .. -DCMAKE_BUILD_TYPERelease make -j$(nproc)3.3 ROS2包装器的编译GICI-LIB的ROS2接口需要额外配置cd ~/gici_ws colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPERelease source install/setup.bash4. 常见问题解决方案在Ubuntu 22.04上编译时可能遇到的典型错误及解决方法问题1yaml-cpp版本冲突# 卸载系统yaml-cpp sudo apt purge -y libyaml-cpp-dev # 安装指定版本 git clone https://github.com/jbeder/yaml-cpp.git -b yaml-cpp-0.6.0 cd yaml-cpp mkdir build cd build cmake .. -DYAML_BUILD_SHARED_LIBSON make -j$(nproc) sudo make install问题2OpenCV符号冲突# 在CMakeLists.txt中添加以下指令 set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -D__OPENCV_BUILD1)问题3ROS2消息类型不匹配需要修改ros_wrapper目录下的部分消息定义文件确保与ROS2 Humble的消息标准一致。5. 运行与测试5.1 数据集准备cd ~/gici_ws/src/gici-open git clone https://github.com/chichengcn/gici-open-dataset.git gici-dataset5.2 配置文件调整主要需要修改的配置参数参数名说明示例值data_directory数据集路径/home/user/gici_ws/src/gici-open/gici-datasetoutput_directory输出路径/home/user/gici_ws/src/gici-open/outputuse_ros2是否使用ROS2true5.3 启动运行非ROS模式cd ~/gici_ws/src/gici-open/build ./gici_main ../option/pseudo_real_time_estimation_RTK_TC.yamlROS2模式ros2 run gici_ros gici_ros_main ~/gici_ws/src/gici-open/option/ros_real_time_estimation_RTK_TC.yaml6. 性能优化技巧经过实际测试以下优化措施可以显著提升GICI-LIB在Ubuntu 22.04上的运行效率编译器优化在CMake配置中添加-marchnative标志线程调度使用taskset绑定CPU核心内存预分配修改配置文件中buffer_size参数实时优先级通过chrt命令提升进程优先级# 示例优化启动命令 taskset -c 2,3 chrt 99 ./gici_main ../option/pseudo_real_time_estimation_RTK_TC.yaml在完成所有配置后我建议先用小规模数据集测试所有功能模块确认无误后再进行大规模数据集的完整测试。Ubuntu 22.04的新特性如内核线程调度优化和文件系统改进使得GICI-LIB在多传感器数据融合场景下的性能比旧版本系统有约15-20%的提升。

更多文章