- 本文是转载自官方wiki: https://github.com/amov-lab/Prometheus/wiki
- 标题 : Prometheus 二次开发课程入门:
- 课程网址:https://bbs.amovlab.com/plugin.php?id=zhanmishu_video:video&mod=video&cid=43
- 课程项目网址 : https://github.com/amov-lab/Prometheus
实测 会出现以下报错
可能原因是因为缺少ros包组建 并不开源 ,暂时放着 ,解决了再发实现方法
为什么使用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
对上述地面电脑及机载电脑,进行如下操作:
打开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连接,只连接当前路由器,这样开机后其会自动连接当前路由器
在地面电脑端:
打开一个终端,启动roscore
打开一个终端,使用SSH连接机载电脑,连接成功后输入
//注意,此launch文件中的端口参数需先配置正确
roslaunch prometheus_experiment control_onboard.launch
打开一个终端,输入
roslaunch prometheus_experiment control_ground.launch
此时,可以通过第三个终端查看无人机状态,并发送控制指令,成功!