ESPcopter无人机初探(UWB定位+ESP8266MCU)

这个就是目前资料较为齐全而且已经有成品的

没有卖的地方,而且国内资料稀少

https://arikovani.com/en/projects/programlanabilir-mini-drone/detail

这个网站就是我们要关注

看它完成的样子,就是空心杯电机成品

可视化的平台,404了。嘤嘤嘤

开放了Arduino的一个库,那么我就可以从代码反推出设计

因为这个东西不难,而且就是这么个设计的办法

esp-12e,是其控制核心。mos管我看不见,一定有这个小东西

http://espcopter.com/wp-content/uploads/2016/09/espcopter-sdk.pdf

这个地方是一个pdf,让我们去研究一下

1.0.0的测试版

映入眼帘的是两个按钮,一个是开关,一个是重启

两边一共12个脚

看这个就非常好了,开始分析一波:


1:对于4个螺旋桨,直接是接在了芯片的IO脚上面,这个芯片脚的输出电流是多少,此时应该去看芯片手册

2:还可以看出有5个引脚当了通用的IO脚,而且还有一个串口。另外三个IO直接接了RGB灯来显示飞机的状态(有点浪费资源嗷)

3:以及一个ADC,右下角可以看到一些提示。引脚当前6ma,最大12ma。最睡眠状态,连接16和一个EXt的脚。这个是唤醒?看手册再说吧

可以看到扩展开发还是得Arduino

知道了串口芯片用的什么

可以看到我们最重要的资料出现了

上面的哪个PDF,我实在不认识了。就先不解读了

但是下面有英文版的,继续看

里面的这句意思,就是引脚的映射与NodeMCU的mapping一样

http://espcopter.com/code-release/这个是我们要分析的代码

可以看到

ESPcopter将具有飞行控制软件,以使飞行稳定。这个

ESPcopterWebApp示例演示了ESPcopter具有以下附加功能:

充当独立的Web服务器。这将使你快速运行ESPcopter,你可以

通过手机,平板电脑或笔记本电脑上的网页对其进行控制。

/* * @Author: your name * @Date: 2021-01-20 20:27:47 * @LastEditTime: 2021-01-20 20:28:31 * @LastEditors: Please set LastEditors * @Description: In User Settings Edit * @FilePath: \ESPcopter_1.1.0 BETA_\web.ino */#define REMOTE_WEB_APP#define WEB_APP_WIFI_SSID "ESPcopter" //ESPcopter WiFi名字#define WEB_APP_WIFI_PASSWORD "12345678" //ESPcopter 密码#include <espcopter.h>void setup(){ mainSetup();}void loop(){ mainLoop();}

小飞机还支持这个可视化的编程

这个地方也有一个渲染图,我也没有用过。有空看看

以及支持这个积木化的手机app

我随手搞搞,很有趣。直接生成Arduino的代码了

太花里胡哨了,我喜欢。嘤嘤嘤

可以加光流传感器

用Procrssing写的上位机

这个是激光避障传感器,精度为1米。我必须给我的小飞机做一个

以及这些传感器

ESPcopter Neopixel模块:

该圆形卡中有12个NeoPixels。它可以连接到ESPcopter的顶部输入引脚。

你可以在使用ESPcopter飞行时使用NeoPixel模块进行各种灯光表演。

ESPcopter蜂鸣器模块:

蜂鸣器模块中有一个蜂鸣器。它可以连接到ESPcopter的顶部输入引脚。

你可以在不飞行时通过蜂鸣器模块播放音乐,并且在飞行时可以听到警告声。

ESPcopter温度压力和湿度模块

该模块具有一个BEM280传感器。它可以连接到ESPcopter的顶部输入引脚。

你可以使用此模块记录飞行中的天气数据,也可以通过IoT项目中的Internet将这些数据发送到手机或计算机。

ESPcopter高度保持模块

该模块具有一个VL53L0x传感器模块。它可以连接到ESPcopter的底部输入引脚

使用此模块,你可以测量ESPcopter的高度至1.2米,并自动固定无人机的高度。

这些扩展都相应在Arduino的库内,很简单的小玩意儿

https://remotexy.com/en/editor/
https://arikovani.com/en/projects/programlanabilir-mini-drone/detail
https://www.minixiazai.com/app/26220.html

这个就是WEB里面的头文件

可以推断出整机的硬件配置

