type
Post
status
Published
date
Apr 17, 2026
slug
summary
关于点云转2d地图的n种尝试
tags
具身智能
ROS
SLAM
category
项目开发
icon
password
😀
文章前言:
 

第一次测试:fastlio2+octomap


1. pcd点云

notion image

2. octomap

notion image

3. 修改思路

方案一:硬调 OctoMap 参数(适合必须实时出 2D 图的情况)
如果你要在建图的同时看到 2D 图的生成,你需要放宽 OctoMap 的视野,并加厚你的“切片”。修改你 Launch 文件里的这几个参数:
方案二:“降维打击”离线转换法(🌟 强烈推荐!学术界最爱)
既然你已经拥有了这么完美的一张全局 3D map_...pcd 文件,完全没有必要再让 OctoMap 实时去算 2D 投影了! 实时射线追踪极其吃 CPU,而且很容易因为那一瞬间的位姿抖动导致地图发虚。
最优雅、图最干净的做法是:用你建好的 3D PCD 文件,通过直通滤波(PassThrough)直接“一刀切”成 2D 栅格图。 这种方法生成的图,墙壁黑白分明,没有任何放射状噪点,给 Nav2 导航用简直完美。
你可以使用开源工具 pcd2pgm 极速搞定:
1. 下载新版源码
2. 编译它
3. 核心配置(修改切片高度)
在运行之前,我们需要告诉它你的文件在哪,以及“从哪切”。 由于它是通过 launch 文件启动的,我们需要去修改它的参数文件(一般在 src/pcd2pgm/config 目录下,或者是直接改 launch 文件内部参数,具体看它的目录结构)。
打开它的参数配置:
(如果文件名有出入,用 ls 看一下 config 文件夹里的名字)
重点修改这几项(一定要配合你刚跑出来的数据):
  • file_directory: 填你存放 PCD 文件的绝对路径,比如 /home/ubuntu/ros2_ws/src/maps/
  • file_name: 填你的文件名(注意有些版本要求不加后缀),比如 map_20260417_0313
  • thre_z_min: 0.3 (极其关键:过滤掉底盘以下的地面,防止路面起伏变成墙)
  • thre_z_max: 1.5 (极其关键:过滤高空的树叶和树枝)
  • map_resolution: 0.05 (保持 5cm 精度)
4. 见证降维打击!
保存退出后,直接运行:
终端跑完之后,它会直接在你指定的目录下生成一张黑白分明的 .pgm 图片和对应的 .yaml 描述文件。

4. pcd2pgm

  • 使用pcd2pgm:参数1
    •  
      notion image
  • 使用pcd2pgm:参数2
notion image

5. OpenCV 形态学处理

既然图是 .pgm 格式的图片,我们完全可以写个 20 行的 Python 脚本,利用 OpenCV 的形态学操作(闭运算 + 膨胀),让程序自动帮你把图“涂白”和“描黑”。
这不仅彻底解放了双手,而且在你的毕业论文里,你可以堂而皇之地写上一节:“本文设计了一种基于形态学闭运算的 2D 代价图自动化增强算法,解决了室外稀疏点云投影造成的规划失败问题...” (这比说“我用画图软件涂的”要高级一万倍!)
核心操作逻辑:
  1. 先把图里所有的黑块圈出来,测量它们的“面积”
  1. 如果这个黑块的像素面积小于 30(说明它是孤立的飞虫或树叶噪点),直接把它擦除!
  1. 如果面积大于 30(说明它是一堵结实的墙壁),再让它稍微发胖连起来。
repair_map.py
实际效果:
notion image
  • 总结:因为本身pgm图片过于粗糙,所以即便使用opencv进行修复,也无法得到一个比较好的导航地图,因此该方法不适合。
 
 

6. CSF 地面剥离算法

CSF(Cloth Simulation Filter,布料模拟滤波)
它在算法里模拟一块巨大的、有重量的软布,从天上盖到你的 3D 点云上。这块布会完美贴合各种斜坡、坑洼的地面,而遇到大楼、树木时会被撑起来。系统只需把“布”拿走,剩下的就全是纯粹的建筑物实体了!
notion image
to_pgm.py
notion image
 

7. 体素裁切

第一步:安装 PCL 命令行工具
第二步:裁切 Z 轴(物理级去除地面)
我们直接用 pcl_passthrough 工具,像切西瓜一样把 0.3m 以下(地面)和 2.0m 以上(天空)的点全部扔掉。
这一步之后,你的点云就只剩下干净的墙壁和树干了。
第三步:体素化加厚墙体
为了解决你说的“碎砖头”问题,我们用 pcl_voxel_grid 把点云变“胖”,让它们自动粘在一起。
第四步:修复成2d
pro_project.py
  • 最终效果
notion image
 
💡
有关问题,欢迎您在底部评论区留言,一起交流~
Loading...
Koreyoshi
Koreyoshi
一个普通的干饭人🍚
Announcement
🎉写给自己的2026心愿🎉
学一门乐器
拍摄人生照片
义工旅游一个月
在北京交很多新朋友
学习胡闹厨房建模和贴图
----- 2026 ------
👏希望我们一起变好👏