机器人学的「三驾马车」:感知、规划与控制的核心地位
如果你在2010年逛深圳华强北的电子市场,可能会看到一堆堆的机械臂零件,摊主会告诉你这些是工业机器人,只能按工程师教的动作重复干活,换个零件型号就得重新示教一遍;如果你现在去上海的仓储物流中心,会看到几百台极智嘉的仓储机器人自己排队取货、送货、避让行人,完全不用人管;要是你刷短视频,大概率会看到波士顿动力的Atlas做后空翻、宇树的H1跑马拉松,甚至小米的CyberOne能走能跳还能和人对拳——不过短短十几年,机器人已经从流水线上的「死工具」,变成了能跑能跳、能和人交互的「智能体」。
1.1 机器人学的「前世今生」:从示教再现到具身智能
机器人技术的发展从来不是一蹴而就的,它的每一次跃迁都伴随着核心技术的突破,而每一次突破都离不开感知、规划、控制这三个核心模块的演进。
1.1.1 第一阶段:示教再现时代(1960s-1980s),只有控制的「死工具」
1961年,世界上第一个工业机器人Unimate在通用汽车的流水线上正式上岗,它的工作是把滚烫的金属铸件从流水线上搬下来——这份工作之前由工人完成,每年都有不少人因为烫伤、砸伤请假,Unimate上岗后,流水线的工伤率直接降到了0。不过当时的Unimate可没有现在这么聪明:它没有眼睛、没有耳朵,全靠工程师手动把它移动到每个工位,记录下每个关节的角度,之后它就会像复读机一样重复这些动作,换个场景就完全没用,所以当时的机器人只是个听话的「死工具」。
> 📌 小知识:Unimate的结构 > Unimate全身只有10个液压驱动的关节,重达2吨,完全靠继电器电路控制,没有传感器,也没有任何计算能力,本质上就是一个可编程的机械臂。它的「示教」方式是工程师手动拖动机械臂到目标位置,用旋钮记录下每个关节的角度,之后就能重复执行这个动作序列。
这一阶段的机器人技术核心只有「控制」:工程师只需要设计控制算法,让机械臂的关节能精准到达目标角度就行,完全不需要考虑环境是什么样的,也不需要做任何决策。这种技术路线非常适合高度结构化的工业场景,比如焊接、喷漆、搬运标准件,所以直到今天,示教再现的工业机器人仍然是制造业的主流,全球保有量超过400万台(IFR 2023年数据)。
但示教再现的缺陷也非常明显:灵活性极差,只能在固定场景、固定任务下工作,一旦场景发生变化(比如工件位置偏移、流水线调整),就得重新示教,成本极高。要让机器人走出工厂,走向更复杂的场景,就必须给它装上「眼睛」「耳朵」和「大脑」。
1.1.2 第二阶段:感知觉醒时代(1990s-2010s),半智能体的诞生
20世纪90年代,激光雷达、摄像头、IMU(惯性测量单元)等传感器开始成本下降,机器人第一次有了感知能力。1994年,德国波恩大学的ARGO项目研发的自动驾驶汽车,第一次用摄像头和激光雷达实现了高速公路上的自主跟车和车道保持,虽然速度只有100km/h,但这是机器人第一次不用人教,就能自己感知环境、做决策。
这一阶段的机器人开始同时具备感知、规划、控制三个模块:感知模块用传感器获取环境和自身状态,规划模块根据感知结果生成运动轨迹,控制模块让机器人精准跟踪轨迹。比如2000年前后出现的扫地机器人,用激光雷达感知周围的墙壁和障碍物,用SLAM(同步定位与建图)算法生成家庭地图,规划出覆盖全屋的清扫路径,再通过控制算法让轮子按路径移动,完全不用人干预。
> 📌 侧边栏:SLAM为什么是感知的核心技术? > SLAM是机器人自主导航的基础:机器人在未知环境中移动时,一边通过传感器估计自己的位置(定位),一边构建周围环境的地图(建图),两者互相辅助——定位需要地图做参考,建图需要定位结果对齐不同时刻的传感器数据。没有SLAM,移动机器人就只能在固定场景里用预存的地图导航,一旦场景变化就会迷路。
这一阶段的机器人已经能从「死工具」变成「半智能体」,但仍然有很大的局限性:感知能力弱,只能在简单的结构化场景里工作,一旦遇到复杂的动态障碍物(比如突然跑出来的小孩、移动的车辆),就很容易出错;规划能力也有限,只能做简单的路径规划,做不了复杂的任务决策;控制精度也不够,遇到复杂地形(比如台阶、碎石路)很容易摔倒。
1.1.3 第三阶段:智能体时代(2010s-至今),具身智能的爆发
2010年之后,深度学习技术的爆发给机器人的感知和规划能力带来了质的提升:2012年AlexNet在ImageNet上夺冠,计算机视觉的识别准确率第一次超过人类,机器人用摄像头就能精准识别周围的物体、人、交通标志;2016年,AlphaGo战胜李世石,强化学习技术在决策领域的突破,让机器人能做更复杂的任务决策。
同时,控制技术也在快速进步:波士顿动力的Atlas人形机器人用全身力控制实现了后空翻、跑酷,宇树的H1人形机器人能跑完半程马拉松,特斯拉的Optimus能叠衣服、搬箱子,这些机器人的背后都是感知、规划、控制三个模块的深度融合:感知层用IMU和视觉实时感知自身的姿态、步态和周围的环境,规划层用运动规划算法生成每一步的动作序列,控制层用全身力控制实现动作的精准执行,三者配合才能实现如此灵活的动作。
> 📌 数据支撑:机器人市场的爆发 > 根据国际机器人联合会(IFR)2023年的报告,全球工业机器人市场规模超过200亿美元,服务机器人市场规模超过100亿美元,其中仓储物流机器人、配送机器人、人形机器人的年复合增速超过40%。2023年,全球服务机器人销量超过3000万台,其中一半以上是扫地机器人、配送机器人这类消费级产品,机器人正在从工厂快速走向普通人的日常生活。
1.2 三驾马车的核心地位:机器人从工具到智能体的核心密码
如果把机器人比作一个人,那么感知、规划、控制就是它的眼睛、大脑和肌肉,三者缺一不可,共同构成了机器人智能的核心。
1.2.1 感知:机器人的「眼耳口鼻」
感知是机器人的信息入口,负责从传感器数据中提取有用的信息,让机器人知道自己「在哪里」「周围有什么」。感知模块的核心任务有三类: 1. 状态估计:估计机器人自身的状态,比如位置、姿态、速度、加速度,常用的传感器是IMU、轮式编码器、视觉里程计,核心算法包括卡尔曼滤波、粒子滤波、因子图优化等。 2. 环境感知:感知周围环境的信息,比如障碍物的位置、地图的结构、地形的起伏,常用的传感器是激光雷达、毫米波雷达、摄像头,核心算法包括SLAM、目标检测、语义分割、点云处理等。 3. 语义理解:理解环境中物体的语义信息,比如识别出障碍物是「人」还是「车」,识别出货架上的商品是「可乐」还是「薯片」,常用的传感器是摄像头、麦克风,核心算法包括深度学习分类、目标检测、自然语言处理等。
举个简单的例子:仓储机器人要完成送货任务,首先需要用激光雷达和视觉感知周围的地图和障碍物,用IMU和轮式编码器估计自己的位置,感知模块输出的结果是「我现在在仓库A区3号货架旁边,前方2米处有一个工人,右侧1米处是通道,没有障碍物」。
1.2.2 规划:机器人的「大脑」
规划是机器人的决策核心,负责根据感知到的环境信息和任务目标,决定机器人「要做什么」「怎么做」。规划模块的核心任务有三类: 1. 任务规划:根据
1.2.2 规划:机器人的「大脑」
如果感知是机器人的眼睛,那规划就是它的大脑——负责把感知到的环境信息和任务目标,转化成机器人能执行的行动序列。很多人把规划等同于「路径规划」,其实这只是规划模块的冰山一角:一个能送快递的仓储机器人,要做的决策远不止「从A点到B点怎么走」,还要考虑「什么时候充电」「遇到工人怎么避让」「货架空了要不要上报」「多个机器人抢通道谁先走」这些复杂的任务,这些都属于规划模块的范畴。
规划模块通常分为三个层级,从高到低分别是任务规划、运动规划、轨迹规划,三个层级像公司的管理层一样,逐层把抽象的任务转化成具体的执行指令:
- **任务规划(Task Planning)**是最高层,负责把用户的抽象任务(比如「把A区的货送到B区的分拣台」)拆解成一系列可执行的子任务(比如「移动到A区3号货架→抓取货物→移动到B区分拣台→放下货物→返回待命点」),还要考虑任务的约束条件(比如货物不能倒、不能在禁行区域走、电池电量低于20%要先充电)。任务规划的核心是逻辑推理和决策,常用的算法包括基于逻辑的STRIPS规划、基于搜索的规划算法,以及近年大火的基于大模型的 task planning 方法。
- **运动规划(Motion Planning)**是中间层,负责解决「怎么从当前位置移动到目标位置」的问题,核心是避障和路径优化。比如仓储机器人要从A点移动到B点,中间有货架、工人、其他机器人,运动规划就要生成一条不碰到任何障碍物的最短路径,还要考虑其他机器人的动态避让。常用的算法包括A*、D* Lite、RRT(快速扩展随机树)等,其中A*算法是静态场景路径规划的主流,D* Lite则专门用于动态场景的实时重规划,RRT则适合高维空间的运动规划(比如机械臂的6自由度运动规划)。
- **轨迹规划(Trajectory Planning)**是最底层,负责把运动规划生成的路径转化成机器人能执行的时序动作指令,比如让机器人从A点移动到B点,轨迹规划要算出来每个时刻机器人的速度、加速度,甚至每个关节的角度、角速度、角加速度,保证移动过程平滑、不抖动、不超速。常用的算法包括多项式轨迹插值、时间最优轨迹规划、模型预测轨迹规划(MPT)等。
举个实际的例子:极智嘉(Geek+)的仓储机器人完成一次送货任务的规划流程是这样的:首先任务规划层收到「把订单123的货送到分拣台」的指令,拆解成「移动到A区3号货架→抓取货物→移动到B区分拣台→放下货物→返回充电桩」五个子任务;然后运动规划层根据当前的地图和障碍物信息,生成从当前位置到3号货架的最优路径,同时预留其他机器人的避让空间;最后轨迹规划层生成每个时刻的速度、加速度指令,传给控制层执行。
> 📌 侧边栏:为什么动态避让是运动规划的难点? > 静态场景的路径规划只需要考虑固定的障碍物,算法成熟、效率高;但动态场景里障碍物会移动(比如工人、其他机器人),路径可能刚生成就失效了,需要实时重规划。现在的仓储机器人每秒要重规划10次以上,才能保证在拥挤的仓库里不碰撞、不堵车,这也是为什么早期的扫地机器人只能在简单家庭环境使用,到了复杂的办公室就容易卡住——动态避让的能力不够。
我们可以用数学公式来直观理解A*算法的核心逻辑:A*算法的路径代价函数为: $$f(n) = g(n) + h(n)$$ 其中$g(n)$是从起点到当前节点$n$的实际代价,$h(n)$是从当前节点$n$到终点的启发式估计代价,通过这个公式,A*算法可以优先搜索代价更小的路径,比普通的广度优先搜索效率高几十到上百倍,这也是它能成为工业界主路径规划算法的核心原因。
1.2.3 控制:机器人的「肌肉」
规划层生成的再完美的行动序列,最终都要靠控制模块落地——控制是机器人的执行核心,负责让机器人的实际运动状态精准匹配规划层给出的目标指令,相当于机器人的肌肉。
控制模块的核心目标是稳定性和精度:稳定性是指机器人不会因为外部干扰(比如地面不平、有人推了一下、抓的货物重量不一样)就摔倒、抖动、失控;精度是指机器人的实际位置、姿态和目标的误差要控制在允许的范围内(比如机械臂抓零件的精度要控制在0.1毫米以内,配送机器人的位置误差要控制在1厘米以内)。
根据控制目标的不同,机器人控制通常分为三类: 1. 位置控制(Position Control):最常用的控制方式,核心是让机器人的位置、姿态精准跟踪规划好的轨迹,比如机械臂把零件焊到指定位置,配送机器人精准停在分拣台前面,都用位置控制。位置控制的核心算法是PID控制,以及基于模型的模型预测控制(MPC)。 2. 力/力矩控制(Force/Torque Control):核心是让机器人和环境接触时的力/力矩符合要求,比如机械臂抓易碎的鸡蛋,不能捏碎,就要控制接触力在1牛以内;人形机器人走路时脚和地面的接触力要平稳,不能踩碎地板,就要用力控。力控的核心是力/力矩传感器的反馈,以及机器人的动力学模型。 3. 混合控制(Hybrid Control):位置和力控的结合,比如机械臂擦玻璃,既要控制位置沿着玻璃表面移动,又要控制垂直于玻璃表面的压力恒定,就需要混合控制。
我们可以用一个简单的公式来理解位置控制的原理:假设机器人的状态是$x$,目标状态是$x_d$,控制器的输出是$u$,那么控制的目标就是让状态误差$e = x_d - x$趋近于0。最经典的PID控制器的输出公式为: $$u(t) = K_p e(t) + K_i \int_0^t e(\tau) d\tau + K_d \frac{de(t)}{dt}$$ 其中$K_p$是比例系数,负责快速消除误差;$K_i$是积分系数,负责消除静态误差;$K_d$是微分系数,负责抑制超调和振荡。三个系数调得好,机械臂的跟踪精度可以到0.01毫米,调得不好,就会来回抖动甚至失控。
> 📌 代码示例:Python实现简单的PID控制器 > 下面的代码是一个一维位置控制的PID实现,控制一个电机转动到目标角度: > ```python > class PIDController: > def __init__(self, Kp, Ki, Kd, target): > self.Kp = Kp # 比例系数 > self.Ki = Ki # 积分系数 > self.Kd = Kd # 微分系数 > self.target = target # 目标值 > self.integral = 0 # 积分项 > self.prev_error = 0 # 上一次误差 > > def update(self, current_value, dt): > error = self.target - current_value # 计算当前误差 > self.integral += error * dt # 更新积分项 > derivative = (error - self.prev_error) / dt # 计算微分项 > output = self.Kp * error + self.Ki * self.integral + self.Kd * derivative # 计算控制输出 > self.prev_error = error # 保存当前误差用于下一次计算 > return output > ``` > 这个PID控制器可以控制电机的转动,只要调好三个系数,就能让电机精准停在目标角度,误差可以控制在0.1度以内。
再举个更直观的例子:宇树H1人形机器人跑半程马拉松时,每秒钟要走两步,每一步的落脚位置误差不能超过1厘米,不然就会摔倒。它的控制模块每秒钟要计算1000次关节的控制指令,根据IMU感知到的身体姿态误差,实时调整每个关节的力矩,保证身体平衡,同时匹配规划层生成的步态轨迹,才能实现稳定的奔跑。根据宇树公开的数据,H1的关节控制精度可以达到0.1度,全身力控的响应时间小于10毫秒,这是它能实现高动态运动的核心基础。
1.3 三驾马车的协同:机器人智能的核心闭环
感知、规划、控制三个模块从来不是孤立工作的,它们构成了一个紧密的闭环反馈系统,共同决定了机器人的智能程度。
1.2.3 控制:机器人的「肌肉」
规划层生成的再完美的行动序列,最终都要靠控制模块落地——控制是机器人的执行核心,负责让机器人的实际运动状态精准匹配规划层给出的目标指令,相当于机器人的肌肉。
控制模块的核心目标是稳定性和精度:稳定性是指机器人不会因为外部干扰(比如地面不平、有人推了一下、抓的货物重量不一样)就摔倒、抖动、失控;精度是指机器人的实际位置、姿态和目标的误差要控制在允许的范围内(比如机械臂抓零件的精度要控制在0.1毫米以内,配送机器人的位置误差要控制在1厘米以内)。
根据控制目标的不同,机器人控制通常分为三类: 1. 位置控制(Position Control):最常用的控制方式,核心是让机器人的位置、姿态精准跟踪规划好的轨迹,比如机械臂把零件焊到指定位置,配送机器人精准停在分拣台前面,都用位置控制。位置控制的核心算法是PID控制,以及基于模型的模型预测控制(MPC)。 2. 力/力矩控制(Force/Torque Control):核心是让机器人和环境接触时的力/力矩符合要求,比如机械臂抓易碎的鸡蛋,不能捏碎,就要控制接触力在1牛以内;人形机器人走路时脚和地面的接触力要平稳,不能踩碎地板,就要用力控。力控的核心是力/力矩传感器的反馈,以及机器人的动力学模型。 3. 混合控制(Hybrid Control):位置和力控的结合,比如机械臂擦玻璃,既要控制位置沿着玻璃表面移动,又要控制垂直于玻璃表面的压力恒定,就需要混合控制。
我们可以用一个简单的公式来理解位置控制的原理:假设机器人的状态是$x$,目标状态是$x_d$,控制器的输出是$u$,那么控制的目标就是让状态误差$e = x_d - x$趋近于0。最经典的PID控制器的输出公式为: $$u(t) = K_p e(t) + K_i \int_0^t e(\tau) d\tau + K_d \frac{de(t)}{dt}$$ 其中$K_p$是比例系数,负责快速消除误差;$K_i$是积分系数,负责消除静态误差;$K_d$是微分系数,负责抑制超调和振荡。三个系数调得好,机械臂的跟踪精度可以到0.01毫米,调得不好,就会来回抖动甚至失控。
> 📌 代码示例:Python实现简单的PID控制器 > 下面的代码是一个一维位置控制的PID实现,控制一个电机转动到目标角度: > ```python > class PIDController: > def __init__(self, Kp, Ki, Kd, target): > self.Kp = Kp # 比例系数 > self.Ki = Ki # 积分系数 > self.Kd = Kd # 微分系数 > self.target = target # 目标值 > self.integral = 0 # 积分项 > self.prev_error = 0 # 上一次误差 > > def update(self, current_value, dt): > error = self.target - current_value # 计算当前误差 >