竞赛无人机搭积木式编程(四)---2023年TI电赛G题空地协同智能消防系统(无人机部分)

竞赛无人机搭积木式编程(

---2023年TI电赛G题空地协同智能消防系统(无人机部分)

无名小哥 2023年9月15日

  1. 赛题分析与解题思路综述

        飞控用户在学习了TI电赛往届真题开源方案以及用户自定义航点自动飞行功能方案讲解后,能基于二次开发模式中已有的飞行控制API函数,即自动飞行支持函数和导航控制函数去实现特定赛题飞行动作、轨迹、航点等任务,上述内容是学生在备赛阶段学习无人机二次开发时的必备技能,对这部分不熟悉的可以回顾下前几讲的教程。

 

 

        针对2023年TI电赛的无人机赛题“空地协同智能消防系统”这一具体任务,简单可以分为以下三个部分的设计:

  1. 无人机自主飞行任务设计
  2. 消防车自动运行与灭火任务设计
  3. 模拟火源的任务设计

  • 无人机自主飞行任务设计概述

        在无人机自主飞行任务设计中,关于实现基础部分飞行功能,用户可以无需编写自主飞行任务代码,直接利用程序中已有的用户自定义航点飞行功能,去通过按键或者地面站设置航点坐标即可完成基础部分飞行任务,有且仅需要做的工作是写IO控制去驱动激光笔点亮、串口通讯用数传去实时发送位置等信息给小车平台就可以,基础部分的无人机飞行任务设计只需要做很少的工作量就可以把分数拿满。

        发挥部分无人机自主飞行任务设计分为航点遍历、底部视觉色块跟踪对准、驱动舵机实现投放动作,同样这三个元素在往届的赛题中均有涉及,躺赢者PRO飞控有与之配套的相关代码接口可以直接调用,如果用户在平常的训练中有跟着教程一路扎扎实实学习下来,自己编程去实现特定任务组合的任务代码应该也是驾轻就熟,对于熟练掌握的学生来讲就是用模块化的代码去搭积木的工作。

  • 消防车自动运行与灭火任务设计概述

        消防车自动运行与灭火任务的设计中,要求小车在行驶达到火源的过程中不得碾压街区边界线,这点需要小车事先规划好从出发点G0前往火源G处的中间路径点。小车平台上可搭载机载计算机通过激光雷达/深度相机实现全局定位,需要做的工作是实现航点遍历+视觉识别后激光笔对准,可加以云台辅助控制激光笔,实现在某一范围内激光笔动作,目的是实现快速的灭灯,具体云台单轴还是双轴需要根据实际做的模拟火源光敏电阻分布情况来。也可以不需要云台直接让视觉传感器和激光笔同轴安装,小车在视觉对准火源的过程中照射到光敏电阻就可以使得火源熄灭。

  • 模拟火源任务的设计

        自制模拟火源中要求用电池供电的红色光源去作为模拟火源,模拟火源的亮灭可以用激光笔持续照射去控制,持续照射2秒左右开启,再持续照射2秒左右关闭,同时对模拟火源的尺寸和形状有一定的要求。

        参赛学生可以通过自己熟练的任意一款单片机,简单设计基于灰度传感器、光敏传感器分压电路,加上MOS管驱动电路,编写AD电压采集、IO驱动程序,去实现这一任务,这部分代码量非常小,只要是学过单片机、懂基础的电路硬件知识的同学都能实现。设计虽然简单但是也有一些设计细节要点需要注意:

  1. 红色光源的强度要足够,确保能满足无人机在不同环境光线下都能稳定识别。如果无人机检测火源不可靠,意味着发挥部分的无人机释放灭火包、消防车运行部分的得分会全部丢掉,即使你的无人机和小车运行的又快又稳。相当于仅可拿到基础部分的分数,从实际比赛来看,很有些队伍出现了现场火源检测不到,只拿到了基础分数。由于国测现场无人机有部分队伍现场出现炸机情况,国测现场基本只要你飞机能跑完基础部分就是国一,虽然在奖项上来看都是一等奖,但是为了不给自己留遗憾,完全可以通过合理设计光源信息避免。针对23年电赛无人机赛题中只需要检测单一火源信息的情况,可以采用红色光源+红外光源结合的设计,机器视觉模组加上红外截止滤光片能保证稳定检测识别。
  2. 遮光罩的材质与遮光罩的尺寸影响无人机和消防车对模拟火源的识别,为了增加红色LED灯作为光源时的发光面积和聚光效果,通常采用聚光环或者手工折叠锡箔纸去实现灯罩的设计,所以灯罩需要有一定高度并且不透光。同时发光灯珠是在灯罩底部,使得消防车上安装的摄像头从侧面上就难以看得到模拟光源灯珠发出来的光,故而消防车上的激光笔对模拟火源的照射也无法实现。实际比赛中看到有些学校采用的透光的灯罩或者将灯罩外侧单独涂红色便于小车去检测模拟火源
  3. 模拟火源上光敏电阻容易对无人机上激光笔照射做出错误响应,题目中要求的是消防车照射火源时,火源才允许熄灭,但是实际赛题中在无人机识别到火源后,也需要用激光笔去照射模拟火源区并进行投放灭火包的这一动作。为了防止无人机激光笔照射到光敏电阻时,模拟火源的提前熄灭,通常需要让灯罩截面足够大,俯视投影能覆盖底下整个电路板部分,防止无人机激光笔的直射造成的误触发。或者直接将光敏电阻朝下能有效避免无人机激光笔的影响,通过调整消防车激光笔的到同一安装高度去实现稳定照射并检测。
  4. 光敏电阻组成的分压电路稳态电压输出值受到环境光线影响需要现场标定,由于不同环境光线下光敏输出阻抗存在差异,因此程序里面检测阈值需要现场标定,实际可以采用按键或者电位器进行现场标定。当然如果在光敏电阻朝下并且底板为深色的情况下,可无需标定。
  5. 激光笔的光斑比较小,需要多个光敏电阻均匀分布才能确保激光笔照射到后实现灭火,由于没办法保证激光笔光斑能严格对准某一区域的光敏电阻,往往需要依靠灯罩、电路板的间接反射才能照射到光敏电阻,并且题目要求要持续不间断照射2S才行,实际小车很难做到这一点,故可以设计两组检测回路,比如单独用一路灰度传感器去作为2S持续照射的去点亮或者关闭,另外一路光敏回路作为消防车灭火时用,只要有激光笔照射到光敏上就可以触发光源熄灭条件。

        综上所述,学生在实现2023年TI电赛空地协同智能消防系统中,针对无人机自主飞行任务设计,对于平时有积累并有掌握往届真题、案例demo的同学难度基本可以忽略,只需要把通过无线数传传输无人机状态给小车,小车发送ADC按键键值去无线操控无人机解锁、上锁、SDK、降落后,基本无人机部分的工作量就能完成。消防车如果搭载有机载计算机全局定位的情况下航点遍历、视觉对准、舵机云台控制等这些属于常规项,用通用的SLAM小车套件实现难度也不大,当然没有SLAM定位情况下,单靠IMU+编码器组成的里程计系统,在选取摩擦力大的轮胎情况下也同样可以完成。最后单看模拟火源部分工作量也很少,除了上面说的一些细节要注意,对于普通电子信息相关专业学生能高效率完成。模拟火源熄灭的评分只占很少一部分,消防车能视觉对准火源照射,火源没有熄灭也不会影响学生去拿国奖。毕竟有些省份的无人机赛题只要发挥部分小车能动起来就能推优综测,综测过了,无人机国测基础部分能飞现场不炸机基本就是稳拿国一。

        虽然赛题实现拆分来看每一项的工作量都不算大,单独某一项的难度可能还比不上大三大四学年的一个专业相关课程设计,但是这些都是建立在训练备赛阶段熟练掌握的已有资源的前提下。由于涉及的三个部分需要独立设计方案综合考量,并且彼此之间需要联合调试,整体上的工作量会很大,比赛阶段时间上会非常赶,特别是在自己实验室只有一组无人机队伍参赛的情况下,三个人能做好分工的情况下时间都显得捉襟见肘

        来年备战比赛的学生可以看看实际每个省无人机国赛出线或者省奖排名靠前的队伍,能取得好成绩的很多都是该校有安排多组无人机参赛队伍,像西交、上大(SHU)、东大(SEU)、重大、北邮、桂电、山大(SDU)、哈工大、南工程、杭电等这样的无人机赛题方向传统强队,多年实力霸榜垄断该省份的无人机出线名额。同赛题多组参赛队伍的好处是彼此硬件方案接近,学校资源一致,虽然电赛要求每组队伍独立参赛,但是实际很难避免实验室为了确保出线名额,其它队伍参考种子队伍的方案去比赛。这种情况下就有更多的人手去做类似消防车、模拟火源基础服务的工作,比如一个实验室有三组队伍,这就相当9个人做了3个人的活,碰到今年每项都比较基础只是总工作量大的赛题,多组队伍参赛的学校想不出线都难。无人机赛题多组队伍参赛的结果好处就是能分担工作量,学生有更多的时间去做优化,做的好的情况下就是集体出线,完全不给同省其它高校无人机参赛队伍任何机会。

        单看控制方向题目,由于无人机赛题相对小车或其它控制赛题经费开销巨大,一台搭载机载计算机支持激光雷达SLAM/T265定位的无人机外加上备用件耗材基本都要到1w往上走,外加当下经费吃紧、报销流程复杂,综合来看有实力组织多组参赛队伍去做无人机赛题的高校并不多。往往需要持续多年的人员经费投入才能取得好的成绩,当然也有一些首年使用NC360竞赛无人机开发平台就获得国奖、省一的同学,这部分相对比较少,每年都只有典型的几组,更多的是需要做好传承帮带,积累资源、持续投入迭代,这样自己的学校才会在电赛无人机赛题上有一席之地。

        另外纵观这么多年的电赛无人机赛题得奖情况,还有一个现象就是有些省份出线和排名靠前的队伍并不一定是该省的头部985、211高校,有些省份双非、普通二本、民办独立高校的无人机获得国奖、省一的也很多,特别是在西北、西南和部分南方省份更为明显,经过以往调查来看这些学校往往有着较为充裕的经费支持,持续的供应能让这些学校的学生能用上更为可靠的硬件平台、定位方案、机载计算机平台,平时能做多套方案验证去高效率的学习,不会因为一时的炸机而畏手畏脚进展缓慢,在备战电赛无人机也更有底气,平常处理的问题多,比赛阶段团队协作运用综合能力,选择合适方法去高效率的解决实际问题就会更得心应手

        学生的能力固然重要,但是没有学校、实验室、指导老师的持续的支持和经费投入,单凭学生的一腔热血很难持久。没有学校支持顶多就是某届某个学生能力出众凭个人能力拿个一等奖,没有持续的经费支持,后面没人接手,青黄不接后就很难再拿好名次了,特别是在前几年口罩期间这种传承断代、设备长期吃灰、临时抱佛脚、仓促应战的情况就更为明显。

 

  1. 无人机自动飞行任务的软件设计
  1. 第一阶段——自动起飞到航巡高度

uint8_t Auto_Takeoff(float target)//自动起飞到某一高度

         函数输入参数target为目标高度,自动起飞任务分为两个线程,第一步为记录当前3维位置信息,作为导航初始原点位置。并且通过导航控制函数设置期望目标高度位置。第二步为实时检测高度偏差值,连续1S满足位置偏差在10cm以内后,函数返回值置1后,自动起飞到目标高度任务完成,当前的mode会加上task_select_cnt进而实现自主起飞任务完成后,会进入case 21/22执行航点遍历作业任务,其中task_select_cnt可以通过遥控器调节,方便现场执行不同的sdk任务。

 

  1. 基础部分——航点遍历作业任务

void Air_Ground_Extinguish_Fire_System_Basic(void)

 

         第一步将高度期望设置成第巡逻高度180cm,水平位置期望为初始起飞时候的水平位置,并设置激光笔为持续闪烁,便于裁判判断飞机机身中心在地面上的投影位置,起飞点上方悬停时间设置为1S。

 

        起飞点上方悬停1S后,会将键盘输入的第一个航点A点的水平坐标填入到期望的目标位置,随后飞机会执行从起飞点正上方飞向第一个航点A点的动作,在执行本任务中对水平位置误差进行实时检测,连续N次水平位置误差小于某一阈值,即可以认为到达A点正上方附近,满足达到A点条件后会将航点计数器flight_global_cnt2[n]自加,flight_subtask_cnt[n]置1,飞机会继续执行flight_subtask_cnt[n]==1中的任务,即刷新下一航点位置后再进入flight_subtask_cnt[n]==2中实时检测水平位置偏差,依次判断是否到达B、C、F、E、D航点。 

         当满足航点计数器flight_global_cnt2[n]>=block_navpoint_num_basic时表示所有区块都已经巡逻完毕,结束航点遍历后无人机继续执行返航降落。

        无人机会执行返航动作,首先无人机飞到起飞点正上方,连续N次水平位置误差小于某一阈值即可认为达到起飞点正上方附近,满足水平抵达之后会执行原地降落至地面的任务,到达地面后无人机会满足地面检测条件自动上锁。 

  1. 发挥部分——航点遍历+色块对准+投放动作任务

void Air_Ground_Extinguish_Fire_System_Innovation(void)

 

        第一步将高度期望设置成第巡逻高度180cm,水平位置期望为初始起飞时候的水平位置,并设置激光笔为持续闪烁,便于裁判判断飞机机身中心在地面上的投影位置,起飞点上方悬停时间设置为1S,同时驱动排针PWM的预留PWM2对舵机进行控制实现夹住灭火包。在起飞点上方悬停完毕后会设置A点为目标航点,无人机会飞向A点。 

        达到A点之后的航点遍历过程,无人机会实时判断底部OPENMV视觉模拟火源情况,如果识别到了模拟火源,无人机会中止航点遍历的过程,进入色块对准模式。

        线程计数器flight_subtask_cnt[n]赋值为5进入色块对准模式,为了避免初始识别到火源时位置偏差太大,调整过激,这里有对未知色块位置-速度控制器输出进行了限幅度。 

        色块对准的结束条件有两个,分别为时间约束和色块位置约束,无人机值执行色块对准的过程中,色块位置误差会逐渐收敛到0,如果连续N次满足色块位置误差比较小会提前结束色块对准过程。

        结束色块对准后,无人机会记录当前的水平位置供后续消防车使用,之后无人机会调节高度到100cm。下降完毕后会原地悬停3S后驱动舵机投放灭火包。

        投放完毕后更新火源信息,相关的坐标信息会通过串口数传发送给消防车。 

 

        最后会恢复到180cm巡逻高度,抵达后会继续识别到火源信息前的航点遍过程。 

        在巡逻完毕A、B、C、F、E、D后,会继续执行返航降落,这部分和基础部分代码一样,即flight_subtask_cnt为1~3的内容,故不再赘述,可参考基础部分解释。

        最后给出小车无线发送ADC按键键盘AD值,消防车控制无人机解锁、上锁、SDK、自动降落的代码以及无人机发送三维位置、航程、模拟火源信息的代码段。

 

无线ADC按键使用相关操作教程方法见下方链接

小车上的ADC按键实现对无人机的控制与飞控发送航点/火情数据给小车平台的演示_哔哩哔哩_bilibili

        由于本节内容过多,基于盘古TI MCU的多功能控制器实现的消防车的教程和制作模拟火源的教程单独作为一节给出。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/144195.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零学算法(LCR 191)

为了深入了解这些生物群体的生态特征,你们进行了大量的实地观察和数据采集。数组 arrayA 记录了各个生物群体数量数据,其中 arrayA[i] 表示第 i 个生物群体的数量。请返回一个数组 arrayB,该数组为基于数组 arrayA 中的数据计算得出的结果&am…

移动端和PC端对比【组件库+调试vconsole +单位postcss-pxtorem+构建vite/webpack+可视化echarts/antv】

目录 组件库 移动端 vue vant PC端 react antd vue element 调试:vconsole vs dev tools中的控制台(Console) vconsole:在真机上调试 postcss-pxtorem:移动端不同的像素密度 构建工具 webpack 原理 Ba…

Linux 进程层次分析

Linux 进程组 每个进程都有一个进程组号 (PGID) 进程组:一个或多个进程的集合 (集合中的进程并不孤立)进程组中的进程通常存在父子关系,兄弟关系,或功能相近 进程组可方便进程管理 (如:同时杀死多个进程,发送一个信…

RISC-V 基础指令汇总

加载指令 存储指令 PC寻址指令 auipc rd, imm这条指令把 imm (立即数)左移12位并带符号扩展到64位后,得到一个新的立即数,这个新的立即数是一个有符号的立即数,再加上当前 PC 值,然后存储到 rd 寄存器中。…

解释器风格架构C# 代码

/*解释器风格架构是一种基于组件的设计架构,它将应用程序分解为一系列组件,每个组件负责处理特定的任务。这种架构有助于提高代码的可维护性和可扩展性。以下是如何使用C#实现解释器风格架构的步骤:定义组件:首先,定义…

表的增删改查

文章目录 1. Create(创建)1.1 insert1.2 插入否则更新1.3 替换 2. Retrieve(查询)2.1 SELECT 列2.2 WHERE 条件2.3 结果排序2.4 筛选分页结果 3. Update(更新)4. Delete(删除)4.1 删除数据4.2 截断表 5. 插入查询结果 1. Create(创建) 1.1 insert 下面我们用这个表来操作&…

【算法分析与设计】动态规划(上)

目录 一、学习要点二、算法总体思想三、动态规划基本步骤四、矩阵连乘问题4.1 完全加括号的矩阵连乘积4.2 穷举法4.3 动态规划4.3.1 分析最优解的结构4.3.2 建立递归关系4.3.3 计算最优值4.3.4 用动态规划法求最优解 五、动态规划算法的基本要素5.1 最优子结构5.2 重叠子问题5.…

采集SEO方法-优化内链与外链建设

采集大量的文章数据,要想批量做SEO优化添加内链外链方法,可以使用简数采集器的处理规则实现。 简数采集器的一个处理规则,可以包含多种SEO方法,还可自由组合,强大灵活方便。 优化内链外链的SEO技巧: 1&a…

新手教程,蛋糕小程序的搭建流程一网打尽

作为一名新手,想要搭建一个蛋糕小程序可能会觉得有些困惑。但是,不用担心!今天我将为大家详细介绍蛋糕小程序的搭建流程,并带大家一步步完成。 首先,我们需要登录乔拓云网的后台。在登录成功后,点击进入商城…

python使用mitmproxy和mitmdump抓包在手机上抓包(三)

现在手机的使用率远超过电脑,所以这篇记录用mitmproxy抓手机包,实现手机流量监控。 环境:win10 64位,Python 3.10.4,雷电模拟器4.0.78,android版本7.1.2(设置-拉至最底部-关于平板电脑&#xf…

多线程总结(线程池 线程安全 常见锁)

本篇文章主要是对线程池进行详解。同时引出了单例模式的线程池,也对线程安全问题进行了解释。其中包含了智能指针、STL容器、饿汉模式的线程安全。也对常见的锁:悲观锁(Pessimistic Locking)、乐观锁(Optimistic Locki…

DevOps持续集成与交付

概述 Jenkins是一个支持容器化部署的、使用Java运行环境的开源软件,使用Jenkins平台可以定制化不同的流程与任务、以自动化的机制支持DevOps领域中的CI与CD,在软件开发与运维的流程中自动化地执行软件工程项目的编译、构建、打包、测试、发布以及部署&a…

使用Vue-cli构建spa项目及结构解析

一,Vue-cli是什么? 是一个官方发布的Vue脚手架工具,用于快速搭建Vue项目结构,提供了现代前端开发所需要的一些基础功能,例如:Webpack打包、ESLint语法检查、单元测试、自动化部署等等。同时,Vu…

qml保姆级教程一:布局组件

💂 个人主页:pp不会算法v 🤟 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 QML系列教程 QML教程一:布局组件 文章目录 锚布局anchors属…

JVM——11.JVM小结

这篇文章我们来小结一下JVM JVM,即java虚拟机,是java代码运行时的环境。我们从底层往上层来说,分别是硬件部分,操作系统,JVM,jre,JDK,java代码。JVM是直接与操作系统打交道的。JVM也…

基于复旦微的FMQL45T900全国产化ARM开发开发套件(核心板+底板)

TES745D是我司自主研制的一款基于上海复旦微电子FMQL45T900的全国产化ARM核心板(模块)。该核心板将复旦微的FMQL45T900(与XILINX的XC7Z045-2FFG900I兼容)的最小系统集成在了一个87*117mm的核心板上,可以作为一个核心模…

进入IT行业:选择前端开发还是后端开发?

一、前言 开发做前端好还是后端好?这是一个常见的问题,特别是对于初学者来说。在编程世界中,前端开发和后端开发分别代表着用户界面和数据逻辑,就像城市的两个不同街区一样。但是,究竟哪个街区更适合我们作为开发者呢…

yolox相关

yolox YOLOXYOLOX-DarkNet53yolov3作为baseline输入端Strong data augmentationMosaic数据增强MixUp数据增强注意 BackboneNeckPrediction层Decoupled headDecoupled Head 细节 Anchor-freeAnchor Based方式Anchor Free方式标签分配初步筛选精细化筛选 SimOTASimOTA Other Back…

「UG/NX」Block UI 从列表选择部件SelectPartFromList

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

DDS信号发生器波形发生器VHDL

名称:DDS信号发生器波形发生器 软件:Quartus 语言:VHDL 要求: 在EDA平台中使用VHDL语言为工具,设计一个常见信号发生电路,要求: 1. 能够产生锯齿波,方波,三角波&…