Skip to content

ROS多机及ssh教程

Yuhua.Qi edited this page May 5, 2021 · 2 revisions

ROS多机及SSH教程

为什么使用ROS多机及SSH?

一句话概括,就是为了在真实实验时,借助SSH使得地面电脑能够操控机载电脑(运行存储于机载电脑中的launch文件),借助ROS多机使得地面电脑和机载电脑建立相互通信(地面电脑显示机载电脑发布的状态量话题,同时,机载电脑接收地面电脑发布的指令话题)。

其次,SSH和ROS多机并不需要绑定使用,如果仅需要远程控制机载电脑,只安装SSH即可。

最后,ROS多机可以帮助我们简易的实现无人机之间的通信(所有机载电脑连接同一路由器),达成一个地面站控制多个无人机的目的,也可以通过软件的编写模拟分布式通信网络。

准备工作

  • 一个路由器(如果是多无人机控制,建议使用较好的路由器,保证通信带宽)
  • 一台地面电脑(,建议使用有线连接的方式连接路由器)
    • ubuntu系统并安装Prometheus项目
    • 通过'ifconfig'指令查询本机IP,假设为 192.168.1.1
    • 通过'hostname'指令查询本机名字,假设为 ground_pc
  • 五台无人机均配备机载电脑
    • ubuntu系统并安装Prometheus项目
    • 通过'ifconfig'指令查询本机IP,假设为 192.168.1.11,192.168.1.12,192.168.1.13,192.168.1.14,192.168.1.15
    • 通过'hostname'指令查询本机名字,假设为 onboard_pc1,onboard_pc2,onboard_pc3,onboard_pc4,onboard_pc5

SSH使用

对上述地面电脑及机载电脑,进行如下操作:

// 安装chrony包,用于实现同步
sudo apt-get install chrony
// 安装SSH服务器
sudo apt-get install openssh-server
// 确定SSH已经启动
ps -e|grep ssh

此时就已经可以进行SSH远程操作了,在地面电脑上,

// 测试是否能ping通机载电脑,并查看延时
ping 192.168.1.1x
// 使用SSH远程登陆,用户名即登陆该电脑的账户名,不一定和hostname一致,
ssh 用户名@192.168.1.1x

然后根据提示输入登陆密码,登陆成功可以发现终端显示已变成远程连接电脑的名字

参考链接:https://blog.csdn.net/lixujie666/article/details/80260445

ROS多机配置

对上述地面电脑及机载电脑,进行如下操作:

// 打开hosts文件
sudo gedit /etc/hosts

打开hosts文件后,可以发现文件开头已经有了两行,从第三行开始插入所有电脑的IP和hostname(中间用tab隔开,而不是空格),即

192.168.1.1 ground_pc
192.168.1.11 onboard_pc1
192.168.1.12 onboard_pc2
192.168.1.13 onboard_pc3
192.168.1.14 onboard_pc4
192.168.1.15 onboard_pc5

保存并退出,输入以下命令重启网络

sudo /etc/init.d/networking restart

ROS多机需要指定一台电脑作为主机,而其他电脑作为从机。设置成功之外,必须先在主机上运行roscore,从机方可运行ros节点,即所有的ROS均以来主机的ROS_MASTER。

一般,我们将地面电脑设置为主机,其余电脑设置为从机。

首先,在地面电脑端(主机)

sudo gedit .bashrc

在最后一行加上

export ROS_MASTER_URI=http://192.168.1.1:11311

然后,在机载电脑端(从机)

sudo gedit .bashrc

在最后一行加上

export ROS_HOSTNAME=192.168.1.1x
export ROS_MASTER_URI=http://192.168.1.1:11311

配置到此结束。

实机测试

TIPS:让机载电脑忘记所有wifi连接,只连接当前路由器,这样开机后其会自动连接当前路由器

在地面电脑端:

  1. 打开一个终端,启动roscore
  2. 打开一个终端,使用SSH连接机载电脑,连接成功后输入
    //注意,此launch文件中的端口参数需先配置正确
    roslaunch prometheus_experiment control_onboard.launch
  3. 打开一个终端,输入
    roslaunch prometheus_experiment control_ground.launch

此时,可以通过第三个终端查看无人机状态,并发送控制指令,成功!

Clone this wiki locally