在Ubuntu 22.04上高效部署GICI-LIB多传感器融合开发实战指南随着自动驾驶和机器人技术的快速发展多传感器融合算法成为实现精确定位与导航的核心。GICI-LIB作为一款开源的GNSS/INS/Camera组合导航库因其强大的因子图优化框架和丰富的传感器支持正受到越来越多研究者和工程师的关注。本文将详细介绍在Ubuntu 22.04 LTS系统上如何克服依赖库版本冲突配置ROS2 Humble环境并成功编译运行GICI-LIB的全过程。1. 环境准备与系统配置在开始安装GICI-LIB之前确保您的Ubuntu 22.04系统已经更新到最新状态。打开终端并执行以下命令sudo apt update sudo apt upgrade -y sudo apt install -y build-essential cmake git wget unzip1.1 关键依赖库安装GICI-LIB对几个核心库有特定版本要求这是大多数编译失败的主要原因。我们将采用源码编译方式安装这些依赖gflags和glog安装必须0.6.0版本# 安装gflags git clone https://github.com/gflags/gflags.git cd gflags mkdir build cd build cmake .. -DGFLAGS_NAMESPACEgoogle -DCMAKE_CXX_FLAGS-fPIC make -j$(nproc) sudo make install # 安装glog git clone https://github.com/google/glog cd glog mkdir build cd build cmake -DGFLAGS_NAMESPACEgoogle -DCMAKE_CXX_FLAGS-fPIC -DBUILD_SHARED_LIBSON .. make -j$(nproc) sudo make install注意务必使用源码编译安装Ubuntu仓库中的预编译包版本可能不兼容。1.2 Yaml-cpp 0.6.0安装Yaml-cpp的版本兼容性至关重要GICI-LIB目前仅支持0.6.0版本wget https://github.com/jbeder/yaml-cpp/archive/refs/tags/yaml-cpp-0.6.0.tar.gz tar -xzvf yaml-cpp-0.6.0.tar.gz cd yaml-cpp-yaml-cpp-0.6.0 mkdir build cd build cmake -DYAML_BUILD_SHARED_LIBSON .. make -j$(nproc) sudo make install2. ROS2 Humble环境配置与原始文章中的ROS Noetic不同Ubuntu 22.04推荐使用ROS2 Humble版本。以下是安装步骤sudo apt install -y software-properties-common sudo add-apt-repository universe sudo apt update sudo apt install -y curl sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release echo $UBUNTU_CODENAME) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null sudo apt update sudo apt install -y ros-humble-desktop安装完成后设置环境变量source /opt/ros/humble/setup.bash echo source /opt/ros/humble/setup.bash ~/.bashrc2.1 其他必要依赖安装安装Eigen3和Ceres Solver# Eigen3安装 sudo apt install -y libeigen3-dev # Ceres Solver 2.1.0安装 sudo apt install -y libgoogle-glog-dev libgflags-dev libatlas-base-dev libsuitesparse-dev wget https://github.com/ceres-solver/ceres-solver/archive/refs/tags/2.1.0.tar.gz tar -xzvf 2.1.0.tar.gz cd ceres-solver-2.1.0 mkdir build cd build cmake .. make -j$(nproc) sudo make install3. GICI-LIB编译与配置3.1 源码获取与准备克隆GICI-LIB仓库并准备编译环境git clone https://github.com/chichengcn/gici-open.git cd gici-open mkdir build cd build3.2 解决常见编译问题在Ubuntu 22.04上编译时可能会遇到以下问题及解决方案yaml-cpp版本冲突确保系统中没有其他版本的yaml-cpp使用sudo updatedb locate yaml-cpp检查删除所有非0.6.0版本的相关文件Ceres Solver链接错误在CMakeLists.txt中添加find_package(Ceres REQUIRED) include_directories(${CERES_INCLUDE_DIRS})Eigen3路径问题确保Eigen头文件在标准路径sudo cp -r /usr/include/eigen3/Eigen /usr/local/include3.3 编译命令执行以下命令进行编译cmake .. -DCMAKE_BUILD_TYPERelease make -j$(nproc)编译成功后您将看到类似以下输出[100%] Built target gici_main4. ROS2封装与运行4.1 创建ROS2工作空间mkdir -p ~/gici_ros2_ws/src cd ~/gici_ros2_ws/src cp -r /path/to/gici-open/ros_wrapper/gici_ros . cd ..4.2 修改ROS2适配文件需要更新部分CMake配置以适应ROS2环境修改package.xmldependrclcpp/depend dependsensor_msgs/depend dependnav_msgs/depend更新CMakeLists.txtfind_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(sensor_msgs REQUIRED)4.3 编译ROS2节点cd ~/gici_ros2_ws colcon build --cmake-args -DCMAKE_BUILD_TYPERelease source install/setup.bash5. 数据集测试与性能评估5.1 获取测试数据集cd ~/gici-open git clone https://github.com/chichengcn/gici-open-dataset.git gici-dataset5.2 配置文件修改编辑对应的YAML配置文件主要修改以下参数data_directory: /home/user/gici-open/gici-dataset gici_root_directory: /home/user/gici-open output_directory: /home/user/gici-open/output5.3 运行测试非ROS模式运行cd ~/gici-open/build ./gici_main ../option/pseudo_real_time_estimation_RTK_TC.yamlROS2模式运行ros2 run gici_ros gici_ros_main ~/gici-open/option/ros_real_time_estimation_TC.yaml5.4 结果可视化安装RTKPLOT工具进行结果分析sudo apt install -y gnuplot cd ~/gici-open/output gnuplot -e plot solution.txt using 1:2 with lines6. 高级配置与优化技巧6.1 多传感器数据同步GICI-LIB支持多种时间同步模式在配置文件中可以设置time_synchronization: enable: true mode: hardware # 可选hardware或software reference_clock: gps # 参考时钟源6.2 因子图优化参数调整对于不同的应用场景可以调整优化器参数optimization: max_iterations: 20 linear_solver_type: sparse_normal_cholesky trust_region_strategy_type: levenberg_marquardt initial_trust_region_radius: 1e46.3 实时性能优化对于资源受限的平台可以启用以下配置performance: enable_schur_complement: true enable_marginalization: true thread_number: 4 # 根据CPU核心数调整7. 实际应用案例7.1 自动驾驶车辆定位在自动驾驶场景中GICI-LIB可以配置为紧组合模式solution: type: tightly_coupled sensors: - gnss - ins - camera output_rate: 100 # Hz7.2 无人机导航系统针对无人机应用建议启用运动约束motion_constraints: enable: true no_slip: true # 假设无侧滑 zero_vertical_velocity: false # 无人机有垂直运动7.3 室内外无缝定位结合UWB等传感器实现室内外无缝切换sensor_fusion: primary: gnss # 室外使用GNSS secondary: uwb # 室内切换为UWB transition_threshold: 30 # dB-Hz