公司动态

规划控制理论体系全解析:从路径搜索到运动控制的自动驾驶核心

📅 2026/8/7 4:08:00
规划控制理论体系全解析:从路径搜索到运动控制的自动驾驶核心
1. 规划控制——理论体系概述聊到自动驾驶、机器人甚至是工业流水线上的机械臂大家总会听到“规划控制”这个词。听起来很高深像是算法工程师和博士们的专属领域。但说穿了它解决的就是一个最朴素的问题“我现在在这里要去那里中间该怎么走”只不过当“这里”和“那里”的定义从地图上的两个点变成了包含速度、姿态、障碍物、交通规则在内的一个超高维状态空间时这个问题就变得极其复杂和有趣了。我干了十多年机器人相关的研发从最早的扫地机路径规划到后来的无人车决策模块踩过的坑不计其数。很多新手甚至一些有经验的工程师容易陷入一个误区拿到一个开源算法比如A*、DWA、MPC就开始调参结果往往是“调参两星期上线五分钟就崩”。根本原因在于缺乏对规划控制理论体系的整体认知。你不知道手里的工具在整套“武器库”里处于什么位置它的设计初衷是什么边界在哪里自然就用不好。今天我就抛开那些复杂的公式推导用最“人话”的方式帮你把规划控制的理论体系捋清楚。这不是一篇教科书而是一张“地图”。有了这张地图你再去看具体的算法论文、代码实现就知道它们是在解决哪个层面的问题该如何选择和组合了。我们会从最顶层的需求拆解开始一直深入到不同流派的核心思想与实战取舍。2. 核心问题拆解从“A到B”背后的五层思考当你接到一个“从A点移动到B点”的任务时一个合格的规划控制系统在脑子里或者说在代码里会瞬间完成五层思考。这五层构成了理论体系的基本骨架。2.1 第一层任务理解与分解——“B点”到底是什么这不是废话。对于扫地机器人“B点”可能是“客厅的某个未清扫区域”对于无人配送车“B点”是“3栋2单元门口且车头朝东”对于机械臂“B点”是“以特定姿态抓住那个零件”。关键点目标不是一个简单的坐标而是一个约束集合。可能包括位置、姿态、速度甚至末速度为零、时间、能耗等。规划的第一步就是精确地定义这个目标状态。定义不清后续全错。实战心得在项目初期一定要和产品、业务方反复确认目标的完整定义。比如无人车停靠站点是要求精确停在某个框内还是只要在附近区域停车后车头方向有无要求这些细节直接决定了你后续该用点镇定还是轨迹跟踪控制器。2.2 第二层环境感知与建模——世界是什么样子的规划不能在空中楼阁中进行。系统必须知道“A”和“B”之间有什么。这不仅仅是障碍物还包括静态结构道路、走廊、墙壁、工作台。通常用栅格地图Grid Map、占据栅格Occupancy Grid或更精确的点云地图、高清语义地图来表示。动态实体行人、车辆、其他机器人。它们有位置、速度、预测轨迹。常用跟踪算法如卡尔曼滤波、多目标跟踪获得其状态并用时空走廊或动态障碍物地图来建模其对我们的影响。规则与语义这是最容易忽略但至关重要的部分。车道线、交通灯、人行道、禁行区、工作流程顺序。这些信息通常需要高层次的感知模块如图像识别或先验地图如高精地图来提供并转化为规划器能理解的代价地图Costmap或约束条件。注意事项感知是有延迟和噪声的。规划器必须对感知不确定性有鲁棒性。一个常见技巧是在代价地图中对动态障碍物周围进行膨胀Inflation膨胀半径至少要大于“最大感知误差 系统最大控制误差 安全余量”。2.3 第三层路径规划——找一条空间上的“路”这是最经典的“规划”部分。在给定的环境表示通常是地图中找一条从A到B的、无碰撞的几何路径。注意这里通常只关心空间位置x, y可能包括朝向θ但一般不关心速度、加速度等时间信息。核心思想将连续空间离散化或采样构建一个图Graph然后使用搜索算法找最优解。两大主流流派基于搜索的规划Search-based Planning代表算法A*、D*、Dijkstra。它们显式地构建一个图如栅格地图的每个格子就是一个节点通过启发式函数引导搜索。优点是完备如果解存在一定能找到且最优在定义的代价下。缺点是计算量随状态维数指数增长“维度灾难”。基于采样的规划Sampling-based Planning代表算法RRT快速探索随机树、RRT*、PRM概率路图。它们不显式构建整个图而是通过随机采样点并尝试连接来逐渐构建一棵探索树或一个路图。优点是能高效处理高维空间。缺点是概率完备当时间趋于无穷找到解的概率趋于1且通常不是最优的RRT*能渐进最优。工具选型解析二维平面移动如AGV、扫地机栅格地图A* 足矣。简单、可靠、易调试。想提升平滑度可以在A*搜索出的粗路径后加上梯度下降或样条插值进行后处理。高维空间如机械臂、无人机首选基于采样的方法如RRT-Connect。对于复杂约束如姿态、关节角限制约束采样或投影法是关键。动态环境纯粹的路径规划器很难处理通常需要与下一层的轨迹规划或局部控制器结合采用重规划Replanning策略。2.4 第四层轨迹规划——给这条“路”加上时间表只有路径还不够。你知道了要经过哪些点但什么时候到哪个点以什么速度、加速度过去轨迹规划就是在路径的基础上生成一条时间参数化的曲线即轨迹。它包含了位置、速度、加速度甚至加加速度Jerk随时间的变化。为什么需要它控制系统电机、油门、刹车直接执行的是速度、加速度指令。一条只有位置的路径无法直接执行。同时时间化让我们能精确评估动态可行性速度超限了吗、能耗、舒适度加加速度过大乘客会晕车。主流方法微分平坦性Differential Flatness对于像四旋翼、阿克曼底盘车辆这类系统存在一组特殊的输出平坦输出使得系统的所有状态和控制输入都能用这组输出及其有限阶导数表示。规划只需要针对这组平坦输出对车来说是后轴中心进行然后通过微分平坦变换得到全状态轨迹和控制量。这是目前最优雅高效的方法之一。多项式/样条曲线拟合在路径的关键点waypoints之间用多项式如五次多项式或样条如B样条来拟合一条光滑的轨迹。通过设定关键点处的边界条件位置、速度、加速度来求解多项式系数。优化方法将轨迹规划建模为一个优化问题。例如最小化加加速度的平方积分追求舒适同时满足动力学约束最大速度、加速度、避障约束与障碍物距离大于阈值。常用二次规划QP或非线性规划NLP求解。Apollo的EM Planner、百度开源的规划模块就大量使用了QP。参数计算示例假设我们用五次多项式连接两个状态点。起点状态位置p0速度v0加速度a0终点状态p1, v1, a1时间间隔为T。我们可以设轨迹为p(t) a0 a1*t a2*t^2 a3*t^3 a4*t^4 a5*t^5。将t0和tT时的位置、速度、加速度条件代入就得到一个六元线性方程组直接求解可得系数a0~a5。这个过程保证了轨迹在起点和终点处的状态完全匹配且中间连续光滑。2.5 第五层运动控制——让身体跟上想法规划出了一条理想的轨迹但现实中的机器人有惯性、执行器有延迟、模型有误差、地面有打滑。控制器的任务就是计算实时的控制指令如电机扭矩、方向盘转角、油门刹车深度驱动机器人尽可能准确地跟踪上这条理想轨迹。核心反馈逻辑比较“当前实际状态”和“轨迹上对应时间的期望状态”得到一个误差。控制器根据这个误差计算控制指令目标是让误差趋于零。三大经典控制器PID控制比例-积分-微分。简单粗暴在模型不确定性强、要求不高的场合广泛应用。调参是门玄学经验是先调P让系统快速响应再调D抑制振荡最后调I消除静差。坑点积分饱和Integral Windup问题一定要处理否则系统会失控。模型预测控制MPC这是当前业界的“明星”。它不再只看当前误差而是在每个控制周期基于当前状态和系统动力学模型对未来一段有限时间预测时域内的控制序列进行优化只执行第一个控制指令下一周期重新优化。优势能显式地处理各种约束控制量限幅、状态约束天然适合轨迹跟踪。劣势计算量大非常依赖模型的准确性。线性二次型调节器LQR针对线性系统设计一个最优状态反馈控制器最小化一个二次型代价函数平衡跟踪误差和控制能量。它计算出的反馈增益是离线、固定的所以在线计算量极小。常用策略在轨迹上每个点进行线性化得到时变线性系统然后使用时变LQRTVLQR这是一种非常强大且高效的方法。选型与组合对于线性度高、模型较准的系统LQR是性能最优的选择。对于约束复杂、需要滚动优化的场景如无人车在动态环境中MPC是首选。PID则常用于底层执行器的闭环控制如电机电流环、速度环作为整个控制架构的内环。3. 理论流派纵横优化、搜索与学习的三角博弈上面五层是纵向的流程分解。如果横向看规划控制的理论发展近二十年主要围绕着三大流派展开博弈与融合。理解它们你就理解了领域的技术演进脉络。3.1 优化派把问题变成一个数学题核心哲学规划控制问题本质上是一个在约束下寻找最优解的问题。那么就用数学优化理论来建模和求解。典型框架min J(x, u) subject to g(x, u)0, h(x, u)≤0。其中J是目标函数如时间最短、能耗最小、最舒适g是等式约束如动力学方程h是不等式约束如避障、速度限制。优势严谨能统一处理路径、轨迹、控制能方便地加入各种约束理论上有明确的最优性。挑战非凸性避障约束、动力学方程往往是非凸的导致优化问题很难找到全局最优解甚至收敛困难。实时性在线求解复杂的非线性优化问题计算耗时可能无法满足控制频率如100Hz。实战演进凸优化为了追求实时性工程师们想尽办法把问题“弄成”凸的。例如把非凸的避障约束用一系列凸集如矩形、圆形来近似或者用序列二次规划SQP在局部迭代求解。Apollo的EM Planner就大量使用了QP。数值优化库IPOPT、CasADi、ACADO等工具链的成熟大大降低了使用优化方法的门槛。3.2 搜索派在状态空间中巧妙探索核心哲学既然连续空间优化太难我就把它离散化变成一个在离散图上的搜索问题。利用启发式信息高效地找到可行解。典型框架A* 及其变种如Hybrid A*。Hybrid A* 是无人驾驶领域的一个里程碑它将连续的状态空间x, y, θ离散化同时考虑了车辆的动力学约束如转弯半径搜索出的路径本身就是车辆可执行的。优势在中等维度的离散空间中能保证找到可行解甚至最优解。逻辑清晰可解释性强。挑战维度灾难当状态维度增加如加上速度、时间离散化的节点数会爆炸式增长。“锯齿”路径离散搜索出的路径往往不平滑需要后处理。与优化的融合现代方法常将搜索与优化结合。例如用Hybrid A* 快速找出一条粗解的路径然后以这条路径为初始值再用优化方法进行“精炼”得到一条光滑、动力学可行的轨迹。这就是典型的分层规划思想。3.3 学习派让机器自己从经验中总结核心哲学无论是优化还是搜索都严重依赖人工设计的模型和代价函数。但现实世界太复杂很多规则如人类驾驶员的舒适性偏好、复杂交互行为难以用数学公式描述。不如让机器从数据中自己学。典型框架强化学习RL、模仿学习IL。模仿学习直接学习人类专家的驾驶数据试图“照葫芦画瓢”。端到端的行为克隆是典型代表但存在分布偏移问题——训练数据没见过的场景模型容易蒙圈。强化学习让智能体在与环境交互中试错根据奖励函数自我学习。深度强化学习如DQN、DDPG、PPO在游戏、机器人控制上取得了惊人成果。优势能处理非常复杂、难以建模的场景能学到人类隐式的驾驶风格和交互策略。挑战与现状样本效率低需要海量的交互数据在物理世界中收集成本极高风险大。安全性与可解释性差神经网络是个黑盒难以保证其决策在所有极端情况下的安全性这是自动驾驶的致命伤。仿真与现实的鸿沟在仿真中学得很好到真车上可能完全失效。当前主流应用模式学习与优化/搜索结合而非取代。学习用于高层决策用RL学习超车、并道的决策策略或者学习如何设计优化问题的代价函数权重。学习用于模型部分用神经网络学习更准确的车辆动力学模型然后交给MPC去优化。学习用于加速搜索用神经网络预测搜索的启发式函数引导搜索更快收敛。4. 工业级系统架构设计模块化与分层递阶理论最终要落地为代码。一个工业级的规划控制系统绝不是把几个算法堆砌起来就能跑的。它需要一个深思熟虑的架构来平衡性能、安全、可维护性和实时性。目前最主流的架构是分层递阶式架构。4.1 经典三层架构路由、行为、动作这是自动驾驶领域广泛采用的架构也适用于其他移动机器人。路由层Route Planning任务基于宏观地图如城市路网规划一条从起点到终点的车道级序列。例如“沿XX路直行在第三个路口右转进入YY路”。特点规划频率低几分钟一次或触发式不关心具体轨迹只关心道路连接关系。常用算法是图搜索A*在道路图上进行。输出一个有序的车道序列Lane Sequence。行为层Behavioral Layer / 决策层任务在路由的指引下根据实时感知交通灯、障碍物、其他交通参与者做出离散的驾驶决策。例如“在当前车道跟驰前车”、“在下一个空档变道超车”、“在停车线前停车等待”。核心挑战这是一个部分可观测的序列决策问题需要预测其他参与者的意图。传统方法使用有限状态机FSM或基于规则的决策树。现在越来越多地尝试用POMDP部分可观测马尔可夫决策过程或强化学习来建模。输出一个具体的驾驶行为指令及相关的目标状态如“变道至左车道目标速度为60km/h”。动作层Motion Planning Control任务将行为层的指令转化为一条具体、平滑、安全、可执行的轨迹并生成控制指令。这层就是我们前面重点讨论的路径规划、轨迹规划和控制。内部进一步分层动作层内部常采用“规划控制”的两层结构。运动规划器根据行为指令和感知信息在局部范围内未来几秒、几十米规划一条时空轨迹。它需要严格避障、满足动力学约束。常用采样优化的混合方法如Apollo的EM Planner。反馈控制器跟踪规划出的轨迹。常用MPC或LQR。4.2 模块化设计的关键接口与数据流架构清晰了模块间的接口API和数据流就是血脉设计不好会处处梗塞。感知-规划接口规划模块最需要从感知模块获得什么绝不是原始点云或图像。而是一个高度抽象、稳定的世界模型World Model。这个模型至少应包括静态环境的高精度表征如占据栅格、代价地图。动态障碍物的列表每个障碍物应有ID、类型、位置、速度、加速度、以及预测的轨迹集多个可能轨迹及其概率。语义信息如车道线、交通灯状态、停止线位置。这个接口的设计原则是稳定、低频、带置信度。规划器需要的是可靠的信息而不是最高频率的更新。规划-控制接口控制器需要一条时间同步、状态完整的轨迹。通常以轨迹点Trajectory Point数组的形式传递每个点包含时间戳、位置、速度向量、加速度向量、朝向角、曲率等。关键点这条轨迹必须是动力学可行的即相邻点之间的状态变化符合系统的动力学约束。否则控制器无论如何也跟踪不上。控制-执行器接口这是最底层的接口将控制量如方向盘转角、油门/刹车百分比转化为具体的CAN总线信号或PWM波。这里要处理标定和延迟补偿问题。执行器的响应特性如方向盘转角到轮胎转角的传动比、油门的非线性必须被精确标定。从控制指令发出到执行器产生效果存在延迟需要在控制器设计中进行前馈补偿或状态预测。4.3 安全与鲁棒性设计没有“万一”只有“一定”对于自动驾驶和机器人安全是1其他都是后面的0。规划控制系统的安全设计必须贯穿始终。功能安全Fail-operational核心模块必须有冗余。例如主规划器失效备份规划器可能算法更简单保守要能立即接管。主控制器失效底层执行器应进入预设的最小风险状态如缓慢刹停。多模态规划与回退策略规划器不能只生成“最优”的一条轨迹而应同时生成多条不同策略的轨迹如激进超车、保守跟车、紧急刹停。并有一个监控模块实时评估每条轨迹的执行风险。当首选轨迹风险激增时立即切换到更安全的备选轨迹。这被称为平行规划。责任敏感安全模型RSS这是一种形式化的安全模型由英特尔Mobileye提出。它定义了一系列在物理上“安全”的驾驶规则如保持安全车距、避免碰撞。规划器的输出必须满足RSS规则。这为安全提供了一个可验证的数学基础。大量的边界Case测试与仿真再好的理论也怕“黑天鹅”。必须构建海量的仿真场景库覆盖各种极端、罕见情况如“鬼探头”、车辆失控横穿对规划控制系统进行“暴力”测试。实车路测发现一个致命问题成本可能是仿真的成千上万倍。5. 实战中的经典难题与调优心法理论体系是骨架真正让系统“活”起来跑得稳、跑得好靠的是在无数个具体问题中积累的经验和调优技巧。5.1 动态障碍物处理预测、博弈与防御静态障碍物好躲动态的才是噩梦。处理动态障碍物的核心是预测和交互。预测模型的选择恒定速度/加速度模型最简单对于短时预测1s在大多数情况下足够有效。基于车道/路径的预测对于道路上的车辆假设其会沿车道线行驶或跟随前车预测准确性更高。数据驱动的预测模型用深度学习模型如LSTM、GNN、Transformer学习人类驾驶员的轨迹模式能预测更长期、更复杂的交互行为。这是当前的研究热点。交互与博弈在十字路口、无保护左转、合流等场景自车与他车存在明显的博弈。单纯的“预测-避让”策略会导致机器人过于保守永远无法通过。这时需要引入交互式规划。方法一基于部分可观测马尔可夫决策过程POMDP将他车意图作为隐状态进行在线推断和决策。计算复杂但框架严谨。方法二基于社交力模型Social Force或博弈论将他车的影响建模为“力”或考虑其可能的反应策略。工程上常用的“试探-承诺”策略先生成一条表达明确意图的轨迹如缓慢切入观察他车反应。如果他车减速让行则继续执行如果他车加速抢行则放弃并执行保守策略如减速让行。这需要规划器能够快速重规划。防御性驾驶永远不要假设其他交通参与者会遵守规则或做出理性反应。规划时要对动态障碍物的预测轨迹加上一个“安全包络”并预留足够的制动距离和反应时间。一个经验法则是规划出的轨迹在任意时刻都必须存在一个安全的“逃生路径”或“紧急制动停车”的选项。5.2 舒适性优化告别“机器人式”顿挫乘坐体验是产品力的关键。规划控制的舒适性主要体现在对加加速度Jerk的控制上。加速度变化率过大就是推背感或顿挫感的来源。在轨迹优化中显式优化Jerk将Jerk的平方积分作为代价函数的一项。这是最直接有效的方法。使用五次多项式或Minimum Snap轨迹最小化加加速度的平方积分能天然生成光滑的轨迹。在MPC中约束Jerk在MPC的优化问题中将控制量加速度的变化率作为约束限制其在一个舒适范围内。速度规划平滑处理对规划出的速度曲线进行低通滤波或使用平滑的加速度曲线如S曲线进行速度插值。避免速度指令的阶跃变化。转向平滑性对于车辆方向盘的转动角速度也需要平滑。在路径规划时考虑曲率连续性在控制时对前轮转角指令进行速率限制。5.3 定位与地图误差下的鲁棒性规划控制严重依赖精准的定位和高清地图。但现实中GPS有漂移激光雷达在隧道里会失效地图也有过时的时候。规划器需要容忍定位噪声在代价地图中不要将障碍物膨胀的半径设得刚刚好。要考虑到定位误差例如±10cm将安全距离适当放大。使用相对定位与特征匹配在全局定位不可靠时更多地依赖激光雷达/视觉的局部特征匹配如ICP、NDT来维持相对位置的准确性进行局部重规划。地图的置信度管理对于地图中静态障碍物的信息可以赋予一个置信度。当感知系统持续检测到该处没有障碍物时可以动态降低其置信度甚至临时“擦除”它避免被过时的地图信息困住。引入不确定性规划更高级的方法是使用鲁棒模型预测控制RMPC或随机模型预测控制SMPC在优化中直接考虑状态估计的不确定性生成更保守但更安全的轨迹。5.4 复杂场景下的计算性能瓶颈规划控制算法尤其是优化和搜索类是计算大户。在复杂城市场景障碍物众多规划频率可能从100Hz骤降到10Hz以下危及安全。分层与聚焦这是最有效的策略。路由层规划频率最低行为层在数百毫秒级动作层的运动规划频率最高50-100Hz但其规划范围最短通常只规划未来几秒。这样每层都只处理自己层面最核心的问题计算量可控。问题简化与凸化在动作层的轨迹优化中想尽办法将非凸问题转化为一系列凸问题求解。例如将非凸的避障约束通过凸分解或迭代凸近似的方法来处理。高效的数据结构与搜索策略对于搜索算法使用跳点搜索JPS等优化算法加速A*使用KD-Tree、OcTree等数据结构高效管理空间和进行碰撞检测。代码层面的极致优化使用Eigen等线性代数库进行矩阵运算利用SIMD指令集对于固定维数的小矩阵运算手动展开循环使用内存池避免频繁动态内存分配。规划控制的理论体系就像一棵不断生长的大树根植于经典的控制论、优化理论和计算机科学枝叶则向着人工智能、机器学习不断延伸。作为工程师我们不必精通每一个分支但必须看清这棵树的整体脉络知道手中的工具位于哪根枝桠它的养分来自哪里又能通向何方。这样当面对一个具体问题时你才能做出最合适的技术选型与架构设计而不是在算法的海洋里盲目调参。记住所有复杂的理论最终都是为了优雅地解决那个最简单的问题“从这里到那里我该如何过去”