基于ROS2开源3DLiDAR自主导航工作空间Lidar_nav2_ws,支持Gazebo仿真与实机部署复用。集成LIO里程计、点云重定位、点云转LaserScan及Nav2导航链路,实现完整自主导航闭环,简化系统搭建,便于学习调试与算法替换,支持多种激光雷达,降低开发门槛。
无需雷达调试Nav2?开源ROS 2 3D LiDAR仿真到实机复用工作空间
时间:2026-07-21
浏览:390
文章目录
最近整理并开源了一套基于 ROS 2 的 3D LiDAR 自主导航工作空间:Lidar_na v2_ws。该项目的目标非常明确:许多开发者希望学习 ROS 2 导航、Na v2、Livox MID-360、FAST-LIO、Point-LIO 以及点云重定位,但在起步阶段就会面临一个非常现实的问题——没有机器人底盘,也没有激光雷达,如何进行调试和验证。
购买一套真实的机器人平台成本较高,Livox MID-360 也不是随手可得的传感器。更棘手的是,即使设备齐全,也未必能保证系统立即正常运行。话题名称、TF 树、URDF、Na v2 参数、点云转 LaserScan、LIO 里程计、地图保存、实机启动……每一步都可能让人感到困惑。
因此,在做这个项目时,最希望解决的问题并不是“又调通了一个 Na v2 demo”,而是:没有设备,也能先用仿真学习;有了设备,也无需推倒重来。
1. 为什么想做这个项目?
Na v2 本身已经是 ROS 2 中非常成熟的导航框架,包含全局规划、局部规划、代价地图、行为树、控制器等模块。但很多人在实际使用中遇到的主要障碍,并不是 Na v2 的某个具体参数,而是完整机器人系统的搭建过程。例如:
- 雷达数据如何接入系统?
- 3D 点云如何转换为 Na v2 可用的 2D LaserScan?
- LIO 里程计输出的话题如何对接?
map -> odom -> base_footprint -> lidar这条 TF 链如何保持完整?- 仿真和实机的话题名称不一致如何处理?
- Gazebo 中能正常运行,为何上实机就出现问题?
- 实机调参之前,能否先在仿真中完成整体流程验证?
这些问题看起来都不是“高级算法”,但它们非常现实。因为机器人系统最考验人的地方,往往不是某个算法公式,而是系统能否完整地运转起来。因此,希望把这个项目打造成一个可以直接参考、可以直接运行、也便于继续改造的 ROS 2 3D LiDAR 导航工作空间。
2. 这个项目主要解决什么痛点?
这个项目主要解决四个问题。
第一,无需从零搭建 Na v2 工程
如果只是单独启动 Na v2,其实并不复杂。真正麻烦的是将其与机器人模型、传感器、里程计、TF、地图、代价地图全部衔接起来。这个工作空间已经将基础链路整理完毕:
LiDAR / IMU
↓
LIO 里程计
↓
标准 odom / TF / registered_scan
↓
3D 点云重定位
↓
3D 点云切片成 2D LaserScan
↓
Na v2 导航
也就是说,它不是一个孤立的 Na v2 配置文件,而是一套相对完整的 3D LiDAR 自主导航链路。
第二,没有真实雷达,也能先从仿真开始
很多开发者想学习 3D LiDAR 导航,但手头没有 Livox MID-360,也没有真实的机器人底盘。此时直接研究实机部署,门槛较高。因此,这个项目支持 Gazebo 仿真流程。可以先在仿真环境中验证:
- 机器人模型是否正常;
- 雷达点云是否正常发布;
- LIO 输入输出是否正常;
- TF 树是否连通;
- 3D 点云是否能转换为 2D LaserScan;
- Na v2 是否可以正常规划和控制;
- 地图保存和导航启动流程是否顺畅。
这样一来,即使没有真实设备,也可以先将 ROS 2 3D LiDAR 导航的主流程跑通。对于刚开始学习 Na v2、SLAM、LIO、点云重定位的人来说,这比直接面对真实硬件要友好得多。
第三,仿真和实机共用一套系统
很多机器人项目存在一个问题:仿真是一套系统,实机又是另一套系统。仿真中话题叫一个名称,实机中又叫另一个名称;仿真中 TF 是一棵树,实机上 TF 可能变成几段树枝;仿真调好的 Na v2 参数,上实机发现完全不适用;最后项目越改越乱,像一块插满转接头的祖传插线板。
因此,这个项目的设计思路是:仿真和实机尽量共用同一套系统。也就是说,Gazebo 负责模拟机器人和传感器,真实机器人负责提供实际数据,但进入后面的 LIO、重定位、LaserScan 生成、Na v2 导航流程后,整体结构尽量复用。这样做的好处是:
- 仿真调通的流程,实机可以继续沿用;
- 实机出现问题时,可以回到仿真环境快速复现;
- 无需维护两套完全割裂的工程;
- 后续替换算法或修改参数更加清晰。
第四,方便后续替换算法
这个项目并没有将所有功能写死在一个算法上。目前系统设计上尽量将几个部分拆分开:
- LIO 里程计;
- 点云重定位;
- 点云转 LaserScan;
- Na v2 导航;
- 机器人描述;
- 仿真和实机启动入口。
这样一来,后续想替换算法时,不需要将整个工程推倒重来。例如:想替换 FAST-LIO 或 Point-LIO;想替换 small_gicp 或 KISS-Matcher;想调整 Na v2 参数;想更换机器人模型;想更换仿真环境;想接入真实 MID-360。这些都可以基于现有结构继续修改。这也是这个项目最有价值的地方:它不是一个黑盒,而是一个可以持续迭代的起点。
3. 项目适合哪些人?
1. 想学习 ROS 2 Na v2,但不想从零搭建工程的人
如果你刚开始学习 Na v2,直接从官方示例跳到真实机器人项目,中间会存在不少问题。这个项目可以作为一个相对完整的参考工程,让你了解 Na v2 在 3D LiDAR 机器人系统中是如何衔接起来的。
2. 想学习 Livox MID-360 导航,但暂时没有设备的人
没有真实 MID-360,也可以先通过仿真流程理解整体链路。等到后续有真实设备后,再切换到实机启动流程,继续接入真实雷达数据。
3. 想做 3D LiDAR + Na v2 的机器人开发者
如果你的机器人也是类似的移动底盘,并且希望使用 3D LiDAR、LIO 和 Na v2 做导航,那么这个项目可以作为一个起点。你可以参考它的:工作空间结构、启动脚本、TF 设计、Na v2 参数、点云处理流程、仿真与实机切换方式。
4. 想研究点云重定位的人
除了导航本身,项目里还集成了点云重定位相关流程。这部分可以用于研究机器人在已有 PCD 地图中的定位问题,也可以继续扩展到全局重定位、初始位姿估计、持续 map 到 odom 校正等方向。
4. 这个项目不是万能模板
当然,这个项目不是说下载下来就能适配所有机器人。机器人导航系统和硬件强相关,不同底盘、不同雷达安装位置、不同坐标系、不同控制接口,都会带来差异。因此,更希望大家将其理解为:一个经过验证的基础框架。它尽量帮您把最麻烦的基础链路先搭建好,让您无需每次都从零开始处理 Gazebo、URDF、TF、LIO、LaserScan、Na v2 和实机部署这些问题。
如果您只是想学习,可以先从仿真开始。如果您有真实设备,可以在仿真流程调通后,再切换到实机流程。如果您想研究算法,也可以基于这个框架继续替换 LIO 或重定位模块。
5. 总结
做这个项目的初衷很简单:并非每个人一开始都有机器人底盘和 3D 雷达,也并非每个人都想从零开始搭建 Na v2、TF、LIO、点云处理和仿真环境。因此,把这套流程整理成了一个开源工作空间:
- 支持 Gazebo 仿真;
- 支持实机部署;
- 仿真和实机尽量共用同一套系统;
- 集成 LIO、点云处理、重定位和 Na v2;
- 适合学习、调试和二次开发。
如果您也在学习 ROS 2、Na v2、Livox MID-360、3D LiDAR 导航、点云重定位,或者正在被机器人系统工程结构所困扰,可以参考这个项目。后续也会继续更新实机测试、参数调优、重定位失败案例以及更多相关内容。
实用工具推荐
绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
选择画质和输出格式,预览压缩前后的大小。