Apollo 毫米波雷达代码阅读

本文详细介绍了Apollo中ContiRadarCanbus节点的启动流程,包括APOLLO_MAIN宏的解析、ContiRadarCanbus的初始化和启动过程。ContiRadarCanbus通过CanClient与CAN卡通信,ContiRadarMessageManager负责解析消息。在ContiRadarCanbus的Start方法中启动设备并配置,CanReceiver的RecvThreadFunc不断接收和解析数据。
摘要由CSDN通过智能技术生成

片段 - 万物皆片段(可能是最好用的代码分享平台)

 

源码位于 /modules/drivers/radar/conti_radar

引用官方

主要文件

  • main.cc
  • apollo_app.cc
  • apollo_app.h

mian.c文件

文件中只有一行代码:APOLLO_MAIN(ContiRadarCanbus) ,使用宏APOLLO_MAIN,开启了 ContiRadarCanbus 节点,这里 ContiRadarCanbus 节点开始运行,这里的的节点与ros中的node概念一致,相当于一个进程

APOLLO_MAIN宏解析

APOLLO_MAIN 宏定义位于"modules/common/apollo_app.h"文件。
设置log和SIGINT信号处理程序,收到信号,关闭本节点。
创建模块类对象,设置节点名字,调用基类(ApolloApp)的Spin()函数。

ApolloApp类:

Spin()函数属于类ApolloApp public成员函数,类ApolloApp是所有模块类的基类。
Public成员有name()函数,用于获取模块名字。Spin()函数用于初始化、启动、当ros关闭时关闭模块节点。还有一个析构函数。
Protected成员都是vritual接口,子类都会重写,在Spin()函数中调用,其实现实在具体各个模块内部。Init()函数完成加载模块的配置文件,创建订阅话题。Start()函数:注册回调函数,回调函数负责节点核心任务,通常由上游话题或者timer触发。Stop()函数,结束节点,正常时不会执行到。ReportModuleStatus()返回模块状态。apollo_app_sigint_handler()函数,信号处理函数。
Spin()函数使用init(),start()和stop()函数完成模块节点的实现。此函数一般不会被重写,也就是使用ApolloApp的实现。

ContiRadarCanbus

ContiRadarCanbus 继承自 ApolloApp,实现了 Init Start Stop 等方法

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值