版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lwz45698752/article/details/86319195
文章目录
ROS概述
- 机器人硬件越来越丰富,软件代码的复用性和模块化开发需求越发强烈——》亟需机器人通用软件框架——》ROS脱颖而出
- 定位:机器人通用软件框架
- 地位:机器人领域的事实标准
- ROS集成了大量的工具,库,协议,提供类似OS所提供的功能,简化对机器人的控制
- 分布式结构(ROS框架中每个功能模块能单独设计,编译,在运行时以松散耦合的方式结合在一起)
- ROS由核心通信机制,开发工具,应用功能和生态系统四部分组成
- 提供硬件抽象等功能和机制,还整合了第三方工具和库文件,帮助用户快速开发和多机整合机器人应用,且ROS中功能模块封装于独立的功能包或元功能包,便于分享
- 功能包内的模块以节点为单位运行,以ROS标准的IO作为接口,开发者不需要关注模块内部实现,只要了解接口规则就能实现复用
ROS特点
- 核心:分布式网络,使用基于TCP/IP的通信方式,实现了模块间点对点的松耦合连接
- 通信类型包括基于话题的异步数据流通信和基于服务的同步数据流通信
- 参数服务器的数据存储
- 点对点的设计:ROS中每一个进程都以一个节点的形式运行,可分布于不同主机(分散计算压力,协同工作),节点的通信消息通过一个带有发布和订阅功能的RPC传输系统来传送
- 多语言支持:包括Java,C++,Python等。为了支持更多应用开发和移植,ROS设计为一种语言弱相关的框架结构,使用简洁,中立的定义语言描述模块间的消息接口,在编译中再产生所使用语言的目标文件,为消息交互提供支持,同时允许消息接口的嵌套使用
- 架构精简,集成度高:ROS模块化特点使得每个功能节点可以单独编译,且使用同样的消息接口——》所以移植复用更便捷
- 组件化工具包丰富:ROS可采用组件化方式集成一些工具和软件到系统中并作为一个组件直接使用,如RVIZ(3D可视化工具),开发者根据ROS定义的接口在其中显示机器人模型等,组件还包括仿真环境和消息查看工具等
- 免费且开源:开发者多——》功能包多
ROS安装
- 采用软件源安装,软件源(repository)为Linux系统提供了一个应用程序仓库
- 设置系统软件源(restricted,multiverse,universe一般不用修改,可跳过)
- 添加ROS的软件源地址到sources.list文件中(确保能找到下载地址)
- 添加秘钥
- 更新软件源信息
- 安装ROS
- 初始化ROSDEP(负责为功能包安装系统依赖,也是某些功能包会用到的工具)
- 设置环境变量(ROS通过环境变量找到命令的所在位置)
独立功能包安装:
sudo apt-get install
总结
- 关注加粗处即可
ROS架构
-
ROS是一个优秀的机器人分布式框架,从系统实现角度划分如下:
- 计算图
- 文件系统
- 开源社区
-
ROS三种通信机制:1.话题通信(发布和订阅) 2.服务通信(客户端服务端)3. 基于RPC的参数服务器
ROS架构设计
架构分为三个层次:
OS层
Linux系统
中间层
实现ROS核心通信机制以及功能库(Linux作为通用系统,没有针对机器人提供特殊的中间件)
如基于TCPROS/UDPROS的通信系统(基于TCP/UDP网络再次封装)
如进程内的通信方法:Nodelet,其为多进程通信提供优化的数据传输方式,实时性好
机器人相关库,如坐标变换等
应用层
应用层运行一个管理者:ROS MASTER,负责系统正常运行
在ROS MASTER管理下保证功能节点正常运行的应用层
计算图
- 描述程序运行方式
- ROS系统软件的功能模块以节点为单位独立运行,通过端对端的拓扑结构连接
节点
- 节点是执行任务的进程,也称为软件模块
- 一个机器人系统由多个节点组成
- 当多个节点同时运行,将端对端的通信绘制成节点关系图:进程=节点,端对端连接关系=连线
消息
每个消息是一种严格的数据结构,可自定义
话题
- 消息以一种发布/订阅的方式传递,节点向指定topic发布消息(发布者/talker),或订阅某个话题的消息(订阅者/listener)
- 可有多个节点订阅或发布同一话题消息
节点管理器(ROS Master)
- ROS节点管理器(ROS MASTER):管理者角色,统筹管理节点,保证节点的正常运行,具体功能如下:
- 通过RPC提供登记列表及对其他计算图表的查找功能,帮助节点间相互查找,建立连接 ,交换消息,调用服务
- 提供参数服务器,管理全局参数
服务
- 用于双向的同步传输模式(该模式称为服务)
- 基于C/S模型,包含两部分的通信数据类型,一个用于请求,一个用于应答,类似于web服务器
- 只允许有一个节点提供指定命名的服务
文件系统
- 组织程序文件的方式(不同功能文件,不同文件夹)
- 功能包是基本单元,包含节点,库和配置文件,功能包清单(package.xml,记录功能包基本信息)
- 元功能包:功能包的集合,如导航的元功能包包括定位,建模等功能包,只包含一个元功能包清单文件,特点是包含一个引用标签:
- 消息类型:节点间发布/订阅的消息类型,可使用.msg文件在msg文件夹下自定义消息类型
- 服务类型:C/S通信模型下的请求与应答的数据类型,可使用.srv文件在srv文件夹下自定义消息类型
功能包内容
- 文件夹具体功能参见P15,关注:
- config:配置文件
- include:头文件
- scripts:Python脚本
- src:C++代码
- launch:启动文件
- CMakeLists.txt:编译规则
- package.xml:记录功能包基本信息,该文件中<build_depend>标签内定义编译时所依赖的其他功能包,<run_depend>标签内定义运行时所依赖的其他功能包
功能包命令
- catkin_create_pkg
- rospack
- catkin_make:make
- rosdep:depend
- roscd:cd
- roscp:copy
- rosed:edit
- rosrun
- roslaunch
通信机制
ROS的核心为分布式通信机制,即提供多节点间的通信服务,所有功能和工具都建立在该分布式通信机制之上
话题通信(异步)
- talker向master注册发布者信息
- listener同上操作
- master通过RPC向listener发送talker的地址信息
- listener接收到地址信息,通过RPC向talker发送连接请求
- talker确认连接请求,通过RPC向listener确认连接
- listener尝试与talker建立连接
- 发送数据
总结:前五步的通信协议都是RPC,最后传输数据才用TCP
服务通信(同步)
- 一种带有应答的通信机制,与话题比,减少了上述的RPC通信,没有握手
- talker注册
- listener注册
- master通过RPC向listener发布talker的TCP地址信息
- listener尝试建立连接,发送服务的请求数据
- talker接收请求参数,执行服务功能,执行完后,发送应答数据
服务和话题区别
- 服务和话题是ROS种最基础最常用的通信方法
- 参照P21
- 话题是异步通信模式,该方式将信息的产生和使用双方解耦,用于不断更新的,含有较少逻辑处理的通信场景
- 服务是同步通信模式,用于数据量较少,但有强逻辑处理的数据交换
参数管理机制
- 参数类比全局变量,由master管理
- 各个节点通过master这个中转站设置或存取参数
- talker请求master设置参数,listener请求master查询,master返回参数值给listener
- 关注动态参数配置功能
总结
- 熟悉ROS框架的系统架构,了解ROS在计算图,文件系统等层次中的关键概念
- 了解三种通信机制的底层实现流程
- 本章熟悉ROS基本概念,下章学习ROS用法,介绍节点,话题等关键概念的实现方法