在学习本教程前,请确保已经学习了前4讲中无人机相关坐标系知识、基础飞行控制函数、激光雷达SLAM定位条件下的室内定点控制、自动飞行支持函数、导航控制函数等入门阶段的先导教程。
同时用户在做二次开发自定义的飞行任务时,可以参照第5讲中2021年国赛植保无人机G题中的编程思路,了解子线程执行过程几组关键变量的用法与实际作用效果。
了解了上述自主飞行任务设计关键要点后,下面我们以2022年全国大学生电子设计竞赛中B题送货无人机中题目要求为例,编写自动飞行任务函数完成比赛中的基础部分+发挥部分+创新部分等所有赛题要求。



根据赛题要求,我们可以将设计的软件部分拆解为以下三个部分:
2.1 机器视觉部分软件的设计
底部目标特征点的颜色为红色和蓝色,可以通过OPENMV机器视觉模组的寻找色块函数find_blob()对底部目标进行识别,我们可以判断识别到的色块的密度参数即blob.density(),可以很方便的区分出矩形、圆形、三角形。

最后将识别到的色块坐标、色块形状等关键参数填入到目标类中,编码后通过串口发送到飞控SDK串口,飞控通过解析到的数据帧就能判断出目标点的形状和颜色用于控制决策。

2.2 飞控人机交互界面软件设计
依靠Tiva LaunchPad核心板上板载的两个独立按键SW1、SW2,同时配合OLED显示屏实现对赛题中相关参数的进行修改、存储,新加功能需要兼容原来按键的翻页切换的功能,就必须设置相应的菜单界面配合按键的长按、短按响应来予以实现。





菜单界面的包括换行参数选中、参数加减调整,由于按键功能复用的关系,操作起来相关比较繁琐,用户后期可以通过外接ADC按键的方式,用扩展按键实现本例中的按键操作功能,人机交互部分操作视频教程见下方链接。

TI电赛B题送货无人机通过按键、菜单对坐标、模板进行设置
https://www.bilibili.com/video/BV1PB4y1t7y9/?vd_source=fa3e626a57e95e09ecf1b8f1627e58ac
2.3 无人机自动飞行任务的软件设计
第一阶段——自动起飞到航巡高度
uint8_t Auto_Takeoff(float target)//自动起飞到某一高度
函数输入参数target为目标高度,自动起飞任务分为两个线程,第一步为记录当前3维位置信息,作为导航初始原点位置。并且通过导航控制函数设置期望目标高度位置。第二步为实时检测高度偏差值,连续2S满足位置偏差在10cm以内后,函数返回值置1后,自动起飞到目标高度任务完成,用法参照Developer_Mode.c开发者模式中case 11用法,自主起飞任务完成后会进入case 15/16/17执行航点遍历作业任务。


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

起飞点上方悬停5S后,会将键盘输入的第一个作业点的水平坐标填入到期望的目标位置,随后飞机会执行从起飞点正上方飞向第一作业点的动作,在执行本任务中对水平位置误差进行实时检测,连续N次水平位置误差小于某一阈值,即可以认为到达第一作业点正上方附近,满足达到第一作业点条件后会将高度期望设置成第二作业高度,飞机高度会下降。


第三步是判断无人机是否到达第二作业高度,检测高度是否达到的原理和水平方向一样,同样是检测高度方向上位置误差持续N次满足某一阈值。

第四步飞机处于第一作业点正上方附件,并且高度已经调整为第二作业高度,此时由于定位传感器会存在一定位置误差,这个时候水平方向位置控制会引入OPENMV识别到的色块坐标信息,无人机会对水平位置进行二次修正,使得无人机中心投影处于色块的中心区域。相当于用SLAM定位提供的位置信息做粗对准,在接近作业点时使用机器视觉实现进一步地精确对准。

与此同时会执行吊舱下放动作指令,利用的是360度转动的舵机,以某一角速度执行一定时间予以实现,具体的时间角速度、时间参数和自己舵机选型、绞盘的半径有关,这两个参数在实际调试也比较容易确定。塔吊下方执行完毕后会驱动高分贝蜂鸣器进行报警提示,原地悬停5S之后抬升塔吊装置并恢复到第一作业高度


第五步是无人机执行完第一作业点任务并回到第一作业高度后,会想任务线程发布第二作业点的位置,与第一作业点类似无人机会到第二作业点正上方附近,随即下降高度高第二作业高度,执行视觉二次对准、下放/抬升塔吊、蜂鸣器报警,之后重新返回到第一作业高度,准备返航。







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


