多无人机通信-路由器实现

多无人机通信

多无人机之间相互通信是实现编队飞行的基础,而想要实现通信就需要组建网络,在网络之间实现数据信息的互相传输,按结构分成两大类:中心节点网络和无中心节点网络.我们这里所用的路由器就是中心节点网络,所有的数据的传输都要经过中心节点,所以中心节点的带宽需要足够高才能满足要求.

硬件: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 		#从机1IP和主机名
192.168.31.96		name2 		#从机2IP和主机名

注意:把上面的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添加uav2等.

2.2 获取数据

在实现上面的步骤之后,我们已经能够实现远程控制,并解决每个从机的消息名相同的问题,下一步就是看能否在主机上订阅从机中的数据.

在能够实现远程控制的前提下,在主机上执行:roscore命令,建立master节点,然后分别在从机的终端上执行:roslaunch mavros px4.launch,然后可以查看话题名:rostopic list,可以看见/uav1/mavros/state和/uav2/mavros/state,然后查看执行roslaunch mavros px4.launch的终端中是否出现一行

[WARN] CMD Unexpected command 520 ,result 0

如果出现则说明这是tx2能够接受飞控传过来的数据,这是可以通过rostopic echo /uav1/mavros/state打印数据,这是能够看见数据的传输.但是若没有出现那一行,这说明飞控和tx2之前并没有数据传输,这个问题一般情况下是因为没有设置mavlink端口,导致在硬件问题上的数据传输问题.解决办法是:打开QGC,在参数中选择

1. MAV_1_CONFIG   	设置为TELEM2
2. MAV_1_MODE			设置为Onboard
3. SER_TEL2_BAUD	设置为921600 8N1

设置TELEM2的原因是这个接口和tx2连接的,每个人的连接方法不同,可以做适量的更改.另外一开始可能参数中只有MAV_1_CONFIG,搜不到其他参数,只需要先把MAV_1_CONFIG参数设置好后重启,其他参数就有了.

当全部设置好并重启飞机之后,就能通过rostopisc echo 命令订阅uav1和uav2的数据.

需要注意的是,在这种情况下只能通过主机来启动roscore,且主机本身无法使用mavros.而其他主机不能作为主机使用,只能使用mavros连接主机,不能使用roscore命令.想要在主机上运行mavros,只需要修改~/.bashrc文件中的master_url的IP地址为localhost,即127.0.0.1,然后再source一下即可.从机也是相同的原理.

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值