signed

QiShunwang

“诚信为本、客户至上”

ros主从机通信

2020/12/26 15:58:08   来源:

1、查看主从机的ip,并互相ping(主机为A,从机为B)

ip查看指令ifconfig
假设:
A的ip为:192.168.0.1
B的ip为:192.168.0.2

互相ping对方,只有ping通了才能实现通信

2、互相修改hosts文件

首先查看各自的hostname,在终端里输入hostname即可
假设:
主机A的hostname为:hostA
从机B的hostname为:hostB

然后修改主从机的 /etc/hosts 文件
主机A:
添加从机的相关信息

192.168.0.2 hostB

从机B:
添加主机的相关信息

192.168.0.1 hostA

3、设置主从机的.bashrc文件(zsh对应的.zshrc文件)

分别修改主从机的.bashrc文件
主机A添加:

export ROS_HOSTNAME=hostA
export ROS_MASTER_URI=http://192.168.0.1:11311 ##主机的ip
export ROS_IP=192.168.0.1  ##主机的ip

从机B添加:

export ROS_HOSTNAME=hostB ##这个不设置,可能出现主机无法打印从机信息
export ROS_MASTER_URI=http://192.168.0.1:11311 ##主机的ip
export ROS_IP=192.168.0.1 ##我的测试里主机的ip和从机的ip都可以,去掉也可以

4、测试

要实现双向的通信测试,不止要通过 rostopic list 指令查看是否有接收调对方的topic,还要通过rostopic echo /“topicname” 打印一下,(有时候列表有显示,但所打印不了,同样无法实现双向的控制)
测试方法:1、主从机各自发送topic,互相显示topic内容;2、使用小乌龟教程,互相作为控制和显示端,进行测试。

小乌龟为例:
1、在主机中启动roscore

2、
在主机中启动显示程序:
rosrun turtlesim turtlesim_node
在从机中启动控制程序:
rosrun turtlesim turtle_teleop_key
在从机中输入上下左右健,看小乌龟是否动作

3、
在从机中启动显示程序:
rosrun turtlesim turtlesim_node
在主机中启动控制程序:
rosrun turtlesim turtle_teleop_key
在主机中输入上下左右健,看小乌龟是否动作

双向控制都可以,证明设置成功

参考:
ROS 的工作过程及通信原理
一遍成功的ROS主从机详细配置
ROS中设置多机通信(主从机配置)的方法以及常见问题(节选自ROS2GO手册)