没雷达也能调 Nav2?我开源了一套仿真到实机复用的3D LiDAR 导航工作空间

发布时间:2026/6/5 10:48:36

没雷达也能调 Nav2?我开源了一套仿真到实机复用的3D LiDAR 导航工作空间 项目已开源至 GitHub欢迎 Starhttps://github.com/Ikunio/Lidar_nav2_wshttps://github.com/Ikunio/Lidar_nav2_ws最近整理并开源了一套基于 ROS 2 的 3D LiDAR 自主导航工作空间Lidar_nav2_ws。这个项目的目标很直接不想再让大家从零开始搭 Nav2也不想让没有雷达、没有机器人底盘的同学连 3D LiDAR 导航的门都摸不到。很多人想学习 ROS 2 导航、Nav2、Livox MID-360、FAST-LIO、Point-LIO、点云重定位但是刚开始就会遇到一个非常现实的问题我没有车也没有雷达那我怎么调买一套真实机器人平台成本不低Livox MID-360 也不是随手就能掏出来的传感器。更麻烦的是就算设备齐了也不代表系统马上能跑起来。话题名、TF 树、URDF、Nav2 参数、点云转 LaserScan、LIO 里程计、地图保存、实机启动每一步都可能让人开始怀疑人生。所以我做这个项目时最想解决的问题不是“又调通了一个 Nav2 demo”而是能不能先在 Gazebo 仿真里把整套 3D LiDAR 导航流程跑起来等仿真调顺了再尽量复用同一套系统上实机简单说就是没有设备也能先用仿真学有了设备也不用推倒重来。1. 为什么我想做这个项目Nav2 本身已经是 ROS 2 里非常成熟的导航框架了包括全局规划、局部规划、代价地图、行为树、控制器等模块。但是很多人真正卡住的地方并不是 Nav2 的某一个参数而是完整机器人系统的搭建过程。比如雷达数据怎么进系统3D 点云怎么变成 Nav2 能用的 2D LaserScanLIO 里程计输出的话题怎么接map - odom - base_footprint - lidar这条 TF 链怎么保证不断仿真和实机的话题名不一样怎么办Gazebo 里能跑为什么上实机就炸实机调参之前能不能先在仿真里把大体流程验证一遍这些问题看起来都不算“高级算法”但它们非常真实。因为机器人系统最折磨人的地方往往不是某个算法公式而是每个模块单独看都没问题一接起来就开始互相背刺。所以我希望把这个项目做成一个可以直接参考、可以直接运行、也方便继续改造的 ROS 2 3D LiDAR 导航工作空间。2. 这个项目主要解决什么痛点这个项目主要解决四个问题。第一不想从零搭建 Nav2 工程如果只是单独启动 Nav2其实并不难。真正麻烦的是把它和机器人模型、传感器、里程计、TF、地图、代价地图全部接起来。这个工作空间已经把基础链路整理好了LiDAR / IMU ↓ LIO 里程计 ↓ 标准 odom / TF / registered_scan ↓ 3D 点云重定位 ↓ 3D 点云切片成 2D LaserScan ↓ Nav2 导航也就是说它不是一个孤立的 Nav2 配置文件而是一套相对完整的 3D LiDAR 自主导航链路。第二没有真实雷达也能先从仿真开始很多同学想学 3D LiDAR 导航但是手上没有 Livox MID-360也没有真实机器人底盘。这时候直接研究实机部署其实门槛很高。所以这个项目支持 Gazebo 仿真流程。你可以先在仿真环境中验证机器人模型是否正常雷达点云是否正常发布LIO 输入输出是否正常TF 树是否连通3D 点云是否能转成 2D LaserScanNav2 是否可以正常规划和控制地图保存和导航启动流程是否顺畅。这样就算没有真实设备也可以先把 ROS 2 3D LiDAR 导航的主流程跑通。对于刚开始学习 Nav2、SLAM、LIO、点云重定位的人来说这比一上来就面对真实硬件要友好很多。第三仿真和实机共用一套系统很多机器人项目会有一个问题仿真是一套系统实机又是另一套系统。仿真里话题叫一个名字实机里又叫一个名字仿真里 TF 是一棵树实机上 TF 直接变成几段树枝仿真调好的 Nav2 参数上实机发现根本不是一个味道最后项目越改越乱像一块插满转接头的祖传插线板。所以这个项目的设计思路是仿真和实机可以有不同的启动入口但进入导航主链路之后尽量保持接口一致。也就是说Gazebo 负责模拟机器人和传感器真实机器人负责提供实际数据但是进入后面的 LIO、重定位、LaserScan 生成、Nav2 导航流程后整体结构尽量复用。这样做的好处是仿真调通的流程实机可以继续沿用实机出问题时可以回到仿真环境快速复现不需要维护两套完全割裂的工程后续替换算法或者修改参数更清晰。第四方便后续替换算法这个项目不是把所有东西写死在一个算法上。目前系统设计上尽量把几个部分拆开LIO 里程计点云重定位点云转 LaserScanNav2 导航机器人描述仿真和实机启动入口。这样后续想换算法时不需要把整个工程推倒重来。比如想换 FAST-LIO 或 Point-LIO想换 small_gicp 或 KISS-Matcher想改 Nav2 参数想换机器人模型想换仿真环境想接真实 MID-360。这些都可以基于现有结构继续改。这也是我觉得这个项目最有价值的地方它不只是一个“能跑”的 demo而是一个尽量面向工程复用的 ROS 2 导航工作空间。3. 项目适合哪些人这个项目比较适合下面几类人1. 想学习 ROS 2 Nav2但是不想从零搭工程的人如果你刚开始学 Nav2直接从官方示例跳到真实机器人项目中间会有不少坑。这个项目可以作为一个相对完整的参考工程让你看到 Nav2 在 3D LiDAR 机器人系统里是怎么接起来的。2. 想学 Livox MID-360 导航但是暂时没有设备的人没有真实 MID-360也可以先用仿真流程理解整体链路。等后面有真实设备后再切换到实机启动流程继续接入真实雷达数据。3. 想做 3D LiDAR Nav2 的机器人开发者如果你的机器人也是类似的移动底盘并且希望使用 3D LiDAR、LIO 和 Nav2 做导航那么这个项目可以作为一个起点。你可以参考它的工作空间结构启动脚本TF 设计Nav2 参数点云处理流程仿真与实机切换方式。4. 想研究点云重定位的人除了导航本身项目里还集成了点云重定位相关流程。这部分可以用于研究机器人在已有 PCD 地图中的定位问题也可以继续扩展到全局重定位、初始位姿估计、持续 map 到 odom 校正等方向。4. 这个项目不是万能模板当然这个项目不是说下载下来就能适配所有机器人。机器人导航系统和硬件强相关不同底盘、不同雷达安装位置、不同坐标系、不同控制接口都会带来差异。所以我更希望大家把它理解成一套可以参考、可以运行、可以改造的 ROS 2 3D LiDAR 导航工作空间。它尽量帮你把最麻烦的基础链路先搭好让你不用每次都从零开始处理 Gazebo、URDF、TF、LIO、LaserScan、Nav2 和实机部署这些问题。如果你只是想学习可以先从仿真开始。如果你有真实设备可以在仿真流程调通后再切到实机流程。如果你想研究算法也可以基于这个框架继续替换 LIO 或重定位模块。5. 总结我做这个项目的初衷很简单让 ROS 2 3D LiDAR 导航系统更容易上手一点。不是每个人一开始都有机器人底盘和 3D 雷达也不是每个人都想从零开始搭一遍 Nav2、TF、LIO、点云处理和仿真环境。所以我把这套流程整理成了一个开源工作空间支持 Gazebo 仿真支持实机部署仿真和实机尽量共用同一套系统集成 LIO、点云处理、重定位和 Nav2适合学习、调试和二次开发。如果你也在学习 ROS 2、Nav2、Livox MID-360、3D LiDAR 导航、点云重定位或者正在被机器人系统工程结构折磨可以参考这个项目。如果这个项目对你有帮助也欢迎给一个 Star。后面我也会继续更新实机测试、参数调优、重定位失败案例和更多导航相关内容。

相关新闻