https://github.com/thotro/arduino-dw1000

我先插一下这个MD的文件,这个东西比较高级。叫

UWD定位dwm1000测距模块,就是测距使用

这个是有人打扮焊接好的,Google电路图就有。国内资料缺乏

UWB即超宽频定位,一般用于室内离线定位,在众多离线定位方法中它算是精度最高的之一,其定位原理一般为TOA或者DOA。UWB定位,超宽频定位,本质上和GPS卫星定位的原理是一样的,它不过是将卫星放在了地面上,也就是自己搭建作为卫星的基站,然后去根据和GPS定位相同的算法计算出每个Anchor(基站)到Tag(移动站)的距离,从而解算出移动站的空间坐标,对于三维空间定位而言一般至少需要四个Anchor,Anchor的数量增加不但可以构建超定方程组使用一些算法提高精度,同时也可以作为通信质量不佳下的冗余设计,所以在可以接受的条件下,基站的数量一般越多越好。

淘宝,40块钱一个芯片。都是SPI的协议

这个是淘宝的价钱

http://dtysky.moe/article/Skill-2015_11_21_a
https://os.mbed.com/users/manumaet/code/DecaWave/
https://os.mbed.com/users/manumaet/code/DecaWave//archive/b6120c152ad1.tar.gz

以下内容来自于这个博客,以及一个国外的项目,以及相关的代码,一起发到这里

1.1 TOA/TDOA

UWB定位的原理是TOA或者TODA,当然也有还有AOA等,不常见。

1.1.1 TOA

TOA即“到达时间”,这种方式定位是通过Anchor和Tag之间的多次通信实现的,如下图:

  1. Anchor首先发给Tag一个包,同时记录下Anchor当前的时间信息,记为T1。

  2. Tag收到基站的信息,返回一个ACK。

  3. Anchor收到Tag的ACK,记录当前的时间信息,记为T2。

  4. Anchor计算时间差Tr = T2 - T1,并且根据此计算出距离:

d = c * Tr / 2

其中c为光速。

当然,实际应用中为了更加靠谱,往往不仅仅是利用两次通信来测距,还会有更加复杂的多次通信来提高精度,详细的同样可以看DW1000的UserManual最后一节。
对于空间定位,只需要利用SX(球面相交法)便可以得出最后的坐标。
可见,为了一次定位,每个Anchor和Tag之间要进行两次通信,故DecaWave又将这种定位方式称为“Two-way-ranging”。这种定位的优势在于其实现的便捷性和对硬件的宽容,只需要有几个摆放在不同位置的Anchor和一个Tag便可进行定位,而缺点嘛...首先自然是定位速度了,其次,由于每次通信的质量无法保证,而一对Anchor/Tag又无法做自我的校准,精度自然也会受到相当的影响。

1.1.2 TDOA

TODA即“到达时间差”,这种方式的一次测距是由两个Anchor和一个Tag实现的。在这种模式下,多个时钟完全同步的Anchor同时接受来自一个Tag的包,对于不同位置的Anchor,同一个Tag的同一次广播包到达的时间是不同的,所以便有有以下算法:

  1. Tag发出一个广播包。

  2. 两个Anchor接收到同一个包,Anchor1接收到的时间为T1,Anchor2接收到的时间为T1。

  3. 计算时间差Td = T2 - T1。

  4. 对于至少四个Anchor,可以得到三组这样的两两之间的信息。

  5. 通过数学方法(multi-lateration)可以解算出Tag的空间坐标。

由于算法比较复杂,这里不再赘述。

由此可见,TDOA的优势首先在于一次定位的通信次数显著减少,其次由于是用时间差而非绝对时间进行测距,其精度也比TOA高出一些。但优势总是以一些代价换来的,TDOA系统中各个Anchor的时钟必须严格同步,由于这种定位本质上是依赖于光速的,所以1ns的固有时钟误差便可以造成30cm的固有距离误差,这一点显然是不可接受的。而要打造一个间距比较大的精确同步系统成本又是比较高昂的,所以从这个层面来讲,TDOA并非一般人或者公司可以玩得起的。
当然,DecaWave自身研究出了另一种TDOA的方式(详见APS003),也就是在时钟之外另外加了一个同步位用于同步,不过看起来也是比较复杂的。

这个定位方式,国内还没有出现使用的(可能是我low),可能大疆的机以及有了,比如教育系列的机器?有点憧憬~

