TypechoJoeTheme

鱼一的博客 ◡̈

yuyi

知不可乎骤得,托遗响于悲风
网站页面
标签搜索
c++

ROS 通信机制

节点和 Master

当一个ROS节点启动时,它会执行以下步骤来注册自己并与其他节点通信:

  1. 节点注册

    • 新启动的节点会向ROS Master发送一个注册请求,以便让Master知道它的存在。
    • 这个注册请求是通过XMLRPC和HTTP协议发送的,其中包含了节点的名称、类型和提供的话题、服务等信息。
  2. ROS Master响应

    • ROS Master收到节点的注册请求后,会记录下节点的信息,并在节点注册表中注册该节点。
    • Master会为节点分配一个唯一的ID,并为该节点分配一个动态端口号,用于后续的通信。
  3. 订阅或发布话题

    • 节点可能会订阅或发布一个或多个话题,以便与其他节点进行通信。
    • 当节点需要订阅特定话题时,它会向ROS Master发送一个订阅请求,请求订阅某个话题的消息。
    • 同样地,当节点需要发布特定话题时,它会向ROS Master发送一个发布请求,请求发布某个话题的消息。
  4. ROS Master响应订阅/发布请求

    • ROS Master收到节点的订阅/发布请求后,会查询话题注册表,并返回该话题的发布者地址信息给订阅者或发布者节点。
    • 这个地址信息包括了发布者节点的IP地址和端口号。
  5. 建立连接

    • 订阅者节点收到ROS Master返回的发布者地址信息后,会使用TCPROS或UDPROS协议向发布者节点发起连接请求。
    • 发布者节点在收到连接请求后,会响应并与订阅者节点建立连接。
  6. 数据交换

    • 一旦连接建立成功,节点之间就可以开始通过话题进行数据交换了。
    • 发布者节点将消息发送到话题,而订阅者节点则从话题获取消息。

总的来说,节点之间的通信过程涉及到了节点的注册、话题的订阅和发布、ROS Master的响应以及节点之间的连接建立。这个过程确保了节点能够自动发现和交流,使得ROS系统具有高度的灵活性和自动化。

XML/RPC 在 ROS 节点连接中的应用

在 ROS 中,当 Listener(订阅者)向 Talker(发布者)发送连接请求的过程中,XML/RPC 协议起着关键作用。这个连接请求发生在节点初始化阶段,目的是协商后续数据传输所使用的协议和参数。

连接请求的详细过程

  1. 获取 Talker 信息: Listener 首先向 ROS Master 查询 Talker 的 URI 地址。这个地址包含 Talker 的 IP 地址、端口号以及支持的通信协议类型。
  2. 连接请求使用 XML/RPC:

    • Listener 使用从 ROS Master 获取的 Talker 的地址和端口,通过 XML/RPC 协议向 Talker 发出一个 requestTopic 的方法调用。
    • 这个 requestTopic 请求包含 Listener 希望订阅的话题名和 Listener 支持的通信协议列表(通常包括 TCPROS,也可能包括 UDPROS)。
  3. 请求内容:

    • 方法名: requestTopic
    • 参数:

      • 话题名称 (string): Listener 想要订阅的话题。
      • 协议列表 (array): 包含一个或多个支持的通信协议,例如 [["TCPROS"]] 表示只支持 TCPROS。
  4. Talker 的响应:

    • Talker 收到请求后,会根据自身支持的协议类型和优先级选择一个合适的协议。通常情况下,TCPROS 优先于 UDPROS。
    • Talker 返回所选择的协议的详细信息,例如在选择 TCPROS 的情况下,会返回其 IP 地址和端口号,这些信息将用于建立实际的数据传输连接。

后续步骤

  1. 建立 TCPROS 连接:

    • 一旦 Listener 接收到 Talker 返回的连接信息,它将使用这些信息通过 TCP 连接直接与 Talker 建立连接。
    • 连接建立后,Listener 会向 Talker 发送一个确认消息,表明连接已经成功建立。
    • 在此 TCP 连接上,Talker 开始向 Listener 发送实际的话题消息数据。

错误处理

如果连接请求失败或者协议协商不成功,Listener 会尝试其他支持的协议或者向 Master 报告错误。

总结

虽然最终的数据传输是通过 TCPROS 或其他协议进行的,但在建立连接之前,Listener 和 Talker 之间使用 XML/RPC 协议进行协商,确保双方能够就通信协议和网络参数达成一致。这个过程是 ROS 灵活和高效通信的关键部分,允许系统动态适应各种网络和节点配置。

赞(0)
版权属于:

鱼一的博客 ◡̈

本文链接:

https://yuyi.monster/archives/252/(转载时请注明本文出处及文章链接)

评论 (0)

More Info for me 📱

IP信息

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月