博主现在从车载自组网信道分配和多跳路由转向了自动驾驶,没啥经验,想快些做出来个Demo还是得站在巨人的肩膀上才行,我选择了Apollo,主要还是支持国产而且它的开发者套件有现成的底盘可以直接跑起来,但是apollo系统结构比较复杂,各种花哨的设计模式(消息适配器工厂模式等)绕得人头晕。日本那里有个autoware是基于原生ROS的,也用Apollo开发者套件跑了下,就是普通的机器人开发那套,难度适合学生用来做项目,还是得师夷长技以制夷,后面继续深入研究一下。

这次的学习是基于Apollo3.0的,因为3.0还是基于ROS的,后期研究autoware开发自己的系统能用得上,而且那个开发者套件也要用3.0。

canbus模块启动过程

参考知行合一2018大佬的Apollo Planning模块源代码分析可以知道canbus模块的主入口为modules/canbus/main.cc

APOLLO_MAIN(apollo::canbus::Canbus); 

该宏展开后为:

复制代码
 1 #define APOLLO_MAIN(APP)                                       \ 2   int main(int argc, char **argv) {                            \  3     google::InitGoogleLogging(argv[0]);                        \  4     google::ParseCommandLineFlags(&argc, &argv, true);         \  5     signal(SIGINT, apollo::common::apollo_app_sigint_handler); \  6     APP apollo_app_;                                           \  7     ros::init(argc, argv, apollo_app_.Name());                 \  8     apollo_app_.Spin();                                        \  9     return 0;                                                  \ 10   }
复制代码

这里直接引用知行合一2018大神对于Apollo Planning模块的分析:

Main函数完成以下工作:始化Google日志工具,使用Google命令行解析工具解析相关参数,注册接收中止信号“SIGINT”的处理函数:apollo::common::apollo_app_sigint_handler(该函数的功能十分简单,就是收到中止信号“SIGINT”后,调用ros::shutdown()关闭ROS),创建apollo::planning::Planning对象:apollo_app_,初始化ROS环境,调用apollo_app_.Spin()函数开始消息处理循环。
————————————————
版权声明:本文为CSDN博主「知行合一2018」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/davidhopper/article/details/79176505

更详细的不再赘述,大家可以去上面链接学习。

apollo_app_.Spin();函数内会依次调用modules/canbus/canbus.ccInit()Start()

Init()主要过程源码分析

复制代码
  1 Status Canbus::Init() {   2   AdapterManager::Init(FLAGS_canbus_adapter_config_filename);/*完成AdapterManager的初始化,   3   FLAGS_canbus_adapter_config_filename对应于modules/canbus/common/canbus_gflags.cc中的   4   DEFINE_string(canbus_adapter_config_filename, "modules/canbus/conf/adapter.conf",    5   "The adapter config file");   6   adapter.conf中配置了canbus模块订阅和发布的topic   7   如果改成原生ROS的话,这里的AdapterManager配置删掉,改成ROS的topic订阅和发布*/  8   AINFO << "The adapter manager is successfully initialized.";   9  10