在机器人开发过程中会遇到上下位机的通信问题,如果是两台Linux系统,我们可以使用串口、usb等连接完成信息传递,但如果他们都是ros系统,使用网线连接也十分方便,而且传输速度快。
经测试本文方法只适用于物理机,对虚拟机暂时无效。
参考网址
实现方法
首先你需要买一根网线
将两台电脑分为主机和从机,主机可以用来开roscore,从机比较适合接收、反馈。
主机端进行如下文件的设置:
host文件
sudo gedit /etc/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
bashrc文件
sudo gedit ~/.bashrc
A电脑(主机)
export ROS_HOSTNAME=hostname_A
export ROS_MASTER_URI=http://hostname_A:11311
B电脑(从机)
export ROS_HOSTNAME=hostname_B
export ROS_MASTER_URI=http://hostname_A:11311
然后source一下
接下来,在主机和从机上分别新建一个有线网络
依次点击 设置->Network->Wired->Options…->IPv4 Settings,Method选择Manual,点击add,然后填入三个部分,注意IP要在同一个网段,特别要注意勾选上Requare …….那个选项。从机上和这个修改步骤一样,只需要把Address改为192.168.2.12,其他两个不变,如果自己不会修改的话直接拷贝我的也没问题。
此处有博客建议网关填成0.0.0.0,这样不会干扰到无线网的使用
之后,连接这部分的工作完成,可以试试ping一下对方
ROS测试
连接完成后用小乌龟测试下,主机运行节点管理器 roscore,另打开一个终端运行
rosrun turtlesim turtlesim_node
从机运行键盘发送命令的节点
rosrun turtlesim turtle_teleop_key
就可以键盘控制小海龟了~爷青回(x)
后续
本人当时测试时,是通过下面的方法来保证主机可以访问无线网的
首先ifconfig
删除有线默认网关
sudo route del default gw 内网网关 dev xxx
添加无线网关为默认网关 sudo route add default gw 无线网关 dev xxx
xxx为网卡名