标签:name 主机 通信 主机名 从机 无人机 ROS 节点 路由器
多无人机通信
多无人机之间相互通信是实现编队飞行的基础,而想要实现通信就需要组建网络,在网络之间实现数据信息的互相传输,按结构分成两大类:中心节点网络和无中心节点网络.我们这里所用的路由器就是中心节点网络,所有的数据的传输都要经过中心节点,所以中心节点的带宽需要足够高才能满足要求.
硬件:pixhawk-v4, F450机架,tx2开发板,以及一些基本零件.
软件:Ubuntu18,px4(v1.11.2)及其环境.
我们这里搭建的只是一个小型局域网,不会连接互联网,只需要把每个无人机中的tx2连接上该网络,就能使他们同处于同一台局域网中,同时也会为每台tx2分配一个静态ip,保证下次连接上的时候也是相同的ip.然后使用ROS的分布式功能实现在不同的tx2和主机上实现互相通信,即把每台tx2作为一个节点或者从机,而主机电脑作为ROS节点的master节点,每个节点都会通过master节点进行通信.
1.ROS远程控制及主机设置
1.1 安装openssh-server
ROS的远程连接主要是使用ssh来实现的,Ubuntu系统会默认安装openssh-client,但是并没有安装openssh-server,所以需要在从机上安装openssh-server.
sudo apt-get install openssh-server; // 安装
sudo /etc/init.d/ssh start //打开ssh
sudo ps -e |grep ssh //查看是否启动,有sshd则说明启动了ssh server
1.2 配置主机
1.连接路由器的WiFi,通过ifconfig命令查看其主机的IP地址.
2.配置/etc/hosts文件,输入:
192.168.31.105 name #主机的IP和主机名
192.168.31.176 name1 #从机1的IP和主机名
192.168.31.96 name2 #从机2的IP和主机名
注意:把上面的IP换成自己的IP,主机名也换成自己对应的,因为这是主机中的hosts文件,所以需要包含各个从机的IP地址和从机名.
3.配置~/.bashrc文件,输入:
export ROS_HOSTNAME=name # 这里的name是自己的主机名
export ROS_MASTER_URI=http://name:11311 #也可以把这个name改成主机的IP地址
#其中11311是固定的端口.
4.更新~/.bashrc文件:
source ~/.bashrc
1.3 配置从机
配置从机的步骤和主机的步骤相同.
1.连接路由器的WiFi,通过ifconfig命令查看其从机的IP地址.
2.对第i个从机配置,/etc/hosts文件,输入:
192.168.31.105 name #主机的IP和主机名
192.168.31.176 namei #从机i的IP和主机名
3.对第i个从机,配置~/.bashrc文件,输入:
export ROS_HOSTNAME=namei # 这里的namei是自己的主机名
export ROS_MASTER_URI=http://name:11311 #也可以把这个name改成主机的IP地址
注意:从机中的ROS_MASTER_URI同主机中的相同,一个从机的hosts文件不需要包含另一个从机的IP地址,因为他们之间的通信是通过主机来实现的.
4.更新~/.bashrc文件:
source ~/.bashrc
1.4 测试
测试在同一个局域网中能否用主机控制从机,首先需要让主从机都连上之前的路由器,保证IP地址是静态的,然后在主机中执行:
ssh 用户名@服务器地址
然后输入从机的登录密码即可登录,登录后shell终端的目录会变成从机的目录,就可以在命令行远程控制从机,但是无法使用从机的图形界面工具,例如,如果想修改文件,只能用vim命令在终端修改,不能使用gedit命令打开文本编辑器.
一般情况下我们都是不采取这种远程控制的方式来修改文件,而是提前在从机上写好文件,在需要执行命令的时候在采用这种远程控制的方式控制从机.
2.通过ROS实现通信
2.1 添加group
前面说到,我们需要在主机上运行一个master节点,在从机上运行各自的节点,每个从机都需要在外部控制模式下把飞控的数据输入到tx2,所以每个从机都需要执行命令:
roslaunch mavros px4.launch
通过mavros订阅和发布数据,但是每台从机发布的消息名都是相同的,即同时存在两个/mavros/state消息的数据,ROS节点就会报错.例如:当一台从机通过mavros连接时,另一个从机便无法通过mavros连接.为解决这个问题,需要修改px4.launch文件,为每个从机的消息名提供一个前缀,保证每个从机的消息名都是不同的.修改如下:
<?xml version="1.0"?>
<launch>
<!-- Posix SITL PX4 launch script -->
<!-- Launches Only PX4 SITL. This can be used by external projects -->
<group ns="uav1">
<!-- PX4 config arguments -->
<arg name="est" default="ekf2"/>
<arg name="vehicle" default="iris"/>
<arg name="ID" default="0"/>
<arg name="interactive" default="true"/>
<env name="PX4_SIM_MODEL" value="$(arg vehicle)" />
<env name="PX4_ESTIMATOR" value="$(arg est)" />
<arg unless="$(arg interactive)" name="px4_command_arg1" value="-d"/>
<arg if="$(arg interactive)" name="px4_command_arg1" value=""/>
<node name="sitl_$(arg ID)" pkg="px4" type="px4" output="screen" args="$(find px4)/ROMFS/px4fmu_common -s etc/init.d-posix/rcS -i $(arg ID) $(arg px4_command_arg1)">
</node>
</group>
</launch>
和原来px4.launch文件不同的是为其添加了group标签,使原来的消息名:/mavros/state变为:/uav1/mavros/state
2.2 获取数据
在实现上面的步骤之后,我们已经能够实现远程控制,并解决每个从机的消息名相同的问题,下一步就是看能否在主机上订阅从机中的数据,
标签:name,主机,通信,主机名,从机,无人机,ROS,节点,路由器 来源: https://blog.csdn.net/weixin_42022175/article/details/118930667
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。