继续看我们的文档,都忘了~

#define REMOTE_WEB_APP#define WEB_APP_WIFI_SSID "ESPcopter" //ESPcopter WiFi名字#define WEB_APP_WIFI_PASSWORD "12345678" //ESPcopter 密码#include <espcopter.h>void setup(){ mainSetup();}void loop(){ mainLoop();}

继续看这个代码,在上面就是浏览器连接无人机以后用浏览器控制

这个的实现应该是网页在ESP8266里面储存着

甚至存的这么多,WiFi连接飞行器。然后输入IP就有这些

这个是用就像Mind+那种软件编出的代码

设置的话,就是更改名字,密码什么的


聊聊技术实现:

什么是Spiffs Memory?

闪存文件系统(SPIFFS)是SPI闪存(64kBytes至3Mbyte)存储器ESP存储程序。该归档系统可用于不经常存储更改数据,例如;网页,配置,传感器校准数据等~

如何安装Spiffs内存

下载工具:

https://github.com/esp8266/arduino-esp8266fsplugin/releases/download/0.5.0/ESP8266FS-0.5.0.zip

这种是用上面介绍的哪个自动生成安卓的布局软件控制

注意看这个连接过程

#define REMOTEXY_WIFI_SSID “RemoteXY”#define REMOTEXY_WIFI_PASSWORD “12345678”#define REMOTE_XY_REMOTE#include <espcopter.h> // libraryvoid setup(){ mainSetup(); // main flying setup}void loop(){ mainLoop(); // main flying loop}

放一点伪代码

此部分说的是飞机的校准。

也指出了必须有的传感器是:陀螺仪,加速度,地球磁场?就是指北用的

估计是提供相对的方向,在校准好以后。飞机的螺旋桨会短暂的启动

上面吐槽说人家浪费IO脚,没想到这个灯的作用有点强

这个里面是说的控制飞行器的方法,上面这些方法一次只有一个生效,其他的需要注释掉。

主要有,手机的app连接(WiFi),web端控制(wifi),MQTT(这个有点奇妙,第一次见用到控制),以及标准的航模PPM方式。很全面了~

这个是全局变量的一些定义

我们去搜索一下

这里的代码很有意思,我们稍微看看。有点IMU的味道

应该是用微调

也就是在三个方向进行微调

在第二个函数里面

这个是函数的开头,串口的波特率很高。写了个循环,来让串口正常工作。

9个引脚都是输出模式,接着除0以外的脚都是低电平

这个地方,我觉得不是Arduino的函数,而是esp的函数

果然是

然后就是PWM的启动,看来PWM的权重在系统里面很高

接着就是三个灯这是亮了应该是~

这个我猜不出来是什么意思

但是是调用了一次这个初始化的函数

我觉得应该是这个。我得看看IMU的传感器是什么

找到啦!是这个东西>.<

应该是和姿态相关的函数。就是初始的值,静止的感觉

这个就是PID的一些东西

你看在PID的实现里面。是初始值

这个是一个CPP的头文件,或者是一个类。是PID相关的函数,我后面研究

首先是电机控制,两个状态,开关。

Z轴稳定开关

高度固定开关

具有运动稳定功能的光流模块

这三个是上面的翻译

void setFlyMode_1(boolean x){ if (x == true) { flyMode_1 = 1; } else { flyMode_1 = 0; }}
void setFlyMode_2(boolean x){ if (x == true) { flyMode_2 = 1; } else { flyMode_2 = 0; }}
void setFlyMode_3(boolean x){ if (x == true) { flyMode_3 = 1; } else { flyMode_3 = 0; }}
void landing(boolean x){ if (x == true) { landingOff = 0; } else { landingOff = 1; }}

和SDK的参数对应。都在头文件里面了

电机的转速

电机的额定功率,我没有翻译错吧

三个方向上面的轴

看看是多少

应该是700MA

这个是电机的额定功率

在WEB_APP.h这个文件里面也找到这个。就是控制油门大小的。

另外三个航向都是一样的,不做解释了

这个是auto模式

首先是自动起飞,两个参数。高度,以及多久以后起飞

我找到了这个参数

这个是前向飞行~

自动飞行的函数,就是这么多

出现次数最多的是哪个函数,是这个延时函数

mission计数器 =

标准T,可能是秒吧(应该就是S)

