提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
TODO:写完再整理
- 系列文章目录
- 前言
- 为什么需要数据接口及通讯代理系统架构
- 解决这种数据接口问题和一对一通讯,一对多通讯问题的方法我总结了几个:
- 一、机器人各个模块获取数据的方法
- 1.数据直通的方法
- 2.数据代理的方法
- 二、系统数据类型接口管理的方法
- 1.用protobuf的方式定义数据接口
- protobuf的使用方法与步骤
- 2.用.h定义接口
- 3.Ros用.msg、.srv、.action的方式定义接口
- 消息类型使用的方法
前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!
本文先对数据接口及通讯代理系统架构介绍做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章
提示:以下是本篇文章正文内容
为什么需要数据接口及通讯代理系统架构系统中的各个模块都有各自的输入输出数据,多模块配合的时候就需要通讯了
如:在一个ROS系统中感知系统读取传感器数据、规划系统读取地图系统的地图数据、控制系统读取规划系统的路径数据,地图系统读取控制系统的里程计数据等等,这些数据错综复杂有时候还服用耦合,发布被重复订阅回调消耗算力,更要命的是每个模块使用相同意义数据的的数据类型、格式单位不统一,造成数据很乱
.
.
1、使用代理的方式,统一通过各自模块的代理按照一定频率订阅发布自身模块的数据,进而把模块看成一个小黑盒子
2、通用的数据接口,如每个模块都要用到的数据要按照一定规范写,统一数据类型、单位和接口内容,并用protobuf的形式定义接口
3、私有的数据接口,仅仅是该模块内部使用的数据(因为模块内部和会划分层),可以用.h的结构体stuct定义数据接口
经过简单的上面规范,我们在debug的时候,可以通过可视化每个模块输入输出的数据,在数据层面更加容易定位到问题,有时候仅仅通过逻辑是很难debug出问题的
.
.
通过自己写驱动用厂家的api读取出来!
.
.
读传感器数据可以通过系统代理(二级)
系统中的各个模块的数据通讯可以通过代理的方式,这样接口更加明确!系统内的模块用共享内存进行通讯,系统外的模块和传感器通讯(串口等等)用代理进行通讯
.
.
数据接口,模块对外用protobuf ,模块对内用.h的stuct
1.用protobuf的方式定义数据接口 protobuf的使用方法与步骤(1)源码编译二进制安装protobuf功能包 (2)定义.proto数据接口文件 (3)在cmakelists中加入.proto数据接口文件路径并编译成对应的.h文件 (4)在源码编程的时候include进来.h文件,并根据.h文件语法使用数据类型接口!
protobuf接口类型API:
1)创建一个对象 2)复制一个对象 3)合并一个对象 4)获取对象的size 5)获取一个对象 6)赋值一个对象 7)清除一个对象内存2.用.h定义接口 3.Ros用.msg、.srv、.action的方式定义接口
这个仅仅限于用ROS系统
消息类型使用的方法(1)数据类型结构看左边
(2)对象名称看右边
用对象和对象的成员理解就行了



