ROS入门 — 2、ROS通信机制

一、ROS节点

1.1 ROS计算图

计算图(Computation Graph)是一个由ROS进程组成的点对点网络,它们能够共同处理数据。ROS的基本计算图概念有节点(Nodes)、主节点(Master)、参数服务器(Parameter Server)、消息(Messages)、服务(Services)、话题(Topics)和袋(Bags),它们都以不同的方式向图(Graph)提供数据。

  • 节点(Nodes): 节点是一个可执行文件,它可以通过ROS来与其他节点进行通信。
  • 消息(Messages): 订阅或发布话题时所使用的ROS数据类型。
  • 话题(Topics): 节点可以将消息发布到话题,或通过订阅话题来接收消息。
  • 主节点(Master): ROS的命名服务,例如帮助节点发现彼此。
  • rosout: 在ROS中相当于stdout/stderr(标准输出/标准错误)。
  • roscore: 主节点 + rosout + 参数服务器(会在以后介绍)

1.2 节点

节点是ROS软件包中的一个可执行文件。 ROS节点使用ROS客户端库与其他节点通信。节点可以发布或订阅话题,也可以提供或使用服务。
客户端库: ROS客户端库可以让用不同编程语言编写的节点进行相互通信

  • rospy = Python客户端库
  • roscpp = C++客户端库

1.3 节点相关操作指令

1.3.1 roscore

  • 作用: roscore运行一个master+rosout+参数服务器,是运行所有ROS程序前首先要运行的命令。
  • 用法: roscore
  • 注:
    • 如果roscore运行后没有初始化,很有可能是网络配置的问题。
    • 如果roscore不能初始化并提示缺少权限,可能是因为~/.ros目录属于root用户(只有root用户才能访问),可以用以下命令递归地更改该目录的所有权: bash sudo chown -R <your_username> ~/.ros

1.3.2 rosnode

  • 作用: rosnode显示当前正在运行的ROS节点信息
  • 用法:
    rosnode list :列出启动的节点
    
    rosnode info /rosout(某节点) :返回的是某个指定节点的信息。
    
    rosnode ping my_turtle(某节点):测试某节点的是否正常
    
  • 注:
    • 当打开一个新的终端时,环境将会重置,~/.bashrc文件将会生效。如果你在运行rosnode等命令时出现一些问题,那么可能需要将一些环境设置文件添加到 ~/.bashrc或手动source一下。

1.3.3 rosrun

  • 作用: 用包名直接运行软件包内的节点(而不需要知道包的路径)。
  • 用法: rosrun [package_name] [node_name]

二、ROS话题

2.1 话题通信理论模型

话题通信实现模型涉及到三个角色:

  • ROS Master (管理者): 负责保管 Talker 和 Listener 注册的信息,并匹配话题相同的 Talker 与 Listener,帮助 Talker 与 Listener 建立连接
  • Talker (发布者): Talker 发布消息
  • Listener (订阅者): Listener 订阅消息
    在这里插入图片描述
    流程实现步骤:
Talker注册
Listener注册
ROS Master实现信息匹配
Listener向Talker发送请求
Talker确认请求
Listener与Talker件里连接
Talker向Listener发送消息
RPC协议
TCP协议
  • Talker注册:Talker启动后,会通过RPC在 ROS Master 中注册自身信息,其中包含所发布消息的话题名称。ROS Master 会将节点的注册信息加入到注册表中。
  • Listener注册:Listener启动后,也会通过RPC在 ROS Master 中注册自身信息,包含需要订阅消息的话题名。ROS Master 会将节点的注册信息加入到注册表中。
  • ROS Master实现信息匹配:ROS Master 会根据注册表中的信息匹配Talker 和 Listener,并通过 RPC 向 Listener 发送 Talker 的 RPC 地址信息。
  • Listener向Talker发送请求:Listener 根据接收到的 RPC 地址,通过 RPC 向 Talker 发送连接请求,传输订阅的话题名称、消息类型以及通信协议(TCP/UDP)。
  • Talker确认请求:Talker 接收到 Listener 的请求后,也是通过 RPC 向 Listener 确认连接信息,并发送自身的 TCP 地址信息。
  • Listener与Talker件里连接:Listener 根据步骤4 返回的消息使用 TCP 与 Talker 建立网络连接。
  • Talker向Listener发送消息:连接建立后,Talker 开始向 Listener 发布消息。

  • 上述实现流程中,前五步使用的 RPC协议,最后两步使用的是 TCP 协议
  • Talker 与 Listener 的启动无先后顺序要求
  • Talker 与 Listener 都可以有多个
  • Talker 与 Listener 连接建立后,不再需要 ROS Master。也即,即便关闭ROS Master,Talker 与
    Listern 照常通信。

