1.略讀
該目錄下主要提供了各個模塊公用的函數和class以及一些數學API還有公共的宏定義。
在Apollo 1.0中,common是整個框架的基礎。
configs是配置文件加載。
adapters是數據交互的抽象接口。
math提供了數學幾何api接口。
monitor提供監控log信息。
status提供各個模塊工作狀態。
time提供計時類。
util提供文件io管理功能。
vehicle_state提供車輛狀態信息與預期狀態估計
0.common/apollo_app.h——各個模塊注冊信息。各個模塊每調用一次APOLLO_MAIN(APP),即創建一個module模塊進程, ApolloApp類規范了每個模塊APP類的公有接口。 正常情況下,該進程將持續運行。ApolloApp是純虛函數。這意味着每個模塊需要重寫多個純虛函數接口才能實例化本模塊。而重寫的正是每個模塊不同的地方。
virtual std::string Name() const = 0; //模塊名稱,進程名。 virtual int Spin(); //初始化模塊app的信息,並持續運行直到shutdown virtual apollo::common::Status Init() = 0; //執行初始化加載配置文件和傳感器數據等任務。 virtual apollo::common::Status Start() = 0; //開始執行模塊任務。若由上層message到來觸發,則執行與message相關的回調函數。若由時間time觸發,則調用時間處理回調函數。 virtual void Stop() = 0; //模塊停止運行。在ros::shutdown()執行完畢后的清理工作。
virtual void ReportModuleStatus(); //向HMI人機交互界面發送狀態status碼。
01.主函數,宏定義方便各個模塊運行,每個模塊是一個進程
#define APOLLO_MAIN(APP) \
int main(int argc, char **argv) { \
google::InitGoogleLogging(argv[0]); \ google::ParseCommandLineFlags(&argc, &argv, true); \ signal(SIGINT, apollo::common::apollo_app_sigint_handler); \ APP apollo_app_; \ ros::init(argc, argv, apollo_app_.Name()); \ apollo_app_.Spin(); \ return 0; \ }
1.modules/common/macro.h——類及其實例化的規則:不准拷貝構造、賦值構造等
2.modules/common/log.h——apollo內部使用谷歌的glog作為日志庫。
3.modules/common/time/time.h——chrono庫作為時間管理工具。默認精度是納秒(1e-9).
4.modules/common/util/file.h——操作文件(關於protobuf文件的讀,寫,刪)的函數。 都是模板類函數
5.modules/common/util/string_tokenizer.h——使用特定的分割符將字符串分割成多個部分
6.modules/common/util/factory.h——創建對象的工廠模式
7.modules/common/status/status.h——定義了一系列的狀態碼用於標識各個模塊的工作狀態。
8.common/adapters/adapter_gflags.h——用gflags的宏解析命令行參數。
9.common/adapters/adapter.h——Adapter是來自傳感器的底層數據和Apollo各個模塊交互的統一接口。
10.common/adapters/adapter_manager.h——管理多個適配器,單例模式。所有的message/IO適配器均需要通過REGISTER_ADAPTER(name)在這里注冊。所有的數據交互也通過AdapterManager來進行統一的管理。由於是單例模式,AdapterManager只有靜態成員函數。
11.common/vehicle_state/vehicle_state.h——VehicleState類是標識車輛狀態信息的class。
主要包含線速度.角速度.加速度.齒輪狀態.車輛坐標x,y,z
12.common/monitor/monitor_buffer.h——MonitorBuffer主要用於緩存多條log的消息日志。將多個相同level的log組合到一起。避免冗余信息。 不同level的log,將不會被組合。但是相同level的log日志將被組合到一起。
13.common/monitor/monitor.h——收集各個模塊的工作log日志並發布到相應的topic用於監控
14.common/math——
15.common/kv_db——
16.common/proto
17.common/transform_listener——
詳情參考:https://blog.csdn.net/learnmoreonce/article/details/77511338
