从云端到实体:基于LLM与ROS 2的机器人任务规划与执行全栈实践

📅 2026/8/24 20:16:41
从云端到实体:基于LLM与ROS 2的机器人任务规划与执行全栈实践
在今年的世界机器人大会WRC上一个展台因其展示的技术深度和未来感吸引了大量开发者和行业人士的关注。这个展台的核心并非单一的炫酷机器人而是展示了一套完整的、面向未来的机器人开发与部署范式。它清晰地呈现了从云端模型训练、边缘计算部署到实体机器人协同作业的完整技术栈让开发者看到了如何将前沿的AI能力特别是大语言模型LLM与具身智能Embodied AI结合落地到实际的机器人控制场景中。对于从事AI、机器人、边缘计算和物联网IoT的开发者而言理解这套技术栈的构成、通信协议和集成难点是迈向下一代智能体开发的关键一步。本文将从一线工程视角拆解这套“未来展台”背后可能的技术架构。我们将聚焦于几个核心工程问题如何为机器人构建一个能理解自然语言指令的“大脑”LLM集成如何设计一个稳定、低延迟的“神经系统”通信与中间件以及如何让机器人的“四肢”精准执行大脑的规划运动控制与任务分解。我们将通过一个模拟的机器人咖啡师项目展示从环境搭建、模型服务部署、通信桥接到最终任务执行的完整闭环。虽然无法复现展台的全部细节但本文将提供一个可实践、可扩展的技术框架和排错思路帮助你在自己的开发环境中构建类似的智能体原型。1. 理解核心架构云边端协同与任务分解链在深入代码之前必须理解现代机器人智能体的典型分层架构。展台所展示的“未来感”很大程度上源于对“感知-规划-执行”经典范式的升级其核心是将大语言模型作为高级任务规划器并与底层的感知、控制系统解耦。1.1 从单体控制到分层智能体架构传统的机器人程序往往是“硬编码”的针对“抓取红色积木”这个任务程序员需要精确编写相机识别红色、计算坐标、规划机械臂路径、执行抓取等一系列指令。这种方式僵硬、难以适应新任务。而新的架构引入了“任务分解”和“自然语言接口”。在这个架构中大语言模型LLM扮演了“任务规划器”和“高级指令解析器”的角色。当用户说“请帮我做一杯拿铁咖啡”时LLM不会直接控制电机而是将这个抽象指令分解成一系列具体的、可执行的子任务步骤例如1. 移动到咖啡机前2. 拿起咖啡杯3. 按下浓缩咖啡键4. 移动到牛奶罐前5. 打奶泡6. 混合。每一步都是一个原子操作。1.2 云边端各司其职为了实现上述流程系统通常分为三层云端Cloud负责运行计算密集型的LLM推理服务。它接收自然语言指令进行任务分解和步骤生成。优势是算力强大模型更新方便。劣势是网络延迟和稳定性问题。边缘端/机器人本体Edge/Robot部署着机器人的“本能”和“反射”。它包含技能库Skill Library预定义好的原子动作如move_to(position),grab(object_id),pour(container, duration)。这些技能由传统机器人程序如ROS节点实现稳定可靠。低级控制器直接驱动电机、读取传感器数据的实时系统。状态管理器维护机器人和环境的最新状态如自身位置、物体位置。通信层Middleware连接云和边传递结构化指令和状态信息。常用方案包括ROS 2DDS、MQTT、gRPC或WebSocket。选择取决于对实时性、可靠性和复杂性的要求。这个架构的关键在于解耦LLM负责高级的、开放的语义理解而边缘的技能库负责低级的、确定性的物理控制。两者通过定义良好的接口API进行对话。2. 环境准备与依赖配置要构建一个模拟的演示项目我们需要搭建一个包含LLM服务、机器人模拟器和通信桥接的混合环境。以下配置基于一个Linux开发环境Ubuntu 20.04/22.04但核心概念适用于其他平台。2.1 基础软件环境首先确保系统具备基础的开发工具和Python环境。# 更新系统包 sudo apt update sudo apt upgrade -y # 安装Python3, pip及虚拟环境工具 sudo apt install python3 python3-pip python3-venv -y # 创建项目目录并进入 mkdir future_robot_demo cd future_robot_demo # 创建Python虚拟环境并激活 python3 -m venv venv source venv/bin/activate2.2 LLM服务部署本地与云端选项运行LLM需要较强的算力。对于开发和演示我们有几种选择方案A使用云端API快速启动需网络和费用这是最简单的方式直接调用如OpenAI、DeepSeek、智谱AI等提供的API。你需要注册并获取API Key。# 安装OpenAI Python SDK (或其他对应SDK) pip install openai方案B本地部署轻量级模型隐私性好对硬件有要求可以使用Ollama、LM Studio或vLLM等工具在本地运行量化后的模型如Qwen2.5-7B-Instruct、Llama-3.2-3B。# 以Ollama为例首先安装Ollama curl -fsSL https://ollama.com/install.sh | sh # 拉取并运行一个轻量模型 ollama pull qwen2.5:7b ollama run qwen2.5:7b # 此时会在本地11434端口启动一个兼容OpenAI API的服务器2.3 机器人模拟环境Gazebo与ROS 2为了模拟机器人的物理行为和技能我们使用ROS 2和Gazebo。ROS 2提供了机器人中间件Gazebo提供了3D物理仿真环境。# 1. 设置ROS 2 Apt仓库以Humble Hawksbill为例 sudo apt install software-properties-common sudo add-apt-repository universe sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release echo $UBUNTU_CODENAME) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null # 2. 安装ROS 2基础包和Gazebo插件 sudo apt update sudo apt install ros-humble-desktop python3-colcon-common-extensions ros-humble-gazebo-ros-pkgs -y # 3. 配置环境变量每次新终端都需要执行 source /opt/ros/humble/setup.bash2.4 项目依赖安装在我们的项目虚拟环境中安装必要的Python包用于桥接LLM和ROS 2。# 确保在虚拟环境中 source venv/bin/activate # 安装核心依赖 pip install openai # 如果使用云端API pip install requests pip install pydantic # 用于结构化数据验证 # 安装ROS 2的Python客户端库必须在ROS 2环境之后 pip install rosbags rosbag2_py # 注意ros2的rclpy通常随ROS 2桌面版安装这里pip安装可能不完整主要依赖系统安装。3. 构建一个模拟的机器人咖啡师项目我们将创建一个简化项目模拟一个机械臂完成“制作咖啡”指令的过程。项目结构如下future_robot_demo/ ├── llm_task_planner/ # LLM任务规划模块 │ ├── planner.py │ └── schemas.py ├── robot_skill_server/ # 机器人技能服务模拟 │ ├── skill_server.py │ └── skills.py ├── bridge/ # 通信桥接模块 │ └── mqtt_bridge.py ├── config/ # 配置文件 │ └── config.yaml ├── launch/ # ROS 2启动文件 │ └── sim_world.launch.py └── scripts/ └── run_demo.py3.1 步骤一定义任务规划的数据结构首先我们需要定义LLM和机器人技能服务器之间通信的“语言”。使用Pydantic模型来确保数据结构的有效性。llm_task_planner/schemas.py:from pydantic import BaseModel, Field from typing import List, Optional from enum import Enum class SkillType(str, Enum): MOVE_TO “move_to” GRAB “grab” RELEASE “release” PRESS_BUTTON “press_button” POUR “pour” WAIT “wait” class SkillParam(BaseModel): 技能参数模型 name: str Field(description“参数名”) value: str Field(description“参数值”) class RobotSkill(BaseModel): 一个原子技能指令 skill_name: SkillType Field(description“技能类型”) parameters: List[SkillParam] Field(default_factorylist, description“技能参数列表”) description: str Field(description“该步骤的自然语言描述”) class TaskPlan(BaseModel): LLM生成的任务计划 original_instruction: str Field(description“原始用户指令”) steps: List[RobotSkill] Field(description“分解后的技能步骤序列”) assumptions: Optional[List[str]] Field(default_factorylist, description“LLM做出的假设”)这个数据结构是连接“智能”与“控制”的桥梁。RobotSkill对应机器人技能库里的一个原子函数。3.2 步骤二实现LLM任务规划器规划器接收自然语言指令调用LLM并返回结构化的TaskPlan。llm_task_planner/planner.py:import openai # 或使用其他LLM SDK from .schemas import TaskPlan, SkillType, RobotSkill, SkillParam import yaml import json from typing import List import os class LLMTaskPlanner: def __init__(self, config_path: str): with open(config_path, ‘r’) as f: config yaml.safe_load(f) self.llm_config config[‘llm’] self.available_skills self._load_skills_description(config[‘robot_skills’]) def _load_skills_description(self, skills_config: dict) - str: 将可用的机器人技能描述成文本用于提示词。 desc “The robot has the following primitive skills:\n” for skill_name, skill_info in skills_config.items(): desc f“- {skill_name}: {skill_info[‘description’]}. Parameters: {‘, ‘.join(skill_info[‘parameters’])}\n” return desc def plan(self, user_instruction: str) - TaskPlan: 核心规划方法调用LLM分解任务。 prompt f“”” 你是一个机器人任务规划器。请将用户指令分解为一系列机器人可执行的原子技能。 {self.available_skills} 用户指令{user_instruction} 请严格按照以下JSON格式输出不要有任何额外解释 {{ “original_instruction”: “用户指令原文”, “steps”: [ {{ “skill_name”: “技能枚举值如 move_to”, “parameters”: [{{“name”: “参数1名”, “value”: “参数1值”}}, ...], “description”: “该步骤的描述” }} ], “assumptions”: [“假设1”, “假设2”] }} “”” # 调用LLM API if self.llm_config[‘type’] ‘openai’: client openai.OpenAI(api_keyself.llm_config[‘api_key’], base_urlself.llm_config.get(‘base_url’)) response client.chat.completions.create( modelself.llm_config[‘model’], messages[{“role”: “user”, “content”: prompt}], temperature0.1, # 低温度保证输出稳定性 response_format{“type”: “json_object”} # 要求返回JSON ) result_json json.loads(response.choices[0].message.content) elif self.llm_config[‘type’] ‘ollama’: # 调用本地Ollama服务 import requests resp requests.post( ‘http://localhost:11434/api/generate’, json{ “model”: self.llm_config[‘model’], “prompt”: prompt, “stream”: False, “format”: “json” # Ollama也支持格式约束 } ) result_json json.loads(resp.json()[‘response’]) else: raise ValueError(f“Unsupported LLM type: {self.llm_config[‘type’]}”) # 将JSON解析为Pydantic模型进行验证 task_plan TaskPlan(**result_json) return task_plan if __name__ “__main__”: # 测试 planner LLMTaskPlanner(‘../config/config.yaml’) plan planner.plan(“请制作一杯拿铁咖啡”) print(plan.json(indent2))3.3 步骤三模拟机器人技能服务器技能服务器是一个模拟服务它接收RobotSkill指令并“执行”它在真实场景中这里会调用ROS 2的action或service。robot_skill_server/skill_server.py:from fastapi import FastAPI, HTTPException from pydantic import BaseModel from .skills import SkillExecutor import uvicorn from llm_task_planner.schemas import RobotSkill app FastAPI(title“Robot Skill Server”) executor SkillExecutor() class SkillExecutionRequest(BaseModel): skill: RobotSkill task_id: str class SkillExecutionResponse(BaseModel): success: bool message: str task_id: str app.post(“/execute”, response_modelSkillExecutionResponse) async def execute_skill(request: SkillExecutionRequest): “”“执行一个原子技能”“” try: result executor.execute(request.skill) return SkillExecutionResponse( successTrue, messagef“Skill {request.skill.skill_name} executed successfully. {result}”, task_idrequest.task_id ) except Exception as e: return SkillExecutionResponse( successFalse, messagef“Failed to execute skill {request.skill.skill_name}: {str(e)}”, task_idrequest.task_id ) app.get(“/health”) async def health(): return {“status”: “ok”} if __name__ “__main__”: uvicorn.run(app, host“0.0.0.0”, port8000)robot_skill_server/skills.py:import time from llm_task_planner.schemas import RobotSkill, SkillType class SkillExecutor: 模拟技能执行器。真实场景中这里会调用ROS 2的MoveIt!、导航栈等。 def execute(self, skill: RobotSkill) - str: print(f“[SkillExecutor] Executing: {skill.skill_name} with params {skill.parameters}”) time.sleep(1) # 模拟执行耗时 if skill.skill_name SkillType.MOVE_TO: location next((p.value for p in skill.parameters if p.name “location”), “unknown”) return f“Moved to {location}” elif skill.skill_name SkillType.GRAB: object_id next((p.value for p in skill.parameters if p.name “object”), “unknown”) return f“Grabbed {object_id}” elif skill.skill_name SkillType.PRESS_BUTTON: button next((p.value for p in skill.parameters if p.name “button”), “espresso”) return f“Pressed {button} button” elif skill.skill_name SkillType.POUR: duration next((p.value for p in skill.parameters if p.name “duration”), “3s”) return f“Poured for {duration}” elif skill.skill_name SkillType.WAIT: duration next((p.value for p in skill.parameters if p.name “duration”), “2s”) return f“Waited for {duration}” else: raise ValueError(f“Unknown skill: {skill.skill_name}”)3.4 步骤四配置与通信桥接我们需要一个配置文件来统一管理LLM参数和技能描述以及一个桥接模块来串联规划器和执行器。这里使用简单的HTTP调用作为桥接。config/config.yaml:llm: type: “ollama” # 可选 “openai” model: “qwen2.5:7b” api_key: “your-api-key-if-needed” # OpenAI需要 base_url: “http://localhost:11434/v1” # Ollama的OpenAI兼容端点 robot_skills: move_to: description: “Move the robot arm to a predefined location (e.g., coffee_machine, milk_jug, cup_rack).” parameters: [“location”] grab: description: “Grab an object with the gripper.” parameters: [“object”] release: description: “Release the gripper.” parameters: [] press_button: description: “Press a button on a device (e.g., espresso button).” parameters: [“button”] pour: description: “Pour liquid for a specified duration.” parameters: [“duration”] wait: description: “Wait for a specified duration.” parameters: [“duration”]bridge/simple_bridge.py:import requests import time from llm_task_planner.planner import LLMTaskPlanner from llm_task_planner.schemas import TaskPlan class TaskExecutionBridge: def __init__(self, planner: LLMTaskPlanner, skill_server_url: str “http://localhost:8000”): self.planner planner self.skill_server_url skill_server_url def execute_instruction(self, user_instruction: str): “”“主流程规划 - 按序执行”“” print(f“[Bridge] Received instruction: ‘{user_instruction}’”) # 1. 规划 print(“[Bridge] Planning with LLM...”) task_plan: TaskPlan self.planner.plan(user_instruction) print(f“[Bridge] Plan generated with {len(task_plan.steps)} steps.”) print(task_plan.json(indent2)) # 2. 顺序执行 task_id f“task_{int(time.time())}” for i, step in enumerate(task_plan.steps): print(f“[Bridge] Executing step {i1}: {step.description}”) resp requests.post( f“{self.skill_server_url}/execute”, json{“skill”: step.dict(), “task_id”: task_id}, timeout30 ) if resp.status_code 200: result resp.json() if result[‘success’]: print(f“ - Success: {result[‘message’]}”) else: print(f“ - Failed: {result[‘message’]}”) # 简单错误处理停止任务 print(“[Bridge] Task execution halted due to failure.”) break else: print(f“ - HTTP Error: {resp.status_code}”) break time.sleep(0.5) # 步骤间短暂间隔 print(“[Bridge] Task execution finished.”)3.5 步骤五编写演示脚本并运行最后我们创建一个主脚本来启动整个流程。scripts/run_demo.py:#!/usr/bin/env python3 import sys import os sys.path.append(os.path.join(os.path.dirname(__file__), ‘..’)) from llm_task_planner.planner import LLMTaskPlanner from bridge.simple_bridge import TaskExecutionBridge import subprocess import time import threading def start_skill_server(): “”“在一个子进程中启动技能服务器”“” server_process subprocess.Popen( [sys.executable, ‘-m’, ‘robot_skill_server.skill_server’], cwdos.path.join(os.path.dirname(__file__), ‘..’) ) return server_process def main(): # 0. 启动技能服务器模拟 print(“Starting simulated robot skill server...”) server_proc start_skill_server() time.sleep(2) # 等待服务器启动 # 1. 初始化规划器和桥接器 config_path os.path.join(os.path.dirname(__file__), ‘..’, ‘config’, ‘config.yaml’) planner LLMTaskPlanner(config_path) bridge TaskExecutionBridge(planner) # 2. 执行示例指令 instructions [ “请制作一杯拿铁咖啡”, # “把杯子放到桌子上” # 可以测试更多指令 ] for instr in instructions: try: bridge.execute_instruction(instr) print(“\n” “”*50 “\n”) except Exception as e: print(f“Error processing instruction ‘{instr}’: {e}”) # 3. 清理 server_proc.terminate() server_proc.wait() print(“Demo finished.”) if __name__ “__main__”: main()4. 运行验证与结果分析在项目根目录下按顺序执行以下步骤进行验证。4.1 启动LLM服务如果使用本地Ollama如果你选择方案B本地Ollama首先确保模型已下载并运行。# 在一个终端中启动Ollama服务如果尚未运行 ollama run qwen2.5:7b # 保持此终端运行4.2 运行演示脚本在另一个终端中激活虚拟环境并运行主脚本。cd future_robot_demo source venv/bin/activate python scripts/run_demo.py4.3 预期输出与分析脚本运行后你将在控制台看到类似以下的输出Starting simulated robot skill server... [Bridge] Received instruction: ‘请制作一杯拿铁咖啡’ [Bridge] Planning with LLM... [Bridge] Plan generated with 6 steps. { “original_instruction”: “请制作一杯拿铁咖啡”, “steps”: [ { “skill_name”: “move_to”, “parameters”: [{“name”: “location”, “value”: “cup_rack”}], “description”: “移动到杯子架取一个杯子” }, { “skill_name”: “grab”, “parameters”: [{“name”: “object”, “value”: “cup”}], “description”: “抓住杯子” }, { “skill_name”: “move_to”, “parameters”: [{“name”: “location”, “value”: “coffee_machine”}], “description”: “移动到咖啡机前” }, { “skill_name”: “press_button”, “parameters”: [{“name”: “button”, “value”: “espresso”}], “description”: “按下意式浓缩咖啡按钮” }, { “skill_name”: “move_to”, “parameters”: [{“name”: “location”, “value”: “milk_jug”}], “description”: “移动到牛奶罐前” }, { “skill_name”: “pour”, “parameters”: [{“name”: “duration”, “value”: “5s”}], “description”: “倒入牛奶” } ], “assumptions”: [“咖啡机已开机并有咖啡豆和水”, “牛奶罐中有牛奶”, “杯子是干净的”] } [Bridge] Executing step 1: 移动到杯子架取一个杯子 [SkillExecutor] Executing: move_to with params [SkillParam(name‘location’, value‘cup_rack’)] - Success: Skill move_to executed successfully. Moved to cup_rack [Bridge] Executing step 2: 抓住杯子 [SkillExecutor] Executing: grab with params [SkillParam(name‘object’, value‘cup’)] - Success: Skill grab executed successfully. Grabbed cup ... [Bridge] Task execution finished.输出分析规划阶段LLM成功将“制作拿铁咖啡”分解为6个原子技能步骤步骤顺序基本符合逻辑。LLM还输出了其做出的assumptions这对于安全性和人机交互至关重要。执行阶段桥接器按顺序调用技能服务器技能服务器模拟执行并返回成功信息。整个流程串联成功。关键成功点自然语言指令被转化为了结构化的、机器可执行的计划并通过定义良好的接口在模拟系统中流转。5. 常见问题排查与优化在实际集成中你会遇到比演示复杂得多的问题。以下是基于此架构的典型问题排查清单。5.1 LLM规划阶段问题问题现象可能原因检查与解决方式LLM返回非JSON格式或格式错误。1. 提示词未强制要求JSON格式。2. 模型能力不足或温度参数过高。3. 网络超时或API调用失败。1. 在提示词中明确要求JSON格式并使用SDK的response_format参数如OpenAI支持。2. 降低temperature如0.1使用更强大的模型或在提示词中提供更详细的输出示例。3. 检查网络连接、API Key和配额增加超时时间。规划步骤不合理或不符合物理约束。1. 技能描述available_skills不够清晰或不全。2. LLM缺乏领域知识。3. 未提供环境状态如物体位置。1. 细化技能描述包括前置条件、后置条件和参数约束。2. 在提示词中加入领域知识如“咖啡机需要先预热”。3. 将当前环境状态通过感知模块获取作为上下文输入给LLM。规划速度慢。1. 模型太大或云端API延迟高。2. 提示词过长。1. 考虑使用更小的量化模型本地部署或选择低延迟的API服务商。2. 精简提示词或将技能库描述缓存起来不必每次发送。5.2 通信与执行阶段问题问题现象可能原因检查与解决方式技能服务器调用失败HTTP错误。1. 技能服务器未启动或端口被占用。2. 网络问题或防火墙。3. 请求/响应数据结构不匹配。1. 检查技能服务器进程和日志netstat -tlnp | grep 8000。2. 使用curl或Postman手动测试/execute和/health端点。3. 对比SkillExecutionRequest模型和服务器端接收代码确保字段名和类型一致。技能执行顺序错误或产生竞态。桥接器是简单的顺序执行未考虑技能间的依赖和状态。1. 引入状态机确保上一个技能成功后才执行下一个。2. 为技能增加前置条件检查在执行前验证环境状态是否满足。3. 对于可并行技能引入任务队列和并发控制。模拟执行成功但真实机器人不动。模拟技能执行器SkillExecutor未与真实机器人控制器如ROS 2节点连接。1. 将SkillExecutor.execute方法中的print和time.sleep替换为对真实ROS 2 Service或Action的调用。2. 确保ROS 2网络配置正确多机时设置ROS_DOMAIN_ID。3. 检查真实机器人驱动是否正常电机是否上使能。5.3 系统集成与稳定性问题问题现象可能原因检查与解决方式系统偶尔崩溃错误信息不明。缺乏异常处理和重试机制。1. 在桥接器调用LLM和技能服务器时添加重试逻辑如tenacity库。2. 对LLM的输出进行严格的JSON解析验证和业务逻辑验证如步骤数不能为0。3. 添加全局异常捕获和日志记录。无法处理用户中途指令变更。架构是单向流水线未设计中断和状态重置机制。1. 为任务执行引入一个可查询、可取消的管理器。2. 设计一个“急停”技能并允许LLM在收到“停止”指令时插入该技能到执行队列。技能参数不精确如“移动一点”。LLM生成的参数是符号化的如location: coffee_machine需要映射到具体坐标。1. 维护一个“符号位置-实际坐标”的查找表。2. 引入视觉伺服或定位系统将符号参数实时转化为具体坐标。6. 从演示到生产最佳实践与扩展方向演示项目仅揭示了冰山一角。要将此架构用于实际生产或复杂研究必须考虑以下方面。6.1 通信中间件升级演示中使用了简单的HTTP这在生产环境中可能不够可靠。使用ROS 2推荐用于机器人将技能服务实现为ROS 2的Action Server。Action支持目标、反馈、结果和取消非常适合耗时较长的机器人技能。桥接器则作为ROS 2 Node通过Action Client调用技能。使用消息队列如RabbitMQ, Redis Streams在云边异步通信场景下消息队列能更好地解耦、缓冲和保证消息可达性。使用gRPC如果需要高性能、强类型的跨语言通信gRPC是比REST HTTP更好的选择。6.2 引入状态管理与闭环当前的架构是开环的LLM规划基于假设执行结果不影响后续规划。状态观测建立一个集中的“世界状态”服务持续从传感器、相机、机器人关节读取数据并维护一个统一的、符号化的状态表示如cup_is_on_table: true,arm_is_busy: false。闭环规划将当前世界状态作为输入的一部分提供给LLM使其能进行条件判断和重新规划。例如如果抓取杯子失败状态变为cup_is_grabbed: falseLLM可以规划重试或报错步骤。技能反馈技能执行后不仅返回成功/失败还应返回执行结果如实际抓取到的物体ID、移动到的精确位置用于更新世界状态。6.3 安全性与可靠性设计机器人物理操作必须安全第一。技能前置/后置条件检查在执行move_to前检查目标位置是否可达、是否与障碍物碰撞。LLM输出审核与过滤设计一个“安全层”对LLM生成的计划进行过滤。例如禁止生成包含“快速移动”、“用力拍打”等可能危险参数的技能或者将速度、力限等参数限制在安全范围内。人工监督与急停必须保留最高优先级的人工急停通道并能安全地停止所有执行中的技能。超时与看门狗为每个技能设置执行超时并为整个任务设置看门狗计时器防止系统因某个技能卡死而失控。6.4 性能优化方向规划缓存对于常见的指令如“做咖啡”其任务计划可以缓存避免每次调用LLM。分层规划非常复杂的任务可以分层处理高层LLM进行粗粒度规划底层专用模型或规则系统进行细粒度规划。边缘推理将轻量化的任务理解或状态判断模型部署在边缘减少对云端LLM的依赖和网络延迟。这个由LLM作为“大脑”传统机器人系统作为“小脑”和“四肢”的架构代表了当前具身智能落地的一条务实路径。它既利用了LLM强大的泛化理解和规划能力又依靠了经过数十年验证的、可靠的机器人控制技术。展台所展示的“未来”正是这种分层、解耦、协同的工程化思维。从本文的演示项目出发你可以沿着通信、状态、安全、性能这几个维度不断深化逐步构建出真正能解决实际问题的智能机器人系统。