array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 自动驾驶路径规划论文解析(3) - 爱码网

本文解析文章:On-Road Trajectory Planning for General Autonomous driving with enhanced tunability
文章稀松平常,没什么创新点,基本上还是用的Dolan组的惯有伎俩。横向位置规划加纵向速度规划,但文章里面强调了参数的调节问题,也就是选少一点参数的意思,完全没有谈到要点,但是总体思想可以被任何想要实现无人驾驶路径规划的同学使用。

路径规划模块的总体结构如下:
自动驾驶路径规划论文解析(3)
第一段是生成参考线,也就是我们说的reference line, 这个reference line 的生成还可以分两步,接下来会具体说一下。第二个模块就是选出最优曲线,可以是换道曲线,避障曲线,还可以是调节速度,所有的外界交通行为而导致的不按本车固有方案行驶的部分都包含在了这个里面,最后一个就是生成一个车辆可行的局部曲线。

第一个模块,参考线生成:
自动驾驶路径规划论文解析(3)
参考下的优化,最重要的指标就是最小化累计曲率,就是让线条尽量的平滑。
自动驾驶路径规划论文解析(3)
这张图里面看的很清楚,原来的灰色曲线,在中间的拐弯的地方,被蓝点覆盖,这虽然是道路的中心线,但是曲率很大,至少不是人类驾驶员会开的曲线,所以我们在可以调节的范围内最一定的偏移,这个范围是B,偏移后的曲线就是红点覆盖的曲线,至于怎么选择偏移,依然使用代价函数的方式,最小化代价函数获得最优曲线,
自动驾驶路径规划论文解析(3)
C的意思就是累计的heading变化量,很明显,一条直线的heading 变化量是0,那一定是我们最期望走的曲线,而在转弯或弯道中,我们为了最小累计偏离量,一定会在满足条件的前提下,尽量的把要走的线拉直。

然后是参考速度,至少要满足符合离心加速度和车道限速要求:
自动驾驶路径规划论文解析(3)
然后还有几个限制条件,车辆最高的加速度是有上下线的,同时车辆的加加速度也是有上限的:
自动驾驶路径规划论文解析(3)
结合以上的几项要求,生成期望速度profile.

第二个模块:traffice based reference planning, 考虑交通情况的规划
自动驾驶路径规划论文解析(3)
也有三个模块组成,第一个模块,变道模块,直接从reference line 1 切换到 reference line 2 上去。 第二种情况,依然是在本reference line上行驶,但是由于障碍物需要临时的避开reference line, 同时还需要对速度进行replan,偏离原有的设定速度。
自动驾驶路径规划论文解析(3)
我们根据上面的图开解释:
自动驾驶路径规划论文解析(3)
自动驾驶路径规划论文解析(3)
如何选取最优的避障曲线,使用cost function的方法,function 有三项组成,第一个,用于惩罚过多的偏移,指数函数的指数意思是waypoint点直接的线段e 和 横向分辨率delta_L的比值。第二项是横向偏移量与delta_L比值,第三项是碰撞检测。

文章也不说为什么这样就好tune一些,完全和题目说的根本没有关联。不知道在扯淡什么。

速度profile的生成也是一样的方法, cost function minimization. 不多说了。

最后的一步,生成局部平滑曲线,根据上面的spatial and temporal 最优化结果,生成五阶多项式曲线,和三阶速度曲线,这个和上一个论文解析中的方法相似,直接参考即可。

最后值得探讨一个问题:时空分离的规划,到底怎么选择曲线自变量?
通常来讲,数学上我们推荐统一自变量:意思就是如果我们的空间曲线是p(s),横向的偏移量是关于sl坐标系中位置s的曲线,那么在规划时间曲线(也就是纵向速度的时候)我们也推荐把速度写成v(s), 而不是v(t), 因为自变量统一后很多工作会变得简单,注意,这里的v(s)中的s其实是s(t), 在文章2014 - Motion planning under uncertainty for on-road auto也推荐先在做规划的时候写成v(t), 然后在积分成v(s).因为在实际情况下,显然给一个关于时间的速度函数更好实现,我们就直接可以计算期望速度和加速度这种参量。做完这个规划后,我们再再时间上对速度做积分变成s, 然后获得关于s的其他参量。
自动驾驶路径规划论文解析(3)

相关文章: