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

2023-05-16

多无人机通信

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

硬件: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一下即可.从机也是相同的原理.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多无人机通信-路由器实现 的相关文章

  • windows10下安装ubuntu子系统

    windows10下安装ubuntu子系统 在win10上使用Ubuntu除了使用虚拟机外 xff0c 还有一种官方支持的Linux子系统模式 子系统上的流畅度比虚拟机高出了不知多少 xff01 经过多次尝试才成功配置 废话不多说 xff0
  • Windows10系统下的WSL+Ubuntu图形桌面配置

    Windows10系统下的WSL 43 Ubuntu图形桌面配置 参考 xff1a windows10下安装Ubuntu子系统 Windows下安装VcXsrv WSL Ubuntu下安装xfce desktop span class to
  • C++:什么是STL?

    什么是STL xff1f 1 STL概论1 1 STL基本概念1 2 STL六大组件简介1 3 STL优点 2 STL三大组件2 1 容器2 2 算法2 3 迭代器2 3 案例 1 STL概论 长久以来 xff0c 软件界一直希望建立一种可
  • makefile中.PHONY的作用是什么?

    makefile中 PHONY的作用是什么 xff1f 初学makefile的时候 xff0c 有一个关键字 PHONY 搞不懂 xff0c 在请教过同学之后豁然开朗 xff0c 遂写下经验望帮助更多的同学能够理解 在某度可以搜到phony
  • TCP和UDP的区别

    TCP和UDP的区别 1 TCP 是什么2 UDP 是什么3 TCP 和 UDP 的不同 1 TCP 是什么 TCP 的全称是Transmission Control Protocol xff0c 传输控制协议 它能够帮助你确定计算机连接到
  • 操作系统死锁 四个必要条件

    操作系统死锁 四个必要条件 1 死锁 xff1a 如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件 xff0c 那么该组进程是死锁的 2 产生死锁的原因 xff1a xff08 1 xff09 竞争不可抢占性资源 x
  • C++智能指针总结(面试常问)

    C 43 43 智能指针总结 xff08 面试常问 xff09 1 智能指针的实现原理2 C 43 43 11四种智能指针总结2 1 auto ptr xff1a 2 2 unique ptr 2 3 share ptr 2 4 weak
  • C++可重入函数和不可重入函数

    C 43 43 可重入函数和不可重入函数 可重入函数是指能够被多个线程 同时 调用的函数 xff0c 并且能保证函数结果正确不必担心数据错误的函数 不可重入函数是指不能运行在多任务环境下 xff0c 除非能保证互斥的函数 由于使用了未受保护
  • STM32单片机中WIFI模块数据传输问题(float->u32->u8/u8->u32->float)

    STM32单片机中WIFI模块数据传输问题 xff08 float gt u32 gt u8 u8 gt u32 gt float xff09 最近在做毕业设计 xff0c 在做wifi数据传输与接收时 xff0c 涉及到了STM32单片机
  • Windows10忘记用户密码?怎么打开电脑?

    Windows10忘记用户密码 xff1f 怎么打开电脑 xff1f 首先在输入密码的登录界面连续敲5次shift按键进入cmd命令行 输入net user查看用户 现在是自己创建的用户忘记密码 xff08 我的是Sunrise用户 xff
  • java --向上转型和向下转型

    一 简述 Java 转型主要是用在继承和接口实现的场景 xff0c Java 转型可分为向上转型和向下转型 xff0c 区别如下 xff1a 向上转型 xff1a 通过子类对象实例化父类对象 xff0c 这属于自动转换 向下转型 xff1a
  • docker

    docker 背景 环境配置的难题 软件开发最大的麻烦事之一 就是环境配置 用户计算机的环境都不相同如果某些老旧的模块与当前环境不兼容 那就麻烦了环境配置如此麻烦 换一台机器 就要重来一次 旷日费时能不能从根本上解决问题 软件可以带环境安装
  • 6.2 能控性

    能控性和能观性是线性系统学习中非常重要的部分 xff0c 它们是研究控制问题和滤波问题所必需的 今儿先来说能控性 一 能控性是啥 xff1f 定义6 1 若对任意初始状态 x 0 61
  • 计算机网络精选20道题

    1 现有一个公司需要创建内部的网络 xff0c 该公司包括工程技术部 市场部 财务部和办公室4个部门 xff0c 每个部门约有20 xff5e 30台计算机 试问 xff1a xff08 1 xff09 若要将几个部门从网络上进行分开 如果
  • “四旋翼”无人机“X模式”飞行原理

    文章目录 摘要飞行器分类四旋翼 X模式 飞行原理四旋翼 十模式 飞行原理参考资料 摘要 简单的介绍了四旋翼无人机的两种模式的飞行原理 飞行器分类
  • PID控制器原理及模块化的源码

    文章目录 摘要PID原理概述比例环节积分环节微分环节 串级双闭环PID控制外环内环 模块化的源码主函数硬件初始化PID复位定义私有变量计算串级PIDPID计算公式源码LIMIT范围控制宏定义思维导图 摘要 小飞机由于飞手的技术和外部环境因素
  • 用驱动精灵和手动更新方式安装 Arduino mega 2560 驱动失败的解决方案

    文章目录 摘要安装步骤 下载安装包 安装地面站 安装驱动 驱动安装失败 补充知识 注意事项总结思考 摘要 硬件环境 xff1a AMP飞控 固件采用的3 2 1软件环境 xff1a Win7 xff0c 地面站采用MissionPlanne
  • 使用条件类型实现TypeScript中的函数重载

    假设有这样的一个函数 xff0c 你会怎么来声明他的类型呢 xff1f function add a b return a 43 b add函数可能有两种情况 参数a b为number类型 xff0c 返回值为number类型参数a b为s
  • 【星海出品】openstack LVM后端

    LVM后端创建 LVM的Red Hat 管理介绍 xff1a https access redhat com documentation zh cn red hat enterprise linux 7 html logical volum
  • xshell连接ubuntu虚拟机失败的2个问题

    问题1 xff1a 虚拟机查看ip失败 xff0c 只显示lo xff0c 不显示ens33 解决方法 xff1a 一句代码 sudo dhclient ens33 成功 xff01 问题2 xff1a xshell连接虚拟机ip地址失败

