ROS 教程之 network:多台计算机之间网络通信(1)点击打开链接
ROS 教程之 network:多台计算机之间网络通信(2)点击打开链接
ROS中多机通信主从机最简单的配置方法-树莓派 to PC点击打开链接
ROS 多台电脑间进行通信(小萌是个球)点击打开链接
在我看来,ROS最牛逼的地方就是它的通信机制了,不仅仅是进程间通信方便,就连不同设备间通信也很方便,只需添加几行代码,你就可以实现多电脑间的 Topi c共享, 远程控制等功能。下面就让我们一起来实现吧!
这里假设我们有两个电脑:电脑 A 为主机端,电脑 B 为控制端。最终要实现在 A 电脑上运行roscore,并且运行 Turtlesim 程序,然后在 B 电脑上运行键盘控制程序,控制 Turtlesim 小乌龟移动。
1. 查看电脑A和电脑B的 IP 和 Hostname
查看IP,在控制台输入:
ifconfig
2. 修改hosts文件内容
使用如下指令,分别在电脑A和电脑B的打开 hosts 文件:
sudo gedit /etc/hosts
在电脑A端的 hosts文件 中添加如下加粗指令:
127.0.0.1 localhost
127.0.1.1 [ hostname_A ]
[IP_A] [ hostname_A ]
[IP_B] [ hostname_B ]
***
同理,在电脑B端的 hosts 文件中,加入如下加粗指令:
127.0.0.1 localhost
127.0.1.1 [ hostname_B ]
[IP_B] [ hostname_B ]
[IP_A] [ hostname_A ]
***
3. 修改 .bashrc 文件
使用如下指令,分别在电脑A和电脑B的打开 .bashrc 文件
sudo gedit ~/.bashrc
在电脑A端和电脑B端打开的 .bashrc 文件的最后一行,加入如下代码:
export ROS_MASTER_URI=http://[hostname_A]:11311
[注意] 此处假设电脑A为主机,如果改成电脑B为主机,则只需要将此步中的 [hostname_A] 改成 [hostname_B] 即可。
4. 运行小乌龟程序
电脑A端:
首先启动 ROS:
$ roscore
然后 Ctrl + T 打开新的控制台,运行:
$ rosrun turtlesim turtlesim_node
电脑B端:
rosrun turtlesim turtle_teleop_key
现在,你就可以用电脑 B 控制电脑 A 中的小乌龟尽情遨游啦! ~\(≧▽≦)/~啦啦啦
有时候出现如下错误:
couldn't find an AF_INET address for``````
解决办法 参考链接
vim ~/.bashrc
在最后添加
export ROS_HOSTNAME=你的hostname
export ROS_MASTER_URI=http://(你想要设置为主机的IP):11311
export ROS_IP=192.168.3.10 (本机的IP)
**********
注意,在这里的ROS_MASTER_URI要设置为你想要当作主机的IP,主机从机这里要设置为一致的IP,另外最好加上ROS_IP.
解决的方式很耐人寻味
在工作站端
hostname -I 输出>>192.168.0.109
export ROS_IP=192.168.0.109
然后就不会再报错了,为了避免每次打开terminal都要重复上面两句,可以在环境变量~/.bashrc加入
export ROS_IP=`hostname -I`
加上 export ROS_IP=`hostname -I` 可以解决问题