apollo学习基础之三[适配器adapter学习]

   

                 apollo学习基础之三[适配器adapter学习]

 

目录

   

                 apollo学习基础之三[适配器adapter学习]

1.适配封装设计

2. AdapterManager的设计

3.总结归纳:


       我们知道,百度优化了ROS,使用ros的通信机制,但是我们在源码学习中,很少见到ros的publisher 和subscriber等熟悉的身影。主要原因是百度对通信层进行了封装,adapter类。那我们就以modules/localization模块首先介绍如何使用封装后的Adapter,另外,百度添加一个adapterManager,用来对所有的adapter进行管理。

APOLLO_MAIN(apollo::localization::Localization)

    POLLO_MAIN就是一个宏,初始化ros中的node,不难看出localization模块本身启动后就是一个进程。同时使用在宏中的ApolloApp::Spin()中首先会执行Init函数,即apollo::routing::localization类的Init()函数;APOLLO_MAIN宏中apollo_app_.Spin()[apollo_app.cc]里面又调用status = Start()接口,实际就是Status Localization::Start() ,而又调用localization_->Start(),实际就是使用rtk_localiztion.cc的Status RTKLocalization::Start() 函数。这里面就初始化了适配器:

 这里配置调取adapterManager的Init函数,static,参数是localization模块下的adapter_conf:

这里接收数据,就是callbakc函数,直接接收到数据放到共享内容中。若果你先处理的话可以直接注册自己模块的callback 函数,像routing一样:

 适配器器通过文件rtk_adapter.conf:

        其实就是创建ros Publisher 和Subscriber对象需要的配置参数,如是pub还是sub,message queue的大小,最后一条是是否为ros,目前都是ros,表明该进程Node为ros节点,通过ros的底层通讯机制进行通讯,例如TCPROS/UDPROS,不过msg类型不是ros原生的msg类型,而是都是protobuf中的proto。

进入到adapterManager::Init中:

上面代码有两个作用:
1.创建ros::NodeHandle对象;调用EnableGps()函数,完成了创建Publisher 和Subscriber对象。在Subscriber创建的时候,肯定需要制定回调百度统一封装的GpsAdapter::RosCallback。

2.因为rtk_localization中没有对sub的消息处理,就没有像routing那样有

    AdapterManager::AddRoutingRequestCallback(&Routing::OnRoutingRequest, this)的语句而是直接用AdapterManager::GetGps()接收回调。

1.适配封装设计

apollo 在//modules/common/adapters/message_adapters.h中定义了

其中模板类adapter的类型localization::Gps为proto,

adapter继承自AdapterBase,AdapterBase是个抽象类,就是一堆接口,这些接口在Adapter中实现

2. AdapterManager的设计

Init的调用中,很多函数的实现是通过DECLARE_SINGLETON宏来实现的。

REGISTER_ADAPTER宏创建了适配所有Adapter的函数,主要是将Adapter和AdapterManager 联系起来的。

最终调用的是GpsAdapter的RosCallback()把数据存放在消息队列中,其实调用的是Adapter模板类中的

 

3.总结归纳:

1、定义msg格式,这里就是proto,例如localization::Gps,然后定义相应的模板类GpsAdapter

2、在AdapterManager::Init()函数中,添加

3、在自己的模块,例如localization,首先定义一个adapter.conf,如下所示

4、然后在自己的模块的Init()/start()函数中,调用AdapterManager::Init(),输入参数为上述adapter.conf:

5、使用:

  • rtk_localizetion模块中这样使用

  • Routing模块中这样使用

在自己模块编写回调函数OnRoutingRequest;

 

 

 

 

 

 

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值