ROS多机通信配置(SSH)简述
ROS多机通信还是比较常用的,做个小笔记。
1 SSH
我们可以 使用ssh远程连接移动机器人和无人机上的机载电脑 ,远程进行文件修改、启动程序、监视程序运行状态,而无需额外给机载电脑接上鼠标键盘显示器这一大堆外设。我们只需给Ubuntu系统安装SSH服务器,即可使用ssh进行远程连接。
# 安装服务端,客户端Ubuntu已经自动安装
sudo apt-get install openssh-server
远程连接命令如下,我们需要保证两个 设备在同一局域网下 ,并得知需连接的Ubuntu系统的用户名、ip地址与密码。
# 查询系统的ip地址
# 有线连接看 enxxxx 的ip地址
# 无线连接看 wlxxx 的ip地址
ifconfig
ssh usrname@ip
# 之后需要输入被连接系统的密码
我们可以在Windows、Ubuntu、安卓端使用ssh远程连接系统or服务器。安卓端推荐 【JucieSSH】和【ConnectBot】这两款应用。
2 ROS多机通信
在ssh的基础上配置ros多机通信的环境后,便可以实现多台主从机之前的ros通信。需要配置的内容就一个: 修改对应系统的.bashrc文件 。
温馨提示:如果自己的ROS多机通信 设置无误,但是不能正常进行通信 ,很可能是因为开启了防火墙, 需要将防火墙关闭 。以前我参考别人的教程开启了防火墙,折腾了多台设备均不能正常通信,采用控制变量法排除一天时间才发现是因为开启了防火墙...
配置实例如下: 1)确认谁为主机谁为从机,并拿到在同一局域网下对应的ip地址。主机仅有一个,从机可多个。
# 同一局域网下,同一网段(校园网可能会有bug)
A主机:192.168.1.101
B从机:192.168.1.104
C从机:192.168.1.105
2)A主机端修改 ~/.bashrc
sudo gedit ~/.bashrc
# 在文件最后添加
#export ROS_HOSTNAME=ip_address_self
#export ROS_MASTER_URI=http://ip_address_master:11311
# 主机ip为192.168.1.101
export ROS_HOSTNAME=192.168.1.101
export ROS_MASTER_URI=http://192.168.1.101:11311
3)从机端修改 ~/.bashrc
sudo gedit ~/.bashrc
# 在文件最后添加
#export ROS_HOSTNAME=ip_address_self
#export ROS_MASTER_URI=http://ip_address_master:11311
# 从机B设置
export ROS_HOSTNAME=192.168.1.104
export ROS_MASTER_URI=http://192.168.1.101:11311
# 从机C设置
export ROS_HOSTNAME=192.168.1.105
export ROS_MASTER_URI=http://192.168.1.101:11311
由上可知,配置ros多机通信时, 主机只需要设置ROS_MASTER_URI即可,而从机还需设置ROS_HOSTNAME 。ROS_MASTER_URI指ros主机的ip,而ROS_HOSTNAME指的是当前系统的ip。如此设置之后,只有当主机端启动roscore之后,从机才能够运行ros相关的服务。
3 多机通信测试
按照上述配置好后,便可以进行简单的通信测试。这里介绍几个简单的测试: 1)测试1
# 主机端运行
roscore
# 从机端运行
rostopic list
# 上述命令可以分别在两个设备上输入
# 也可以在同一设备上,ssh远程连接到另外设备,输入对应命令
ssh usrname@ip # 都是一致的
2)测试2
# 主机端运行
roscore
rosrun rospy_tutorials listener.py
# 从机端运行
rosrun rospy_tutorials listener.py
更多测试参考此文: http:// t.csdn.cn/v4l7P
4 SSH文件传输
不想手动使用U盘拷贝小文件时,可以考虑 使用ssh远程拷贝文件 。 拷贝单个文件时使用“scp”,拷贝文件夹时使用“scp -r“ 。
1、将本地文件或文件夹 上传到远程计算机
# usrname1-本地计算机用户名 usrname2-远程计算机用户名
# 拷贝文件
scp /home/usrname1/xxx/upload.txt usrname2@192.168.x.xxx:/home/usrname2