💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
文献来源:
摘要——可靠的控制器对于执行安全操作至关重要以及自动驾驶汽车平稳的机动。控制器必须对外部干扰(如路面)具有鲁棒性,天气、风况等。它还需要处理车辆子系统的内部变化,包括动力系统效率低下、测量误差、时间延迟等。这些因素介绍控制器性能方面的问题。本文通过数据驱动方法设计了一个前馈补偿器,以对控制器的性能进行建模和优化。校长成分分析(PCA)用于提取影响在分析这些特征之后,采用时间延迟神经网络以预测未来时间范围内的控制误差。然后,根据预测误差设计前馈补偿器以提高控制性能。不同条件下的模拟结果情景表明,在所提出的前馈补偿器,最大路径跟踪误差方向盘角度振荡改善了44.4%分别为26.7%。
关键词——数据驱动方法、车辆控制、前馈补偿器,自动驾驶汽车
最近,自动驾驶汽车(AV)引起了广泛关注注意驾驶安全方面的潜在改进,运输效率和燃料经济性。典型的自主系统具有几个主要功能层:感知、决策、路径规划和控制。这个控制层保证车辆的跟踪性能所需的指令输入,例如速度和偏航率对(𝑣𝑑, 𝑤𝑑). 测量的速度和偏航率对(𝑣,𝑤)影响上层(例如决策和规划层)和进而影响控制命令输入[1]。作为水桶效果显示,即使我们在上层有适当的功能层,自动驾驶汽车的整体性能将没有坚实的低层控制层,就不可能是最优的。因此,学习和建模车辆低级基于真实驾驶数据的控制器性能为在自动驾驶汽车的发展中至关重要系统。目前,大多数自动驾驶实验采用线控驱动的自动驾驶平台通过控制油门杆𝑇𝑡来控制系统刹车踏板𝑇𝑏和方向盘角度δ,以跟踪所需航路点给定轨迹。控制器设计的主要挑战在于对具有不确定性的车辆系统进行建模的困难。一个挑战是发动机、制动器和转向系统的接入系统是通过低级中的几个电子控制单元实现的控制,该控制未向线控系统透露。另一个挑战是,很难获得精确的动态由于多个动力学模型的固有耦合车辆子系统和高度非线性[2,3,4]。因此,学习和建模车辆低级基于实际驾驶的控制器性能情景对于发展至关重要自动驾驶汽车系统。数据驱动方法在非线性方面具有巨大的潜力系统预测。例如,神经网络(NN)具有通过以下方式映射复杂输入和输出的卓越能力使用大量离线数据进行训练。一些研究人员提出了自适应PID控制,并使用神经网络优化自主控制中现有控制器的参数车辆[5,6]。然而,有时应用程序是有限的,因为监督学习的标记信号很难由于环境噪音而获得。此外,优化结果不稳定,不适合在低级控制器。一些研究人员在车辆动态建模。Wang等人[7]提出获取通过测量车辆的动态参数来获取数据,然后设置数学模型以预测发动机扭矩,以及使用非线性神经网络的车辆速度。然而,他们没有明确说明他们如何以及为什么选择这些数据输入也没有进一步验证他们的方法是否可行优化控制器的性能。神经网络有被广泛用于增强自动驾驶性能[8、13、14]。Wang等人[8,15]提出了一种车道基于连续动作空间的变更控制模型强化学习算法,但输出动作如何被转换为低级控制器的问题没有得到解决。与以往的研究不同,我们主要致力于开发指定输入与指定输出之间的误差映射模型车辆指令和实际测量输出基于数据驱动方法的动力学。通过建设输入-输出模型,我们预测输入和输出之间的误差输出,可应用于前馈补偿优化。我们在本文中的主要贡献是设计了一个基于未来预测的前馈补偿器控制误差。它被认为更可靠、更安全优化自动驾驶汽车的运动控制无需改变线控驾驶的基本结构控制器。详细文章见第4部分。
📚2 运行结果
部分代码:
%从左到右是1序号,2时间,3实际转向,4cmd转向,5误差输出,6速度,7扭矩
data=xlsread('D:/science/neuralnetwork/sourcecode/predictrealdata/steering_data.xlsx','sheet2');
input = [data(11:6000, [4, 6, 7, 3]); data(7001:11211, [4, 6, 7, 3])]';
output = [data(15:6004, 4) - data(15:6004, 3); data(7005:11215, 4) - data(7005:11215, 3)]';
% 训练的没效果,可能是输入的选取有问题,或是没有归一化等原因
% 最后想要的结果是控制误差,当前误差其实可以用上一时刻的3-4的误差近似??
net = newff(input,output,[8,6],{'tansig', 'tansig'}, 'traingdx'); % 'traingdx'是权值的训练算法,具体见ppt25页
net.trainParam.epochs = 5000; % [20,20]是两个20节点的隐含层,3个输入,1个输出层
net.trainParam.goal = 1e-10;
net.trainParam.lr = 0.01 ; % 学习率
% net.divideFcn = '';
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;
net.trainParam.max_fail = 20;
net = train(net, input, output); % 训练网络,没有归一化???
tic;
input_test = data(7001:7990, [4, 6, 7, 3])';
output_true = (data(7005:7994, 4) - data(7005:7994, 3))';
predict_errL = sim(net, input_test);
% predict_errB = sim(net, input_test); % 网络仿真
toc;
% xB = (7005:7994)/50;
xL = (7005:7994)/50;
%%
figure(1)
% plot(xB,predict_errB,'LineWidth',1,'color','r')
plot(xL,predict_errL,'LineWidth',1,'color','G')
hold on;
% plot(xB,output_true,'LineWidth',2,'color','k')
hold off;
% xlabel('time (s)')
% ylabel('steering wheel angle error (rad)')
% legend('BP predicted','measured')
% 查看——属性编辑器——改字号
e = predict_errB - output_true; % 都变成横着的一行
MSE = sum(e.^2)/990 % 0.0171 0.0163
RMSE = MSE^0.5 % 0.131 0.128
MAE = sum(abs(e))/990
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
🌈4 Matlab代码、数据、文章、结果下载
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取