四足机器人自主导航怎么落地:用 OM1 让 Unitree Go2 自己认路、自己避障的完整指南
【免费下载链接】OM1Modular AI HAL (Hardware Abstraction Layer) for Robots项目地址: https://gitcode.com/GitHub_Trending/om/OM1
OM1 是一个模块化的机器人 AI 运行时(HAL 抽象层),它把摄像头、激光雷达、麦克风的数据交给大模型,再由大模型反向指挥机器人走路、说话和避障。这篇指南以 Unitree Go2 四足机器人为例,带你从零跑通它的自主导航能力。
它帮你解决什么问题
让一只机器狗"自己走路",其实要同时解决三件事:看得到路(感知)、想得明白(决策)、走得动(控制)。传统做法是堆一堆 ROS2 节点、写死状态机,调试成本很高,换一个传感器或换一种说法就得改代码。
OM1 的思路不一样。它把整个链路抽象成三层:
- 输入层:激光雷达点云、语音(ASR)、视频画面(VLM 视觉语言模型)、里程计,全部转成自然语言描述
- 决策层:一个或多个 LLM 读取这些描述,输出"move forwards"、"turn left"这样的高层动作
- 动作层:动作连接器把高层动作翻译成
cmd_vel速度指令,通过 Zenoh(一种分布式消息中间件,可以理解成机器人版的消息总线)发给机器人
好处是:感知、模型、动作都解耦了。想换模型?改一份 json5 配置就行。想加新传感器?写个插件注册进来就行,不用动主流程。整体分层可以看这张官方架构图:
从零跑通:环境准备与启动步骤
硬件准备
自主避障依赖一颗装在 Go2 头顶的激光雷达,官方推荐 SLAMTEC RPLidar A1M8(2D 单线激光雷达,扫描一圈就能得到机器人周围的距离信息)。安装角度和需要屏蔽的固定遮挡角,可以用官方测试脚本标定,方法见 docs/robotics/motion_planning_lidarA1M8.md:
开发机用网线直连 Go2,把本机网卡手动设置成192.168.123.99(掩码 255.255.255.0),这样才能和机器人内部的计算单元通信。
安装并启动
如果你只是想看效果,最快路径是下载预编译二进制(不需要装 Go),把config/、knowledge_base/等运行资产一并解压出来即可。要从源码构建的话,需要 Go 1.25.0+:
git clone https://gitcode.com/GitHub_Trending/om/OM1 cd OM1 make deps && make build然后配置你的 API Key 环境变量,选择对应的配置启动:
export OM_API_KEY="<your_api_key>" make run CONFIG=unitree_go2_autonomyunitree_go2_autonomy是导航场景的预设配置,定义在 config/unitree_go2_autonomy.json5,里面声明了四类输入(里程计、Google ASR 语音、Gemini VLM、激光雷达安全路径)和三类动作(TTS 说话、表情、自主移动),决策模型用的是 Gemini。想确认它跑起来了,看终端里是否持续滚动输入处理和 LLM 响应日志即可。
如果你没有真机,也可以先在 Gazebo 或 Isaac Sim 里跑,文档在 docs/simulators/ 下。
它如何"感知"周围环境
导航的安全底线来自激光雷达,这里的核心设计是"路径预检":
系统预先算好机器人前方扇形区域的 10 条候选路径——左侧 4 条(-60° 到 -15°)、正前方 2 条(0° 和 15°)、右侧 3 条(30° 到 60°),外加一条正后方撤退路径。每条路径都检查是否会以小于机器人半宽(约 0.2 米)的距离擦到障碍物,没问题的才标记为"可用路径",结果发布在om/paths主题上。
这套检查有两个关键阈值,配置项就叫直白的名字:
relevant_distance_max: 1.1:只关心 1.1 米以内的障碍物,超过这个距离的墙和家具对下一步动作没影响angles_blanked:把雷达支架、外壳这类固定遮挡对应的角度区间屏蔽掉,免得机器人一直以为前面有东西
感知结果会同时送给两个地方:一是拼进 LLM 的上下文,让它"知道"现在能往哪走;二是直接给动作驱动做执行前校验,即使 LLM 想走的路已经封了,驱动也会拒绝执行。感知层和决策层互为备份,这是它比"纯 LLM 决策"更稳的地方。
遇到障碍时它怎么"想"
障碍信息先变成一句话
PathsProvider(源码在 internal/providers/paths.go)收到路径数据后,会把原始索引翻译成 LLM 能直接读的自然语言。比如前方被封、左右能走时,它会生成:
The safe movement directions are: 'turn left', 'turn right', 'stand still'.
如果四面都是障碍,则直接告诉 LLM:
You are surrounded by objects and cannot safely move in any direction. DO NOT MOVE.
LLM 拿到这句话再加上语音指令和画面描述,综合决定下一步动作。动作词表很小,只有五个:turn left、turn right、move forwards、move back、stand still。词表小意味着模型不容易"说错话",执行端也好做安全校验。
指令执行也有状态机
LLM 说"前进"之后,真正落地的是 plugins/actions/unitree/go2/autonomy/move.go 里的执行器,它把一条命令拆成两阶段:先原地转到目标航向,再直线推进 0.5 米。执行期间有几个保护逻辑:
- 每 50 毫秒一个 tick 检查一次,只有机器人处于站立姿态才发速度指令
- 转向阶段如果 2 秒内航向没在收敛,直接判失败停车,防止原地打转
- 直行阶段每步都重新查"正前方路径是否仍畅通",封了就刹车
- 任何异常都会立即发一个零速度的
Twist把速度清零
除了自由移动,项目还提供了"点名导航":说"go to the kitchen",navigation连接器(plugins/actions/navigation/)会查已保存的地点列表,把目标位姿发布到goal_pose,交给机器人侧的 Nav2 导航栈去算全局路径。Nav2 的状态码(1 已接受、2 执行中、4 成功、5 已取消、6 异常终止)被逐帧解析回来,用于驱动一套很重要的联锁逻辑。
AI 模式联锁:谁在开就只听谁的
导航任务开始的那一瞬间,OM1 会主动发布"AI control disabled"消息,冻结 LLM 的自由移动权限——避免大模型在 Nav2 规划路径的同时自己往前凑,两边打架。任务成功后重新启用 AI 模式,机器狗还会用 TTS 播报"我到啦"。但如果任务是取消或异常终止,AI 模式保持禁用,等人工介入。也就是说任何时刻只有一条控制链在生效,这套互斥是它能安全跑在真实环境里的关键设计。
把这套能力接入你自己的项目
改配置就能换行为
大部分定制不需要碰代码。config/下的每份 json5 就是一个"机器人人格 + 能力清单":改system_prompt_base可以换人设和交互风格,增删agent_inputs和agent_actions就能开关传感器和动作。比如给 Go2 加"看人不理生人"的守卫行为,只要把动作配置的mode设成guard,guard.go里的轮询器会每 500 毫秒查一次人脸识别服务,出现陌生面孔就丢弃所有移动指令。
接新硬件:写一个动作连接器
如果你的机器人不是 Go2,官方假设你的硬件提供高层 SDK(能接收 move、smile 这类指令),OM1 通过 USB、串口、ROS2、CycloneDDS、Zenoh 或 websocket 和它对接。新增动作的方式是实现一个连接器并在init()里注册,参考 plugins/actions/ 下任一连接器,机制说明在 docs/developing/6_actions.md。输入侧同理,自定义传感器写成 input 插件注册即可。
部署形态
面向量产的是"全自主"模式:整套服务以容器形式跑在 BrainPack(挂在机器人上的计算单元,负责建图、定位、远程控制和自动充电)上,机器人侧由 ROS2 SDK 把传感器数据发布成标准话题,OM1 消费话题、调 LLM、再发回动作。这套部署模型和组件清单在 docs/full_autonomy_guidelines/architecture_overview.md。支持的平台里 Nvidia Thor 是完整支持,AGX Orin 支持有限(重推理负载建议上 Thor)。
线上跑起来之后,仓库自带的 Grafana + Prometheus 看板可以盯 LLM、ASR 的实时延迟:
docker-compose up -d grafana prometheus适合谁用,以及它还能往哪走
这套东西比较适合三类人:
- 有 Go2 / G1 / M20 Pro / Tron 这类机型、想给机器人加"听得懂话 + 会认路"能力的开发者
- 想研究 LLM 如何驱动物理机器人的研究者——OM1 的多 LLM 架构(快速动作模型、核心认知模型、教练模型)是个现成的实验平台
- 需要把语音、视觉、导航、TTS 拼成完整交互链的机器人应用团队
往后看,这条路线的延伸方向已经比较清晰:导航加 SLAM 建图之后可以叠加定点巡航(patrol)、禁区(keepout zones)、自动回充、人脸匿名化等能力,这些在 docs/full_autonomy_guidelines/features/ 下都有独立文档;从室内家庭陪伴到户外探索、巡检,场景切换靠的仍是换配置而不是重写代码。对新手来说,建议先跑通conversation配置熟悉输入-LLM-动作这条主链路,再切换到unitree_go2_autonomy,理解成本会低很多。
【免费下载链接】OM1Modular AI HAL (Hardware Abstraction Layer) for Robots项目地址: https://gitcode.com/GitHub_Trending/om/OM1
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考