当前位置:   article > 正文

自主换道模型总结_20180502

换道模型

最近进行了自主换道模型的研究,准备应用在实车上进行无人驾驶的测试。模型使用相机传感,包括决策、规划和控制三个环节。

模型的设计思路如下:

首先利用相机传感,得到相机坐标系下的车道线参数,再转换到车辆坐标系下进行轨迹决策、规划和控制。

具体而言,相机传感使用针孔相机和GTS车道线真值,车道线拟合使用参数t(t=0~1)的三次多项式,然后拟合出来的车道线再根据相机位姿和车辆质心的相对位置进行坐标转换。这里的位姿包括X/Y/Z/Pitch/Roll/Yaw,前三者是位置,后三者是姿势。转换之后的车道线方程是相对于车辆坐标系的,在这个坐标系下比较容易进行换道轨迹规划。换道轨迹采用四次多项式,换道轨迹的跟踪控制采用四点预瞄法。

在模型的调试和设计过程中,出现过很多问题。现总结如下:

  1. 建模前模型的接口设计考虑不足。比如,换道模型与其他模型之间的接口准备,比如换道模型何种情况下会启动,启动之后应该要返回一个换道开始的标志位,换道结束之后也需要返回一个换道结束的标志位,供其他模型调用,便于知道换道处于何种状态,这样可以避免多个功能模块之间相互打架冲突。另外接口的准备应该允许很长时间内修改模型内部算法而不改变接口数量和对应的功能。比如,之前换道规划使用的是三次多项式,后来使用的是效果更优的四次多项式,但是由于模型设计成输出只有四个预瞄点,这样无论内部我采用何种算法进行实现,输出的接口都是不变的,极大地方面模型调试。
  2. 建模前模型的通用性考虑不足。之前仿真的场景是自己建立的,是拥有四条车道线的三车道,对应的车道线属性如实线、点线、单线、双线等都是知道的。所以刚开始建模的时候,由于有明确的换道场景,所使用的建模方法就依赖于这个场景,换到另外的场景,就需要改变很多设置。比如,我是要由车道3换道车道2,车辆朝向左侧对应的车道线ID会由3变成2。

    这种情况下模型的通用性就较差,如果将其改变为3车道变到2车道,对应的车道线ID会发生变化,但是不指出具体的ID就会使模型变得更为通用。

3. 模型参数的作用范围要认识清楚。参数的范围和边界决定着模型的修改是否要大范围修正。如果能够理解清楚每个参数的作用和作用范围,会发现实际上在现有模型的基础上只需要巧妙地修改很小的部分,就可以达到预期的效果。如上面的2展现的问题,只要清楚车道线ID的变化是用来判断是不是已经越过了车道线,那么就可以只改变这一部分代替原来的具体LaneID==3等等。

参数的作用范围也影响着后续的调试,比如我后续将模型改成接收向左换道或者向右换道均可,本来以为只需要方向盘转角加一个负号就可以实现,而且还认为这样可以使用一个模型完成两种换道,模型复杂度和计算量都减小了,实际上是不行的。换道开始的部分是可以的,但是一旦车辆运动,预瞄点就不一定是按照预期。出现这个问题是预瞄点偏移了。因此,需要将换道的左右考虑在内,那么就可以利用输出的坐标都取相反数,这样预瞄点就是对的了。不过后来发现还是存在问题,问题在于向左向右换道实际上只是Y坐标的取相反数,X坐标没有变化。按照这种思路改完之后,还是存在问题,车辆向右换道动作没有全部完成,在车道线左右来回摇摆,而且幅度越来越大,处于发散状态。后来才知道,在第一阶段的轨迹预瞄之后,一旦进入第二阶段车道中心线的跟随,车道中心线上的预瞄点就不能取相反数了。车辆的摇摆也是这个原因造成的。

4. 模型运行的效率和运行速度问题。由于模型具有一定的复杂度,所以提高模型的运算速度,降低模型的计算量很有必要。如果一次仿真的时间能够缩短一半,那么整个项目下来节省的时间成本还是非常可观的。

在具体调试过程中,我也发现模型的运算速度会发生突变,有一次我只是删除了一个延迟模块,模块的运行速度从每次0.1s提高到每次0.5s,速度明显加快。同一个功能使用不同的模块速度应该不同,另外变量的重复计算也需要花费很多时间。比如我的模型中需要计算t^2,t^3,t^4,总计需要计算12次。但是由于我之前将其写在参数的m文件中进行计算,后续只需要进行调用即可,相当于这部分只需要之前1/12的计算量即可。

不过对于不同模块执行同一运算的速度还没有进行过具体实验,可以将常用的m-function,s-function等进行计算,尝试一下,便于以后建模提高速度。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/645550
推荐阅读
相关标签
  

闽ICP备14008679号