前提
前4篇文章以及帮助大家快速入门ROS了,而从第5篇开始我们会更加注重知识积累。同时我强烈建议配合B站大学的视频一起服用。
1.ROS架构三层次:
1.基于Linux系统的OS层;
2.实现ROS核心通信机制以及众多机器人开发库的中间层;
3.在ROS Master的管理下保证功能节点正常运行的应用层。
2.ROS关键概念
1.节点(Node)
·节点:执行运算任务的进程,一个系统由多个节点组成,被称为“软件模块”。
ROS的节点关系:
2. 消息(Message)
·消息通信:节点间最重要的通信机制(基于发布/订阅模型)。
·消息是以发布/订阅(Publish/Subscribe)的方式传递。
3.话题(Topic)
·发布者(Talker):针对给定话题发布消息的节点。
·订阅者(Listener):关注话题并订阅特定类型数据的节点。
·订阅者与发布者互相不知道存在
ROS基于发布/订阅模型的话题通信:
4.服务 (Service)
·服务:同步传输模式(基于话题的客户端/服务器(Client/Server)模型),包含用于请求的通信数据类型和用于应答的通信数据类型。
·ROS只允许一个节点提供指定命名的服务
5.ROS节点管理器(ROS Master)
·ROS节点管理器:顾名思义,节点的控制器,保证节点有序的执行
·ROS节点管理器通过远程过程调用(RPC)提供登记列表和对其他计算图表的查找功能,帮助ROS节点之间相互查找、建立连接,同时还为系统提供参数服务器,管理全局参数。
3.文件系统
1.功能包(Package)
2.功能包清单(Package Manifest)
3.元功能包(Meta Package)
4.消息
5.服务
6.代码(Code)
1.功能包
·功能包:ROS软件的基本单元,包含ROS节点、库、配置文件等。
功能包文件结构:
·config:放置功能包中的配置文件。
·include:放置功能包中需要用到的头文件。
·scripts:放置可以直接运行的python文件。
·src:放置需要编译的C++文件。
·launch:放置功能包的启动文件。
·msg:放置功能包自定义的消息类型。
·srv:放置功能包自定义的服务类型。
·action:放置功能包自定义的动作指令。
·CMakeLists.txt:编译器编译功能包的规则。
·package.xml:功能包清单:记录功能包基本信息,作者信 息、许可信息、依赖选项、编译标志等。
<build_depend>depeng</build_depend>标签:功能包中代码编译时的依赖
<run_depend>depend</run_depend>标签:功能包中可执行程序运行时的依赖
ROS功能包常用命令:
ROS命令_ros复制到llib中-CSDN博客
命令 作用 catkin_create_pkg <包名> [依赖] 创建功能包 rospack 获取功能包的信息 catkin_make 编译工作空间 rosdep 自动安装功能包依赖的其他包 roscd 功能包目录跳转 roscp 拷贝功能包中的文件 rosed
编辑功能包中的文件 rosrun 运行功能包中的可执行文件 roslaunch 运行启动文件
2.元功能包
·元功能包:一种特殊的功能包,只包含package.xml元功能包清单文件。
·作用:将多个功能包整合成为逻辑独立的功能包。
·元功能包的package.xml文件需要包含引用
<export>
<metapackage/>
</export>
·元功能包只需要<run_depend>标签
ROS通信机制
·话题通信机制
·服务通信机制
·参数管理机制
1.话题通信机制
发布/订阅模型的话题通信:
通信建立的过程:
【RPC】RPC基本介绍_牧心.的博客-CSDN博客
1.发布者注册
Talker启动,通过端口1234使用RPC向ROS Master注册发布者的信息(例如发布消息的话题名),然后将节点的注册信息加入注册列表。
2.订阅者注册
Listener启动,通过RPC向ROS Master注册订阅者消息(例如订阅的话题名)。
3.信息匹配
ROS Master根据Listener的订阅信息在注册列表中查找,没有找到匹配的发布者就等待发布者出现,匹配到了就通过RPC向订阅者发送发布者的RPC地址信息。
4.订阅者发送连接请求
订阅者接收到ROS Master发送的地址信息后,通过RPC向发布者发送连接请求,传输订阅的话题名、消息类型以及通信协议(TCP/UDP)。
5.发布者确认连接请求
【精选】TCP协议详解 (史上最全)_开放式tcp-CSDN博客
发布者接收到订阅者发送的连接请求后,通过RPC向订阅者确认连接(自身的TCP地址信息)。
6.订阅者与发布者建立网络连接
订阅者接到确认请求后,使用TCP与Talker建立网络连接。
7.发布者向订阅者发布数据
建立连接后,发布者向订阅者发送话题消息数据。
2.服务通信机制
·服务是带应答的通信机制
服务器/客户端的服务通信机制:
通信建立的过程:
1.发布者注册
Talker启动,通过端口1234使用RPC向ROS Master注册发布者的信息(例如发布消息的话题名),然后将节点的注册信息加入注册列表。
2.订阅者注册
Listener启动,通过RPC向ROS Master注册订阅者消息(例如订阅的话题名)。
3.信息匹配
ROS Master根据Listener的订阅信息在注册列表中查找,没有找到匹配的服务发布者就等待发布者出现,匹配到了就通过RPC向订阅者发送发布者的TCP地址信息。
4.订阅者与发布者建立网络连接
Listener接收到确认请求后,用TCP尝试与Talker建立网络连接, 发送服务的请求数据。
5.发布者向订阅者发布服务应答数据
Talker接收到服务请求和参数后,执行服务功能,执行完成,向Listener发送应答数据。
3.参数管理机制
参数管理机制:
1.发布者设置变量
Talker使用RPC向ROS Master发送参数设置数据(参数名和参数值);ROS Master数据保存到参数列表。
2.订阅者查询参数值
Listener通过RPC向ROS Master发送参数查找请求(要查找的参数名)。
3.ROS Master向订阅者发送参数值
ROS Master根据Listener的请求从参数列表中查找参数,找到,用RPC将参数值发送给Listener。
注释:发布者更新参数,订阅者需要重新查询