这里需要注意的是程序在此处有一段特殊处理部分为SLAM建图复位指令,在之所以需要这么操作的原因是减小定位误差,NC360竞赛无人机平台使用的是2D激光雷达,理论上只适合平面运动机器人平台的SLAM建图,无人机在空中的线性运动为3维的,无人机在不同高度上,由于周围环境的陈设布置变化会造成一定的定位误差,通常在3~5cm以内,该误差范围能满足无人机在竞赛中的控制精度要求。对于不同高度空间环境变化较大的情况,可以采用本方案中的特殊处理形式,本特殊处理方式非必须,用户可以自己二次开发过程中根据实际情况来决策是否选用,同时对于末端降落过程,依然可以利用底部视觉特征精准对准的方法,实现精准降落。
针对创新+发挥部分的自动学习和穿越圆环部分内容,大体过程和本例程类似,差别在于坐标是通过现场识别到的模板特征录入的,这个处理过程主要工作量在于OPENMV部分,整个飞行任务执行过程和基础部分基本一样,同时对于穿越圆环部分,通过手动输入圆环的坐标和大致角度后,整个飞行过程就是航点遍历、机头对准圆环、穿越的过程,执行完毕后返航降落,整个过程相比前两项只是多了一个航向控制,相对来讲实现难度并没有拔高,仍然属于常规考察项,用户结合程序注释可以比较容易理解,故在这里不做展开。

2022年7月电赛B题送货无人机加装硬件介绍—NC360深度开源竞赛无人机开发平台_哔哩哔哩_bilibili
2022年TI电赛B题—送货无人机开源方案NC360深度开源竞赛无人机开发平台_哔哩哔哩_bilibili
任意位置、角度自主飞行穿越圆框——2022年TI电赛飞行器B题送货无人机_哔哩哔哩_bilibili

2021年电赛G题植保无人机国奖标准方案学习样例
电赛G题植保无人机国奖标准方案学习样例——NC360深度开源竞赛无人机开发平台_哔哩哔哩_bilibili
2021年电赛G题—植保无人机实现例程—NC360深度开源竞赛无人机开发平台_哔哩哔哩_bilibili

5_竞赛无人机搭积木式编程——以2021年电赛国奖标准完整复现为例学习 - 哔哩哔哩
NC360深度开源竞赛无人机开发平台


设计一基于多旋翼飞行器的送货无人机,能够根据不同的要求,向指定的目标地点运送货物。图 2 为作业区域示意图,有起飞降落点和多个具有不同特征的目标地点。
送货无人机上需安装一可升降吊舱,吊舱重量 50±5g,升降范围 60±10cm;起飞、飞行过程中,吊舱紧贴无人机机腹;到达目标地点上方,无人机下降悬停,并将吊舱降至距离地面一定高度,送货操作完成后恢复到巡航高度飞行。无人机上需安装扬声器,可播放语音提示信息;无人机安装垂直向下的激光笔,用以标识航迹。

图 2 送货无人机作业区示意图
| 项 目 | 主要内容 | 满分 |
| 系统方案 | 技术路线、系统结构,方案描述、比较与选择 | 3 |
| 设计与计算 | 控制方法描述及参数计算 | 5 |
| 电路与程序设计 | 系统组成,原理框图与各部分电路图 系统软件设计与流程图 | 7 |
| 测试方案与测试结果 | 测试方案及测试条件;测试结果完整性;测试结果 分析 | 3 |
| 设计报告结构及规范性 | 摘要、报告正文结构、公式、图表的完整性和规范 性 | 2 |
| 小计 | 20 | |

