赞
踩
最近进行了自主换道模型的研究,准备应用在实车上进行无人驾驶的测试。模型使用相机传感,包括决策、规划和控制三个环节。
模型的设计思路如下:
首先利用相机传感,得到相机坐标系下的车道线参数,再转换到车辆坐标系下进行轨迹决策、规划和控制。
具体而言,相机传感使用针孔相机和GTS车道线真值,车道线拟合使用参数t(t=0~1)的三次多项式,然后拟合出来的车道线再根据相机位姿和车辆质心的相对位置进行坐标转换。这里的位姿包括X/Y/Z/Pitch/Roll/Yaw,前三者是位置,后三者是姿势。转换之后的车道线方程是相对于车辆坐标系的,在这个坐标系下比较容易进行换道轨迹规划。换道轨迹采用四次多项式,换道轨迹的跟踪控制采用四点预瞄法。
在模型的调试和设计过程中,出现过很多问题。现总结如下:
这种情况下模型的通用性就较差,如果将其改变为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等进行计算,尝试一下,便于以后建模提高速度。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。