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

百度Apollo解析——3.common的更多相关文章

  1. 百度Apollo解析——1.总介绍

    1. 概括 Apollo源码主要是c++实现的,也有少量python,主要程序在apollo/modules目录中,共18个包,功能包17个: 其中每个模块的作用如下: apollo/modules/ ...

  2. 百度Apollo解析——0.使用VSCode编译Apollo项目

    1.安装微软Visual Studio Code 1.1 方法一 开始之前,首先需要安装Ubuntu Make.虽然Ubuntu Make存在Ubuntu15.04官方库中,但是需要Ubuntu Ma ...

  3. 百度Apollo解析——2.log系统

    Apollo中的glog 在Apollo中google glog 被广泛使用,glog 是 google 的一个 c++ 开源日志系统,轻巧灵活,入门简单,而且功能也比较完善. 1. 安装 以下是官方 ...

  4. 2本Hadoop技术内幕电子书百度网盘下载:深入理解MapReduce架构设计与实现原理、深入解析Hadoop Common和HDFS架构设计与实现原理

    这是我收集的两本关于Hadoop的书,高清PDF版,在此和大家分享: 1.<Hadoop技术内幕:深入理解MapReduce架构设计与实现原理>董西成 著  机械工业出版社2013年5月出 ...

  5. 三维重建:GitHub百度Apollo 2.0

    GitHub:https://github.com/ApolloAuto/apollo 1. 关于Apollo的数据:Apollo的数据会如何开放? 自动驾驶数据将包括具有高分辨率图像和像素级别标注的 ...

  6. 百度Apollo无人驾驶入门课程下载

    本文提供 百度Apollo官网的无人驾驶入门课程下载,主要为视频文件. 视频数量:101个:文件格式:MP4:视频总时长:2小时40分钟:文件总大小:约1.13GB: 马上下载 关注公众号罗孚传说(R ...

  7. 百度Apollo搭建步骤(待更新)

    百度Apollo搭建步骤 ##一.安装ubuntu16.04 无需多说,安装完成打开命令行. ##二.下载Apollo镜像 git clone https://github.com/ApolloAut ...

  8. 百度url解析Joe.Smith整理大全

    百度url解析Joe.Smith整理大全 百度url解析Joe.Smith整理大全...1 本文链接:http://blog.csdn.net/qq_26816591/article/details/ ...

  9. 百度Apollo安装说明

    前言:最近在和百度Apollo合作,Apollo的人很nice,大家都在全力帮助我们解决问题.但Apollo系统有点难搞,安装起来很费劲,为了避免再次踩坑,留下笔记,流传后人,O(∩_∩)O. 1. ...

随机推荐

  1. Java 反射机制应用实践

    反射基础 p.s: 本文需要读者对反射机制的API有一定程度的了解,如果之前没有接触过的话,建议先看一下官方文档的Quick Start(https://docs.oracle.com/javase/ ...

  2. 51nod 1428 贪心

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活动安排问题 基准时间限制:1 秒 空间限制:13107 ...

  3. BW里转换简单常用ABAP

    用户查看的是当时的物料折让,那你必然要给物料加个时间,才好区分.总是以现在最新的物料状态查看历史数据会出现问题.当时这个物料是折让的,现在不折让了.数据会有问题.加个DSO.做一个时间记录.读取系统时 ...

  4. 如何选择MySQL数据库的安装方式

     MySQL数据库安装有yum安装,rpm安装,二进制编译安装,cmake,或者make安装,但是选择什么样的安装方式则全看实际应用场景. 下为网友总结安装方式选择:   若是对数据库要求不太高的场景 ...

  5. mysqldumpslow使用说明。

    mysql慢查询日志分析工具mysqldumpslow. 常用的方法: mysqldumpslow -s c -t 10 /var/run/mysqld/mysqld-slow.log # 取出使用最 ...

  6. 【pandas】pandas.DataFrame.rename()---重置索引名称

    官方文档 github地址 例子: 创建DataFrame ### 导入模块 import numpy as np import pandas as pd import matplotlib.pypl ...

  7. HDU2665Kth number (主席树+离散)

    Give you a sequence and ask you the kth big number of a inteval. InputThe first line is the number o ...

  8. 20179203 《Linux内核原理与分析》第十二周作业

    Return-to-libc 攻击实验 一.实验描述 缓冲区溢出的常用攻击方法是用 shellcode 的地址来覆盖漏洞程序的返回地址,使得漏洞程序去执行存放在栈中 shellcode.为了阻止这种类 ...

  9. dbca 快速健建库

    [oracle@e0946877f272 ~]$ dbca -silent -createDatabase -templateName $ORACLE_HOME/assistants/dbca/tem ...

  10. bzoj 3505 [Cqoi2014]数三角形——排列组合

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3505 好题!一定要经常回顾! 那个 一条斜线上的点的个数是其两端点横坐标之差和纵坐标之差的g ...