基于Dreamland调试控制能力实践
本文档为开发者介绍基于 DreamLand 的 Apollo 控制能力实践,主要包含横、纵向控制器参数整定方法。能够帮助开发者学习如何使用 DreamLand 并如何调试控制算法。
前提条件
开发者对 Dreamland 的仿真功能有基本的了解。
通过图片介绍如何使用 DreamLand 进行任务的创建,并在任务的基础上调试控制算法。
步骤一:Dreamland 任务创建
- 登录 DreamLand 。
- 开发者需要登录以后,在仿真页面中申请仿真试用包,以启用仿真服务。
DreamLand 新建任务:
新建任务后显示如下操作界面:
根据需要选择相应的跑法、场景、代码库及分支、控制所需动力学模型。示例如下:
当前选择的是pnc跑法,选择直行场景、apollo代码库(当前是笔者自己的仓库,用户可以填选择自己的仓库)master分支、基于规则的动力学模型echo_lincoin:
设置完成后点运行即可让百度云利用基于仿真场景,对开发者提供的 Git 分支的规划、控制等算法进行仿真测试。
仿真结束后,开发者可以在最终结果查看控制和规划算法在各个场景中的表现。
步骤二:基于 Dreamland 调试 Apollo 横向控制器
通过调节控制器参数可以达到用户想要的横向控制效果,横向控制器参数所在位置是/apollo/modules/control/conf/control_conf.pb.txt。 “所有”车辆的基础横向控制器调参步骤如下:
- 将matrix_q 中所有元素设置为零;
- 增加matrix_q中的第三个元素,它定义了航向误差加权,以最小化航向误差;
- 增加matrix_q的第一个元素,它定义横向误差加权以最小化横向误差。
对于Lincoln MKZ,有四个元素是状态加权矩阵Q的对角线元素:
- 横向位置偏差系数
- 横向位置变化系数
- 航向角偏差系数
- 航向角变化系数
通过在横向控制器调参中列出的基本横向控制器调整步骤来调整系数,下面是一个例子:
lat_controller_conf {
matrix_q: 0.05
matrix_q: 0.0
matrix_q: 1.0
matrix_q: 0.0
} 对于其它车型,首先更新车辆相关的物理参数,如下所示:
lat_controller_conf {
cf: 155494.663
cr: 155494.663
wheelbase: 2.85
mass_fl: 520
mass_fr: 520
mass_rl: 520
mass_rr: 520
eps: 0.01
steer_transmission_ratio: 16
steer_single_direction_max_degree: 470
} 然后按照上面列出的基本横向控制器调整步骤进行参数调整。
步骤三:基于Dreamland调试Apollo纵向控制器
纵向控制器由级联的PID控制器组成,该控制器包括一个位置控制器和一个具有不同速度增益的高速/低速控制器。Apollo的纵向控制器调谐通过管理开环和闭环两种方式。
- 开环:校准表生成,请参阅how_to_tune_control_parameters_cn.md的详细步骤;
- 闭环:基于高速控制器->低速控制器->位置控制器的顺序。
通过调节控制器参数可以达到用户想要的纵向控制效果,纵向控制器参数所在位置是/apollo/modules/control/conf/control_conf.pb.txt。
1. 高/低速控制器的参数整定
- 将kp, ki, 和 kd 的值设为0
- 开始增加kp的值,以减小阶跃响应对速度变化的上升时间
- 增加ki以降低速度控制器稳态误差
高速控制器主要用于跟踪高于某一速度值的期望速度,参数整定示例如下:
high_speed_pid_conf {
integrator_enable: true
integrator_saturation_level: 0.3
kp: 1.0
ki: 0.3
kd: 0.0
}获得较高速度的相对准确的速度跟踪性能之后,就可以开始从起点开始调整低速PID控制器以获得一个舒适的加速率:
low_speed_pid_conf {
integrator_enable: true
integrator_saturation_level: 0.3
kp: 0.5
ki: 0.3
kd: 0.0
} 2. 位置控制器参数整定
Apollo使用车辆的位置控制器来跟踪车辆轨迹基准与车辆位置之间的位置误差,一个位置控制器参数整定示例如下所示:
station_pid_conf {
integrator_enable: true
integrator_saturation_level: 0.3
kp: 0.3
ki: 0.0
kd: 0.0
}文档意见反馈
如果您在使用文档的过程中,遇到任何问题,请麻烦到我们在【开发者社区】建立的反馈意见收集问答页面,反馈相关的问题。我们会根据反馈意见对文档进行迭代优化。