MiniFly的学习经历

2023-05-16

MiniFly的学习经历

  • 基于MiniFly的无人机编队系统
    • 一台遥控器同步控制多台无人机
      • 无线通讯方面
        • 遥控代码部分
        • 无人机通信代码部分
    • 一台遥控器分布控制多台无人机
      • 无人机控制部分
    • 使用电脑的串口上位机控制无人机
      • 遥控串口通信接收指令
      • 指令设计

基于MiniFly的无人机编队系统

刚上大二那个暑假,我加入了我们学院的物联网实验室,老师给的题目就是无人机,经过调研,我们选择了正点原子的Minifly 可二次开发的开源四旋翼无人机,从此项目开始研究,随后我们实现了:
1、一台遥控器同步控制多台无人机
2、一台遥控器分布控制多台无人机
3、使用电脑的串口上位机控制无人机
4、基于UWB的室内定位无人机编队

一台遥控器同步控制多台无人机

以下将对“一台遥控器同步控制多台无人机”简称为“一控多同步”。
一控多同步,即一台遥控器可以同时控制多台无人机进行起降、俯仰、横滚、航向。

无线通讯方面

要想实现一控多同步,首先要解决遥控信号通讯的问题,我们知道,初始的遥控无人机是一台遥控器控制一台无人机,那么我们就必须改变这个设定,使遥控器在宏观上能够与多台无人机通讯。实现这一目的有两种方式,遥控器处于广播模式或者遥控器实时跳频。
无线电广播的优势是无需跳频,但缺点是单向通信,而MiniFly是双向通信的,如果要利用广播实现一控多同步,那么遥控将损失无人机的回传信息,因此不做考虑。
遥控器跳频可以实现一控多同步,但目前还没实现自组网,因此缺点就是控制多台得修改代码配置。

遥控代码部分

首先我们必须知道遥控器的代码框架MiniFly-Remoter代码框架
经过研究代码,我发现控制无人机通信的信道和地址的配置参数变量在config_param.c中的configParam中,其中的configParam.radio.channl储存着无线通信的信道,configParam.radio.addressHigh 和configParam.radio.addressLow分别储存着地址的高位和低位,而地址就储存在RADIO_ADDRESS这个常量中在这里插入图片描述
因此我决定多添加几个信道和地址,并在结构体中新增了一个.radio.number的数据,用于标记这一信道和地址是属于哪一台无人机。最终添加了四台无人机的信道和地址信息,此处我在跳频中只切换地址即可实现多台无人机的分时控制。
在这里插入图片描述
经此,我们只需要改变configParam.radio.channel 、addressHight和addressLow即可切换遥控控制不同的无人机,因此我将MiniFly中用于翻滚的按钮——KEY_R_SHORT_PRESS用于信道和地址的切换,并使用switch语句改变信道和地址。
在这里插入图片描述

无人机通信代码部分

经过开发指南,我们得知无人机的通信时由NRF51822负责的在这里插入图片描述
因此我们只需要修改其中的代码,即可实现手动适配信道和地址。同样的,我通过搜索关键字发现其配置参数放在config_param.h中,通过改变地址即可实现多台无人机的信道和地址配置。
在这里插入图片描述
至此,即可通过按下右边的按钮切换控制无人机,但要实现同步控制还需要遥控器在选择控制所有无人机的时候处于循环跳频状态在这里插入图片描述
视频展示

一控多同步(有码)

一台遥控器分布控制多台无人机

以下将对“一台遥控器分布控制多台无人机”简称为“一控多分布”。
一控多分布,即一台遥控器可以同时控制多台无人机进行起降、俯仰、横滚、航向,并且可以在多台无人机飞行过程中单独控制一台无人机而其他保持静止
无线通讯部分与上面的一控多同步类似,只是修改了跳频部分,需要不停的跳频在这里插入图片描述

无人机控制部分

之后就需要实现对某一台无人机进行单独控制,具体代码在remoter_ctrl.c中,当校验到控制的架次与当前频段和地址匹配时,发送遥控控制数据,否则发送悬停数据。在这里插入图片描述
至此,即可实现一台遥控器在控制多台无人机做编队飞行,并且在集群飞行过程中单独对某一台进行位置调整。
视频展示如下

