学习具身智能
简介
Embodied Intelligence是智能体借助身体,在有噪声、持续变化的物理环境中,通过“感知 - 动作 - 再感知”的闭环不断修正行为,并最终完成任务的能力。
Embodied Intelligence 是data-driven + model-based的融合,核心是智能体与环境的 交互循环:感知(perception) ==> 决策(policy) ==> 执行(action)。智能体通过身体感知环境,大脑进行决策,再通过身体执行动作,动作改变了环境,从而产生新的感知,形成循环。一个拥有物理身体的智能体,在与物理世界的实时、闭环交互中,通过不断试错和学习,最终涌现出解决复杂任务的智能。
技术堆栈
具身智能的实现,不仅是单点算法的突破,更是硬件、软件、算法、应用四层深度耦合、协同进化的系统工程挑战。
- 硬件层,the body,驱动、传感、计算平台。决定了智能体物理能力上限,比如机器人跳1m还是跳1cm。
- 驱动:电机,减速器,控制器
- 传感:摄像头,编码器,力矩传感器
- 计算平台:MCU(底层控制),边缘设备,板载GPU/NPU
- 软件/系统层,the nervous system,操作系统、仿真、通信。
- 操作系统,ROS/ROS2
- 仿真环境:NVIDIA Isaac Sim
- 通信协议,DDS/Websocket/grpc
- 算法/认知层,the brain,感知、决策、规划、控制
- 感知,opencv, cnn/yolo
- 决策与规划, PPO/BC, diffusion policy
- 控制算法,PID(底层),运动学/动力学逆解,mcp
- 应用层,the purpose
- 工业自动化,分拣、装配
- 家庭服务,清洁、烹饪
- 特种作业,巡检、救援
- 医疗康复,外骨骼、护理
四大挑战
- sim-to-real gap,仿真无法完美复刻现实世界的物理细节,如摩擦、光照、材质、延迟等,比如某个电机润滑油多点少点都会有影响。
- 数据稀疏性,物理世界试错成本高(时间、金钱、设备),交互效率低,难以像互联网一样轻松获取海量数据。
- 模仿学习
- 离线强化学习
- 数据增强
- 泛化性。
- 安全性。确保与人交互时不会造成伤害或破坏。
agent
Agent的运行流程:观察环境 → 做出判断 → 执行动作 → 读取结果 → 继续判断。现在,把任务换成:“拿起桌上的纸杯,放进左边的收纳盒。”看起来仍然是同一个 Agent 循环:摄像头负责“观察”,模型负责“判断”,机械臂负责“执行”。既然大模型已经会看图、会规划、会调用工具,我们是不是只要把机械臂封装成几个 Tool,就能得到一个具身智能体?这正是很多软件工程师进入具身智能时最自然、也最容易低估问题的一步。纸杯只偏了 3 厘米,机械臂为什么就抓空了?模型已经判断出“应该向左移动”,为什么电机不能直接执行这句话?为什么一个 Coding Agent 可以思考十几秒,机械臂却可能在这十几秒里撞上桌面?
如果沿用开发 AI Agent 的经验,我们很容易设计出这样的系统:
- 摄像头拍一张桌面照片;
- 读取机械臂当前的关节角度;
- 把图像和关节角度发给多模态大模型;
- 让模型返回下一步动作,例如“夹爪向左移动 2 厘米”;
- 执行动作,重新拍照,再循环一次。 它和 Tool Calling 很像:输入上下文,选择动作,执行工具,再把执行结果放回上下文。这个方案并非完全不能工作。它甚至可能在精心布置的演示里成功几次。但当光线变了、杯子被遮住一部分、桌面有轻微反光,或者模型响应突然慢了两秒,问题就会接连出现。原因不在于“大模型还不够聪明”,而在于物理世界给 Agent 增加了四类软件世界里不那么显眼的约束。
- 看见的位置,未必就是杯子的真实位置。Coding Agent 读取一个文件时,文件里的第 42 行就是第 42 行。只要文件没有被修改,两次读取通常会得到相同的内容。它可以精确搜索函数名,可以对比 Git diff,也可以把确定的文本放进缓存。机器人无法直接读取物理世界本身,只能得到传感器采集的一次观测(observation)。同一个纸杯,在摄像头里可能因为光线、阴影、反光、遮挡和相机噪声呈现出不同的像素;机械臂的编码器能告诉你关节转了多少,却不能直接告诉你夹爪是否已经把杯子夹稳;杯子看似没有移动,也可能在接触瞬间发生了轻微滑动。输入不再是精确、完整的状态,而是对真实状态的不完整估计;
- 发出“抓取”指令之后,谁来完成这段动作?对普通 AI Agent 来说,一个动作往往是离散的:调用搜索工具;读取一个文件;执行一条测试命令;向数据库写入一条记录。工具名、参数和返回值都可以被清楚地定义。只要 JSON 合法、权限正确,工具就能开始工作。但“拿起纸杯”并不是一个瞬间完成的函数调用。它至少包含:靠近纸杯 → 调整夹爪姿态 → 对准抓取位置 → 张开夹爪 → 前进 → 闭合 → 判断是否夹稳 → 抬起。每一步都包含多个关节在一段时间内的连续运动,无法压缩成一次简单的“成功或失败”。前一时刻的速度、位置和接触状态,会影响后一时刻应该做什么。
- 模型还在思考,机械臂怎么办?Coding Agent 思考 5 秒还是 15 秒,主要影响的是用户等待时间。只要代码仓库没有同时被别人修改,它面对的环境大体还停留在原处。机器人没有这个条件。夹爪碰到杯子的瞬间,杯子可能继续滑动;传送带上的物体不会因为模型还在推理就停下来。大语言模型擅长理解目标、分解任务和处理异常,但它的推理延迟通常比底层运动控制慢得多,而且会随输入长度和模型负载波动。因此,可靠的具身系统通常采用分层运行:
- 任务规划层:理解“把纸杯收进盒子”这样的目标,决定先做什么、后做什么;
- 技能或策略层:根据图像和机器人状态,生成抓取、放置等短时间动作;
- 控制与安全层:以更稳定的频率执行电机控制、限制速度与关节范围,并处理急停。 你可以把它理解成软件架构里的“慢思考 + 快执行”:大模型负责秒级的规划,策略模型负责更快的感知 - 动作闭环,底层控制器负责稳定执行和兜底。所以,“ChatGPT 能不能控制机械臂”并不是一个简单的是非题。它当然可以理解任务、调用已经封装好的机器人技能,甚至根据现场情况重新规划;但让通用大模型逐帧输出原始电机指令,通常既不经济,也不稳定,更不安全。
- 抓空以后,下一次尝试从哪里开始?AI Coding Agent 改错了代码,可以撤销 diff;命令执行失败,可以修正参数后重试;测试环境被弄乱了,还可以重新启动容器。机械臂抓错一次,现场状态已经改变:杯子可能倒了,液体可能洒出;目标物可能被推到了摄像头看不见的位置;夹爪可能把柔软物体压坏;机械臂可能碰到人、桌面或另一台设备。物理动作并非都绝对不可逆,但它们通常没有软件世界里那种低成本、完全一致的回滚。失败之后,机器人面对的是一个新的环境,而不是原任务的原始快照。因此,具身系统不能只设计“成功路径”,还要同时设计:
- 安全边界:关节、速度、力矩和工作空间限制;
- 失败检测:是否抓空、滑落、遮挡或发生碰撞;
- 恢复策略:失败后退回哪里,是否重新观察,何时需要人工介入;
- 环境重置:训练和评测时,怎样让下一次尝试从可比较的状态开始。
留下评论