在学习本教程前,请确保已经学习了前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 圆框示意图