一控多分布

使用电脑的串口上位机控制无人机

要想实现无人机编队飞行,单靠人工的手动飞行是万万不能达到要求的,因此我们必须考虑使用电脑来控制无人机的飞行,那么最简单的方式就是电脑利用遥控器控制无人机,那么我们就需要发送指令到遥控器上,即串口通信。
在这里插入图片描述
由MiniFly的遥控器开发指南可知,上位机控制遥控器的函数是在Usblink.c中,而且原函数中就有开发出这一功能,我只是适当拓展,将对收到的某一个我设定的帧做出我想要的反应。

遥控串口通信接收指令

具体修改如下在这里插入图片描述
将校验正确后的指令做个分类,如果是我发送的DOWN_FLY的指令,那么会置标志位为真。
在这里插入图片描述
从而驱动指令数据去到需要他的地方,比如起飞的指令数据:
在这里插入图片描述
或者是姿态飞行的指令数据
在这里插入图片描述

指令设计

最后就是需要我们使用正确的指令去发送给遥控器,这需要我们自行定义,我个人是这样定义的在这里插入图片描述
在这里插入图片描述
至此,我们只需要在电脑上打开串口助手,发送控制指令,就可以控制无人机的飞行,当发送的指令足够快,就可以组成一场无人机的编队表演。
大概的效果如下
在这里插入图片描述

不过我们并无法精准控制无人机的位置,这将大大影响我们编队的效果,因此其实我们需要进一步升级,获取无人机的具体位置,这算是我留下的一个坑吧。

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

MiniFly的学习经历 的相关文章

  • 控制理论中的常用定义与定理

    以下内容摘自 应用非线性控制 对于自治系统 xff08 在本书中与定常系统等价 xff09 一句话总结 xff1a 初始状态的足够小能够保证系统状态范数的任意小 不变集理论可以在V导为半负定时推导出渐进稳定的结论 xff0c 但只适用于自治
  • centos8服务器安装nginx

    安装nginx 安装依赖包 yum span class token parameter variable y span span class token function install span gcc zlib zlib devel
  • 部署hexo遇到报错ERROR Deployer not found: git的解决办法

    部署hexo遇到报错ERROR Deployer not found git的解决办法 今天部署hexo的时候遇到一个报错 hexo c span class token operator amp amp span hexo g span
  • npm install hexo-renderer-sass时报错解决办法

    npm install hexo renderer sass时报错 在安装配置hexo博客的时候 xff0c 有的主题需要安装 span class token function npm span span class token func
  • 实用工具网站推荐

    速写板 可以随时开一个web网页进行书面草稿的网站
  • kaggle 免费gpu,optuna学习,python中*的用法

    kaggle import optuna def obj trial x 61 trial suggest float 34 x 34 7 7 y 61 trial suggest float 34 y 34 7 7 return x 1
  • BFS题单总结

    BFS题单汇总 此文章用来记录遇到的经典的从某个点到达某个边界或者指定点的BFS题目 xff0c 将持续更新 1926 迷宫中离入口最近的出口 span class token keyword class span span class t
  • Java/C++输入输出特定格式模板总结

    Java输出每个数字占5个空格 xff0c 此输出模式见洛谷1443题 span class token class name System span span class token punctuation span out span c
  • DFS题单以及模板汇总

    此文章是为了记录自己学习DFS算法以及记录写过的DFS题单汇总 xff0c 持续补充 P1605 迷宫 迷宫 题目描述 给定一个 N M N times M N M 方格的迷宫 xff0c 迷宫里有
  • MacOS 用typora和picGo配置腾讯云COS图床

    MacOS 用typora和picGo配置腾讯云COS图床 首先去PicGo最新下载网址 xff0c 点击PicGo 2 3 0 dmg下载后安装 安装好了之后双击之后没有看到对应的启动icon xff0c 实际上是在上面的标题栏的右侧 x
  • 线段树 模板 Java语言版

    线段树 模板 Java语言版 P3373模板 线段树 2 题目描述 如题 xff0c 已知一个数列 xff0c 你需要进行下面三种操作 xff1a 将某区间每一个数乘上 x x x 将某区间每一个数加上 x
  • macos上VS Code上配置Python、Java、C++环境变量

    macos上VS Code上配置Python Java C 43 43 环境变量 首先打开设置 然后在搜索框输入set xff0c 去编辑settings json文件 下面是我本机上的配置文件 xff0c 记录一下 然后vs code上安
  • MacOS上的VS Code设置鼠标滚动轮 + Commond缩放

    路径 xff1a Code gt Preferences gt Settings 然后在搜索框中输入set去搜索 xff0c 接着点击Edit in settings json 添加这一行 34 editor mouseWheelZoom
  • MacOS Clion 使用<bits/stdc++.h>万能头提示 fatal error: ‘bits/stdc++.h‘ file not found

    MacOS Clion 使用 lt bits stdc 43 43 h gt 万能头提示 fatal error bits stdc 43 43 h file not found 百度搜了一圈答案 xff0c 都大坑了 xff0c 自己亲自
  • 多维线性DP

    多维线性DP 72 编辑距离 给你两个单词 word1 和 word2 xff0c 请返回将 word1 转换成 word2 所使用的最少操作数 你可以对一个单词进行如下三种操作 xff1a 插入一个字符删除一个字符替换一个字符 示例 1
  • Mac打开访达后如何快速知道当前文件绝对路径?

    百度查了多种方法 xff0c 还是下面这个快捷键最实用 比如我打开访达以后 xff0c 想知道当前Hello vue文件的绝对路径 xff0c 此时在当前界面直接按快捷键 option 43 command 43 c就可以复制当前文件路径到
  • 一元正态分布

    d import numpy as np import matplotlib pyplot as plt from scipy stats import norm 生成100个正态分布数据 xff0c 均值为1 xff0c 标准差为2 da
  • nohup命令详解

    nohup命令详解 一 背景说明 xff1a 启动服务的时候 xff0c 如果使用如下命令 xff0c 则会在start sh脚本所在的目录下 xff0c 产生一个名为 nohup out 的输出文件 nohup startup sh am
  • nohup命令详解

    nohup命令详解 一 背景说明 xff1a 启动服务的时候 xff0c 如果使用如下命令 xff0c 则会在start sh脚本所在的目录下 xff0c 产生一个名为 nohup out 的输出文件 span class token fu
  • Spring Boot启动后直接没有任何警告报错信息,打印`Process finished with exit code 0`直接退出

    Spring Boot启动后直接没有任何警告报错信息 xff0c 打印Process finished with exit code 0直接退出 日志 xff1a span class token number 2023 span 02 1

