机器人的“大脑”:具身智能决策系统架构
系列导读
欢迎来到《具身智能与人形机器人——从原理到实战》系列的第4篇。前几篇文章中,我们探讨了具身智能的概念(第1篇),拆解了机器人的核心硬件(第2篇),并深入研究了运动控制这个“小脑”(第3篇)。今天,我们将目光投向机器人的**“大脑”——决策系统架构。如果说硬件是身体、控制是小脑,那么大脑就是负责理解环境、做出决策、规划行动的核心。我们将详细讲解感知-规划-控制闭环的工作原理,并介绍当前机器人领域的事实标准——ROS2与行为树**,让你对机器人软件架构有一个全景式的认识。
1. 引言:从“能动的机器”到“智能的机器人”
在上一篇文章中,我们学会了如何让机器人稳定站立、平稳行走——这是“能动”的基础。但是,一个能走的机器人还不算“智能”。真正的智能体现在:
- 它能不能理解自己身处何地?(厨房、客厅还是工厂?)
- 它能不能听懂指令?(“去拿桌子上的苹果”)
- 它能不能规划路径?(绕过地上的玩具,而不是直接碾过去)
- 它能不能处理意外?(苹果被拿走了,怎么办?)
所有这些能力,都需要一个强大的“大脑”来支撑。这个大脑不是单一的算法,而是一整套软件架构,它将感知、决策、规划、控制等模块有机地组织起来,协同工作。
今天,我们就来拆解这个架构。
2. 感知-规划-控制闭环:机器人的核心循环
任何智能机器人的核心工作流程都可以概括为一个闭环:
传感器数据 世界模型 目标指令 ↓ ↓ ↓ [ 感 知 ] → [ 理 解 ] → [ 规 划 ] → [ 控 制 ] → 执行器 ↑ ↓ └───────────────────────────────────────┘ 反馈循环这个闭环包含三个核心环节:
2.1 感知(Perception)
任务:将原始传感器数据转化为有意义的语义信息。
输入:摄像头图像、激光雷达点云、IMU数据、关节编码器、力矩传感器等。
输出:
- 物体检测与识别(“那里有一个红色的苹果”)
- 机器人自身定位(“我在厨房的冰箱前面”)
- 环境地图构建(“前方有障碍物”)
- 人体姿态估计(“那个人伸出了手”)
关键技术:计算机视觉(CNN、Transformer)、SLAM(同步定位与地图构建)、多传感器融合。
2.2 规划(Planning)
任务:基于感知结果和目标任务,生成行动序列。
输入:
- 当前环境状态(物体位置、障碍物、地形)
- 机器人自身状态(位置、姿态、剩余电量)
- 高层任务指令(“把苹果拿到桌子上”)
输出:一系列离散的动作或连续的轨迹。
三个层次:
- 任务规划:将高层指令分解为子任务序列(如“走向桌子”→“抓取苹果”→“走向桌子”→“放置苹果”)
- 路径规划:在环境中规划无碰撞的移动路径(A*、RRT、Dijkstra)
- 运动规划:生成具体的关节轨迹(插值、优化)
2.3 控制(Control)
任务:将规划出的轨迹转化为具体的电机力矩指令。
输入:期望的关节位置/速度/力矩。
输出:PWM占空比、电流指令。
关键技术:PID控制、计算力矩控制、模型预测控制(MPC)、阻抗控制。
我们在第3篇文章中详细讨论的就是这一层。
2.4 闭环的意义
这个循环的关键在于“闭环”二字:
- 控制执行后,新的传感器数据会立即反馈给感知模块
- 如果抓取时苹果滑落了,感知模块会发现“手里空了”,规划模块需要重新规划抓取动作
- 如果路径被突然出现的人挡住,感知模块会更新障碍物信息,规划模块重新规划路径
正是这种持续不断的循环,让机器人能够适应动态变化的真实世界。
3. ROS2:机器人操作系统的“事实标准”
要实现上述闭环,我们需要一个通信框架来连接各个模块。这就是ROS(Robot Operating System)的用武之地。
3.1 什么是ROS?
ROS不是真正的操作系统,而是一个分布式通信框架,它让机器人的各个模块(感知、规划、控制)能够像微服务一样独立运行、互相通信。
核心概念:
- 节点(Node):每个功能模块都是一个节点(如“相机驱动节点”“目标检测节点”“路径规划节点”)
- 话题(Topic):节点之间通过话题发布/订阅数据流(如“/camera/image”话题发布图像数据)
- 服务(Service):请求-响应的同步通信模式
- 动作(Action):用于长时间执行的任务(如“导航到目标点”),支持进度反馈和取消
3.2 ROS1 vs. ROS2
2026年的今天,ROS2已经成为主流。它与ROS1的关键区别在于:
| 特性 | ROS1 | ROS2 |
|---|---|---|
| 通信中间件 | 自定义TCPROS/UDPROS | DDS(数据分发服务) |
| 实时性支持 | 有限 | 原生支持实时内核 |
| 多机器人支持 | 困难 | 原生支持 |
| 安全性 | 无 | 支持加密、认证 |
| 跨平台 | Linux为主 | Linux、Windows、macOS、RTOS |
| 生命周期 | 2025年5月停止维护 | 持续演进 |
DDS的引入是ROS2最大的变革。DDS是一种发布-订阅中间件标准,具备以下优势:
- 去中心化:没有ROS1的“主节点”,避免单点故障
- QoS策略:可以配置通信质量(可靠/尽力而为、持久化等)
- 自动发现:节点自动发现彼此,无需配置IP
3.3 典型ROS2系统架构
一个完整的人形机器人ROS2系统可能包含以下节点:
[硬件层] ├── /camera_node # 相机驱动,发布 /camera/image_raw ├── /lidar_node # 激光雷达驱动,发布 /scan ├── /imu_node # IMU驱动,发布 /imu/data ├── /joint_state_node # 关节状态,发布 /joint_states └── /motor_controller_node # 电机控制,订阅 /joint_commands [感知层] ├── /object_detection_node # 目标检测,订阅 /camera/image_raw,发布 /detected_objects ├── /slam_node # SLAM建图定位,订阅 /scan /imu,发布 /map /pose └── /human_pose_node # 人体姿态估计,订阅 /camera/image_raw,发布 /human_poses [规划层] ├── /navigation_node # 路径规划,订阅 /map /pose /goal,发布 /path ├── /task_planner_node # 任务规划,订阅 /detected_objects /goal,发布 /action_sequence └── /arm_planner_node # 机械臂运动规划,订阅 /action_sequence,发布 /arm_trajectory [控制层] ├── /walking_controller_node # 步态控制,订阅 /path /imu,发布 /joint_commands └── /arm_controller_node # 手臂控制,订阅 /arm_trajectory,发布 /joint_commands [交互层] ├── /speech_recognition_node # 语音识别,发布 /voice_command ├── /tts_node # 语音合成,订阅 /response_text └── /gui_node # 可视化界面这些节点通过DDS进行通信,可以分布在不同的计算机上(例如感知层在边缘AI芯片上运行,控制层在实时内核上运行)。
3.4 ROS2开发快速上手
安装ROS2(以Humble Hawksbill为例):
# 设置localesudoaptupdate&&sudoaptinstalllocalessudolocale-gen en_US en_US.UTF-8# 添加ROS2源sudoaptinstallsoftware-properties-commonsudoadd-apt-repository universesudoaptupdate&&sudoaptinstallcurl-ysudocurl-sSLhttps://raw.githubusercontent.com/ros/rosdistro/master/ros.key-o/usr/share/keyrings/ros-archive-keyring.gpg# 安装ROS2sudoaptupdatesudoaptinstallros-humble-desktop创建一个简单的发布-订阅节点(Python):
# publisher.pyimportrclpyfromrclpy.nodeimportNodefromstd_msgs.msgimportStringclassMinimalPublisher(Node):def__init__(self):super().__init__('minimal_publisher')self.publisher=self.create_publisher(String,'topic',10)timer_period=0.5# secondsself.timer=self.create_timer(timer_period,self.timer_callback)self.i=0deftimer_callback(self):msg=String()msg.data=f'Hello World:{self.i}'self.publisher.publish(msg)self.get_logger().info(f'Publishing:{msg.data}')self.i+=1defmain(args=None):rclpy.init(args=args)minimal_publisher=MinimalPublisher()rclpy.spin(minimal_publisher)minimal_publisher.destroy_node()rclpy.shutdown()if__name__=='__main__':main()# subscriber.pyimportrclpyfromrclpy.nodeimportNodefromstd_msgs.msgimportStringclassMinimalSubscriber(Node):def__init__(self):super().__init__('minimal_subscriber')self.subscription=self.create_subscription(String,'topic',self.listener_callback,10)self.subscription# prevent unused variable warningdeflistener_callback(self,msg):self.get_logger().info(f'I heard:{msg.data}')defmain(args=None):rclpy.init(args=args)minimal_subscriber=MinimalSubscriber()rclpy.spin(minimal_subscriber)minimal_subscriber.destroy_node()rclpy.shutdown()if__name__=='__main__':main()运行:
# 终端1ros2 run my_package publisher# 终端2ros2 run my_package subscriber4. 行为树:组织复杂行为的利器
有了ROS2作为通信骨架,我们还需要一个行为组织框架来管理机器人的复杂任务流程。传统的有限状态机(FSM)在面对复杂行为时,会陷入“状态爆炸”的困境。于是,**行为树(Behavior Tree)**应运而生。
4.1 什么是行为树?
行为树是一种用于控制任务切换的树状结构,最初源于游戏AI,现在已成为机器人复杂行为建模的标准工具。它的核心思想是:将复杂任务分解为一系列简单、可复用的行为节点,通过组合节点控制执行流。
4.2 行为树 vs. 有限状态机
| 特性 | 有限状态机(FSM) | 行为树(BT) |
|---|---|---|
| 结构 | 平面化的状态转移图 | 层次化的树状结构 |
| 复用性 | 状态难以复用 | 节点易于复用 |
| 调试难度 | 状态爆炸后难以理解 | 树结构直观清晰 |
| 并发处理 | 困难 | 原生支持并行节点 |
| 动态修改 | 运行时修改困难 | 支持运行时重新配置 |
4.3 行为树的核心节点类型
行为树由四种基本节点组成:
控制节点(Control Nodes):控制执行流
- Sequence(序列):从左到右执行子节点,全部成功才返回成功
- Fallback(回退):从左到右执行子节点,一个成功就返回成功
- Parallel(并行):同时执行多个子节点,根据指定策略返回
装饰节点(Decorator Nodes):修改子节点的行为
- Inverter:反转结果
- Repeater:重复执行子节点
- Timeout:给子节点设置超时
条件节点(Condition Nodes):检查条件,不修改状态
IsObjectDetected?、IsBatteryLow?、IsAtHome?
动作节点(Action Nodes):执行具体动作,可能运行多个周期
MoveToTarget、GraspObject、Speak
4.4 一个真实的例子:“去拿苹果”任务
[Sequence: 拿苹果] ├── [Fallback: 确保苹果位置已知] │ ├── [Condition: 是否知道苹果位置?] │ └── [Action: 寻找苹果] ├── [Parallel: 同时做两件事] │ ├── [Action: 导航到苹果位置] │ └── [Sequence: 准备抓取] │ ├── [Action: 伸出右手] │ └── [Action: 张开手爪] ├── [Action: 抓取苹果] ├── [Fallback: 检查抓取成功] │ ├── [Condition: 手爪是否抓到物体?] │ └── [Action: 重新尝试抓取] └── [Action: 返回起始位置]这个行为树清晰表达了任务的层级结构和备选方案。如果“寻找苹果”失败,整个任务可以优雅地终止或进入错误处理。
4.5 常用行为树框架
- BehaviorTree.CPP:C++实现,最流行的机器人行为树库,ROS2集成良好
- PyTrees:Python实现,适合快速原型
- Unreal Engine Behavior Tree:游戏领域标准
4.6 BehaviorTree.CPP快速示例
// 定义一个简单动作节点classSayHello:publicBT::SyncActionNode{public:SayHello(conststd::string&name):BT::SyncActionNode(name,{}){}BT::NodeStatustick()override{std::cout<<"Hello, I'm a robot!"<<std::endl;returnBT::NodeStatus::SUCCESS;}};// 构建行为树intmain(){BT::BehaviorTreeFactory factory;factory.registerNodeType<SayHello>("SayHello");// 从XML描述创建树autotree=factory.createTreeFromText(R"( <root main_tree_to_execute="MainTree"> <BehaviorTree ID="MainTree"> <Sequence> <SayHello/> <SayHello/> <SayHello/> </Sequence> </BehaviorTree> </root> )");// 执行树tree.tickWhileRunning();return0;}5. 大脑的硬件:从CPU到NPU
理解了软件架构,我们再来看支撑这个“大脑”的硬件平台。人形机器人的算力需求呈指数级增长,不同任务对硬件的要求各不相同:
5.1 算力需求分层
| 任务类型 | 示例 | 算力需求 | 典型硬件 |
|---|---|---|---|
| 底层控制 | 电机PID控制、安全监控 | 低(MHz级) | MCU(STM32、Infineon) |
| 中层感知 | 目标检测、SLAM | 中等(TOPs级) | 边缘NPU(旭日X3、Jetson Orin) |
| 高层决策 | 大模型推理、任务规划 | 极高(100+TOPs) | GPU/NPU(NVIDIA Thor、华为昇腾) |
5.2 异构计算架构
2026年的主流人形机器人通常采用异构计算架构:
[云端/边缘服务器] ← 5G/WiFi 7 → [中央计算单元] ← 高速总线 → [节点控制器] (NVIDIA Thor) (STM32H7) ↓ ↓ [大模型推理] [关节控制] [任务规划] [安全监控] [全局SLAM] [IMU融合]中央计算单元(如NVIDIA Thor、地平线征程6)负责大模型推理和全局规划,节点控制器(如STM32、Infineon TC4)负责关节级的实时控制和安全监控。
5.3 2025-2026年最新进展
- NVIDIA Thor:2000 TOPS算力,单芯片可运行多个大模型,已应用于Figure 02、特斯拉Optimus Gen3
- 地平线征程6:专为机器人设计,集成BPU(Brain Processing Unit),能效比提升3倍
- AMD Versal AI Edge:自适应计算加速平台,支持从传感器到控制的端到端加速
6. 大脑的软件栈:从驱动到智能
将硬件、ROS2、行为树、AI模型整合起来,就构成了完整的机器人软件栈:
┌─────────────────────────────────────────────────────┐ │ 智能应用层 │ │ (任务规划、人机交互、多机协作) │ ├─────────────────────────────────────────────────────┤ │ 行为管理层 │ │ (行为树/状态机,任务调度) │ ├─────────────────────────────────────────────────────┤ │ 功能模块层 │ │ (导航、抓取、SLAM、目标检测、语音交互) │ ├─────────────────────────────────────────────────────┤ │ 通信中间件 │ │ (ROS2 / DDS) │ ├─────────────────────────────────────────────────────┤ │ 硬件抽象层 │ │ (机器人硬件抽象层,驱动程序) │ ├─────────────────────────────────────────────────────┤ │ 硬件平台 │ │ (CPU/GPU/NPU + 传感器 + 执行器) │ └─────────────────────────────────────────────────────┘每一层的职责:
- 硬件抽象层:封装硬件差异,提供统一的API
- 通信中间件:连接各模块,支持分布式部署
- 功能模块层:实现具体的感知、规划、控制算法
- 行为管理层:组织复杂任务,处理异常和中断
- 智能应用层:实现高层智能,如大模型驱动的对话和决策
7. 实战:用ROS2+行为树实现简单任务
让我们通过一个简单的实战示例,感受一下ROS2和行为树是如何协同工作的。我们将实现一个任务:机器人检测到人后,走过去并打招呼。
7.1 系统设计
- 感知节点:运行YOLOv8,发布检测到的人的位置
- 导航节点:接收目标点,发布控制指令
- 语音节点:播放语音
- 行为树:协调上述节点,决定何时做什么
7.2 关键代码片段
行为树XML定义:
<rootmain_tree_to_execute="MainTree"><BehaviorTreeID="MainTree"><Sequence><!-- 等待检测到人 --><WaitForPerson/><!-- 导航到人附近 --><NavigateToPoseperson_target="{person_pose}"/><!-- 打招呼 --><Saytext="Hello, nice to meet you!"/></Sequence></BehaviorTree></root>WaitForPerson动作节点(Python):
importrclpyfromrclpy.nodeimportNodefrombt_nodesimportBTNodefromperson_msgs.msgimportPersonDetectedclassWaitForPerson(BTNode):def__init__(self,name):super().__init__(name)self.person_detected=Noneself.sub=self.node.create_subscription(PersonDetected,'/detected_person',self.person_callback,10)defperson_callback(self,msg):self.person_detected=msg# 将检测结果保存到黑板(Blackboard),供其他节点使用self.blackboard().set('person_pose',msg.pose)deftick(self):ifself.person_detected:returnBTNode.SUCCESSreturnBTNode.RUNNINGNavigateToPose动作节点:
classNavigateToPose(BTNode):def__init__(self,name):super().__init__(name)self.client=self.node.create_client(NavigateToPose,'/navigate_to_pose')self.goal_sent=Falsedeftick(self):target_pose=self.blackboard().get('person_pose')ifnottarget_pose:returnBTNode.FAILUREifnotself.goal_sent:# 发送导航请求request=NavigateToPose.Request()request.pose=target_pose self.client.send_goal_async(request)self.goal_sent=TruereturnBTNode.RUNNING# 检查导航是否完成ifself.client.is_goal_done():ifself.client.get_result().success:returnBTNode.SUCCESSelse:returnBTNode.FAILUREreturnBTNode.RUNNING主程序:
importrclpyfrompy_trees_rosimportRosNodeimportpy_treesdefcreate_root():root=py_trees.composites.Sequence("MainSequence",memory=True)root.add_child(WaitForPerson("WaitForPerson"))root.add_child(NavigateToPose("NavigateToPose"))root.add_child(Say("SayHello"))returnrootif__name__=='__main__':rclpy.init()root=create_root()tree=py_trees.trees.BehaviourTree(root)# 创建ROS2节点包装器ros_node=RosNode()# 主循环whilerclpy.ok():tree.tick()rclpy.spin_once(ros_node,timeout_sec=0.1)time.sleep(0.1)这个示例展示了感知-规划-控制的完整闭环,以及行为树如何优雅地组织任务流程。
8. 2026年最新趋势:大模型与机器人架构的融合
2025-2026年,机器人软件架构正在经历一场深刻的变革——大模型正在从“云端大脑”下沉到“端侧大脑”。
8.1 VLA模型:视觉-语言-动作一体化
VLA(Vision-Language-Action)模型将感知、理解、规划、控制融为一体,用一个统一的神经网络完成从视觉输入到动作输出的端到端映射。
代表性工作:
- Google RT-2:2023年提出,将机器人动作编码为文本token,与大模型统一训练
- Figure Helix 02:2026年发布,三层架构(System2/1/0),实现行走、操作与平衡的一体化协同
- OpenAI Figure:结合GPT-4V,实现自然语言指令到复杂操作序列的转换
8.2 对软件架构的影响
VLA模型的出现,正在改变传统分层架构:
传统架构:感知节点 → 规划节点 → 控制节点 → 执行 ↓ VLA架构:一个神经网络端到端输出动作但这并不意味着分层架构的消失。目前的主流做法是混合架构:
- System2(7B参数VLM):场景理解、任务规划(运行在云端或中央计算单元)
- System1(80M参数Transformer):高速决策,200Hz输出全身关节运动目标(运行在边缘NPU)
- System0(10M参数神经网络):底层平衡维持,1kHz频率(运行在MCU)
这种分层既发挥了大模型的泛化能力,又保证了底层控制的实时性和安全性。
9. 总结与下期预告
今天,我们系统地拆解了人形机器人的“大脑”——决策系统架构:
- 感知-规划-控制闭环是机器人的核心工作循环
- ROS2作为通信中间件,连接各个功能模块,成为行业标准
- 行为树替代传统状态机,优雅地组织复杂任务
- 异构计算硬件支撑不同层次的算力需求
- 大模型正在从云端下沉,重塑机器人软件栈
通过本篇文章,你应该对人形机器人的软件架构有了全景式的认识。在接下来的文章中,我们将深入每一个子模块,从环境感知、仿真训练到具体的ROS2开发,一步步带你走入实战。
下期预告:机器人要理解世界,首先得“看见”世界。下一篇文章,我们将深入环境感知技术,讲解多传感器融合、SLAM定位与建图、以及目标检测算法在机器人上的部署。敬请期待!
互动话题
你认为未来机器人软件架构会是端到端大模型一统天下,还是分层架构继续存在?欢迎在评论区分享你的观点。
(本文完)
参考资料
- ROS.org. ROS2 Documentation [EB/OL]. https://docs.ros.org/, 2026
- BehaviorTree.CPP. BehaviorTree.CPP Documentation [EB/OL]. https://www.behaviortree.dev/, 2026
- Open Robotics. ROS2 Humble Hawksbill [EB/OL]. 2025
- OFweek机器人网. Helix 02:移动+操作融合,解锁人形机器人全身控制的VLA模型 [EB/OL]. 2026-02-01
- Google DeepMind. RT-2: Vision-Language-Action Models for Robot Manipulation [J]. arXiv:2307.15818, 2023
- NVIDIA. NVIDIA Thor: The Central Computer for Next-Gen Robotics [EB/OL]. 2025
- 地平线. 征程6:专为机器人设计的AI芯片 [EB/OL]. 2025
- 中国机器人网. 人形机器人操作系统发展现状与趋势 [EB/OL]. 2025-12-15
- Pyo Y, et al. ROS Robot Programming [M]. 2024
- Colledanchise M, Ögren P. Behavior Trees in Robotics and AI: An Introduction [M]. CRC Press, 2024
