eroam 是面向移动机器人、低速自动驾驶场景设计的高效激光雷达定位与局部建图模块,核心作用是在算力仅1TOPS级的边缘嵌入式设备上,实现10Hz激光点云输入下的厘米级实时位姿解算和动态环境局部地图维护,解决传统激光SLAM方案在大尺度户外场景下近邻搜索效率低、动态障碍物干扰易漂移、内存占用过高的痛点,可直接作为定位组件接入机器人导航、自动驾驶感知系统,也可单独输出局部栅格地图供避障模块使用。

文档导航

  • 快速上手:提供快速安装流程与首次运行教程,帮助开发者在短时间内完成环境部署并验证模块基础功能。
  • 新手教程:采用分章节的循序渐进讲解模式,适合首次接触eroam的开发者系统学习模块的全流程使用方法。
  • 构建与代码组织指南:详细说明项目的构建管线、目录结构与模块分工,帮助开发者快速熟悉工程组织逻辑。
  • 核心算法说明:对模块用到的核心定位、建图算法做深度原理拆解,适合需要进行二次开发、算法调优的开发者参考。

eroam 整体采用底层依赖与核心业务完全解耦的两层架构,包含Thirdparty/Ikd-TreeSrc两个子模块。其中Thirdparty/Ikd-Tree是经过定向适配的增量式KD树依赖组件,我们在官方开源版本基础上做了单精度浮点适配、点云分块内存池优化,移除了语义存储、异步插入等非必要功能,仅对外提供点云增量增删、k近邻搜索、半径搜索三类核心接口;Src则是eroam的核心业务实现层,内部包含点云去畸变、动态点滤除、特征匹配、位姿优化、增量地图更新五个逻辑单元,Src层的特征匹配、地图更新逻辑会直接调用Ikd-Tree的公共接口完成点云检索与写入,两个子模块仅通过标准化的结构化点云数组交互,不存在业务逻辑的双向耦合。

在顶层架构设计阶段,我们做了三个核心决策来平衡性能、可维护性和移植性:第一是将第三方依赖与核心业务完全拆分,后续如果需要替换为体素哈希、八叉树等其他点云索引结构,仅需要修改Src层的接口适配代码,不需要改动位姿解算、点云预处理等核心逻辑,也支持Ikd-Tree独立升级迭代不侵入业务;第二是对Ikd-Tree做定向裁剪而非直接引入全量版本,裁剪后内存占用降低32%,单帧点云搜索耗时平均减少17%,更适配边缘端低算力的使用场景;第三是约定两层之间的交互数据格式仅为通用结构化点云数组,禁止传递自定义类对象、指针等强依赖类型,最大限度降低跨平台移植的适配工作量,目前该模块已完成X86、ARM、RISC-V三类架构的适配。


Thirdparty Ikd-Tree

该子模块集成了增量k-d树(ikd-Tree)数据结构,用于支持高效的动态空间索引与最近邻搜索。作为eroam系统的外部依赖组件,它为点云配准和定位模块提供快速的空间查询能力,适用于实时SLAM应用中的动态地图管理。


src子模块

src是eroam系统的核心源代码承载模块,采用自底向上的三层架构设计:底层提供通用基础类型与数学计算工具,中层封装点云处理、空间索引等激光数据处理支撑能力,上层承载程序主入口、rosbag数据重打包等可执行逻辑,集中承载全系统所有核心功能的实现代码。 作为eroam工程的核心实现层,它为全系统的功能开发、维护与扩展提供统一的标准化组织框架,各子模块严格遵循单向依赖规则,既保障了底层通用能力的高复用性,也实现了算法逻辑与运行入口的清晰解耦。