< >
Home » ROS2入门教程 » ROS2入门教程-使用Fast DDS Discovery Server

ROS2入门教程-使用Fast DDS Discovery Server

说明:

  • 介绍如何使用Fast DDS Discovery Server协议启动ROS2节点

步骤:

  • 从 ROS 2 Eloquent Elusor 开始,Fast DDS Discovery Server协议是一项提供集中式动态发现机制的特性,与 DDS 中默认使用的分布式机制相反

    Fast DDS Discovery Server供了一种客户端-服务器体系结构,它允许节点彼此使用中间服务器进行连接。每个节点充当发现客户端,与一个或多个发现服务器共享其信息并从其接收发现信息。这减少了与发现相关的网络流量,并且不需要多播功能

    这些发现服务器可以独立、复制或相互连接,以便在网络上创建冗余并避免出现单点故障

  • Fast DDS Discovery Server v2

    此版本包括一个新的过滤器功能,可进一步减少发送的发现消息的数量。此版本使用不同节点的主题来决定两个节点是否希望通信,或者它们是否可以保持不匹配(即不发现彼此)

  • 启动一个 ID 为 0、端口 11811(默认端口)的发现服务器,并监听所有可用的接口

fastdds discovery --server-id 0
  • 设置环境变量
export ROS_DISCOVERY_SERVER=127.0.0.1:11811
  • 启动侦听器节点
ros2 run demo_nodes_cpp listener --ros-args --remap __node:=listener_discovery_server
  • 启动talker节点
export ROS_DISCOVERY_SERVER=127.0.0.1:11811
ros2 run demo_nodes_cpp talker --ros-args --remap __node:=talker_discovery_server
  • 执行Discovery Server
ros2 run demo_nodes_cpp listener --ros-args --remap __node:=simple_listener
  • 验证一切是否正常运行
ros2 run demo_nodes_cpp talker --ros-args --remap __node:=simple_talker
  • 验证此示例的节点和结构,查看listener_discovery_server和talker_discovery_server节点
rqt_graph
  • 服务器冗余

    通过使用fastdds工具,可以创建多个发现服务器。发现客户端(ROS 节点)可以根据需要连接到任意数量的服务器。这允许有一个冗余网络,即使某些服务器或节点意外关闭也能正常工作

  • 建立与冗余服务器的通信

fastdds discovery --server-id 0 --ip-address 127.0.0.1 --port 11811

fastdds discovery --server-id 1 --ip-address 127.0.0.1 --port 11888

export ROS_DISCOVERY_SERVER="127.0.0.1:11811;127.0.0.1:11888"
ros2 run demo_nodes_cpp talker --ros-args --remap __node:=talker

export ROS_DISCOVERY_SERVER="127.0.0.1:11811;127.0.0.1:11888"
ros2 run demo_nodes_cpp listener --ros-args --remap __node:=listener
  • 与备份服务器建立通信
fastdds discovery --server-id 0 --ip-address 127.0.0.1 --port 11811 --backup

export ROS_DISCOVERY_SERVER="127.0.0.1:11811"
ros2 run demo_nodes_cpp talker --ros-args --remap __node:=talker

export ROS_DISCOVERY_SERVER="127.0.0.1:11811"
ros2 run demo_nodes_cpp listener --ros-args --remap __node:=listener
  • 创建分区。可以拆分与发现服务器的通信以在发现信息中创建虚拟分区。这意味着两个端点只有在它们之间存在共享发现服务器或发现服务器网络时才会相互了解。我们将使用两个独立的服务器执行一个示例

    与此模式将连接到和,因为它们共享。 将与他们分享。但是不会听到来自的消息,因为它们不共享任何发现服务器或发现服务器,包括间接通过冗余发现服务器之间的连接

  • 发现分区,使用默认端口 11811 运行在 localhost 上侦听的第一个服务器

fastdds discovery --server-id 0 --ip-address 127.0.0.1 --port 11811
  • 在另一个终端中运行第二个服务器,使用另一个端口侦听本地主机,在本例中为端口 11888
fastdds discovery --server-id 1 --ip-address 127.0.0.1 --port 11888
  • 在不同的终端中运行每个节点。使用ROS_DISCOVERY_SERVER环境变量来决定它们连接到哪个服务器,id 必须匹配。
export ROS_DISCOVERY_SERVER="127.0.0.1:11811;127.0.0.1:11888"
ros2 run demo_nodes_cpp talker --ros-args --remap __node:=talker_1

export ROS_DISCOVERY_SERVER="127.0.0.1:11811;127.0.0.1:11888"
ros2 run demo_nodes_cpp listener --ros-args --remap __node:=listener_1

export ROS_DISCOVERY_SERVER="127.0.0.1:11811"
ros2 run demo_nodes_cpp talker --ros-args --remap __node:=talker_2

export ROS_DISCOVERY_SERVER=";127.0.0.1:11888"
ros2 run demo_nodes_cpp listener --ros-args --remap __node:=listener_2

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2入门教程