随机推荐

  • Ubuntu20.10 成功安装搜狗输入法的教程(图文详解)

    1 首先安装fcitx 在终端 xff08 Ctrl 43 Alt 43 T打开 xff09 输入 sudo apt get install fcitx 2 在搜狗输入法网页选择linux版本 https pinyin sogou com
  • (七)springcloud Oauth2授权-Spring Cloud Oauth2

    spring security oauth2 客户端四种授权模式 xff1a 授权码模式 xff08 authorization code xff09 xff1a 第三方应用先申请一个授权码 xff0c 然后再用该码获取令牌 简化模式 xf
  • ROS_Dynamic Reconfig 动态参数调节

    创建功能包 package cd catkin ws src catkin create pkg dynamic refg roscpp dynamic reconfigure cd catkin make 向功能包添加动态重配置文件 cf
  • BGA“焊点”虚焊原因分析及控制方法

    电路板调试过程中 xff0c 会出现 BGA器件外力按压有信号 xff0c 否则没有信号 的现象 xff0c 我们称之为 虚焊 本文通过对这种典型缺陷进行原因分析认为 xff1a 焊接温度曲线 焊膏量 器件及PCB板焊盘表面情况以及印制板设
  • Python中的列表(清晰易懂)

    列表是用来存放数据的 Python中的列表关键字是list 我们来定义一个列表 lista 61 34 a 34 34 b 34 34 c 34 666 34 a 34 可以看到列表lista中 有字符型数据 34 a 34 34 b 34
  • VR技术类毕业论文文献有哪些?

    本文是为大家整理的VR技术主题相关的10篇毕业论文文献 xff0c 包括5篇期刊论文和5篇学位论文 xff0c 为VR技术选题相关人员撰写毕业论文提供参考 1 期刊论文 运动炫科技 智慧赢未来 VR技术在体育领域内的应用与展望 期刊 xff
  • Haar特征类有哪些最新发表的毕业论文呢?

    一 总体简介 Haar特征的相关文献在2006年到2020年内共计132篇 xff0c 主要集中在自动化技术 计算机技术 无线电电子学 电信技术 公路运输 等领域 xff0c 其中期刊论文100篇 会议论文4篇 专利文献28篇 xff1b
  • 查阅国外文献的网站有哪些?

    毕业季不知道小伙伴们有没有为了论文感到头秃 xff0c 参考文献在我们的论文中有着举足轻重的作用 xff0c 每年这个时候都有大批小伙伴为这个寻找参考文献发愁 有些专业的小伙伴由于专业的特殊性很多需要的文献还是外文文献 xff0c 对他们来
  • 使用Python和C++的写数据结构和算法

    使用Python和C 43 43 的写数据结构和算法 1 数据结构和算法简介2 数据结构2 1 堆栈2 2 队列2 3 散列表2 4 二叉树2 5 线性搜索2 6 二进制搜索2 7 递归2 8 递归二进制搜索2 9 QuickSort2 1
  • Hive与Hbase的区别与联系

    一 概念 1 xff0c Hive hive是基于Hadoop的一个数据仓库工具 xff0c 用来进行数据提取 转化 加载 xff0c 这是一种可以存储 查询和分析存储在Hadoop中的大规模数据的机制 hive数据仓库工具能将结构化的数据
  • ros 命名空间

    文章目录 全局命名空间相对名称私有名称节点命名空间 全局命名空间 rosout前面的反斜杠 表明该节点名称属于全局命名空间 之所以叫做全局名称因为它们在任何地方 xff08 包括代码 命令行工具 图形界面工具等的任何地方 xff09 都可以
  • DenseNet及torchvision中的实现

    ResNets Highway Networks Stochastic depth DenseNet他们的共同的特点是 They create short paths from early layers to later layers 他们
  • Xmanager5用Xstart连接CentOS7

    今天安装了Xmanager5 xff0c 原本已经有了Xshell5 xff0c 没有冲突 xff0c 测试Xftp Xshell使用上均无问题 到了Xstart却出错了 xff0c 客户端设置完后点击运行 xff0c 出现报错 查找了许多
  • CAN总线入门学习(一)

    今天带着大家学习 xff0c CAN总线 1 概要 本资料是面向 CAN 总线初学者的 CAN 入门 对 CAN 是什么 CAN 的特征 标准规格下的位置分布等 CAN 的概要及 CAN 的协议进行了说明 2 使用注意事项 本资料对博世 B
  • java调用接口

    long dateStr 61 System currentTimeMillis 1000 String url 61 34 34 创建参数 JSONObject jsonObject 61 new JSONObject jsonObjec
  • 英特尔NUC 11板载USB3.0座子接口定义

    规格书没有座子PIN定义 xff0c 于是我找技术支持提供了定义
  • 宝塔配置Workerman

    map span class token variable http upgrade span span class token variable connection upgrade span span class token punct
  • px4飞控和机载电脑通信:机载电脑接收飞控的自定义px4消息

    机载电脑接收飞控的自定义px4消息 mavros功能包能够实现px4飞控和机载电脑之间的实时通信 而对于大部分的消息通信mavros都已经有相应接口可以调用 xff0c 例如 xff1a 位置 期望位置 速度 四元素等消息都可以通过C 43
  • px4飞控和机载电脑通信:飞控接收机载电脑的自定义mavlink消息

    前面一篇讲了机载电脑怎么接受飞控的px4消息 这一篇讲解如何飞控怎么接收从机载电脑传过来的消息 分成两部分 机载电脑发送消息 飞控接收消息 pixhawk版本 pixhawk4 px4版本 1 11 2 ros版本 1 14 10 机载电脑
  • 多无人机通信-路由器实现

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