在ROS1种,分布式通信有主机、从机之分,只有主机启动roscore后才可以通信。
首先将分布式机器连接至同一路由器下。
IP配置
根据网段设置固定IP,防止电脑重启后被重新分配IP,需重新配置文件
设置hosts
在局域网或者是万维网上,主机之间可以通过ip(如IPV4地址:192.168.1.150)地址进行通讯,但出于数字难以记忆,我们使用含义丰富的英文名称(即主机名或域名)来映射该ip,让网络程序直接解析该英文名称进行通信,从而在调用ip时避免记错数字而出错。使用英文名称查询对应ip地址的过程被称为域名解析(将域名映射为IP地址的过程)
cursor给出的回答
参考:
(74条消息) /etc/hosts文件修改后如何生效_/etc/hosts 生效_华夏追颖的博客-CSDN博客
(74条消息) Linux修改/etc/hosts_linux /etc/hosts include_低调小一的博客-CSDN博客
linux环境下/etc/hosts文件详解 - 简书 (jianshu.com)
此处,我们就要在主机和从机上设置其它主机的ip地址,在局域网中根据主机名对应的ip地址进行ROS通信。
# hostname查看并修改(若名称太长不方便使用)
sudo gedit /etc/hostname
# 设置其它分布式电脑IP
sudo gedit /etc/hosts
# 格式为
# ip地址 主机名/域名 (主机别名)
# 具体细节也可以在Ubuntu上man hosts命令查看
配置完成后需重启网络,重新加载配置文件。
sudo /etc/init.d/dns-clean start
sudo /etc/init.d/networking restart
配置ROS_HOSTNAME, ROS_MASTER
根据在/etc/hostname和/etc/hosts文件中的配置的域名映射,我们可以直接在进行ROS主机ip和本机ip配置时使用。
sudo gedit ~/.bashrc
# 在末尾加入如下
# 替换主机IP(主机只有一个,所以此处主从机都一样)
export ROS_MASTER_URI=http://hosts文件中设置的主机名:11311
#替换本机IP(根据本机的主机名配置,所以此处主从机不一样)
export ROS_HOST_NAME=hostname文件中设置的本机名
修改完后记得
source ~/.bashrc
测试
主机启动:
roscore
新窗口
rosrun turtlesim turtlesim_node
从机启动:
rosrun turtlesim turtle_teleop_key
在从机可以控制主机的小乌龟移动即通信成功
参考: