每次遇见复杂的事情总是在先寻找一种简单明了的方式进行研究,用一种浅显易懂的方式来表达。
今天继续apollo代码中control模块的总结。
还是老样子为了与前面文章衔接,先看下总框架图吧:
对于control模块,前面的已将其流程大致梳理,依旧先看下spin函数。
int ApolloApp::Spin() {
ros::AsyncSpinner spinner(callback_thread_num_); ///开消息线程
auto status = Init(); ///模块初始化(由子类具体重写的)
if (!status.ok()) {
AERROR << Name() << " Init failed: " << status;
return -1;
}
status = Start(); ///模块开启(由子类具体重写的)
if (!status.ok()) {
AERROR << Name() << " Start failed: " << status;
return -2;
}
ExportFlags();