
让机器人像人一样理解任务,像专家一样执行动作
在机器人操作领域,如何让机器人理解自然语言指令并完成复杂的操作任务,一直是一个充满挑战的问题。传统的机器人控制方法往往需要精确的编程和预定义的动作序列,难以适应开放世界中多样化的任务需求。
ManiAgent 提出了一种创新的解决方案:将通用操作任务分解为多个专业智能体(Agent),通过它们的协作来完成复杂的操作任务。这种"分而治之"的思想,让每个智能体专注于自己擅长的领域,最终实现 1+1>2 的协同效果。
ManiAgent 采用模块化的多智能体架构,主要由以下核心组件构成:

Reasoner 是任务理解的核心,负责:
示例:输入 "把香蕉放到盘子上",Reasoner 会识别出需要检测
["banana", "plate"]两个目标对象。
Controller 是动作规划的大脑,基于大语言模型(LLM)生成机器人动作序列:
输入:
输出:
{
"sequence": [
[0.217, -0.092, 0.215, 0, 1.56, 0, 1],
[0.217, -0.092, 0.015, -0.874, 1.56, 0, 1],
[0.217, -0.092, 0.015, -0.874, 1.56, 0, 0],
...
],
"steps_description": [
"移动到香蕉上方,打开夹爪",
"旋转到抓取姿态",
"下降到香蕉位置,关闭夹爪",
...
]
}每个动作是一个 7 维向量:[x, y, z, roll, pitch, yaw, gripper_state]
x, y, z:末端执行器的 3D 位置roll, pitch, yaw:末端执行器的姿态角(弧度)gripper_state:夹爪状态(0=关闭,1=打开)Detector 使用 Florence-2 视觉语言模型进行目标检测:
步骤 | 输入 | 输出 |
|---|---|---|
2D 检测 | RGB 图像 + 物体名称 | 边界框 |
深度融合 | 2D 坐标 + 深度图 | 3D 位置 |
多目标选择 | 多个候选 + 任务描述 | VLM 辅助选择最佳目标 |
关键技术:
<OPEN_VOCABULARY_DETECTION> 任务支持任意物体检测Grasper 基于 AnyGrasp 算法生成精确的抓取姿态:
点云数据 + 目标位置
↓
AnyGrasp 处理
↓
抓取姿态 6DoF (grasp_x, grasp_y, grasp_z, roll, pitch, yaw)为什么需要 Grasper?
Detector 提供的是物体的几何中心位置,但对于抓取任务,我们需要知道:
AnyGrasp 通过点云分析,为每个物体计算出最优的抓取配置。
Prompt Manager 负责构建发送给 LLM 的提示词,包含:
通过精心设计的提示词工程,确保 LLM 能够生成格式正确、逻辑合理的动作序列。
完整的任务执行流程如下:
graph TD
A[接收任务指令] --> B[Reasoner 推理]
B --> C[Controller 规划]
C --> D{需要目标检测?}
D -->|是| E[Detector 检测]
E --> F{需要抓取姿态?}
D -->|否| F
F -->|是| G[Grasper 抓取]
G --> H[SimplerEnv 执行]
F -->|否| H
H --> I{任务完成?}
I -->|否| C
I -->|是| J[结束]# 1. 克隆代码
git clone https://github.com/yi-yang929/maniagent.git
cd maniagent
git submodule update --init --recursive
# 2. 创建 Agent 环境
conda create -n agent python=3.10 -y
conda activate agent
pip install torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
# 3. 配置 LLM API
export OPENAI_API_KEY=your_api_key
export OPENAI_BASE_URL=https://api.openai.com/v1# 终端 1:启动 Controller
python controller/app.py
# 终端 2:启动 Detector
python detector/app.py
# 终端 3:启动 Prompt Manager
python prompt_manager/app.py
# 终端 4:启动 Grasper(需要单独配置 AnyGrasp 环境)
cd grasper/anygrasp_ManiAgent/grasp_detection
python app.py
# 终端 5:启动仿真器
cd benchmark
bash scripts/env_sh/simpler.sh ./evaluation/configs/simpler/example_simpler.yamlController 支持将生成的动作序列参数化并缓存,相同类型的任务可以复用已有模板:
# 参数化动作序列示例
"sequence_param": "[
[scene_info['objects'][0]['grasp_x'],
scene_info['objects'][0]['grasp_y'],
scene_info['objects'][0]['grasp_z'] + 0.2,
0, 1.56, 0, 1],
...
]"这种设计使得系统能够:
当场景中存在多个同类物体时,Detector 会:
每个 Agent 都是独立的 Flask 服务,支持:
ManiAgent 在 SimplerEnv 仿真环境中进行了验证,支持的任务类型包括:
任务类型 | 描述 | 关键技术 |
|---|---|---|
抓取放置 | 把物体从 A 放到 B | 完整流程 |
物体堆叠 | 将物体叠放在一起 | 精确定位 |
旋转操作 | 拧开瓶盖等旋转动作 | 姿态控制 |
拖拽操作 | 拖动碗/盘等不易抓取的物体 | 特殊策略 |
ManiAgent 展示了多智能体协作在机器人操作任务中的巨大潜力。通过将复杂任务分解为感知、推理、规划、执行等多个专业模块,系统能够灵活应对开放世界中的多样化挑战。
这种模块化设计不仅提高了系统的可维护性和可扩展性,也为未来引入更先进的视觉模型、语言模型和控制算法提供了良好的架构基础。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。