项目地址:https://github.com/hzm8341/EmbodiedAgentsSys

欢迎 Star ⭐ / Fork / 提 Issue,一起把这个框架做好。


一、为什么做这个项目?

做了一年具身智能,踩了很多坑。

在自动驾驶干了将近10年,转来具身智能之后发现:这个行业有大量优秀的模型,但严重缺乏把这些模型串联起来的工程框架。

大家都在单点突破:

  • 搞感知的在卷 VLA 模型
  • 搞控制的在卷轨迹规划
  • 搞交互的在搞语音或者遥操

但真实的机器人任务需要的是一个完整的闭环:看到 → 理解 → 决策 → 执行,这四步缺一不可。

EmbodiedAgentsSys 就是我在这个背景下做的一个尝试——一个覆盖感知、认知、控制、交互四层的具身智能 Agent 框架,基于 ROS2 原生构建,纯 Python,生产可用。


二、框架整体架构

┌─────────────────────────────────────────────────┐
│              交互层  Interaction                  │
│   语音输入(Whisper) │ 语音输出(TTS) │ VR遥操      │
├─────────────────────────────────────────────────┤
│              认知决策层  Cognition                │
│   LLM │ MLLM(Qwen2-VL) │ RAG │ 语义路由          │
│   时空语义记忆(ChromaDB) │ LLM代码生成控制         │
├─────────────────────────────────────────────────┤
│              感知层  Perception                   │
│   目标检测 │ 3D位姿估计 │ 深度感知 │ 工件分类      │
├─────────────────────────────────────────────────┤
│              执行控制层  Execution                │
│   机械臂运动技能 │ 夹爪技能 │ 力控技能 │ 抓取规划  │
├─────────────────────────────────────────────────┤
│              基础设施层  Infrastructure           │
│         ROS2 原生 │ 事件驱动 │ 异步多组件编排       │
└─────────────────────────────────────────────────┘

每一层都是独立模块,可以单独使用,也可以自由组合。


三、核心功能详解

3.1 语音示教 Agent

用自然语言直接控制机械臂。说人话,机器人动。

agent = VoiceTeachingAgent()

# 支持多层级指令
await agent.execute("向前20厘米")         # L1:基础运动
await agent.execute("把夹爪打开")         # L2:复合动作
await agent.execute("把零件拿到拍照位置")  # L3:任务级指令

框架自动完成:语义解析 → 意图识别 → 技能调度 → 机械臂执行 的完整链路。


3.2 LLM 代码生成控制机器人

受 ChatGPT for Robotics 启发,用户用自然语言描述任务,LLM 自动生成可执行的机械臂控制代码,内置安全验证器过滤高风险操作。

skill = AgxArmCodeGenSkill()
result = await skill.execute("让机械臂画一个圆形轨迹", robot_type="nero")

# 自动生成完整 Python 控制脚本
# 包含连接、使能、运动、等待的标准安全流程
# 自动校验并过滤 move_mit 等高风险操作
print(result.output["generated_code"])

3.3 多模态感知 + RAG 问答

集成 Qwen2-VL 多模态理解,结合 ChromaDB 向量检索,机器人可以看图说话并检索历史知识。

qwen_vl = OllamaModel(name="qwen_vl", checkpoint="qwen2.5vl:latest")
qwen_client = OllamaClient(qwen_vl)

mllm = MLLM(
    inputs=[query_topic, image_topic, detections_topic],
    outputs=[answer_topic],
    model_client=qwen_client,
    trigger=query_topic,
)

mllm.set_component_prompt(template="""
    你是一个工厂机器人。
    当前画面中有:{{ detections }}。
    请回答:{{ text0 }}
""")

3.4 时空语义记忆地图

机器人不只是"看",还能"记住"。MapEncoding 组件实现分层时空记忆:

  • 动态层:跟踪移动物体,带时序变化
  • 静态层:记录空间语义(这里是仓储区/这里是质检台)
  • 语义检索:基于 ChromaDB 实现自然语言位置查询("电池托盘在哪里?")
layer1 = MapLayer(subscribes_to=detections_topic, temporal_change=True)
layer2 = MapLayer(subscribes_to=room_type_topic, resolution_multiple=3)

map_encoder = MapEncoding(
    layers=[layer1, layer2],
    position=odom_topic,
    db_client=chroma_client,
    trigger=15.0,
)

3.5 语义路由:一句话自动分发到正确的 Agent

