5万美元的导盲犬,要被2000美元的开源机器狗顶替了?

Ally2026-08-092143机器人技术及应用

导盲犬有多贵?

光是繁育、养育加训练一条,成本就超过5万美元。不少申请者需要长期排队,往往要等待2‑4 年才能匹配到合适的服务犬;而犬只实际服役年限也十分有限。



 


现在,来自Mila-魁北克AI研究所和蒙特利尔理工的一支团队,称把这件事的成本压到了约2000美元。

他们做了一只叫Milo的机器导盲犬:不需要提前扫描环境、不需要外接笔记本算力、不需要联网,室内室外都能走,一边带路一边躲障碍物和行人,还知道旁边那个人在哪、会不会撞上。

整套硬件方案和软件栈,全部开源。



 

01.

先说清楚:它到底比同行强在哪

机器导盲犬这个方向不是第一次有人做,但之前的方案多多少少都有点"实验室味儿"。

有的只能在户外走,依赖GPS定位,进了室内就抓瞎;有的必须提前建好环境的3D地图,或者先由人遥控走一遍路线再让机器人复现;还有的把感知和规划的计算丢给外接的笔记本电脑,严格说不算"自主"。

更关键的一点是:过去的系统大多把机器人当成一个独立个体在规划路径。

但导盲这件事,本质上是协作的。真实场景里,人给出高层意图(往哪走、走多快、下个路口要拐弯),狗负责局部的路径跟随和避障。如果机器人只顾自己钻得过去,它规划出的路线对旁边那个人来说可能是灾难——因为人比机器人宽、比机器人高,而且被拖着走。

Milo同时满足了这几件事:室内外通吃、不需要已知环境、全机载计算、接受使用者指令、显式建模使用者的动态位置、以及开源。



 

02.

一根手柄,让机器狗知道"人在哪"

Milo的硬件基座是宇树Go2 Air/Pro——选它的理由很朴素:便宜、自带前视相机和激光雷达、买得到。

但Go2原厂并没有能跑机器学习推理的算力,团队给它加了一块NVIDIA Jetson Orin Nano,在价格、体积和性能之间取了个平衡。实测下来,这块板子能以5Hz跑完整条流水线:体素建图、分割网络、目标检测网络,加上基于CNN的导航策略。

真正有意思的是牵引部分。

导盲犬通常被握在左手,右手留给白手杖,但也有左撇子习惯反过来。而且在窄路上,机器狗有时需要临时走到人前面去避让——这就要求人和机器人的相对位置是可变的。

所以团队没有用刚性的挽具,而是做了一根可伸缩的手柄,通过一个3D打印的两自由度关节连接到狗身上。关节里装了磁编码器,实时测量手柄的方位角和俯仰角;再结合手柄长度,就能反解出使用者相对机器狗的三维位置。

手柄末端还有一个五向方向键:中间键暂停/继续,前后调整期望步速,左右表示"下个路口我想拐弯"。



 

03.

不看地图,全靠现场看

Milo没有选择端到端黑箱式的导航策略,而是先把世界压成一张人类看得懂的鸟瞰图(BEV),再喂给策略网络。

这么做的好处是:比稠密3D地图省内存,而且这张图天然适合往下接无障碍功能——比如语音播报"前方2米,10点钟方向有障碍物"。

具体怎么建这张图?

相机拿到1280×720的RGB图后先做去畸变矫正,然后兵分两路:一路交给NanoSAM(基于MobileSAM蒸馏、面向Jetson优化的版本)分割可通行区域,提示点放在画面下方中央——默认机器人一开始就站在路上、朝着路的方向;另一路交给YOLO做目标和行人检测。

行人被单独拎出来处理,不和普通障碍物混为一谈,这样才能产生更平滑的交互行为。为了让远距离行人也能被及时定位,团队还上了Metric Depth Anything V2做单目深度估计,并用激光雷达测量值做标定。

这里有个工程细节值得一提:原始深度模型在Jetson上只能跑2.64 FPS,团队换用TensorRT优化流水线后,推理速度提到了24.02 FPS,精度基本没掉。

激光雷达那边,系统实时读取机器人自带的建图结果,做运动补偿,存成10厘米分辨率的体素地图。低于某个高度的体素被滤掉(去地面,同时对不平整地形保持鲁棒),高于某个高度的也丢掉(天花板、树冠这些反正能从下面走过去)。

最后,分割出的可通行路面、检测到的物体和行人、机器人自身状态、以及从磁编码器算出的使用者位置,全部融合进这张BEV图。使用者在图上被画成一个圆——这就是策略"看得见"人的方式。



 

04.

10分钟练出来的策略,和一个"兜底"的安全阀

策略训练在仿真里完成。

团队用Taichi写了一个GPU加速的BEV仿真器:道路是随机生成的直线和贝塞尔曲线,可以旋转拼接成丁字路口和十字路口,宽度按当地民法典规定的人行道宽度范围采样;墙壁是随机采样的道路轮廓(所以会出现没墙、只有一侧有墙、两侧都有墙的情况);障碍物是随机旋转的方块;行人是沿路径按固定偏移和随机速度移动的圆。

