ROS小车:通过IP地址SSH实现多机通信

  ROS采用分布式框架将节点通过松散耦合方式结合起来。节点可分布在不同平台上,通过话题和服务进行通信。对于多个平台,ROS只能存在一个ROS Master(即ROS主机),但可存在多个从机。ROS从机可通过局域网不同IP地址SSH方式与主机取得联系。

前提准备

  • ROS主机:虚拟机Vmware(Ubuntu版本: 16.04 ROS版本: kinect)
  • ROS从机:树莓派3B(Ubuntu版本: 16.04 ROS版本: kinect)

虚拟机VMware固定IP地址

  电脑网卡信息可从右键计算机或此电脑管理 里查看。

(图)查看网卡

  打开Vmware左上角工具栏 编辑虚拟网络编辑器更改设置选择电脑网卡

(图)虚拟网络编辑器

  Ubuntu首页编辑虚拟机设置网络适配器桥接模式

(图)编辑虚拟机设置

安装SSH

  分别在ROS主机和ROS从机安装SSH,并设置开机自启。

SSH安装
$ sudo apt-get install openssh-server
SSH启动
$ service ssh start
设置SSH开机自启
$ update-rc.d ssh enable

设置IP地址和主机名

查看IP地址和主机名

$ ifconfig    查看IP地址    
$ hostname    查看主机名

查看IP地址和主机名

可以看到:

  • IP地址: 192.168.1.114
  • 主机名: ubuntu

查看IP地址和主机名

可以看到:

  • IP地址: 192.168.1.138
  • 主机名: pi-3b

添加对方 IP地址和主机名

  • 分别在/etc/hosts文件中添加对方 IP地址和主机名:
$ sudo gedit /etc/hosts
或
$ sudo vim /etc/hosts

添加对方 IP地址和主机名

/etc/hosts
1
2
# pi-3b
192.168.1.138 pi-3b

添加对方 IP地址和主机名

/etc/hosts
1
2
# ubuntu
192.168.1.114 ubuntu
  • ping 一下对方,测试网络是否连通:

可以看出,双向网络畅通,说明底层网络通信没有问题。

使用SSH连接

(图)SSH 连接树莓派3B

设置 ROS URI

ROS中只存在一个MASTER,可以使用终端命令将设置加入配置文件~/.bashrc中。

设置 ROS URI

$ echo "export ROS_HOSTNAME=ubuntu" >> ~/.bashrc
$ echo "export ROS_MASTER_URI=http://ubuntu:11311" >> ~/.bashrc
$ source ~/.bashrc

设置 ROS URI

$ echo "export ROS_HOSTNAME=pi-3b" >> ~/.bashrc
$ echo "export ROS_MASTER_URI=http://ubuntu:11311" >> ~/.bashrc
$ source ~/.bashrc

测试

设置时间同步

  在ROS网络中,坐标变换和消息类型都标上了消息戳,因此多机通信时间同步往往很关键。对此将ROS主机和从机都跟互联网服务器上时钟保持一致即可实现数据同步。ROS主机和从机都安装chrony即可。

$ sudo apt-get install chrony

安装 turtlesim 功能包

以乌龟例程为例,测试ROS主机和从机之间是否实现多机通信。

$ sudo apt-get install ros-kinetic-turtlesim

PC电脑:

$ roscore
$ rosrun turtlesim turtlesim_node
(图)乌龟例程

树莓派3B:

查看话题:

$ rostopic list
(图)rostopic

发布Twist命令:

发布Twist命令一次,控制乌龟行走:
$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2,0,0]' '[0,0,1.8]'

循环发布Twist命令,控制乌龟行走:
$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
(图)Twist命令

测试一下:

当然也可以通过按键控制控制乌龟行走:

$ rosrun turtlesim turtle_teleop_key
(图)turtle_teleop_key

至此,ROS多机通信配置完成。ROS主机运行乌龟节点turtlesim_node,从机上也能看到发布的话题以及通过命令控制主机上的乌龟行走。

+