module:src
src 模块是系统核心源代码的承载位置,用于组织应用的主要实现逻辑与运行所需的基础能力。它定义了整体代码结构的起点,为各项功能的开发、维护与扩展提供统一的组织基础。
Architecture Overview
src 模块架构总览
src 是整个工程的实现层,整体可分为三层:基础能力、数据处理支撑、可执行入口。其子模块之间关系清晰,依赖方向总体呈自底向上。
子模块职责
-
基础类型与数学工具(
core_types_math)
提供底层通用能力,包括 Eigen 映射、点类型定义以及数学计算工具。它是其他模块复用的基础设施。 -
点云与索引工具(
pointcloud_indexing)
建立在基础类型之上,聚合点云格式转换、KD 树索引及系统辅助能力,为激光/点云数据处理提供核心支撑。 -
可执行入口与数据重打包(
executables_and_repack)
面向最终运行场景,包含程序主入口,以及 rosbag 像素过滤、重打包等执行逻辑,负责把前两层能力组织成具体流程。
模块关系
整体上可以理解为:
core_types_math提供通用数据表达与数学基础pointcloud_indexing基于这些基础能力实现点云处理与检索executables_and_repack调用前述能力完成实际任务编排与运行
因此,明显的依赖方向是:
executables_and_repack→pointcloud_indexingexecutables_and_repack→core_types_mathpointcloud_indexing→core_types_math
而反向依赖通常不应存在,以保持底层模块的稳定性与复用性。
简图
总结
src 的结构体现了典型的分层组织方式:底层提供通用类型与数学能力,中层封装点云处理与索引能力,上层承载可执行流程与数据重打包逻辑。这样的划分有助于提升复用性、降低耦合,并让算法能力与运行入口保持清晰边界。
Modules
基础类型与数学工具
“基础类型与数学工具”是 module:src 下的底层基础模块,负责提供统一的 Eigen/Sophus 类型别名、PCL 点类型定义,以及几何变换、概率分布、矩阵操作、平面拟合等通用数学工具。它通过集中定义 eigen_types.h、math_utils.h 和 point_types.h,消除各子系统之间重复的类型与数学实现,保证从传感器数据到优化求解的数据流在类型一致性、数值精度和内存对齐方面保持统一。作为父模块中的数值计算基础设施层,它被 KD 树、点云转换工具和 EROAM 核心算法等上游/下游组件广泛依赖,是理解整个系统数据流与计算约定的关键入口。
点云与索引工具
点云与索引工具(pointcloud_indexing)是 module:src 下服务于激光数据处理的基础支撑模块,聚合了点云转换、KD 树空间索引以及系统计时与辅助能力,用于统一完成点云数据的准备、组织和高效检索。它通过 pointcloud_conversion_utils 将原始点云转换为内部可处理表示,再由 kdtree_structures 构建近邻搜索与空间查询所需的索引结构,同时借助 system_timer_support 提供计时、清理和运行保障。作为父模块中的底层能力层,它不直接承担上层业务逻辑,而是为后续点云匹配、位姿求解、建图与其他激光处理流程提供稳定、高性能的基础设施支持。
可执行入口与数据重打包
executables_and_repack 是 module:src 下位于系统边界的子模块,负责两类彼此独立的执行逻辑:一类是 eroam_run,用于统一完成 glog、gflags、ROS 与 EROAM 核心实例的初始化并启动消息循环;另一类是 rosbag_repack,用于对 DVS 事件相机的 rosbag 数据做离线坏点过滤、时间片截取和固定时长重打包。它通过将“运行入口”和“数据预处理”严格分离,避免把预处理负担放进 SLAM 运行时,同时为核心系统提供标准化、可直接消费的事件数据输入。作为父模块 src 中的可执行层,这个子模块主要承担程序启动与数据准备职责,而不承载核心 SLAM 业务本身。