让实验室的机器狗听懂人话,我花了一周
给具身机器人接上大模型,让机器狗听懂自然语言指令,这件事比想象中简单,但坑比想象中多。DeepSeek 入股宇树、Anthropic 想收购 Physical Intelligence,本质都是同一件事——大模型公司要往物理世界伸手,机器人公司需要更聪明的"大脑"。我在实验室用宇树机器狗跑了一周,把从零到能用的过程写下来。
先解释两个词。具身智能里的"小脑"指的是运动控制,让机器狗能走、能跳、能保持平衡;“大脑"就是大模型,负责理解"帮我把桌上的培养皿拿过来"这种话。两者目前是分开的,宇树提供"小脑”,DeepSeek 这类公司提供"大脑",新闻里说的战略合作就是想把这俩拼起来。
我第一天做的事,是先把宇树官方的 SDK 装好。SDK 就是一组现成的代码工具包,相当于给机器狗的遥控器,但用代码控制。去宇树官网下载对应型号的 SDK,我这边是 Go2,解压后是一个 unitree_sdk2 文件夹。装依赖,在终端敲 pip install numpy,如果有报错就再装 pip install matplotlib。然后跑一个最简单的示例,python examples/sport/walk_forward.py,机器狗会向前走两步。
这里有个大坑:SDK 版本和机器狗固件版本要对上。我第一次跑直接报 timeout,折腾两小时发现是官网最新版 SDK 跟机器狗出厂固件不兼容,最后刷回旧版固件才通。新手如果遇到连不上,先查固件版本,别急着改代码。
机器狗能动之后,下一步是让大模型能指挥它。我用的方案是本地跑一个开源大模型,通过 API 跟机器狗的控制程序对接。API 就是程序之间对话的接口,你可以理解成两个程序之间约定好的"暗号"。
核心逻辑不复杂:把文字指令发给大模型,它返回一个结构化的动作指令,再把这个指令翻译成机器狗的 SDK 调用。比如你说"左转90度",大模型返回 {"action": "turn", "angle": 90},程序解析后调用 turn_left(90)。
新手最容易在这步踩的坑是:大模型返回的格式不稳定。有时候它返回纯文本"左转90度",有时候返回 JSON,还有时候带着一长串解释。我一开始直接让大模型"自由发挥",结果解析程序天天报错。后来学乖了,在提示词里强制要求输出格式,并且加了字段校验,格式不对就重新请求。这个经验我昨天刚试过,加字段校验比让模型自己决定靠谱。
到第七天,我做了一个简单的实验:让机器狗从实验室 A 点走到 B 点,中间避开一把椅子。用自然语言下指令"绕过椅子,走到窗台那边",大模型把这句话转成路线规划,输出 {"waypoints": [[1.2, 0.5], [2.0, 1.5]]},SDK 接收坐标点,执行运动控制。
这一步花了最多时间,因为"绕过椅子"这个指令,大模型能理解,但机器狗的传感器不一定能检测到椅子。我最后妥协的方案是:先手动标定一次椅子位置,把坐标写进环境配置文件,大模型只负责查坐标再规划路径。这算是"大脑"和"小脑"之间的一个典型 gap,文本理解没问题,但物理世界的感知还是要靠传感器补。
顺带说一句,实验室里搭的这套东西,跟 DeepSeek 入股宇树想做的事方向一致,只是规模差了十万八千里。它们是要把整个感知-决策-控制闭环做通,我这边只是验证了中间一小段。
如果跑通了上面的流程,下一步可以试试给机器狗加一个摄像头,让它"看"到障碍物再决策,而不是像我一样手动标定。再往后可以试多模态大模型,直接把图像和文字一起丢进去,让模型自己决定怎么走。
大脑负责理解,小脑负责执行,中间那层翻译做不好,两边都白搭。
物界前沿