7.1.7-ROS 常用组件与功能

ROS 中的分布式通信

ROS(机器人操作系统)被设计为一个分布式计算环境。这意味着一个运行中的 ROS 系统可以由分布在多台机器上的多个节点组成。根据配置,任何节点都可能需要在任何时候与任何其他节点通信。

为此,ROS 有特定的网络要求:

  1. 所有机器之间的所有端口必须实现完全双向连接。
  2. 每台机器都必须使用一个能被所有其他机器解析的名称进行自我标识。

实现步骤

1. 准备工作

在为分布式通信配置 ROS 之前,确保不同的计算机处于同一网络中。理想情况下,每台计算机应分配一个静态 IP 地址。如果使用虚拟机,需要将网络适配器设置改为"桥接模式",以便它们在同一网络中互通。

2. 修改配置文件

在每台计算机上,您需要修改 /etc/hosts 文件,加入其他机器的 IP 地址和主机名。

  • 在主机上:

    添加从机的 IP 地址和主机名。

    plaintext
    <Slave_IP_Address>    <Slave_Hostname>
  • 在从机上:

    添加主机的 IP 地址和主机名。

    plaintext
    <Host_IP_Address>    <Host_Hostname>

更新 /etc/hosts 文件后,使用 ping 命令测试机器之间的连通性:

  • 检查 IP 地址: 使用 ifconfigip addr show
  • 检查主机名: 使用 hostname

3. 配置主机的 IP 地址

在主机上,您需要通过在 ~/.bashrc 文件中加入以下行来配置 IP 地址:

bash
export ROS_MASTER_URI=http://<Host_IP_Address>:11311
export ROS_HOSTNAME=<Host_IP_Address>

这些行将 ROS_MASTER_URI 设置为主机的 IP 地址,这告诉 ROS master 节点(roscore)运行的位置。ROS_HOSTNAME 设置 ROS 将使用的机器主机名。

4. 配置从机的 IP 地址

在每台从机上(可以有多台从机),您也需要修改 ~/.bashrc 文件,添加:

bash
export ROS_MASTER_URI=http://<Host_IP_Address>:11311
export ROS_HOSTNAME=<Slave_IP_Address>

该配置使每台从机指向主机的 ROS master,使其加入 ROS 网络。

测试设置

1. 在主机上启动 roscore

在主机上,通过运行以下命令启动 ROS master 节点:

bash
roscore

这一步至关重要,因为 ROS master 节点负责管理 ROS 网络中不同节点之间的通信。

2. 测试主机到从机的通信

  • 在主机上: 启动一个订阅者节点。
  • 在从机上: 启动一个发布者节点。

检查节点是否能按预期通信。

3. 测试从机到主机的通信

  • 在从机上: 启动一个订阅者节点。
  • 在主机上: 启动一个发布者节点。

再次确认节点之间的通信是否正常。