目录

前言

一、利用三次多项式曲线对车道线建模

二、三次多项式系数的物理释义

三、MATLAB代码



前言

车道线检测和识别是自动驾驶汽车前端环境感知的组成部分,检测结果为后端的规划和决策板块提供重要的信息参考,LDW(车道偏离预警)、LKA(车道保持辅助)、ACC(自适应巡航控制)等功能模块都依赖于连续稳定的车道线检测。
        如下图1(来源于网络,侵删)所示,智能汽车首先利用摄像头采集到视觉图像,然后通过二值化等数学处理,最后可以提取结构化道路下的清晰车道线。

图1 基于视觉图像的车道线提取

车道线检测结果在向后端规控板块进行数据流传递的过程中,若直接将检测到的车道线用若干密集散点进行输出,一方面会增加系统的运算成本,另一方面也会导致检测结果失真。
        因此,可以通过建立车道线函数模型,该模型的待定系数根据本周期的检测结果散点进行函数拟合得到。如此一来,车道线检测结果只需向后端传递较少的几个函数模型的参数,后端接收到参数再通过函数模型还原为车道线。
        三次多项式曲线拟合车道中心线线不仅拟合精度较高,拟合结果的几个待定系数也具有一定的物理属性。

一、利用三次多项式曲线对车道线建模

关于车道线函数模型,首先需要基于本车建立车体坐标系,坐标系原点设为车辆质心。如下图2所示为利用MATLAB的自动驾驶工具箱函数生成的一条模拟路段,蓝车为主车,其余车辆为交通车。

图2 同向三车道弯道场景

左右侧车道线的数学模型可以利用三次多项式进行描述(MATLAB的自动驾驶工具箱库函数提供了三次方车道边界模型函数,cubicLaneBoudary),如下式所示:

式中,ai和bi 分别表示左侧车道线和右侧车道线的待定系数。

为了求解式上式的待定系数,可以基于蓝车所在的中间车道的双侧车道线离散点,利用MATLAB的poliyfit函数进行多项式拟合,拟合结果如下所示:

系数

a0 a1 a2 a3 b0 b1 b2 b3

数值

1.6752

0.1101

-0.016

5.14e-5

-1.964

0.1139

-0.017

6.5e-5

为验证拟合结果的有效性,我们将左右侧车道线的待定系数拟合结果代入上式,绘制三次多项式曲线,结果如下图3的蓝色虚线所示。可以看出,利用三次多项式曲线拟合车道线能达到较高的拟合精度,拟合结果令人满意。

图3 利用三次多项曲线拟合车道线

进一步的,考虑到左右侧车道线均能用三次多项式曲线进行拟合,易知车道中心线也可以用三次多项式进行描述。我们设车道中心线的三次函数曲线及一阶导、二阶导如下式所示,并计算x=0处的各阶导数值,得到:

二、三次多项式系数的物理释义

对于零阶导,即原三次函数在起点x=0处的函数值为系数c0,代表截距,由于此时蓝车质心位置为坐标原点,且刚好位于车道中心线附近,故此时截取较小;

对于一阶导,其导函数在起点x=0处的函数值为系数c1,代表在起点处的斜率,根据斜率定义可知当斜率值较小时,斜率值约等于切线与x轴的夹角 ,即车身相对于车道中心线的航向角:

对于二阶导,其导函数在起点x=0处的函数值为2c2 ,由于一阶导数值远小于1,故车道中心线处的曲率可近似处理为:

对于三阶导,其数值可粗略视为曲率变化率。

综上,利用三次多项式曲线拟合车道线或车道中心线,不仅降低数据传输量,保证数据高保真,而且其系数的物理意义明确,在一定误差范围内可以根据系数直接计算参考线的截距、航向角和曲率,是一种既有理论支撑又便于工程实践应用的车道线模型。值得注意的是,某些资料将三次多项式函数曲线的三阶导粗略视为车道中心线的曲率变化率,此物理量可以用于进行横向轨迹跟踪控制,感兴趣的读者可以参考资料了解。


三、MATLAB代码