自动悬停,借助于激光传感器

这个是上面哪个多距离传感器

蜂鸣器,以及灯什么的,


嗨~朋友,你还读的尽兴吗~我倒是写的还好。可能你读完我的文章得不到一个飞机,但是你可以学一些复杂系统之间的交互。我前些日子在使用Tello飞行器的时候,我就一直想知道内部的代码是互相交互的,以及传输进去指令如何干预这个精巧的小系统。这些都是我感兴趣的,恰好有这个项目,可以让我管中窥豹,看代码大呼过瘾。当然今天就是个开胃菜而已~感兴趣的朋友可以打赏我一下~~~或者一起玩耍也是极好的。

(0)

相关推荐

  • WIFI的Deauth攻击

    lissettecarlr0.0962019.01.29 15:01:44字数 889阅读 11,138Deauth攻击的原理是因为WIFI管理数据帧没有被加密,导致攻击者可以伪造管理帧,从而让攻击者 ...

  • 使用Disentangling形式的损失函数回归2D和3D目标框

    本文介绍一篇 ICCV 2019 的论文『Disentangling Monocular 3D Object Detection』.详细信息如下: 论文链接:https://arxiv.org/abs ...

  • 实用教程详解:用OpenCV的DNN模块部署YOLOv5目标检测

    作者丨nihate 审稿|邓富城 编辑丨极市平台 极市导读 本文中介绍的整套程序只依赖OpenCV库就能正常运行,彻底摆脱了对深度学习框架的依赖.文章讲述了作者在自己编写用OpenCV的dnn模块做Y ...

  • Decawave UWB定位原理

      先来看看UWB 在百科中的定义: UWB(Ultra Wideband)是一种无载波通信技术,利用纳秒至微微秒级的非正弦波窄脉冲传输数据.有人称它为无线电领域的一次革命性进展,认为它将成为未来短距 ...

  • uwb定位技术的原理及定位方法

    uwb定位技术即超宽带技术,它是一种无载波通信技术,利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽.传统的定位技术是根据信号强弱来判别物体位置,信号强弱受外界 影响较大,因此定位出的物体 ...

  • 人员定位将成煤矿行业强制标准,UWB定位产业迎来大利好

    本文来源:物联传媒 本文作者:银匠 煤矿,在中国是一个充满传奇色彩的名词. 作为中国工业的"粮食",煤矿在过去几十年有太多的记忆,比如说, 一座座拔地而起的工厂: 一个个富得流油的 ...

  • ESPcopter无人机源码分析.1

    ESPcopter无人机初探(UWB定位+ESP8266MCU) 这篇文章就开始对无人机的源码开始分析了,对飞机的具体说明在上了链接~ 按说这个库是可以记载在Arduino的,但是失败了 http:/ ...

  • ESPcopter无人机源码分析.2(使用分时库)

    今天分析的是点灯程序的升级版,厉害之处在于这个闪烁是用了精度比较高的函数库,不是就像以前一样是delay()延时 首先我们分析的东西不多,就一点 我们先从我们熟悉的代码入手. 作为标准的Arduino ...

  • ESPcopter无人机源码分析.3(阅读环境搭建)

    ESPcopter无人机初探(UWB定位+ESP8266MCU) ESPcopter无人机源码分析.1 ESPcopter无人机源码分析.2(使用分时库) 这款无人机的文章之前已经写过一个三篇,如果没 ...

  • ​杭州电子科技大学博士用微观交叉定位,让无人机送货不再“找路难”

    疫情期间,用无人机送快递既能解决快递 "井喷式" 增长时快递员人手不足的问题,它也为 "无接触" 快递服务提供了更多的选择. 然而,无人机送货也面临着精准分辨困 ...

  • 脐针外八卦定位初探

     海天胡天静 脐针外八卦全息治疗身体局部的病变常常是立竿见影. 如口的疾病针兑位首病乾腹病坤 目病离巽股震足 艮手坎耳. 在临床治疗中我们常常遇到这样的问题双侧耳有 ...

  • 黑科技App!无需建模,大疆无人机视频里看到的都能定位、测量

    想要用无人机实现目标物体的点.线.面.体测量以及各种地理要素的定位,只有航测建模才能做到么? 有没有想过,直接在无人机拍摄的视频画面中测量和定位?甚至把 GIS 图层融合叠加到无人机拍摄的视频中进行交 ...