zoukankan      html  css  js  c++  java
  • 百度Apollo解析——3.common

    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

  • 相关阅读:
    python函数名和左括号之间不能有空格
    linux版本选择
    filter_map
    awk统计总结
    Spring Boot + Redis 实现各种操作
    手机号正则校验
    判断windows系统
    Redis分布式锁
    shell 脚本快速部署 SpringBoot 项目
    Java主流的Http请求--原生的HttpURLConnection
  • 原文地址:https://www.cnblogs.com/yrm1160029237/p/10093193.html
Copyright © 2011-2022 走看看