type
Post
status
Published
date
Apr 13, 2026
slug
summary
一种3d转2d的3d概率地图模型
tags
具身智能
ROS
SLAM
category
项目开发
icon
password
Octomap:一种3d转2d的3d概率地图模型,将3d空间划分为一个个小方块。
OctoMap
1. OctoMap 简介
Octomap 是一种基于 八叉树(Occtree) 结构的开源 3D 概率地图模型。在机器人领域,它主要用于解决 3D 环境下的避障、导航和路径规划问题。
简单来说,如果说传统的 2D 栅格地图是将空间划分为一个个“小方格”,那么 Octomap 就是将 3D 空间划分为一个个“小方块”(Voxel)。
- 核心原理:Octomap 的核心是递归地将 3D 空间划分为八个子节点。
- 如果一个空间块内完全是空的或完全被占据,则无需进一步细分。
- 如果空间内既有障碍物又有空隙,则继续分裂。 这种结构使得它在表示大范围稀疏环境时,比直接存储点云要节省大量的内存。
2. OctoMap 主要特点
- 概率更新(Probabilistic) : 它不仅仅记录“有”或“无”,而是记录一个占据概率。通过多次传感器观测(如 LiDAR 或 RGB-D 相机)来更新每个立方体的状态。这能有效过滤掉传感器噪声或动态物体的干扰。
- 三种状态: 不同于点云只表达“哪里有物体”,Octomap 明确区分了:
- 占据(Occupied): 确定有障碍物。
- 空闲(Free): 确定可以通过。
- 未知(Unknown): 传感器尚未探测到的区域(对自主探索任务至关重要)。
- 内存高效: 由于八叉树的特性,对于大面积的空白区域,Octomap 只需一个大的节点即可表示,而不需要存储成千上万个点。
3. OctoMap 优势
在 ROS/ROS 2 的导航框架中(如 Nav2),Octomap 经常被用来替代原始点云:
- 避障: 机器人需要知道 3D 空间中哪个高度有障碍物,Octomap 可以提供完整的体积信息。
- 路径规划: 算法(如 A* 或 RRT*)可以快速在 Octomap 中查询某个坐标是否可行。
- 地图保存: 相比于几个 GB 的点云文件,Octomap(.bt 或 .ot 格式)通常只有几 MB 到几十 MB,非常适合持久化存储。
4. OctoMap 对比常规建图
- 地图话题变了:OctoMap 默认会发布两个极其有用的话题:
/octomap_full或/octomap_binary:这是完整的 3D 体素地图数据。/projected_map:这是拍扁后的 2D 栅格地图(类型就是nav_msgs/OccupancyGrid)。你需要在 RViz 的 Map 插件里将话题改为这个,就能看到 2D 地图了。
- 纯粹信任里程计:
slam_toolbox内部会做闭环检测(Loop Closure)来修正漂移;而octomap_server只是一个纯粹的建图器,它完全信任 FAST-LIO2 喂给它的 TF 位姿。得益于 Mid-360 的强悍,FAST-LIO2 的漂移极小,在这个场景下单次建图绝对够用。
- 消除动态障碍物(如路过的同学):OctoMap 的精髓在于它的射线追踪(Raytracing)。当机器狗往前走时,雷达的光束扫过原本被路人挡住的区域打到了墙上,它就会在内存中把这段光束经过的体素“清空”。这就意味着,你可以在有人的校园里建图,地图依然很干净。
5. 示意图
- OctoMap投影原理

- 实际建图效果(go2w:Mid-360)
0m-1.3m

0.15m ~ 1.5m

6. 代码实现
- 预安装
- launch文件:FAST-LIO2 + OctoMap 投影
有关问题,欢迎您在底部评论区留言,一起交流~
- Author:Koreyoshi
- URL:https://tangly1024.com/article/342c7b13-c6a7-8029-9faf-c2e9e5180760
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!




