- Perception——感知模块识别自动驾驶汽车周围的环境。感知模块内部包含两个重要的子模块:障碍物检测和交通灯检测。
- Prediction——预测模块用来预测与感知障碍物未来的运动轨迹。
- Routing——路由模块告诉自动驾驶汽车通过全局路径到达目的地。
- Planning——规划模块规划自动驾驶汽车要采取的时空轨迹。
- Control——控制模块通过产生油门、刹车和转向等控制命令来执行计划的时空轨迹。
- CanBus —— CanBus 是将控制命令传递给车辆硬件的接口。它还将机箱信息传递给软件系统。
- HD-Map——该模块类似于库。它不是发布和订阅消息,而是经常用作查询引擎支持,以提供关于道路的特定结构化信息。
- Localization——定位模块利用各种信息源(如 GPS、LiDAR 和 IMU)来估计自动驾驶汽车的位置。
- HMI——Apollo 中的人机界面或 DreamView 是用于查看车辆状态、测试其他模块和实时控制车辆功能的模块。
- Monitor——车辆中所有模块的监控系统,包括硬件。
- Guardian——新的安全模块,用于干预监控检测到的失败和action center相应的功能。 执行操作中心功能并进行干预的新安全模块应监控检测故障。
- Storytelling——隔离和管理复杂场景的新模块,创建可触发多个模块操作的Story。所有其他模块都可以订阅此特定模块。
一、 Control模块简介
控制模块是整个自动驾驶软件系统中的执行环节,控制模块的目标是基于规划模块输出的目标轨迹和定位模块输出的车辆状态生成方向盘、油门、刹车控制命令,并通过 canbus 模块给车辆底层执行器。简单而言,就是告诉车辆该打多大方向盘、多大的油门开度、多大的刹车制动力。
控制模块由两个子模块组成:横向控制模块和纵向控制模块。纵向控制模块通过有门和刹车控制车的纵向加减速,横向控制模块是通过控制方向盘的转动来控制前轮的转向,从而控制汽车的行驶方向。
1.1 横向控制模块
横向控制根据规划模块的轨迹生成方向盘指令。
横向控制器是基于LQR的最优控制器。
横向控制模块如下图所示:
- 位置闭环:通过规划模块的目标车辆位置和定位模块给出的实际车辆位置做差,经过纵向位置控制器生成对应的速度偏差。
- 速度闭环:结合位置闭环的结果,规划模块的目标速度以及 canbus 模块返回的实际车速,通过纵向速度控制器生成对应的加速度偏差。
- 标定表:速度,加速度和油门、刹车对应关系表,通过输入速度、加速度可以查出对应的油门、刹车。
控制模块的输入输出如下图所示。
3.3 plot_control 调试工具
plot_control 调试工具可以将控制模块输出的油门刹车转向参数以图表的形式显示出来。
可能出现以下警告提示:
UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
plt.show()
解决方法:
再重新执行 bash modules/tools/plot_control/run.sh,开始订阅控制消息,按 CTRL + c 结束订阅,会显示这一段时间内油门刹车转向随时间的变化关系,如下图所示(只有在结束后才会弹出下面的图表)。
四、演示视频
【自动驾驶】Apollo 6.0 与 LGSVL 联合仿真(3)
参考
【1】Apollo 控制能力介绍
【2】Apollo详解之常用工具
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!