赞
踩
本文主要记录Apollo规划控制模块的学习以及Dreamview使用和规划控制模代码调试。
aem bootstrap # 在docker环境中执行启动dreamview指令
aem bootstrap stop # 若出现『Moduledreamview is already
aem bootstrap restart # 上面的指令和这一条是类似的,执行二者中的一个即可
buildtool build -p modules/planning/ # 修改Planing代码中的参数后,编译planning模块指令
exit # 退出Docker环境
#### ctrl + alt + t 打开终端
cd modules/planning/
buildtool build -p modules/planning # 进入文件目录
tar -zcvf 自己定义名字.tar.gz modules/planning/ # 代码压缩包制作
学习Apollo的第一步就是去听Apollo平台的课,把云实验室的实验做一下,熟悉一下Dreamview的使用和代码的调试过程。
主⻋靠近⼈⾏道有几个步骤:
1)是否有⾏⼈通过⼈⾏道是否;
2)构建crosswalk的STOP墙;
3)停⽌时间⾏⼈通过⼈⾏道主⻋通过⼈⾏道;
lane follow场景代码的解读:
⼀、是否有⾏⼈通过⼈⾏道:⾸先,通过调⽤reference_line.IsOnRoad(obstacle.PerceptionSLBoundary())来判断障碍物是否在道路上;如果障碍物在道路上(is_on_road为true),则需要进⼀步检查障碍物的SL坐标中的s值(obstacle_sl_point.s())是否⼤于⻋辆⾏驶结束边界的s值(adc_end_edge_s),如果是则判定需要停⻋(stop设为true),否则不需要停⻋;
二、构建crosswalk的STOP墙:根据⼈⾏横道的位置和配置的停⽌距离,⽣成停⻋决策,并将其应⽤于规划框架中的参考线信息;
三、主⻋停⽌时⻓:如果障碍物的速度⼩于等于预设的停⽌速度(kMaxStopSpeed),则判断为需要停⻋。代码⾸先检查是否已经记录了该障碍物的停⻋时间戳,如果没有,则添加当前时间戳;如果已经存在停⻋时间戳,则计算当前时间与之前记录的时间戳之间的停⻋时间,如果停⻋时间超过了配置⽂件中设置的停⽌超时时间(config_.crosswalk().stop_timeout()),则将停⻋状态设为false,即⻋辆启动;
讲完lane follow场景的步骤后,来说一说怎么实现在人行横道指定的距离停车;
traffic_rule_config.pb.txt中找到"CROSSWALK“场景的配置参数,参数stop_distance修改距离,stop_timeout修改停车的时间即可。
config: {
rule_id: CROSSWALK
enabled: true
crosswalk {
stop_distance: 2.1
max_stop_deceleration: 6.0
min_pass_s_distance: 1.0
max_valid_stop_distance: 3.5
expand_s_distance: 2.0
stop_strict_l_distance: 5.0
stop_loose_l_distance: 8.0
stop_timeout: 40.0
}
}
红绿灯路口场景的直行实验有三个stage:lane follow、TRAFFIC_LIGHT_PROTECTED_APPROACH、TRAFFIC_LIGHT_PROTECTED_INTERSECTION_CRUISE;在traffic_light_protected_config.pb.txt中我们可以看到配置参数,距离交通灯路口停止线小于5m时,进入TRAFFIC_LIGHT_PROTECTED阶段,从停止线开始行驶到驶出红绿灯路口进入了TRAFFIC_LIGHT_PROTECTED_INTERSECTION_CRUISE阶段;
打开/apollo/modules/planning/conf目录下的traffic_rule_config_pb.txt文件,将rule_id: TRAFFIC_LIGHT的参数stop_distance改成你想要的距离即可;
config: {
rule_id: TRAFFIC_LIGHT
enabled: true
traffic_light {
stop_distance: 1.8
# 1.0
max_stop_deceleration: 4.0
}
}
修改/apollo/modules/planning/conf目录下的planning_config.pb.txt文件,在PIECEWISE_JERK_PATH_OPTIMIZER中增大default_path_config的l_weight,l_weight=10(原先为1),减小dl_weight ddl_weight= 2(原先为20)ddl_weight=100(原先为1000)dddl_weight=5000(原先为50000);
(2)修改好代码参数后,保存这个文件,在Module Controller中重启planning模块(必须步骤);
进入apollo/modules/planning/conf,打开配置文件planning_config.pb.tx文件(在149行task_type: SPEED_BOUNDS_PRIORI_DECIDER的地方);
【static_obs_nudge_speed_ratio】为绕行限速的百分比;
【speed_limit】是地图中约束的限速值(本地图Apollo Map全地图限速60KM/H);
调整【obstacle_lat_buffer】参数(planning.conf修改参数)可以实现车辆对障碍物绕行限速的设置。如图18所示,我们将其调整为0.1,即10%;【collision_safety_range】代表碰撞方位,即主车在该距离内检测到障碍物就会执行【static_obs_nudge_speed_ratio】的限速,不在改范围内的障碍物,主车会按照默认巡航速度行驶;
考虑到题目要求主车绕行时距离目标障碍物横向距离至少保持1.2m,因此我们调整【collision_safety_range】值为1.5米;planning.conf修改参数 --obstacle_lat_buffer=1.0
1)在运行路径之前记录数据:cyber_recorder record -a;
2)完成运行后关闭记录数据,移动到可视化数据的代码文件夹下:
mv 2023052612251.record.00000 modules/tools/
3)修改参考线平滑算法的参数:cd modules/tools/
vim /apollo/modules/planning/conf/discrete_points_smoother_config.pb.txt
修改参数max_lateral_boundary_bound,把它变小,重新跑一遍;
bash /apollo_workspace/scripts/bootstrap_neo.sh restart
把代码里可视化文件的名字改为刚才记录的文件的名字,运行modules/tools/ref_plot.ipynb代码,就可以看到结果了,减小max_lateral_boundary_bound,会使曲率变大,同时变得不平滑;
1)弯道速度规划实践
打开Dreamview后再终端输入命令“jupyter-notebook”,在上面打开jupyter,新建一个文件,输入如下的命令:“matplotlib notebook
run modules/planning/tools/plot_st_nlp.py -f /opt/apollo/neo/data/log/planning.INFO -t 19:56:37”
最后面的时间需要你在Datarecorder里面点击update time得到之后复制过来;
修改掉头的横向加速度的权重,观察速度曲线的变化;结论:增大权重会减小转弯的速度;
2)减速带速度规划实践
在这里修改优化算法分别为二次规划算法、非线性规划算法,观察速度规划曲线有何区别;
结论:二次规划的v-t曲线满足约束要求,但是s-v曲线没有满足速度限制;
原因:二次规划的速度限制约束是参考动态规划的ST曲线转换而来的,它从s转化到对应的时间t的一个限制区域,实际上是对t做约束而不是对s做约束,因此二次规划的结果如果与动态规划的ST曲线差别较大的时候对速度约束的限制就会不准确;非线性规划算法主要考虑曲率的约束,关于曲率的约束是关于s的函数,约束就更加准确和严格。二次规划的效率是比较高的,但是对速度约束的满足不如非线性规划,非线性规划的不足就是也是效率低。
Notes:SL图中的s是参考线方向的位移,ST图中的s是路径方向的位移,不要认为两个s是一样的!!!
1)泊车场景
启动Planning,Prediction,Routing, TaskManager模块,找到地图中间的停车位,分别选择停车位前道路上一个点和其中的一个停车位作为终点,点击Send Request,发布路由请求。在右侧的pnc monitor中可以看到设置的可行驶区域边界,warm start曲线是规划的粗糙的轨迹,smooth是平滑后的曲线;在planning/conf/planning_config.pb.txt里调高planning_config.pb.txt中distance approach算法跟随warm start路径的权重weight_x,weight_y, weight_phi,重启planning模块,观察规划轨迹有何区别;planning.conf中将use_iterative_anchoring_smoother设置为true,enable_parallel_trajectory_smoothing设置为true(30多行的位置),采用DL-IAPS算法平滑,观察规划轨迹有何不同;
2)靠边停车场景实践
将planning.conf中的enable_scenario_pull_over由false改为true(18行),打开靠边停车场景,地图选择San Mateo,重新打开Routing ,planning,prediction,taskmanager模块,在scenario_set中选择靠边停车场景进行仿真。
本文简单介绍了Apollo学习的几个简单的云实验,通过学习云实验学习Dreamview使用和代码调试。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。