当前位置:   article > 正文

Apollo本地规划控制模块调试代码学习_apollo控制代码

apollo控制代码


前言

本文主要记录Apollo规划控制模块的学习以及Dreamview使用和规划控制模代码调试。


一、Apollo环境启动

1.1 打开Dreamview调试

aem bootstrap                                         # 在docker环境中执行启动dreamview指令
aem bootstrap stop                                    # 若出现『Moduledreamview is already 
 aem bootstrap restart                                # 上面的指令和这一条是类似的,执行二者中的一个即可
 buildtool build -p modules/planning/                 # 修改Planing代码中的参数后,编译planning模块指令
 exit                                                 # 退出Docker环境
  • 1
  • 2
  • 3
  • 4
  • 5

1.2 编译代码重启模块测试效果

####   ctrl + alt + t 打开终端
cd modules/planning/
buildtool build -p modules/planning                   # 进入文件目录
tar -zcvf 自己定义名字.tar.gz modules/planning/       # 代码压缩包制作
  • 1
  • 2
  • 3
  • 4

二、Apollo云实验学习

学习Apollo的第一步就是去听Apollo平台的课,把云实验室的实验做一下,熟悉一下Dreamview的使用和代码的调试过程。

2.1 人行横道场景实验

主⻋靠近⼈⾏道有几个步骤:
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

}
}

2.2 红绿灯场景实验

红绿灯路口场景的直行实验有三个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
}
}

2.3 借道绕行实验

修改/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模块(必须步骤);

2.4 慢速车绕行实验

进入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

2.5 参考线平滑算法实验

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,会使曲率变大,同时变得不平滑;

2.6 速度规划实验

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是一样的!!!

2.7 开放空间规划实验

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使用和代码调试。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/414069
推荐阅读
相关标签
  

闽ICP备14008679号