基于预瞄的LKA模型搭建

1、模型原理

本模型参考郭孔辉  ”驾驶员—汽车闭环系统操纵运动的预瞄最优曲率模型_郭孔辉“,此论文

预瞄时间为T,具体含义如下:

则根据此公式,可得如下推到: 

至此,模型推导完成,这里我们的控制量即为方向盘转角。

2、Carsim设置

道路设置,这里采用常见的换道中的五次多项式,

输入、输出设置如下:这里为了方便计算,输入采用前轮转角

工况设置

其它设置和上节基于PID的一样,具体可参考上篇博文。 

3、模型搭建 

 函数代码

function y = fcn(d,u)
        L = 2.91;
        y = 2*L*u/(d*d);
end

运行结果如下:偏差和前路转角图分别为:

 

这里可以看出单一的预瞄模型,基本可以保持车道中心线行驶。这里为了验证复杂工况,采用上节博文里面道路进行验证,

道路数据:

需要在模型里更换插值表,

取预瞄时间为0.5s,结果如下:

 

这里实际偏差基本满足道路跟随要求,预瞄偏差较大,因为这里模型设置的预瞄距离为10m,可以看到单纯的运动学角度进行LKA控制,虽然能大致保持车道中心线行驶,但是对于精度要求较高的 

在不同场景下创建LKA(大核注意力或车道保持辅助)模型的方法有所不同,以下分别介绍两种常见情况。 ### 基于ResNet架构创建引入大核注意力(LKA)的模型 可以基于ResNet架构,在每个残差块后添加LKA模块来创建模型。以ResNet34架构为例,以下是创建该模型的部分代码示例: ```python import torch import torch.nn as nn class LKA(nn.Module): def __init__(self, dim): super().__init__() self.conv0 = nn.Conv2d(dim, dim, 5, padding=2, groups=dim) self.conv_spatial = nn.Conv2d(dim, dim, 7, stride=1, padding=9, groups=dim, dilation=3) self.conv1 = nn.Conv2d(dim, dim, 1) def forward(self, x): u = x.clone() attn = self.conv0(x) attn = self.conv_spatial(attn) attn = self.conv1(attn) return u * attn # 这里简单示例如何将LKA模块添加到ResNet34残差块后 # 由于完整的ResNet34代码较长,这里只给出关键部分示意 class ResidualBlockWithLKA(nn.Module): def __init__(self, in_channels, out_channels, stride=1): super(ResidualBlockWithLKA, self).__init__() # 残差块的卷积层等定义 self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1, bias=False) self.bn1 = nn.BatchNorm2d(out_channels) self.relu = nn.ReLU(inplace=True) self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=1, padding=1, bias=False) self.bn2 = nn.BatchNorm2d(out_channels) self.downsample = nn.Sequential() if stride != 1 or in_channels != out_channels: self.downsample = nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride, bias=False), nn.BatchNorm2d(out_channels) ) # 添加LKA模块 self.lka = LKA(out_channels) def forward(self, x): residual = x out = self.conv1(x) out = self.bn1(out) out = self.relu(out) out = self.conv2(out) out = self.bn2(out) if self.downsample is not None: residual = self.downsample(x) out += residual out = self.relu(out) # 通过LKA模块 out = self.lka(out) return out # 可以进一步构建完整的ResNet34 + LKA模型 # 这里省略完整构建过程 ``` ### 创建Simulink自动驾驶工具箱LKA模型 创建Simulink自动驾驶工具箱LKA模型,主要根据偏移量是否超限来判断使用驾驶员介入驾驶还是辅助驾驶功能介入驾驶。创建步骤如下: 1. **定义系统逻辑**:明确根据偏移量判断介入状态的逻辑,即判断偏移量是否超过设定阈值,以此决定是驾驶员介入还是辅助驾驶介入。 2. **搭建模型**:在Simulink中使用合适的模块搭建车辆动力学和环境信息处理模块,以及实现状态判断和切换的逻辑模块。例如,可以使用条件判断模块来判断偏移量是否超限,使用开关模块来切换驾驶员介入和辅助驾驶介入状态。 3. **状态可视化**:设置最外层与status相关联的按钮,使其在运行时能在红灰色之间切换,以代表LKA系统的介入状态。 ```matlab % 这里只是简单示意Simulink模型创建的思路,实际创建需在Simulink界面操作 % 例如创建一个简单的偏移量判断逻辑 offset = 1.5; % 假设偏移量 threshold = 1.0; % 设定阈值 if offset > threshold lka_status = 'assist'; % 辅助驾驶介入 else lka_status = 'driver'; % 驾驶员介入 end ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值