ROS连接两台设备
利用Ros通信,两台电脑需要处于同一局域网下.
1、查看主机/从机 ip hostname
$ ifconfig 查看ip
如果电脑连接的时有线网,则显示结果中,etho 部分的 inet addr 后面就是该电脑的 IP 地址;
如果电脑连接的是无线,则 wlan0 部分的 inet addr 后就是 IP 地址。
$ cat /etc/hostname 查看hostname
2、修改hosts文件内容
$ sudo gedit /etc/hosts 注意hosts别打错了= =
A电脑(主机)
127.0.0.1 localhost
127.0.1.1 hostname_A
IP_A hostname_A
IP_B hostname_B
B电脑(从机)
127.0.0.1 localhost
127.0.1.1 hostname_B
IP_B hostname_B
IP_A hostname_A
3、修改bashrc文件内容
$ sudo gedit ~/.bashrc
在文件最后一行添加如下代码
A设备:
export ROS_MASTER_URI=http://hostname_A:11311
export ROS_HOSTNAME=hostname_A
B设备:
export ROS_MASTER_URI=http://hostname_A:11311
export ROS_HOSTNAME=hostname_B
4、测试
A:
$ roscore
$ rosrun turtlesim turtlesim_node
B:
$ rosrun turtlesim turtle_teleop_key
then, 就可以在从机B上用键盘控制主机A上小乌龟的移动啦
问题:
B设备上只能看见A设备的相关topic和node,但是无法通过ros通信
经过排查发现,由于之前A设备配置过ROS_MASTER_URI和ROS_HOSTNAME,用的都是localhost,单机时一点问题都没有,因为这个设备对应127.0.0.1,当多台设备是就使roscore挂载到了127的ip上,导致无法通信,所以应该挂载到真实局域网的ip上。