前言
Apollo星火计划课程链接如下
星火计划2.0基础课:https://apollo.baidu.com/community/online-course/2
星火计划2.0专项课:https://apollo.baidu.com/community/online-course/12
1. 开放空间规划算法总体介绍
开放空间算法的配置主要在valet_parking_config.pb.txt
中,分为4个部分:OPEN_SPACE_ROI_DECIDER
、OPEN_SPACE_TRAJECTORY_PROVIDER
、OPEN_SPACE_TRAJECTORY_PARTITION
、OPEN_SPACE_FALLBACK_DECIDER
。
// /home/yuan/apollo-edu/modules/planning/conf/scenario/valet_parking_config.pb.txt
stage_config: {
stage_type: VALET_PARKING_PARKING
enabled: true
task_type: OPEN_SPACE_ROI_DECIDER
task_type: OPEN_SPACE_TRAJECTORY_PROVIDER
task_type: OPEN_SPACE_TRAJECTORY_PARTITION
task_type: OPEN_SPACE_FALLBACK_DECIDER
1.1 Task: OPEN_SPACE_ROI_DECIDER
根据道路边界,车位边界生成可行驶区域
ps:若可行驶区域里有障碍物,还需要把障碍物的边界考虑进去。
1.2 Task: OPEN_SPACE_TRAJECTORY_PROVIDER
规划粗糙无碰撞轨迹
规划出一条无碰撞的轨迹主要分为以下两个步骤:首先是用混合Astar算法以及RS曲线规划出一条无碰撞的可行轨迹,但是这个轨迹有以下问题:轨迹曲线可能会产生突变,不满足车辆运动学要求。所以需要进一步平滑,这就用到了IAPS/OBCA算法对轨迹进行平滑处理,产生一条无碰撞且满足车辆动力学约束的轨迹。
1.3 Task: OPEN_SPACE_TRAJECTORY_PARTITION
对轨迹进行平滑
这个任务根据对车辆的轨迹是前进的轨迹还是倒车的轨迹进行分割,再根据自车的位置,来决定发送哪一条轨迹以及判断是否需要切换轨迹。
1.4 Task: OPEN_SPACE_FALLBACK_DECIDER
检查规划的轨迹是否与障碍物是否发生碰撞。若发生碰撞,就会进入FALLBACK的状态,规划出一条停车的轨迹,再重新进行路径规划。
2. 基于混合A *的路径规划算法
Astar算法在机器人路径规划领域应用颇多,在这里就不细细展开了,想了解的读者们还请参考这篇文章——
自动驾驶路径规划——A*(Astar)算法
2.1 hybrid A*的简要思想
接下来谈谈Astar算法存在的问题,
可以看到,Astar算法产生的路径并不平滑,不满足车辆的运动学约束。 根据车辆的动力学模型,实际车辆的航向与车辆后轴中心的速度方向是一致的。因此,我们可以把车辆的运动路径等效为后轴中心点的一段段不同曲率半径的弧线组成,如下图所示。 通过车辆的前轮转角,可以计算出车辆后轴的转弯半径。 我们可以对前轮转角进行采样,不同的前轮转角对应了不同的转弯半径,每个采样周期内,行驶一段固定长度的弧长,这样我们就可以得到下图所示的平滑路径。
其中x_grid
、y_grid
、phi_grid
分别是的索引,即方向上的长度除以精度。通过三个索引组成的字符串是否相同,来判断节点是否遍历过了。
2.2 RS曲线
文章出处登录后可见!