本文
主要面向由ROS快速转向CyberRT框架的开发者,是一份QuickStart手册。因为是从ROS出发,所以需要读者具备一定的ROS基础。
预备知识
- Linux
- ROS
- C++
简而言之,会Linux命令行操作,熟悉ROS框架,了解基本C++类对象语法。
CyberRT v.s. ROS
CyberRT是参考ROS开发的,所以将他们联系起来看,会比较好地理解和上手apollo的开发。
基本概念
首先我们来看下两者在开发相关的一些主要概念上的异同。
CyberRT | ROS | Description |
---|---|---|
component | package | 组件/包,都是构建项目的最小单元 |
node | node | 节点,一个组件/包里可包含多个节点 |
channel | topic | 通道/话题名,用于节点间通信,一个节点可包含多个通道/话题 |
message | message | 消息名,定义了数据传输的格式,一个通道/话题对应一种消息 |
Reader/Writer | Subscriber/Publisher | 读写器/发布订阅器,都是实现节点通信的具体接口 |
另外 Services 与 Parameters 等概念也类似,因为Service/Client通信模型用的少就不赘述了。
工程目录
了解以上概念后,现在我们从两者的工程目录来看,就比较清晰了。
CyberRT | ROS | Description |
---|---|---|
conf | config | 配置文件 |
dag/launch | launch | 启动文件 |
proto | msg | 消息文件 |
nodes | 源码文件 | |
BUILD | CMakeLists.txt | 编译文件 |
test* | test | 测试文件 |
注: 其中
是CyberRT一个组件目录中一些具体节点名,ROS中把他们都放在一个目录nodes里了
熟悉ROS的朋友可以很明显看出两者其实非常类似,差异主要有这两点:
- Apollo引入了google的protobuf取代了ROS原有的msg消息定义
- Apollo采用Bazel编译工具来管理C++依赖环境,而不是Cmake
所以从一个ROS开发者切换到CyberRT下,需要简单了解下google的gflags、glog、gtest以及protobuf用法,还有就是Bazel的基本语法,为此我在本文最后梳理了一份参考资料供大家阅读。
开发工具
最后在开发工具上,Apollo其实也准备了许多ROS中比较常用的工具。因为开发必然会用到,所以我也简单提下。
CyberRT | ROS | Description |
---|---|---|
cyber_visualizer | Rviz | 用于消息的可视化 |
cyber_monitor | rostopic/rqt | 查看实时消息数据 |
cyber_recorder | rosbag | 录制/回放消息数据 |
参考资料
- 官方关于CyberRT的README,其中 'Quickstart'、 'API' 与 'DeveloperTools' 这三个是必看,也最好跟着做下,可以很快的了解CyberRT框架。
- google关于protobuf的Guide,其中'Defining A Message Type'这段内容是必读的,其他消息嵌套等用法可以等用到了再来查阅。
另外我们可以结合apollo开放平台文档里的'数据格式'那栏内容来加深我们对Apollo消息格式的理解。 - 关于gflags的简介,这篇说明是比较简俗的,内容不多可以看完。
- 关于glog的简介 ,可以先简单浏览下。日志输出在后期调试还是比较重要的,完整的说明到时用到了,可在google的github仓库里找到glog的README细看。
- gtest的入门手册,其中'Googletest Primer'必看,其他内容可到时再查。