clc
clear
close all%% 构建道路场景
% 场景初始化
scenario = drivingScenario;   % 初始化场景
scenario.SampleTime = 0.1;    % 采样时间% 道路中心坐标
roadCenters = [0 0 0; 2 0 0; 4  0 0 ;30 -15 0; 60 -40 0];  % 建立道路
marking = [laneMarking('Solid') ...laneMarking('Dashed') laneMarking('Dashed') laneMarking('Solid')];             % 分界线线型
laneSpecification = lanespec(3, 'Marking', marking);         % 道路规范
road(scenario, roadCenters, 'Lanes', laneSpecification);     % 生成道路% 获得道路边界,先把边界点位置重新整理次序
rdbdy = roadBoundaries(scenario);
rdbdy = rdbdy{1,1}(1:end-1,:);
rdbdy = [rdbdy(3:end,:); rdbdy(1:2,:)];
rdbdy(1,3) = 0;%% 构建车辆信息
% 分别三条车道的中心线坐标,以生成车辆航迹点
ptNums = size(rdbdy,1);
for j = 1:ptNums/2rightBdyPt = rdbdy(j,:);leftBdyPt = rdbdy(ptNums-j+1,:); leftWaypoints(j,:) = leftBdyPt + (rightBdyPt - leftBdyPt)*1/6;centerWaypoints(j,:) = leftBdyPt + (rightBdyPt - leftBdyPt)*3/6;rightWaypoints(j,:) = leftBdyPt + (rightBdyPt - leftBdyPt)*5/6;leftLaneLine(j,:) = leftBdyPt + (rightBdyPt - leftBdyPt)*1/3;rightLaneLine(j,:) = leftBdyPt + (rightBdyPt - leftBdyPt)*2/3;
end% 本车信息
ego.vehicle = [];
ego.waypoints = centerWaypoints;
ego.pos = ego.waypoints(1,:);
ego.speed = 15;% 1号交通车信息
obs = struct;
obs(1).vehicle = [];
obs(1).waypoints = leftWaypoints(30:end,:);
obs(1).pos = obs(1).waypoints(1,:);
obs(1).speed = 0.001;% 2号交通车信息
obs(2).vehicle = [];
obs(2).waypoints = centerWaypoints(15:end,:);
obs(2).pos = obs(2).waypoints(1,:);
obs(2).speed = 10;% 2号交通车信息
obs(3).vehicle = [];
obs(3).waypoints = rightWaypoints(10:end,:);
obs(3).pos = obs(3).waypoints(1,:);
obs(3).speed = 8;%% 在场景增加车辆
% 根据自车信息增加车辆
ego.vehicle = vehicle(scenario,'Position',ego.pos,'PlotColor','b');
trajectory(ego.vehicle, ego.waypoints,ego.speed);% 根据交通车信息增加车辆
obs(1).vehicle = vehicle(scenario,'Position',obs(1).pos,'PlotColor','k');
trajectory(obs(1).vehicle, obs(1).waypoints,obs(1).speed);
obs(2).vehicle = vehicle(scenario,'Position',obs(2).pos,'PlotColor','g');
trajectory(obs(2).vehicle, obs(2).waypoints,obs(2).speed);
obs(3).vehicle = vehicle(scenario,'Position',obs(3).pos,'PlotColor','g');
trajectory(obs(3).vehicle, obs(3).waypoints,obs(3).speed);%% 启动仿真
plot(scenario)
tjty = [];
step = 1;
while advance(scenario)pause(0.05)tjty(step).time = scenario.SimulationTime;tjty(step).pos = scenario.Actors(1, 3).Position(1:2);step = step + 1;
end
grid off
axis off
xlim([-5,70])
ylim([-50,10])
hold on%% 利用三次多项式对车道线进行拟合
% 拟合得到双侧车道线和车道中心线的三次多项式系数
poly_left = polyfit(leftLaneLine(:,1),leftLaneLine(:,2),3);
f_left = polyval(poly_left,leftLaneLine(:,1));
poly_right = polyfit(rightLaneLine(:,1),rightLaneLine(:,2),3);
f_right = polyval(poly_right,rightLaneLine(:,1));
poly_center = polyfit(centerWaypoints(:,1),centerWaypoints(:,2),3);
f_center = polyval(poly_center,centerWaypoints(:,1));% 画拟合结果图
plot(leftLaneLine(:,1),f_left,'b--')
plot(rightLaneLine(:,1),f_right,'b--')
plot(centerWaypoints(:,1),f_center,'b','linewidth',2)

