无人机进了陌生建筑,卫星信号用不上,手里也没有地图,接下来怎么办?
对定位导航从业者来说,这不只是"换一个定位算法"的问题。位置要估计,障碍物要发现,路线要规划;相机突然看不清,控制端还得知道该继续、停下,还是返航。
最近,一个名叫 PX4 ROS 2 Drone Navigation 的开源项目在 ROS 社区引起讨论。它把这些环节接成了一套可以复现的导航仿真:让无人机在多层建筑场景里,依靠双目视觉和惯性信息边看、边定位、边找路。社区讨论
先说清楚:这是 Gazebo 中的仿真,不是已经落地的实机产品。 但如果你正在做 VIO、无人机导航或多传感器融合,它比单独看一条轨迹,更值得拆开研究。

作者公开演示画面:左边是无人机所处的环境,右边是感知和规划结果。不是实机拍摄。
01 它的看点,是把"能定位"接成"能导航"
项目在 2026 年 9 月 20 日发布的 v0.4.0 中,展示了无 GNSS、无磁力计、无预建地图、无三维激光雷达的导航配置。
这里的"无雷达"别理解成只有两颗摄像头:双目和 IMU 承担主要感知、定位任务,同时有辅助 ToF 测距传感器。 传感器配置仍在更新。
它也不是"全程没有地图"。准确地说,是出发前没有环境地图,飞行过程中逐步建立障碍物地图,再据此规划路线。
按作者发布记录,v0.4.0 的五次双目无 GNSS 仿真均完成任务、没有碰撞;到点确认时,真实位置距目标约 0.47~1.42 米。这是特定测试中的到点距离,不是整个系统的定位精度指标。 版本记录
对工程师来说,有趣的不是"相机替代 GPS"这句话,而是它把感知、估计、规划和飞控之间的问题公开了。
02 一对相机,做两件不同的事
把导航链路拆开看,其实很直观。
第一条链路回答:我在哪里?
双目图像结合 IMU,运行视觉惯性里程计,也就是 VIO。项目采用双目 MSCKF 思路,估计运动,再把外部里程计送给 PX4 的 EKF2,由飞控维护实际使用的状态估计。
仿真器的真实位姿留给评估,而不是直接喂给定位和控制。否则,视频看起来再稳,也说明不了估计器有没有用。定位设计说明
第二条链路回答:前面有什么?
双目匹配恢复深度,结合辅助测距,更新三维障碍物地图。然后,D* Lite 寻找路径,GPU 上的 MPPI 做局部运动规划与控制,最后交给 PX4 执行。系统架构

根据官方设计整理的原理示意,并非软件界面。
所以,VIO 跑得好只是起点。地图更新晚了、规划给得太激进、飞控没有接住状态,都会变成导航问题。
03 最值得借鉴的,是"看得见才敢飞"
激光雷达与前向双目最大的区别之一,是视野。
双目主要看前方。无人机向侧面移动、进入转角或者上下穿过竖井时,飞行方向不一定在相机视野里。项目因此把朝向和可观测范围纳入运动策略,并用辅助测距补充覆盖。视觉感知设计
这给实际项目一个很直接的提醒:
定位还正常,不代表前方障碍物也被可靠看到了。
同样,深度图没返回点,也不等于那儿没有墙。白墙、暗处和低纹理表面,都可能让视觉缺少有效观测。
速度也不该只由"电机能飞多快"决定。项目把探测范围、观测延迟和制动能力一起考虑:看得近、数据旧,就该减少冒进的空间。轨迹与控制设计
这比再记住一个算法缩写,更容易用到自己的系统里。
04 想动手,先在电脑上跑一趟
官方支持的路径是 Linux+Docker+NVIDIA 容器运行环境。ROS 2、Gazebo 和相关工具由项目容器提供,不用先在宿主机手动拼一整套依赖。
准备好环境后,在终端执行:
bash
git clone https://github.com/formiat/px4-ros2-drone-nav.git
cd px4-ros2-drone-nav
./scripts/bootstrap.sh
脚本会准备开发环境、PX4 SITL、工作空间和场景资源,然后启动仿真。首次需要下载数 GB 数据并进行编译,别把"一条启动命令"理解成"几秒就能完成"。具体要求见安装说明。
先看清楚两边的画面:Gazebo 显示飞行环境,RViz 显示观测、障碍物记忆与规划路径。注意转弯时的朝向,和地图逐渐增长的过程。
需要结束仿真时,使用:
bash
./scripts/stop_sim.sh
本文核对了官方文档与启动入口,未在本机完成整套仿真实测。
05 别只看视频,做这三组对比更有价值

本文整理的实验建议,均针对仿真。
对比一:视觉惯性与 GNSS。
分别运行默认任务和 sim_urban_point_to_point_gnss_gui.sh。画面可能差不多,重点看日志里的定位来源、异常和真实到点距离。它能帮你区分"飞到估计坐标"与"真的飞到目标"。
对比二:双目与激光雷达。
使用 sim_urban_point_to_point_lidar_gui.sh 对照默认视觉配置。观察地图覆盖、转弯策略、任务耗时和资源占用,不要只比谁的点云漂亮。
对比三:正常照明与光源故障。
当前主分支提供 sim_urban_light_failure_gui.sh 等故障场景。关注视觉观测变差后,系统怎样停止、判断光源不可靠并返航。一次只跑一个场景,避免争抢算力影响判断。官方场景清单
如果准备深入研究,每次保留代码版本、配置、任务结果和 log/runs/ 中的记录。复现同一个问题,比只留一段成功视频有用。项目的验收说明也明确区分了任务成功、真实到点和其他诊断数据。测试与评估说明
06 它适合学习和验证,不是直接上机的成品
目前它是仿真导向的研发项目,尚未验证实机运行;文档中的工作站资源数据,也不能直接当作机载计算机的性能承诺。资源测量说明
它适合拿来学习 VIO 与飞控怎样衔接、验证导航链路、设计故障对比实验。真要移植,还得重新处理传感器同步、标定、通信延迟、算力与失效保护。
真正值得带走的,不是"没有 GPS 也能飞"的结论,而是怎样把一个定位算法,接进能观察、能复现、能评估的导航系统。
配套资料,已整理到夸克网盘
想动手试,又担心 GitHub 下载慢?我把这篇对应的资料整理成了一个约 48 MB 的资源包:v0.4.0 发布版源码、本文实验对应的主分支快照、可本地克隆的 Git 备份、官方文档、城市场景资源,以及中文复现指南,原始许可与校验清单也一并保留。
建议先读目录里的《PX4导航资料包_先读我》,再选择对应版本运行