一个很妙的细节是:仿真器会在路面图上叠加2D柏林噪声,人为制造出"缺一块"的路面——用来模拟真实世界里不完美的分割结果。

在一块2018年的Titan RTX上,这个环境可以并行64份,每份约40帧/秒,总吞吐约2560帧/秒。作为对比,论文提到此前类似工作的策略训练大约需要30小时,而Milo的策略大约10分钟就能练出来。

观测是200×200的BEV图像,叠加前两帧共9通道;动作是前进速度、横向速度和偏航角速度;奖励函数一共14项,包括"狗/人"×"越界/撞墙/撞障碍/撞行人"的八项碰撞惩罚、前向速度跟踪、横移与偏航抑制、动作抖动惩罚,以及围绕机器人和使用者中点的内外两圈安全区奖励(内圈0.6米,外圈1.2米)。这两个半径是调出来的:小了策略变得激进危险,大了又会"神经质"。

算法用的是GPU优化的PPO,仿真训完零样本部署到真机。

真机上跑着5个不同频率的线程:激光雷达体素建图5Hz、里程计和磁编码器读数18Hz、相机分割检测4Hz、策略推理4Hz(被相机线程卡住)、控制线程10Hz(在等新指令时重复上一条)。

此外还有一层局部避障安全滤波器,直接读原始点云和位姿,在指令发给机器人之前做最后拦截:靠近正前方障碍时逐步降低前进速度,到临界距离直接归零;朝障碍方向的横移先被屏蔽,如果已经太近,还会反向给一点横向速度把机器人推开。



 

05.

实测:机器可能会蹭墙,但人不会

团队在真实的室内外场景里做了对比,基线是一个类似经典方案的costmap控制器:把分割出的可通行区域投影到地面,生成极左、左、直行、右、极右五条贝塞尔曲线候选轨迹,按可通行长度打分选最低代价的那条。



 

第一项测试是循迹,场地是公园里一座S形木桥,没有墙,完全依赖路面分割;起点朝向被特意设置成"至少要拐两次弯"。

结果:costmap平均21.3秒(±1秒);策略在最高速下13.7秒、最低速下22.3秒。但更关键的是安全性——costmap的每一次运行,使用者都撞上了桥的边界,并且有好几米的距离都走在对人不安全的路线上。策略这边则是零使用者碰撞,只在高速档位下出现了2次机器人自身的碰撞。



 

第二项是静态障碍绕行,场地是一个对"人狗组合"来说比较紧的转弯,绕过一个垃圾桶和一个花坛。地上画了两圈舒适区标线:0.25米(危险)和0.5米。

结果:策略11.7秒(±2秒),costmap 10.5秒(±1秒),时间差不多。但costmap的三次运行全部造成使用者与垃圾桶的硬碰撞,其中2/3的运行机器人自己也压进了0.25米线内。策略这边没有出现任何危险的使用者轨迹,不过所有回合中机器人自己都贴着第二个障碍物走,2/3的运行发生了触碰。

这个结果其实相当一致地体现了策略的取向:它在优先保护人,代价是自己更容易蹭到东西。

第三项是行人避让,原计划让两名协作者在走廊里以固定步速迎面走来,但团队发现这个设置在多次实验之间的可重复性很差,所以只给了定性结论:Milo能比较好地避开迎面而来的行人,但对从后方超车的行人应对吃力——当超车的人第一次进入视野时,机器狗有时会出现横向躲闪的动作,直到对方走出去一米以上才恢复。团队认为这可以通过在1米半径内突然出现行人时调制横向和偏航响应来解决。

06.

它还有几件事干不了

当然,它还有一些事情干不了。

最有意思的一条是:NanoSAM的提示点固定在画面下方中央,所以开机时必须让机器狗站在路上、朝着路的方向——要是正对一堵墙启动,它会把墙分割成"地面"。团队试过用SegFormer替代,后者不依赖朝向假设,对着墙也能找出画面里那一小块地板,但代价是室内室外要切两套模型,而且遇到积雪的人行道、瓷砖广场、公园小径这些分布外场景,表现明显下滑。权衡之后他们还是选了NanoSAM——毕竟"别对着墙开机"这个约束,实在太容易满足了。



 

其余的坑也都摆在明面上:地面投影假设地形是平的,坡道和斜面还没处理;走快了激光雷达建图会成为瓶颈;人一多机器狗就过分保守(而现实是路人常常出于好奇主动往上凑);以及它目前只能走人行道和室内地面,还不能过马路——要做到那一步,还得补上人行横道、红绿灯和车辆检测。

换句话说,Milo现在能干的是导盲犬"基本盘"里的那部分活儿:跟路、绕障碍、躲行人、护着身边的人。剩下的,团队把接力棒交给了社区。

从机器人硬件怎么搭、到仿真环境、策略训练代码、机载感知栈、再到训练好的导航策略,全部开源。感兴趣的朋友可以去详细了解:

项目主页:

https://fgolemo.github.io/milo

演示视频:

https://youtu.be/hCJE4ORoizo