在自动驾驶系统中,会使用多种坐标系,比如WGS84,UTM,车体坐标系等,介绍各个坐标系的文章也很多,在此不再赘述。在这里对planing和control常用坐标系做一些简述。
1 planning模块
规划模块常用的坐标系分为曲线坐标系(Frenet)和笛卡尔坐标系(直角坐标系),其中笛卡尔坐标系分为UTM(统一横轴墨卡托)或者全局/世界坐标系和车体坐标系。
地图模块一般是采用WGS84(经纬度信息)坐标系或者SL坐标系(OpenDrive)等,会转化为UTM坐标系提供给下游各个模块,包括planning。planning模块一般采用路径规划和速度规划解耦的思路,分别使用SL和ST坐标系。path plan中会基于UTM坐标转化到SL坐标系中,使用SL坐标系会简化问题。
- 将高维度的规划问题,转换成了多个低维度的规划问题,极大的降低了规划的难度;
- 方便理解场景,无论道路在地图坐标系下的形状与否,我们都能够很好的理解道路上物体的运动关系。相较直接使用地图坐标系下的坐标做分析,使用弗莱纳坐标,能够直观的体现道路上不同物体的运动关系
- 简化边界处理,可以缩小处理范围,减小运算量,比如只处理某L范围内的障碍物等;
- 提高数值稳定性,比如采用五次多项式进行路径规划时,UTM坐标系下的x,y值在多数区域都很大,例如在天津是
的数量级。
然而,也正是因为无论道路在地图坐标系下的形状是怎样的形状,在弗莱纳坐标系下会丧失重要的曲率信息。比如Apollo6.0中采用的路径规划算法很难直接处理曲率约束。
planning在SL坐标系规划得结果,结合参考系原始的UTM信息,会把规划路径转换到UTM坐标系或者车体坐标系。
2 control模块
control模块通常采用直角坐标系,当然也可以采用曲线坐标系,但是一些基于模型的控制方法,比如LQR和MPC,在采用曲线坐标系时,车辆模型的非线性将加强。
control模块一般采用planning输出轨迹所用的坐标系:UTM或者车体坐标系。
当planning和control都采用车体坐标系时,可能会存在一些问题:
- 引用重复计算:一般planning的频率会低于control的频率。比如Apollo6.0中planning的频率大约是10(planning模块采用事件触发,频率不稳定),control模块的频率为100。在control的10个相邻计算周期中,planning的规划轨迹没有更新,由于采用车体坐标系,车辆的位置一直为(0,0),航向角也为0,然而在每个计算周期,由于控制的作用,车辆的位置为发生改变,但是control在相邻的10个计算周期内会得到一样的计算结果。
- 引入定位误差:在将UTM坐标转化到车体坐标时,会引入定位误差。比如定位的航向角存在误差,会使转换后的轨迹的方向改变。虽然多数控制方法都会考虑车辆的位置和航向,定位误差带来的影响必然存在,但是有些控制方法对航向角不敏感,例如纯跟踪方法。
- Input Check:control模块一般会对planning的轨迹进行TimeOut检验,UMT坐标系下的轨迹在TimeOut时,仍具有一定的有效性。