cyberRT源码浅层解析(一)
最近打算做个自主地面与空中机器人的开源workflow,其实也很简单,主要就是写个简单通信中间件,替换掉ros的通信机制,使用protobuf传递消息,支持px4等主流飞控和串口通信至底层控制系统。后面这部分麻烦一点,可参考的比较少,前面的内容,各家大厂应该都已经做烂了, 百度的apollo属实是一个绝佳的参考,但是百度的modules依赖cyberRT太深了,而且cyberRT没有单独做一个项目,不过cyberRT的文档确实不错,写个渣渣文章,梳理源码记录一下。除去cyberRT的部分源码会额外开一个专栏开搞。
作为一个初学者经常对着一个项目发呆,因为很难看的明白这么多模块的功能,首先快速地作了一个每个模块的简单功能介绍,后续会按照程序的顺序对每个模块深入源码学习。
cyber模块及功能说明
-
模块
| – base 高性能线程安全基础库
| – blocked 消息管道容器,和data模块有一定的近似,面向开发者的接口(需要进一步学习)
| – class_loader 组件加载器,加载非cyber部分单个so库
| – common 公共的test、proto转*文件、其他工具
| – component 组件基类、外部的modules需要继承该component
| – conf 配置文件
| – croutine 协程及其工厂,调度单元
| – data 传感器数据的读取和写入
| – event 事件类
| – io epoll+io
| – logger 日志器
| – mainboard 主程序进点
| – message 消息类
| – node 节点(分布式、与ros类似,主要是reader和writer)
| – parameter 参数及参数服务器
| – proto proto文件夹
| – python pythonAPI 后面会略去,最后一个看
| – record 消息记录
| – scheduler 调度器
| – service 类似rosservice
| – service_discovery
| – sysmo system monitor
| – task 任务 启动调度
| – time 时钟与rate(sleep的沉睡间隔)
| – timer 单例定时器 管理task
| – tools 一大堆工具channel launch
| – transport 多进程通信,为上层封装了底层数据传输的细节 -
类
| – cyber 创建node
后面将从mainboard开始逐步分析每个模块。