module:src

src 模块是系统核心源代码的承载位置,用于组织应用的主要实现逻辑与运行所需的基础能力。它定义了整体代码结构的起点,为各项功能的开发、维护与扩展提供统一的组织基础。

Architecture Overview

src 模块架构总览

src 是整个工程的实现层,整体可分为三层:基础能力数据处理支撑可执行入口。其子模块之间关系清晰,依赖方向总体呈自底向上。

子模块职责

  • 基础类型与数学工具core_types_math
    提供底层通用能力,包括 Eigen 映射、点类型定义以及数学计算工具。它是其他模块复用的基础设施。

  • 点云与索引工具pointcloud_indexing
    建立在基础类型之上,聚合点云格式转换、KD 树索引及系统辅助能力,为激光/点云数据处理提供核心支撑。

  • 可执行入口与数据重打包executables_and_repack
    面向最终运行场景,包含程序主入口,以及 rosbag 像素过滤、重打包等执行逻辑,负责把前两层能力组织成具体流程。

模块关系

整体上可以理解为:

  1. core_types_math 提供通用数据表达与数学基础
  2. pointcloud_indexing 基于这些基础能力实现点云处理与检索
  3. executables_and_repack 调用前述能力完成实际任务编排与运行

因此,明显的依赖方向是:

  • executables_and_repackpointcloud_indexing
  • executables_and_repackcore_types_math
  • pointcloud_indexingcore_types_math

而反向依赖通常不应存在,以保持底层模块的稳定性与复用性。

简图

graph TD A[core_types_math\n基础类型与数学工具] B[pointcloud_indexing\n点云与索引工具] C[executables_and_repack\n可执行入口与数据重打包] A --> B A --> C B --> C

总结

src 的结构体现了典型的分层组织方式:底层提供通用类型与数学能力,中层封装点云处理与索引能力,上层承载可执行流程与数据重打包逻辑。这样的划分有助于提升复用性、降低耦合,并让算法能力与运行入口保持清晰边界。

Modules

基础类型与数学工具

“基础类型与数学工具”是 module:src 下的底层基础模块,负责提供统一的 Eigen/Sophus 类型别名、PCL 点类型定义,以及几何变换、概率分布、矩阵操作、平面拟合等通用数学工具。它通过集中定义 eigen_types.hmath_utils.hpoint_types.h,消除各子系统之间重复的类型与数学实现,保证从传感器数据到优化求解的数据流在类型一致性、数值精度和内存对齐方面保持统一。作为父模块中的数值计算基础设施层,它被 KD 树、点云转换工具和 EROAM 核心算法等上游/下游组件广泛依赖,是理解整个系统数据流与计算约定的关键入口。

点云与索引工具

点云与索引工具pointcloud_indexing)是 module:src 下服务于激光数据处理的基础支撑模块,聚合了点云转换、KD 树空间索引以及系统计时与辅助能力,用于统一完成点云数据的准备、组织和高效检索。它通过 pointcloud_conversion_utils 将原始点云转换为内部可处理表示,再由 kdtree_structures 构建近邻搜索与空间查询所需的索引结构,同时借助 system_timer_support 提供计时、清理和运行保障。作为父模块中的底层能力层,它不直接承担上层业务逻辑,而是为后续点云匹配、位姿求解、建图与其他激光处理流程提供稳定、高性能的基础设施支持。

可执行入口与数据重打包

executables_and_repackmodule:src 下位于系统边界的子模块,负责两类彼此独立的执行逻辑:一类是 eroam_run,用于统一完成 glog、gflags、ROS 与 EROAM 核心实例的初始化并启动消息循环;另一类是 rosbag_repack,用于对 DVS 事件相机的 rosbag 数据做离线坏点过滤、时间片截取和固定时长重打包。它通过将“运行入口”和“数据预处理”严格分离,避免把预处理负担放进 SLAM 运行时,同时为核心系统提供标准化、可直接消费的事件数据输入。作为父模块 src 中的可执行层,这个子模块主要承担程序启动与数据准备职责,而不承载核心 SLAM 业务本身。