手把手教做无人驾驶算法(二十六)--基于终端约束的MPC 控制

本文介绍了基于终端约束的模型预测控制(MPC)在稳定性与可行性方面的分析。通过数据驱动的方法,终端约束可以增强MPC的性能,不仅与数据驱动结合,还能扩大可行域。文章提供了计算安全集和终端约束的代码示例,并对比了有无终端约束的轨迹效果,强调了终端约束在控制策略中的重要性。

关于MPC终端约束问题,其实就是稳定性与可行性的分析,欢迎感兴趣的一起交流探讨,如有错误,还请指正,不胜感激。

基于终端约束的MPC控制,理论部分可以参考资料:

【Linear MPC入门】Model Predictive Control Algorithm, Feasibility and Stability - 知乎

这里,终端约束数据可以用数据驱动来代替,这样就可以把MPC与数据驱动相结合起来,但是好处不仅仅是为了与数据驱动联合,终端约束有什么好处呢?上面的参考资料也给出了参考。

对于一般MPC而言,相当于零点为终点,不过,使用Zero Terminal Constraint是非常苛刻的,导致可行域减少了很多。同时,MPC的预测的步数N越少,可行域也越少。

对于可行域使用凸多面体表示,如上图:

function [ invariantGoalSet ] = computeInvariantGoalSet( A, B, Q, R )

[K,~,~] = dlqr(A,B,Q,R);

Acl = A-B*K;
w_max = 0.05;
W = Polyhedron([w_max w_max; w_max -w_max; -w_max -w_max; -w_max w_max]);

X{1} = zeros(size(Acl,1),1); % Initialize the set
for i = 1:10000
    Set = Acl*X{i} + W; % Propagate 
### 使用 MATLAB 实现无人驾驶系统的程 #### 1. 自动驾驶系统概述 自动驾驶系统(ADS)通过集成多种先进技术来实现在无需人为干预下的自主行驶。这些技术包括但不限于高级传感器融合、实时数据处理以及精确的控制系统设计[^1]。 #### 2. ADS 的核心原理 ADS 的工作流程通常分为几个主要阶段:环境感知、任务决策、路径规划和路径跟踪。其中,环境感知依赖于激光雷达、摄像头和其他传感器获取周围环境的信息;任务决策模块负责制定全局策略;而路径规划则专注于生成局部最优路线;最后由路径跟踪完成实际车辆运动控制[^4]。 #### 3. MATLAB 中的关键工具箱支持 MATLAB 提供了一系列专门针对自动化驾驶开发的功能包,例如 Automated Driving Toolbox 和 Robotics System Toolbox 。它们包含了预定义好的算法库及图形化界面 Simulink ,使得开发者能够快速搭建原型并验证其性能[^5]。 以下是具体实现过程中可能涉及的部分: - **传感器模拟与校准** 利用 Sensor Fusion and Tracking Toolbox 可创建虚拟场景并对不同类型的探测器行为进行仿真实验。 - **目标检测与分类** Computer Vision Toolbox 结合 Deep Learning Toolbox 能够训练神经网络模型识别道路上的各种物体如行人、其他机动车等。 - **动态避障逻辑构建** Stateflow 是一种状态机描述语言,在复杂条件判断场合下非常有用,可用于编写安全可靠的碰撞规避方案[^2]。 - **轨迹优化计算** Optimization Toolbox 配合 Curve Fitting Toolbox 完成平滑曲线拟合并考虑物理约束条件下找到最佳前进方向[^3]。 #### 4. 示例代码片段展示 下面给出一段简单的伪代码用来演示如何初始化一个基本框架来进行初步探索: ```matlab % 初始化参数设置 vehicleSpeed = 10; % m/s lookAheadDistance = 20; % meters ahead to look for obstacles % 加载地图信息 mapData = load('cityMap.mat'); obstaclePositions = mapData.obstacles; % 主循环结构 while ~isDestinationReached() currentPose = getCurrentVehiclePosition(); scanAreaForObstacles(currentPose, obstaclePositions); if hasDetectedObstacle() computeAvoidanceTrajectory(); else followPlannedRoute(); end updateControlSignals(); end ``` 此脚本仅作为概念证明存在,并未包含全部细节部分。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值