模拟车道以下 您可以修改LKA的Safe Lateral Offset的值以忽略驱动程序输入,将控制器置于纯通道跟随模式。通过增加该阈值,横向偏移总是在由车道保持辅助设定的距离内。因此,车道偏离的状态开启,车道保持辅助一直受到控制。 set_param('LKATestBenchExample / Safe Lateral Offset','Value','2')sim('LKATestBenchExample') %模拟到场景结束
假设没有干扰添加到测量的输出通道#1。- >假设添加到测量输出通道#2的输出干扰是积分白噪声。- >“mpc”对象的“Model.Noise”属性为空。假设每个测量输出通道上有白噪声。
您可以使用以下命令探索模拟结果。 plotLKAResults(场景,logsout)
红色曲线表明,车道保持辅助本身可以保持自我车沿着车道的中心线行驶。 使用以下命令描述控制器性能。 plotLKAPerformance(logsout)
顶部曲线显示相对于自我车的横向偏差。LKA的横向偏差在[-0.1,0.1] m范围内。 中间的图显示了相对的偏航角。与LKA的相对偏航角在[-0.02,0.02] rad范围内。 底部图显示了自我车的转向角。LKA的转向角在[-0.04,0.04] rad范围内。
要查看控制器状态,请使用以下命令。 plotLKAStatus(logsout)
顶部曲线显示左右车道偏移。由于横向偏移从不在由车道保持辅助设定的距离内,因此未检测到车道偏离。 中间的图表显示LKA状态始终为1,即车道保持辅助系统始终处于控制状态。 底部曲线显示了驾驶员和LKA的转向角。驾驶员与弯道协商的转向角度过于激进。在该示例中,来自LKA的小转向角足以用于弯曲道路。
探索车道保持辅助算法车道保持辅助模型包含四个主要部分:1)估计车道中心2)车道保持控制器3)检测车道偏离,以及4)应用辅助。 open_system('LKATestBenchExample / Lane Keeping Assist')
检测通道离开子系统输出一个信号,当车辆太靠近检测到的车道时,该信号为真。当车道传感器的车辆与车道边界之间的偏差小于车道辅助偏移输入时,我们检测到偏离。 Estimate Lane Center子系统将车道传感器的数据输出到车道保持控制器。该示例中的检测器被配置为在相机的当前视场中报告当前车道的左右车道边界。每个边界被建模为曲线的长度,其曲率随距离(回旋曲线)线性变化。为了将这些数据提供给控制器,我们将检测到的两条曲线朝车道中心偏移了车宽和一小部分(总共1.8米)。我们通过检测强度对每个得到的中心曲线进行加权,并将平均结果传递给控制器。此外,它为Lane Keeping Controller子系统的输入提供有限值。预览曲率提供了在自我汽车前方的车道曲率的中心线。在这个例子中,自我车可以向前看3秒,这是预测范围和采样时间的乘积。这使得控制器能够使用预览信息来计算自我车的转向角,从而提高MPC控制器的性能。 车道保持控制器模块的目标是使车辆保持在车道上,并通过控制前转向角来跟随弯道。通过驱动横向偏差和相对偏航角很小来实现该目标(参见下图)。
LKA控制器根据以下输入计算自我汽车的转向角: 预览曲率(从Lane Detections派生) 自我纵向速度 横向偏差(来自泳道检测) 相对偏航角(来自车道检测)
考虑到自我车的物理限制,转向角被限制在[-0.5,0.5] rad范围内。您可以更改预测范围或移动“ 控制器行为”滑块以调整控制器的性能。 应用辅助子系统决定车道保持控制器或驾驶员是否控制自我车。子系统在车道保持控制器之间切换驾驶员指令转向和辅助转向。当检测到车道偏离时,启动到辅助转向的切换。当驾驶员再次开始在车道内转向时,控制权返回给驾驶员。 探索车辆和环境车辆和环境子系统实现了车道保持辅助控制器的闭环仿真。 open_system('LKATestBenchExample / Vehicle and Environment')
车辆动力学子系统使用来自Vehicle Dynamics Blockset™的车身3DOF单轨块来模拟车辆动力学。 Scenario Reader块根据车辆相对于创建的场景的位置生成理想的左右车道边界helperLKASetUp。 视觉检测发生器模块从Scenario Reader块获取理想的通道边界。检测发生器模拟单目摄像机的视场并确定每个道路边界的航向角,曲率,曲率导数和有效长度,从而解决任何其他障碍物。 Driver子系统根据创建的驱动程序路径生成驱动器转向角helperLKASetUp。 生成控制算法的代码该LKARefMdl模型配置为支持使用Embedded Coder软件生成C代码。要检查您是否有权访问Embedded Coder,请运行: hasEmbeddedCoderLicense = license('checkout','RTW_Embedded_Coder')
您可以为模型生成C函数,并通过运行以下命令来探索代码生成报告: 如果 hasEmbeddedCoderLicense rtwbuild('LKARefMdl') 结束
您可以使用软件在环(SIL)模拟验证编译的C代码是否按预期运行。要LKARefMdl在SIL模式下模拟引用的模型,请使用: 如果 hasEmbeddedCoderLicense set_param('LKATestBenchExample / Lane Keeping Assist',... 'SimulationMode','Software-in-the-loop(SIL)') 结束
运行LKATestBenchExample模型时,将为模型生成,编译和执行代码LKARefMdl。这使您可以通过模拟测试已编译代码的行为。
|