2.2 话题相关操作指令

2.2.1 rostopic

  • 作用: 获取ROS话题的信息。
  • 用法:
    rostopic echo [topic]:显示在topic话题上发布的数据。
    
    rostopic list -v(选项):列出当前已被订阅和发布的所有话题。 -v:会列出所有发布和订阅的主题及其类型的详细信息。
    
    rostopic type [topic]:来查看topic话题的消息类型。
    
    rostopic pub [topic] [msg_type] [args]:向topic话题中发送具体msg_type类型、具体args参数的的数据
    
    rostopic hz [topic]:查看topic话题中数据的发布速率
    

2.3 ROS消息

话题的通信是通过节点间发送ROS消息实现的。为了使发布者和订阅者进行通信,发布者和订阅者必须发送和接收相同类型的消息。 所以ROS中的话题与消息,就好比生活中的水管和水。发布者与订阅者先通过水管
(话题)进行连接,随后开通水流(发送消息)。

  • ROS消息查看指令:
    rosmsg show 消息:查看消息的详细信息
    

三、ROS服务

3.1 服务通信理论模型

服务通信中模型涉及到三个角色:

  • ROS master(管理者):保管 Server 和 Client 注册的信息,并匹配话题相同的 Server 与 Client ,帮助 Server 与 Client 建立连接
  • Server(服务端):Client 发送请求信息
  • Client(客户端):Client 发送请求信息
    在这里插入图片描述
    流程实现步骤:
Server注册
Client注册
ROS Master实现信息匹配
Client发送请求
Server发送响应
RPC协议
TCP协议
  • Server注册:Server 启动后,会通过RPC在 ROS Master 中注册自身信息,其中包含提供的服务的名称。ROS Master 会将节点的注册信息加入到注册表中。
  • Client注册:Client 启动后,也会通过RPC在 ROS Master 中注册自身信息,包含需要请求的服务的名称。ROS Master 会将节点的注册信息加入到注册表中。
  • ROS Master实现信息匹配:ROS Master 会根据注册表中的信息匹配Server和 Client,并通过 RPC 向 Client 发送 Server 的 TCP 地址信息。
  • Client发送请求:Client 根据步骤2 响应的信息,使用 TCP 与 Server 建立网络连接,并发送请求数据。
  • Server发送响应:Server 接收、解析请求的数据,并产生响应结果返回给 Client。

注:

  • 客户端请求被处理时,需要保证服务器已经启动;
  • 服务端和客户端都可以存在多个。

3.2 服务相关操作指令

3.2.1 rosservice

  • 作用: 获取服务信息
  • 用法:
    rosservice list:查看启动的所有服务
    
    rosservice type [service]:输出service服务的类型
    
    rosservice type /spawn | rossrv show:查看/spawn服务的rossrv show信息
    
    rosservice call [service] [args]:用给定的args参数调用service服务
    
    rosservice find [service]        按服务的类型查找服务
    
    rosservice uri          输出服务的ROSRPC uri
    

四、ROS参数服务器

4.1 参数服务器理论模型

参数服务器中模型涉及到三个角色:

  • ROS Master (管理者) :公共容器保存参数
  • Talker (参数设置者) :向容器中设置参数
  • Listener (参数调用者):获取参数

流程实现步骤:

设置参数
发送参数
获取参数请求
Talker
ROS Master
Listener
RPC协议
  • Talker 设置参数:Talker 通过 RPC 向参数服务器发送参数(包括参数名与参数值),ROS Master 将参数保存到参数列表中。
  • Listener 获取参数:Listener 通过 RPC 向参数服务器发送参数查找请求,请求中包含要查找的参数名。
  • ROS Master 向 Listener 发送参数值:OS Master 根据步骤2请求提供的参数名查找参数值,并将查询结果通过 RPC 发送给 Listener。

参数可使用数据类型:

32-bit integersbooleansstrings
doublesiso8601 datesbase64-encoded binary data
字典lists

注意:参数服务器不是为高性能而设计的,因此最好用于存储静态的非二进制的简单数据

4.2 参数服务器相关操作指令

4.2.1 rosparam

  • 作用:能让我们在ROS参数服务器上存储和操作数据
  • 用法
    rosparam set [param_name] [value]:设置参数
    
    rosparam get [param_name]:获取参数
    
    rosparam load [file_name] [namespace]:从文件中加载参数,还可以对文件重命名。
    
    rosparam dump [file_name] [namespace]:向文件中转储参数
    
    rosparam delete [param_name]:删除参数
    
    rosparam list:查看参数服务器所有参数
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值