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

项目已开源至 GitHub,欢迎 Star:

github.com/Ikunio/Lida...

最近整理并开源了一套基于 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 LaserScan?
  • LIO 里程计输出的话题怎么接?
  • map -> odom -> base_footprint -> lidar 这条 TF 链怎么保证不断?
  • 仿真和实机的话题名不一样怎么办?
  • Gazebo 里能跑,为什么上实机就炸?
  • 实机调参之前,能不能先在仿真里把大体流程验证一遍?

这些问题看起来都不算"高级算法",但它们非常真实。

因为机器人系统最折磨人的地方,往往不是某个算法公式,而是:

每个模块单独看都没问题,一接起来就开始互相背刺。

所以我希望把这个项目做成一个可以直接参考、可以直接运行、也方便继续改造的 ROS 2 3D LiDAR 导航工作空间。


2. 这个项目主要解决什么痛点?

这个项目主要解决四个问题。

如果只是单独启动 Nav2,其实并不难。

真正麻烦的是把它和机器人模型、传感器、里程计、TF、地图、代价地图全部接起来。

这个工作空间已经把基础链路整理好了:

markdown 复制代码
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 LaserScan;
  • Nav2 是否可以正常规划和控制;
  • 地图保存和导航启动流程是否顺畅。

这样就算没有真实设备,也可以先把 ROS 2 3D LiDAR 导航的主流程跑通。

对于刚开始学习 Nav2、SLAM、LIO、点云重定位的人来说,这比一上来就面对真实硬件要友好很多。


第三,仿真和实机共用一套系统

很多机器人项目会有一个问题:

仿真是一套系统,实机又是另一套系统。

仿真里话题叫一个名字,实机里又叫一个名字;

仿真里 TF 是一棵树,实机上 TF 直接变成几段树枝;

仿真调好的 Nav2 参数,上实机发现根本不是一个味道;

最后项目越改越乱,像一块插满转接头的祖传插线板。

所以这个项目的设计思路是:

仿真和实机可以有不同的启动入口,但进入导航主链路之后,尽量保持接口一致。

也就是说,Gazebo 负责模拟机器人和传感器,真实机器人负责提供实际数据,但是进入后面的 LIO、重定位、LaserScan 生成、Nav2 导航流程后,整体结构尽量复用。

这样做的好处是:

  • 仿真调通的流程,实机可以继续沿用;
  • 实机出问题时,可以回到仿真环境快速复现;
  • 不需要维护两套完全割裂的工程;
  • 后续替换算法或者修改参数更清晰。

第四,方便后续替换算法

这个项目不是把所有东西写死在一个算法上。

目前系统设计上尽量把几个部分拆开:

  • LIO 里程计;
  • 点云重定位;
  • 点云转 LaserScan;
  • Nav2 导航;
  • 机器人描述;
  • 仿真和实机启动入口。

这样后续想换算法时,不需要把整个工程推倒重来。

比如:

  • 想换 FAST-LIO 或 Point-LIO;
  • 想换 small_gicp 或 KISS-Matcher;
  • 想改 Nav2 参数;
  • 想换机器人模型;
  • 想换仿真环境;
  • 想接真实 MID-360。

这些都可以基于现有结构继续改。

这也是我觉得这个项目最有价值的地方:

它不只是一个"能跑"的 demo,而是一个尽量面向工程复用的 ROS 2 导航工作空间。


3. 项目适合哪些人?

这个项目比较适合下面几类人:

如果你刚开始学 Nav2,直接从官方示例跳到真实机器人项目,中间会有不少坑。

这个项目可以作为一个相对完整的参考工程,让你看到 Nav2 在 3D LiDAR 机器人系统里是怎么接起来的。


2. 想学 Livox MID-360 导航,但是暂时没有设备的人

没有真实 MID-360,也可以先用仿真流程理解整体链路。

等后面有真实设备后,再切换到实机启动流程,继续接入真实雷达数据。


如果你的机器人也是类似的移动底盘,并且希望使用 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。

后面我也会继续更新实机测试、参数调优、重定位失败案例和更多导航相关内容。

相关推荐
计算机安禾1 小时前
【算法分析与设计】第44篇:随机化复杂度类:RP、BPP与去随机化猜想
java·数据结构·数据库·算法·机器学习
计算机安禾2 小时前
【算法分析与设计】第45篇:交互式证明系统与零知识证明
算法·区块链·零知识证明
自进化Agent智能体2 小时前
Hermes架构全景图:从入口到交付的完整数据流
算法
手写码匠2 小时前
手写 Prefix Caching:从零构建 LLM 提示词缓存引擎
人工智能·深度学习·算法·aigc
枕星而眠2 小时前
【数据结构】树与二叉树基础知识点总结
数据结构·c++·后端·算法·运维开发
海梨花2 小时前
腾讯面试高频算法题
java·算法·面试
珂朵莉MM2 小时前
第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛第3赛季优化题--整数线性规划
人工智能·算法
小则又沐风a2 小时前
今日算法----一篇文章学会背包问题
运维·服务器·算法
2301_764441332 小时前
Factorization Machine(FM模型,因子分解机)
python·算法