随机推荐

  • systemctl 启动/停止/重新加载 nginx

    systemctl 启动 停止 重新加载 nginx 一 新建nginx service脚本 span class token function sudo span span class token function vim span us
  • Unable to determine application id: com.android.tools.idea.run.ApkProvisionException: ERROR: APK pat

    Unable to determine application id com android tools idea run ApkProvisionException ERROR APK path is not specified for
  • Java获取文件的MD5

    Java获取文件的MD5 主要是通过读取文件的字符流 xff0c 然后赋值给MessageDigest对象 xff0c 最后将文件流转换成16进制的字符串 span class token keyword import span span
  • android整合好视通sdk经验总结(二)

    一 无法正常访问好视通服务接口 当按照android整合好视通sdk经验总结 xff08 一 xff09 步骤整合完毕后 xff0c 在这里修改申请的应用id和服务地址 修改完毕后运行发现无法正常初始化sdk xff0c 错误码30 xff
  • 视觉SLAM⑤--相机与图像

    目录 5 0 本章简介 5 1 相机模型 5 1 1针孔相机模型 5 1 2 畸变模型 5 1 3 双目相机模型 5 1 4 RGB D相机模型 5 2 图像 5 3 实践 xff1a 计算机中的图像 5 3 1 OpenCV的基本使用方法
  • 视觉SLAM⑩后端Ⅱ(滑动窗口滤波和优化与位姿图)

    目录 10 0 本章概述 10 1 滑动窗口滤波和优化 10 1 1 实际环境下的BA结构 10 1 2 滑动窗口法 10 2 位姿图 10 2 1 位姿图的意义 10 2 2位姿图的优化 10 3 非线性优化整体总结 xff1a 前端 后
  • 学习C++:C++进阶(五)CMake应用篇---集成第三方库和依赖管理

    目录 第二部分 xff1a 实用 CMake xff08 Practical CMake Getting Your Hands Dirty with CMake xff09 3 0 集成第三方库和依赖管理 xff08 Integrating
  • 2.ORB-SLAM2改进版本--稠密建图版本解析

    目录 1 修改思路 2 基本概念 nbsp 2 1 统计滤波 2 2 体素滤波
  • FreeRTOS 的命名规则

    初学 FreeRTOS 的用户对其变量和函数的命名比较迷惑 xff0c 下面专门做一下介绍 xff1a 变量 uint32 t 定义的变量都加上前缀 ul u 代表 unsigned 无符号 xff0c l 代表 long 长整型 uint
  • 【单目测距和双目测距比较】

    单目测距和双目测距比较 单 双目方案的优势与难点单目测距双目测距 双目测距实现步骤实现过程 单 双目方案的优势与难点 单目测距 优点 xff1a 单目的优势在于成本较低 xff0c 对计算资源的要求不高 xff0c 系统结构相对简单 缺点
  • ROS学习笔记(3):添加第三方依赖库

    最近在工控机上加入CAN卡 xff0c 想利用CAN卡来做为数据收发 现在在工程中加入CAN卡的头文件和自己做的cpp文档 已经申明了 函数 xff0c 但是还是会出现上图所示的错误 xff0c 经过一晚上的战斗算是搞清楚了 感谢 64 头
  • Java面试题及答案2019版(上)

    1 面向对象的特征有哪些方面 xff1f 答 xff1a 面向对象的特征主要有以下几个方面 xff1a 抽象 xff1a 抽象是将一类对象的共同特征总结出来构造类的过程 xff0c 包括数据抽象和行为抽象两方面 抽象只关注对象有哪些属性和行
  • git到远程出现的一些问题以及解决方法

    我们首先回顾一下 git reset命令 xff1a 1 git reset mixed xff1a 此为默认方式 xff0c 等同于不带任何参数的git reset 2 git reset soft 回退到某个版本 xff0c 只回退了c
  • CMakeLists.txt 和 package.xml 重要内容详解

    边学边看 xff0c 学到什么分享什么 CMakeLists txt 构建配置文件package xml 功能包配置文件 上面的意思个人理解就是功能包本身如果要在别处运行 xff0c 需要什么样的条件在xml文件中看 功能包自身 xff0c
  • Docker运行Prometheus(普罗米修斯)

    1 编辑yaml格式 xff0c 进行自我监控 mkdir etc prometheus cd etc prometheus vi etc prometheus prometheus yml global scrape interval 1
  • Kubernetes(k8s)安装Dashboard(控制面板)

    参考文章 xff1a https www jianshu com p f7ebd54ed0d1 1 默认情况下不会部署 Dashboard xff0c 可以通过以下命令部署 xff1a kubectl apply f https raw g
  • 航模无刷电机常见参数

    1 xff0c KV值 xff1a 表示电机运行速度的指标 xff0c 电机转速 61 KV值 x 工作电压 2 xff0c 空载电流 xff1a 指电机不带负载 xff08 螺旋桨等 xff09 时的额定工作电流 3 xff0c 电阻 x
  • RealSense D435i深度相机介绍

    文章目录 D435i硬件结构及各个组件原理详解前言一 硬件参数信息二 视觉处理器D4三 深度模块四 红外投影仪 Infrared Projector 五 彩色图像信号处理机 ISP 六 IMU D435i硬件结构及各个组件原理详解 前言 R
  • Ubuntu20.04下安装intel Realsense SDK

    1 安装安装依赖项 sudo apt span class token operator span get install libudev span class token operator span dev pkg span class
  • MiniFly的学习经历

    MiniFly的学习经历 基于MiniFly的无人机编队系统一台遥控器同步控制多台无人机无线通讯方面遥控代码部分无人机通信代码部分 一台遥控器分布控制多台无人机无人机控制部分 使用电脑的串口上位机控制无人机遥控串口通信接收指令指令设计 基于