【第4期-智能驾驶汽车系列术语概念解析】第1节:基于车道线方程的曲率计算相关推荐

  1. 【第4期-智能驾驶汽车系列术语概念解析】第2节:基于三点求外接圆的曲率计算方法

    目录 一.利用三次多项式曲线求曲率的缺陷 二.基于三点求外接圆的曲率计算方法 三.实例介绍 1.MATLAB代码 2. 结果展示 总结 一.利用三次多项式曲线求曲率的缺陷 在第4期第一节中,我们利用三 ...

  2. 【第4期-智能驾驶汽车系列术语概念解析】第5节:龙格现象

    目录 前言 一.龙格现象 二.如何避免龙格现象? 前言 数据拟合是指已知有限个数据点,求逼近这些数据点近似函数,因此该函数可以不经过已知数据点,只要求该函数在这些点上的总偏差最小.基于多项式曲线的路径 ...

  3. 【第4期-智能驾驶汽车系列术语概念解析】第3节:基于三点参数方程的曲率计算方法

    目录 前言 一.基于三点参数方程的曲率计算方法 二.实例介绍 1.MATLAB代码 2.结果分析 总结 前言 第2节中,我们介绍了基于三点求外接圆的曲率,这种方法是一种最为精确的.基于数学原理的计算方 ...

  4. 吉利汽车资深总工程师刘卫国:智能驾驶汽车核心技术之控制器

    2018第二届中国汽车电子大会现场 9月13日在广州举办的"2018第二届中国汽车电子大会"上,吉利汽车研究院资深总工程师刘卫国发表了题为"智能驾驶汽车核心技术之控制器& ...

  5. 万字阐述智能驾驶汽车安全体系

    引言:道路千万条,安全第一条! 万字长文讲解智驾汽车电子电气安全,从智能汽车为什么做安全? 做什么? 怎么做? 谁去做? 及相关安全标准简介与内在联系,让大家全面的了解智驾汽车的安全体系,文中穿插一些 ...

  6. 智能驾驶汽车的预期功能安全

    "智能汽车生态群"加微信Time-machine-(备注公司+姓名) 0 前言 当前对智能驾驶汽车预期功能安全研究尚处于起步阶段,主要集中在讨论研究范畴及对内涵的理解.欧宝汽车提出 ...

  7. 自然语言处理NLP星空智能对话机器人系列:深入理解Transformer自然语言处理 基于BERT模型微调实现句子分类

    自然语言处理NLP星空智能对话机器人系列:深入理解Transformer自然语言处理 基于BERT模型微调实现句子分类 目录 基于BERT模型微调实现句子分类案例实战 Installing the H ...

  8. 把地图中的道路以线条提取出来_自动驾驶中基于车道线的高清制图方法回顾

    来源:知乎 HD Map,高清地图,在自动驾驶领域被看得很重,因为它能提供prior知识,让感知难度降低,同时让规划有的放矢. 高清地图目前有两条路,即激光雷达扫描为主的高成本制图方法和摄像头为主的低 ...

  9. 贺世界智能网联汽车大会-速锐得V8翻开智能驾驶汽车新篇章

    2018年10月18日,世界智能网联汽车大会在北京国家会议中心盛大开幕. 智能网联汽车是信息通信.互联网.大数据.人工智能.道路交通等行业加速跨界融合变革的新兴产物,是全球产业创新热点与未来发展的制高 ...

最新文章

  1. yolov4源码_YOLOv4特征提取网络——CSPDarkNet结构解析及PyTorch实现
  2. 或许不理解,但你一定说过的游戏黑话
  3. Mel滤波器组的设计与实现(基于MATLAB和Python)
  4. 使用libcurl开源库和Duilib做的下载文件并显示进度条的小工具
  5. hive建表映射到hbase
  6. 职业中专的计算机综合应用,职业中专计算机教学的思考
  7. 2008秋季-计算机软件基础-0917课堂用例(2)
  8. java项目嗖嗖移动业务大厅项目报告_晋江市撰写节能评估报告的报告机构立项范本-文瑞...
  9. python315题的漫漫通关之路
  10. 讲几种Python包的安装方式
  11. 《代码之美》第六章:菜鸟的自圆其说
  12. 优雅的实现Activiti动态调整流程(自由跳转、前进、后退、分裂、前加签、后加签等),含范例代码!...
  13. 游戏开发者,游戏开发教程
  14. qt Android 基站定位,AT指令获取基站信息
  15. egret环境问题汇总
  16. 几种常用的power bi 图表怎么做
  17. Rails启动项一些参数的调整
  18. 如何使用python视频_如何使用python网络爬虫抓取视频?
  19. 深度学习--基于队列的数据随机载入
  20. 离线语音识别库_离线语音识别_离线语音识别sdk - 云+社区 - 腾讯云

热门文章

  1. 服务调用追踪工具skywalking实践
  2. 牛P的经验、经历、感受分享
  3. iOS---学习研究大牛Git高星项目YYCategories(四)
  4. 08:go语言数字类型
  5. 电脑上的文件如何备份到服务器,教您电脑文件备份怎么弄
  6. Spring定时任务注解说明
  7. Excel用底纹突出单元格的数据给Excel单元格添加底纹效果
  8. 计算机用用技巧,计算机使用技巧介绍汇总
  9. 论文+答辩时PPTword的使用注意点
  10. 北航计算机学院非全日制双证研究生,北京航空航天大学有非全日制双证专业吗?...