关于Apollo5.5-7.0及以上版本的一些疑惑
前言
我也是刚刚接触这个项目, 在这里总结一下初始化时的两个不同点, 不然有点混乱
ps:
2021/12/28 Apollo的版本更新到了7.0 https://github.com/ApolloAuto/apollo.
问题一 : 从v5.5开始场景初始化方式不同
v5.0
配置文件路径是在planning_gflags.cc中指定的,相关内容如下:
接着我们看看这个路径里面的配置文件planning_config.pb.txt:
v5.5
配置文件路径同样是在planning_gflags.cc中指定的,相关内容如下:
接着我们看看这个路径里面的配置文件planning_config.pb.txt:
发现配置文件中的planner_public_road_config变成了空的, 为什么一个场景都没有? 这个跟程序的入口设计有关
关键看apollo/modules/planning/planner/public_road/public_road_planner.cc
的PublicRoadPlanner::Init(.)函数
v5.0的PublicRoadPlanner::Init(.):
可以看到是通过将planner_public_road_config里面的所有场景加入set当中,然后用这个set去对scenario_manager去初始化. scenario_manager再通过planning_gflags.cc去找各个场景的配置文件路径
再来看看
v5.5的PublicRoadPlanner::Init(.):
v6.0-7.0的PublicRoadPlanner::Init(.):
所以在对scenario_manager初始化时并不需要set, 而是直接去找planning_gflags.cc去找各个场景的配置文件路径完成初始化. 来看一下apollo/modules/planning/scenarios/scenario_manager.cc 的
ScenarioManager::Init(.):
直接先默认的场景就是LANE_FOLLOW 去初始化
至此就解释了第一个问题, 马上下面会遇到第二个问题
问题二 : 从v6.0开始,初始配置文件planning_config_file的加载方式不同
通过前文我们知道v5.0-5.5的配置文件planning_config_file是在planning_gflags.cc中指定的
来看看v6.0–7.0
配置文件路径本应该是在planning_gflags.cc中指定的,搜一下相关内容:
发现planning_gflags.cc找不到planning_config_file的路径了. 这怎么加载配置文件去初始化呢?
可能原因, 关键看apollo/modules/planning/planner/on_lane_planner_dispatcher_test.cc
我们看看v5.0-5.5的on_lane_planner_dispatcher_test.cc:
再看v6.0-7.0的on_lane_planner_dispatcher_test.cc:
第44行代码出给出了配置文件路径,所以如果该文件是要在编译当中被用到的话,那么能够解答第二个问题了
结论
从v5.5开始场景初始化方式不同 ,从v6.0开始,初始配置文件planning_config_file的加载方式不同