DeepMind推出GeminiRobotics-ER1.5,机器人智能大升级
DeepMind推出Gemini Robotics 1.5系列,实现机器人理解环境、规划动作并借助网络搜索辅助决策。新模型采用分层架构,将任务规划与执行解耦,支持动作迁移和多步骤复杂任务,如衣物分类、行李打包等。系统可调用外部工具,突破训练数据限制,显著降低不同机器人的训练成本。DeepMind计划通过API开放这些能力,推动机器人向"智能助手"进化。技术突破包括任务拆解、知识
DeepMind 发布 Gemini Robotics 1.5 和 Gemini Robotics-ER 1.5,它们旨在让机器人能理解环境、规划动作,并能在执行过程中利用网络搜索 / 外部知识辅助决策。(The Verge)
-
Gemini Robotics-ER 1.5 作为“规划 / 推理器(embodied reasoning)”来处理更高层次的任务拆解和工具调用(如 Google Search),而 Gemini Robotics 1.5 负责把规划转为具体的视觉 + 行为决策。(The Verge)
-
新模型支持 motion transfer(动作迁移):以前在一种机器人 / 机械臂上学到的技能可以迁移到其他类型机器人上,从而减少为每一种机械体都重新训练的成本。(金融时报)
-
在演示中,机器人可以完成类似 “按衣服颜色分类洗衣”、“基于当地天气打包行李” 或 “根据当地垃圾分类规则进行回收分类” 这样的多步骤任务。(The Verge)
-
DeepMind 还计划通过 Gemini API(例如 Google AI Studio)逐步向开发者 / 合作伙伴开放这些能力。(The Verge)
二、技术解读 & 用途剖析
下面是我对这一新闻背后技术趋势、可能用途与挑战的分析。
技术意义
-
分层 – 规划与执行解耦
许多传统机器人系统把规划(“我下一步要做什么”)和执行(“如何动手 / 控制关节 /做动作”)混在一起,容易出现规划错误、控制误差累积等问题。DeepMind 这次用 ER 模型 + Robotics 模型解耦,使得更复杂任务可以先在高层思考、调用工具/知识,再由执行层具体落地。 -
知识 / 工具调用能力的融入
机器人在遇到未知 / 模糊情况时,可以临时发起 Web 搜索、查规则、调用外部工具辅助判断,这打破了机器人只依赖训练数据的局限。这是“世界模型 + 外部知识 + 感知-行动闭环”融合的方向。 -
动作迁移 / 通用性
如果你在一种机械结构/机器人上训练了动作技巧,通过迁移机制在另一种结构上重用,这大大降低了训练成本、扩展难度,是未来机器人系统规模化部署的关键。 -
复杂任务 / 多步骤能力
从“接收一个指令做一个动作”到“理解复杂指令、拆解子任务、连续行动、适时调整”的能力跃迁,是机器人从工具向 “助手 / 同伴设备” 的进化。
三、思路 + 部分代码骨架:给一个小型 “搜索 + 行动” 机器人任务
为了让你的博文更有技术感 / 可操作性,我给一个缩减版 Demo 思路 +关键代码骨架(可以在模拟环境中跑通)。
目标
在一个简单的仿真环境 /模拟室内空间里,给机器人一个自然语言指令,如:
“把红色杯子放到桌子右边,并把蓝色书本拿回书架”
机器人需要:
-
解析指令 → 拆为子任务
-
感知环境(识别杯子 / 书 /桌子 /书架的位置)
-
如果有不明确(如书架哪层?书本哪边?)可以发起一次知识 /规则查询
-
规划路径 + 动作序列
-
执行动作
技术组件建议
| 模块 | 可选 / 简化方案 |
|---|---|
| 视觉 / 识别 | 用 pre-trained 模型(如 DETR / YOLO / Mask R-CNN)识别物体 + 位置 |
| 语言解析 / 任务拆解 | 用一个小型语言模型或 prompt 模型,把自然语言转为子任务(动作 + 目标) |
| 检索 / 查询模块 | 简化:可以对“书架结构规则”“物品相对摆放规则”等做本地小知识库,或 mock 一个 Web 查询输出 |
| 路径 / 动作规划 | 用 A* / RRT /贪心算法 /仿真库自带路径规划 |
| 控制 /执行 | 在模拟器里发送动作命令(move_to, pick, place 等) |
关键伪代码
下面是一个骨架代码示例(以 Python 为主):
from transformers import pipeline
from PIL import Image
import requests
# 假设有一个仿真环境接口(伪代码)
class SimEnv:
def __init__(self):
pass
def get_image(self):
# 返回当前环境视角图像
...
def get_state(self):
# 返回物体的 ground truth 状态(用于调试 /基线)
...
def step(self, action):
# 执行动作,比如 {"type":"move","target":(x,y)}, {"type":"pick","object":"cup"}, {"type":"place","object":"cup","target":(x,y)}
...
def reset(self):
...
# 语言解析模块
parser = pipeline("text2text-generation", model="your-task-parser-model")
def parse_instruction(instr: str):
"""
把一句自然语言转为子任务列表
例如:
"把红色杯子放到桌子右边;把蓝色书本拿到书架第 2 层"
→ [{"action":"place", "object":"red cup", "target":"table right"}, {"action":"move", "object":"blue book", "target":"bookshelf level2"}]
"""
out = parser(instr)[0]["generated_text"]
# parse 出结构(你可以设计自己的语法 / prompt 输出格式)
tasks = []
for part in out.split(";"):
part = part.strip()
if not part: continue
act, rest = part.split(":", 1)
tasks.append({"action": act.strip(), "params": rest.strip()})
return tasks
# 视觉识别模块(使用 detection 模型)
detection = pipeline("object-detection", model="facebook/detr-resnet-50")
def detect_objects(img: Image):
dets = detection(img)
# 返回 label → box 映射
obj_map = {det["label"]: det["box"] for det in dets}
return obj_map
# 简单检索 / 查询模块(可 mock / 本地规则)
def query_rule(query: str):
# 简化:预设一些规则
rules = {
"如何放书在书架第2层": "bookshelf has 3 levels, level 2 is middle",
"桌子右边是坐标 x > 桌子中心 + 20": "use x > midpoint + offset",
}
return rules.get(query, "")
# 主流程
def agent_loop(env: SimEnv, instruction: str):
img = env.get_image()
objs = detect_objects(img)
subtasks = parse_instruction(instruction)
actions = []
for t in subtasks:
act = t["action"]
params = t["params"]
# 简化处理逻辑
if act == "place":
# params 可能是 "red cup -> table right"
# 拆 params
obj_name, target_desc = params.split("->")
obj_name = obj_name.strip()
target_desc = target_desc.strip()
if obj_name not in objs:
# 有时候物体没被检测到,可以发起 query 或 fallback
info = query_rule(f"如何识别 {obj_name}")
print("Rule lookup:", info)
# 根据 target_desc 决定坐标目标(模拟映射)
target_box = ... # 你定义 mapping,从 “table right” → 坐标
actions.append({"type":"move", "target": objs[obj_name]})
actions.append({"type":"pick", "object": obj_name})
actions.append({"type":"move", "target": target_box})
actions.append({"type":"place", "object": obj_name, "target": target_box})
# 你也可以处理其他 act 类型,如 “move” / “pickup only” / etc.
# 执行动作
for act in actions:
env.step(act)
# 示例运行
if __name__ == "__main__":
env = SimEnv()
env.reset()
instr = "把红色杯子放到桌子右边;把蓝色书本放在书架第 2 层"
agent_loop(env, instr)
-
探讨如何改进:联合训练解析 + 视觉 + 控制模型;多次交互 / 矫正机制;工具 /检索融合策略优化等
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)