之前学ROS比较零散,容易忘。最近再看胡春旭大神的《ROS机器人开发实践》做一些笔记,主要梳理知识点,加深印象或回头翻看时用。
一、ROS架构的设计
1.ROS架构分为三个层次:
- OS层
- Linux操作系统,如Ubuntu、macOS等;
- 中间层:(通信机制+开发库)
- TCPROS/UDPROS 通信系统:
- 实现多种通信机制的数据传输(基于发布/订阅、客户端/服务端等);
- 基于TCP/UDP网络的再次封装;
- Nodelet 通信方法
- 更优化的数据传输方式(应用于实时性方面要求较高时)
- 机器人开发相关的库
- 如:数据类型定义、坐标变换、运动控制等;
- TCPROS/UDPROS 通信系统:
- 应用层
- ROS需运行master,用来管理整个系统的正常运行;
- 功能包内的模块以节点为单位运行,通过ROS标准的输入输出接口规则实现复用;
注:若从系统的实现角度来看,ROS可分为三个层次:计算图、文件系统、开源社区。
二、系统实现
1.计算图——描述程序如何运行
- 节点
- 节点即软件模块
- 节点关系图
- 消息
- 一种严格的数据结构
- 基于发布/订阅模型
- 话题
- 以发布/订阅的方式传递
- 服务
- 双向的同步传输模式
- 基于客户端/服务端模型
- 包含的通讯数据类型:请求+应答
- 注:只允许一个节点提供指定命令的服务
- 节点管理器
- 通过远程调用(RPC)提供登记列表和对其它计算图表的查找;
2.文件系统——程序文件如何组织和构建
- 文件系统 -> 元功能包(元功能包清单) -> 功能包
- 功能包:
- 代码( src +scripts ) + 消息类型(msg)+ 服务类型(srv)+ 功能包清单(package.xml)
- 其它(头文件include、编译文件CMakeList.txt、配置文件config、启动文件launch + 动作指令action)
- 元功能包:
- 只包含一个元功能包清单文件package.xml;
- 元功能包清单 与 功能包清单 的区别
- 元功能包清单不需要<build_depend>标签声明编译依赖;
- 元功能包清单需要包含一个引用的标签:
<export> <metapackage/> <export> |
3.开源社区
- ROS社区 -> 软件仓库 -> 元功能包 -> 功能包
- 包含:发行版+软件源+ROS wiki+邮件列表+ROS Answer+博客
三、ROS的通信机制
- 话题通信机制(7步)
- 服务通信机制(5步)
- 参数管理机制(3步)(参数值更新问题)
注:一、二采用TCP/UDP通信,而三没有;一二的异同!!!