Advertisement

apollo自动驾驶进阶学习之:canbus模块代码分析

阅读量:

文章目录

    • 封面
    • 代码架构
    • 内容结构

封面

<iframe>用于嵌入式视频播放的<iframe>标签<embed>元素包含src="https://player.bilibili.com/player.html?aid=343741103"参数,并设置allowfullscreen="true"属性以允许全屏观看。`

apollo自动驾驶:canbus模块代码讲解及测试(1)引言

说明

apollo自动驾驶:canbus模块代码讲解及测试(2)框架讲解

在这里插入图片描述

代码架构

然而Apollo系统的结构相当复杂,其间的各种花哨组件设计让人感到困惑.例如消息适配器工厂模式等概念让人头晕目眩.其中日本的一个项目autoware基于完全原创的ROS框架并采用了Apollon开发者套件进行了测试.这种方案类似于常规机器人开发方案在难度上适合学生作为项目实践使用

common parameter : the default configuration parameters for the canbus module are defined using Google's gflags library, which are defined in canbus_gflags.h.

以下是按照给定规则对原文进行改写的版本

内容结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
复制代码
    #pragma once
    
    #include <memory>
    #include <string>
    #include <utility>
    #include <vector>
    
    #include "cyber/common/macros.h"
    #include "cyber/component/timer_component.h"
    #include "cyber/cyber.h"
    #include "cyber/timer/timer.h"
    
    #include "modules/canbus/proto/chassis_detail.pb.h"
    #include "modules/drivers/canbus/proto/can_card_parameter.pb.h"
    #include "modules/guardian/proto/guardian.pb.h"
    
    #include "modules/canbus/vehicle/vehicle_controller.h"
    #include "modules/common/monitor_log/monitor_log_buffer.h"
    #include "modules/common/status/status.h"
    #include "modules/control/proto/control_cmd.pb.h"
    #include "modules/drivers/canbus/can_client/can_client.h"
    #include "modules/drivers/canbus/can_comm/can_receiver.h"
    #include "modules/drivers/canbus/can_comm/can_sender.h"
    #include "modules/drivers/canbus/can_comm/message_manager.h"
    
    namespace apollo {
    namespace canbus {
    
    class CanbusComponent final : public apollo::cyber::TimerComponent 
    {
    public:
        CanbusComponent();              // 构造函数
        std::string Name() const; 	  // 模块名
    
    private:        
        bool Init() override;    // 对整个canbus模块进行配置,具体配置见上文
        bool Proc() override;    // Cyber 会按照 dag 文件中设置的周期调用此函数
        void Clear() override;    // 清空此模块的相关配置
    
        void PublishChassis();    // pub chassis
        void PublishChassisDetail();    // pub chassis_detail
        void OnControlCommand(const apollo::control::ControlCommand &control_command);
        void OnGuardianCommand(const apollo::guardian::GuardianCommand &guardian_command);    // 两个回调函数,根据配置进行选择
        apollo::common::Status OnError(const std::string &error_msg);    // 对车辆底盘状态进行监控
        void RegisterCanClients();    // 注册can client
    
        CanbusConf canbus_conf_;
        std::shared_ptr<cyber::Reader<apollo::guardian::GuardianCommand>> guardian_cmd_reader_;
        std::shared_ptr<cyber::Reader<apollo::control::ControlCommand>> control_command_reader_;
        std::unique_ptr<apollo::drivers::canbus::CanClient> can_client_;
        CanSender<ChassisDetail> can_sender_;
        apollo::drivers::canbus::CanReceiver<ChassisDetail> can_receiver_;
        std::unique_ptr<MessageManager<ChassisDetail>> message_manager_;
        std::unique_ptr<VehicleController> vehicle_controller_;
        int64_t last_timestamp_ = 0;
        ::apollo::common::monitor::MonitorLogBuffer monitor_logger_buffer_;
        std::shared_ptr<cyber::Writer<Chassis>> chassis_writer_;
        std::shared_ptr<cyber::Writer<ChassisDetail>> chassis_detail_writer_;
    };
    
    CYBER_REGISTER_COMPONENT(CanbusComponent)
    
    }  // namespace canbus
    }  // namespace apollo

全部评论 (0)

还没有任何评论哟~