主要内容

停车代客多阶段非线性模型预测控制

方法的使用车辆路径规划系统在Simulink金宝app®中采用多级非线性模型预测控制(NLMPC)对泊车员进行分段控制。

停车场

在这个例子中,停车场包含一辆自我车辆和八个静态障碍物。障碍物由六辆停放的车辆、一个预留的停车场和车库边界组成。自我车辆的目标是在不与任何障碍物碰撞的情况下停在目标位置。自我姿态的参考点位于后轴的中心。

指定初始自我车辆姿态。

%自我初始姿态:x(m), y(m),偏航角(rad)egoInitialPose = [4,12,0];

定义自我飞行器的目标姿势。

%自我目标位姿:x(m), y(m),偏航角(rad)egoTargetPose = [27.2,4.7,-pi/2];

helperSLCreateCostmap函数创建停车场的静态地图,其中包含关于静止障碍物、道路标记和停放的汽车的信息。有关详细信息,请参见Simulink中的自动泊车代客金宝app(自动驾驶工具箱)的例子。

costmap = helperSLCreateCostmap();helperSLCreateUtilityBus;costmapStruct = helperSLCreateUtilityStruct(costmap);

想象停车环境。使用样本时间的0.1对于可视化工具。

Tv = 0.1;helperSLVisualizeParkingValet (egoInitialPose 0 costmapStruct);

{

六辆停放的车辆是图的顶部和底部的橙色盒子。中间区域代表预留停车位。车库的左边界也被建模为一个静态障碍。蓝色的自我车有两个轴和四个轮子。两个绿色的方框代表ego车辆的目标停车点,顶部的位置朝北。

车辆路径规划系统块配置

定义自我飞行器的参数。

vdims =车辆尺寸;egoWheelbase = vdim .轴距;distToCenter = 0.5*egoWheelbase;

定义八个障碍的参数。每行obsMat表示具有五个元素的障碍物:位置(xy)、航向角、长度及宽度

numObs = 8;obsMat = [23,3.55,0,2.9,4.8;...31.5, 3.55, 0、2.9、4.8;...40.5, 3.55, 0、2.9、4.8;...23岁,46岁,0、2.9、4.8;...27.3, 46.5, 0、2.6、4.8;...53.5、46 0、2.9、4.8;...0, 0.5, 0.25, 25日50;...0 35.7, 25日,48岁,13];

定义MPC控制器的采样时间和预测范围。

TsPlanner = 1;pPlanner = 20;

自我车辆的速度被限制在[-6.5,6.5]米/秒(大约15英里/小时)的范围内,自我车辆的转向角度被限制在[-45,45]度的范围内。

V_range = [-6.5,6.5];Steer_range = [-pi/4,pi/4];

以米为单位定义安全距离。为避免与障碍物碰撞,与所有障碍物的最小距离必须大于安全距离。

D_safe = 0.1;

结合自我车的姿态和目标姿态,车辆路径规划系统模块可以生成从自我车的当前姿态到目标姿态的参考路径。

Simulink模型中的轨迹参考轨迹金宝app

设计一个NLMPC控制器来跟踪参考轨迹。

首先,设置模拟持续时间。

持续时间= 15;Ts = 0.1;步骤=持续时间/Ts;

然后,指定计划的开始和结束时间。

Tmin = 5;%计划开始时间Tmax = tmin + 0.5;%计划结束时间

创建具有跟踪预测范围的NLMPC控制器(pTracking)10

pTracking = 10;nlobjTracking = createMPCForTrackingVPP(pTracking);

打开Simulin金宝appk模型。

mdl =“parkingValetVPP”;open_system (mdl)

运行模拟。在模拟过程中,车辆路径规划系统块规划到目标姿态的路径。然后,NLMPC跟踪控制器按照计划路径进入停车位。

sim (mdl);

{

动画显示,自我车辆成功地停在目标姿势,没有任何障碍碰撞。你也可以使用瞄准镜查看自我载具的姿态轨迹。

open_system (mdl +“/泊车员可视化工具/姿势”

取消下面几行注释,以从另一个开始姿势运行模型到目标姿势。

% egoInitialPose = [4,35,0];% egoTargetPose = [36,45,pi/2];% sim (mdl)

结论

本例展示了如何使用非线性模型预测控制生成参考轨迹并跟踪代客泊车轨迹。控制器导航自我车辆到目标停车位而不与任何障碍物碰撞。

mpcverbosity (“上”);Bdclose (mdl) f = findobj(“名字”“自动泊车代客”);关闭(f)

另请参阅

功能

相关的话题