图 3 圆框示意图
3月26日,映宇宙(HK:03700,即“映客”)发布截至2022年12月31日的2022年度业绩财务报告。财报显示,映宇宙2022年的总营收为63.19亿元,较2021年同期的91.76亿元下降31.1%。2022年,映宇宙的经营亏损为4698.7万元,2021年同期则为净利润4.57亿元;期内亏损(净亏损)为1.68亿元,2021年同期的净利润为4.33亿元;非国际财务报告准则经调整净利润为3.88亿元,2021年同期为4.82亿元,同比下降19.6%。 映宇宙在财报中表示,收入减少主要是由于行业竞争加剧,该集团对旗下产品采取更为谨慎的运营策略以应对市场变化。不过,映宇宙的毛利率则有所提升
下载微PE工具箱进入官网下载微PE工具箱-下载 安装好后,打开微PE工具箱客户端,选择安装PE到U盘 PE壁纸可选择自己喜欢的壁纸,勾选上包含DOS工具箱,个性化盘符图标 下载原版系统进入网站下载镜像NEXT,ITELLYOU如果没有账号,注册一下就好进入选择开始使用选择win10 这里我们选择消费者版,用迅雷把BT种子下载下来 下面的两个盘符,是PE工具箱安装进U盘后,分成的盘符,注意EFI的盘符,这里面不能删东西,也不能添东西,另一个盘符可以当做正常的U盘空间使用,我们现在需要把下载下来的景象文件复制到正常的U盘空间中去 这个时候我们的系统U盘就只做好了 安装系统我们将U盘插入电脑,开机,
如何用IDEA2022创建并初始化一个SpringBoot项目?目录如何用IDEA2022创建并初始化一个SpringBoot项目?0. 环境说明1. 创建SpringBoot项目 2.编写初始化代码0. 环境说明IDEA2022.3.1JDK1.8SpringBoot1. 创建SpringBoot项目 打开IDEA,选择NewProject创建项目。 填写项目名称、项目构建方式、jdk版本,按需要修改项目文件路径等信息。 选择springboot版本以及需要的包,此处只选择了springweb。 此处需特别注意,若你使用的是jdk1
文章目录问题B:芝华士威士忌和他的小猫咪们代码&注释问题C:愿我的弹雨能熄灭你们的痛苦代码注释问题D:猜糖果游戏代码注释问题E:有趣的次方代码注释问题F:这是一个简单题代码&注释问题G:打印矩阵代码注释问题H:scz的简单考验代码注释问题I:完美区间代码&注释问题J:是狂热的小迷妹一枚吖~代码&注释2022年10月23日周赛ZZULIOJ问题B:芝华士威士忌和他的小猫咪们时间限制:1Sec内存限制:128MB题目描述芝华士威士忌很喜欢带着他的猫咪们一块跑着玩。但是小猫咪们很懒,只有在离他y米以内才愿意和他一块跑。这天他在坐标为x的位置,他想和他的猫咪们一块跑着玩。有n个小猫咪,第i个小猫咪在坐
代码请进行一定修改后使用,本代码保证100%通过率,本题目提供了java、python、c++三种代码。复盘思路在文章的最后题目描述祖国西北部有一片大片荒地,其中零星的分布着一些湖泊,保护区,矿区;整体上常年光照良好,但是也有一些地区光照不太好。某电力公司希望在这里建设多个光伏电站,生产清洁能源对每平方公里的土地进行了发电评估,其中不能建设的区域发电量为0kw,可以发电的区域根据光照,地形等给出了每平方公里年发电量x千瓦。我们希望能够找到其中集中的矩形区域建设电站,能够获得良好的收益。输入描述第一行输入为调研的地区长,宽,以及准备建设的电站【长宽相等,为正方形】的边长最低要求的发电量之后每行为
https://cloud.189.cn/t/BJbYreYbmUj2(访问码:djz6)(网盘2022-4-1更新)一、刷入armbian。1.1使用AmlBurnTool软件烧录首选底包至固件。烧录完成后断开玩客云电源备用。(靠近hdmi的那个口子。)1.2使用WIn32diskimager软件将emmc固件写入U盘。1.3写入成功后,先将U盘插入玩客云靠近网线接口端的USB口,再接入电源。玩客云通电后指示灯会先亮绿灯,再亮蓝灯,红蓝闪烁,最后蓝灯常亮。等到确定蓝灯常亮后,再拔掉U盘、电源。(最好蓝灯常亮后,启动一次玩客云,看看ssh是否正常。)1.4使用WIn32diskimager写入
Ai-Bot基于流行的Node.js和JavaScript语言的一款新自动化框架,支持Windows和Android自动化。1、Windowsxpath元素定位算法支持支持Windows应用、.NET、WPF、Qt、Java和Electron客户端程序和ie、edgechrome浏览器2、Android支持原生APP和H5界面,元素定位速度是appium十倍,无线远程自动化操作多台安卓设备3、基于opencv图色算法,支持找图和多点找色,1080*2340全分辨率找图50MS以内4、内置免费OCR人工智能技术,无限制获取图片文字和找字功能。5、框架协议开源,除官方node.jsSDK外,用户可
问题描述小蓝负责一个公司的考勤系统,他每天都需要根据员工刷卡的情况来确定每个员工是否到岗。当员工刷卡时,会在后台留下一条记录,包括刷卡的时间和员工编号,只要在一天中员工刷过一次卡,就认为他到岗了。现在小蓝导出了一天中所有员工的刷卡记录,请将所有到岗员工的员工编号列出。输入格式输入的第一行包含一个正整数n,表示一天中所有员工的刷卡记录的条数。接下来n行,每行包含一条刷卡记录,每条刷卡记录的格式为:HH:MM:SSID其中HH:MM:SS表示刷卡时间,HH为一个0到23之间的两位十进制整数(可能含前导0)表示时,MM为一个0到59之间的两位十进制整数(可能含前导0)表示分,SS为一个0到59之间的
2022年山东省职业院校技能大赛高职组“信息安全管理与评估”赛项竞赛规程一、赛项名称赛项名称:信息安全管理与评估英文名称:InformationSecurityManagementandEvaluation赛项组别:高职组赛项归属:电子与信息大类二、竞赛目的(一)引领教学改革通过大赛引领专业教学改革,实现以赛促教、以赛促学、以赛促改的产教结合格局,提升专业培养服务社会和行业发展的能力,为国家信息安全行业培养选拔技术技能型人才。2022年信息安全管理与评估赛项延续历届赛项的竞赛内容,通过赛项检验参赛选手安全网络组建、按照等保要求加固网络系统、安全架构、渗透测试、攻防实战等技术能力,检验参赛队计划
目录类01背包问题,选or不选变种走方格类01背包问题,选or不选不同的子序列_牛客题霸_牛客网问题翻译: S有多少个不同的子串与T相同 S[1:m]中的子串与T[1:n]相同的个数 由S的前m个字符组成的子串与T的前n个字符相同的个数状态: 子状态:由S的前1,2,...,m个字符组成的子串与T的前1,2,...,n个字符相同的个数 F(i,j):S[1:i]中的子串与T[1:j]相同的个数状态递推: 在F(i,j)处需要考虑S[i]=T[j]和S[i]!=T[j]两种情况 当S[i]=T[j]