# 根据用户意图,自动路由到不同处理组件
goto_route = Route(
    routes_to=goto_query,
    samples=["去厨房", "去门口", "帮我拿个杯子"]
)
llm_route = Route(
    routes_to=llm_query,
    samples=["法国首都是哪里", "今天天气怎么样"]
)
mllm_route = Route(
    routes_to=mllm_query,
    samples=["你看到什么了", "前面有什么东西"]
)

router = SemanticRouter(
    inputs=[query_topic],
    routes=[llm_route, goto_route, mllm_route],
    default_route=llm_route,
    db_client=chroma_client,
)

四、支持的模型和工具链

类别 支持的模型 / 工具
多模态理解 Qwen2-VL、GenericMLLM(OpenAI兼容)
语言模型 Llama3、Qwen2.5、Ollama全系、RoboBrain2
VLA 策略 LeRobot(ACT、Diffusion Policy等)
语音识别 Whisper(OpenAI)
语音合成 SpeechT5、Bark、MeloTTS
目标检测 DINO-4scale、mmdet系列
向量数据库 ChromaDB
机器人中间件 ROS2 Humble+(原生支持)
边缘部署 NVIDIA Orin、Thor

五、快速上手

环境要求

  • Python 3.8+
  • ROS2 Humble 或以上
  • CUDA(可选,推荐用于本地模型推理)

安装

git clone https://github.com/hzm8341/EmbodiedAgentsSys.git
cd EmbodiedAgentsSys
pip install -r requirements.txt

运行语音示教 Demo

python examples/voice_teaching_agent.py

运行完整多模态 Agent

# 先启动 Ollama 并拉取模型
ollama pull qwen2.5vl:latest

python examples/complete_agent.py

六、目录结构

EmbodiedAgentsSys/
├── agents/                     # 核心框架
│   ├── components/             # 组件(LLM/MLLM/VLA/Vision/STT/TTS)
│   ├── clients/                # 模型客户端(Ollama/LeRobot/RoboML)
│   └── utils/                  # 工具函数
├── skills/                     # 技能库
│   ├── arm_control/            # 机械臂运动 / 夹爪 / 关节技能
│   ├── manipulation/           # 抓取规划 / 力控技能
│   ├── vision/                 # 视觉感知技能
│   ├── teaching/               # 示教录制与技能生成
│   └── agx_arm_codegen/        # LLM 代码生成技能
├── examples/                   # 完整可运行示例
│   ├── complete_agent.py       # 完整多模态 Agent
│   ├── voice_teaching_agent.py # 语音示教 Agent
│   ├── semantic_router.py      # 语义路由示例
│   └── go_to_x.py              # 导航示例
└── msg/                        # ROS2 自定义消息定义

七、设计理念

做这个框架只有一个核心原则:让算法工程师能快速把想法跑在真实机器人上,而不是陷在 ROS2 的 XML 和消息类型里。

纯 Python,不碰 XML。所有组件和 Topic 用 Python 定义,不需要写 launch 文件。

事件驱动,天然异步。感知、决策、控制运行在不同频率,互不阻塞。

模型无关。换模型只需换 Client,业务逻辑不变。本地 Ollama 和云端 API 随时切换。

Skill 化执行层。机械臂控制不是裸 API 调用,而是封装好的 Skill,有状态管理、错误处理和参数验证。


八、后续计划

  • [ ] GR00T N1.5、pi0.5 实机部署完整示例
  • [ ] Meta Quest 3 双手遥操数据采集模块完善
  • [ ] Isaac Sim 仿真环境支持
  • [ ] 工业场景 Skill 扩充(装配、质检、搬运)
  • [ ] 完整文档和视频教程

九、相关项目

如果你对 VLA 模型的训练和部署感兴趣,可以看我的另一个仓库:

vla_tutorial:手把手从 Transformer 基础到 DiffusionPolicy + DINOv2 + Qwen2-VL 组合模型的完整实践

地址:https://github.com/hzm8341/vla_tutorial


十、欢迎交流

如果你在做具身智能、工业机器人,或者对这个框架有任何想法:

  • 提 Issue:Bug 反馈或功能建议 → GitHub Issues
  • Star 支持 ⭐:如果觉得有用,点个 Star 是最大的鼓励
  • CSDN 私信:欢迎交流具身智能工程实践经验

🔗 项目地址:https://github.com/hzm8341/EmbodiedAgentsSys


作者:10年自动驾驶感知算法 + 具身智能工程实践,持续更新中。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