目录
一、2021 电子设计大赛 G 题背景与意义
全国大学生电子设计竞赛是教育部和工业和信息化部共同发起的大学生学科竞赛之一,是面向大学生的群众性科技活动 ,目的在于推动高等学校促进信息与电子类学科课程体系和课程内容的改革,培养大学生的实践创新意识与基本能力、团队协作的人文精神和理论联系实际的学风 。2021 年的电子设计大赛吸引了众多高校学生参与,大家在各个赛题中展现自己的专业知识和创新能力。
其中 G 题 “植保飞行器” 紧扣时代发展需求。在农业现代化进程中,植保工作至关重要。传统的植保方式,如人工喷洒农药,不仅效率低下,而且劳动强度大,难以满足大规模农业生产的需求。同时,人工操作还存在着农药接触风险,对人体健康有一定危害。而植保无人机的出现,为这些问题提供了解决方案。它能够快速、精准地完成农药喷洒等植保任务,大大提高了工作效率,减少了农药的浪费和对环境的污染,保障了农作物的健康生长,对提高农业生产效率、保障粮食安全有着重要意义。从电子技术应用角度来看,植保飞行器的研发涉及到自动控制、传感器技术、图像处理、通信技术等多个电子领域,推动了这些技术在实际应用中的融合与发展 。
二、G 题详细解析
2.1 任务与要求
- 基本要求
- 起飞与巡航:飞行器需在指定的黑底白字 “十” 字起降点垂直起飞 ,并稳定升空至 150 ± 10cm 的巡航高度。这对飞行器的动力系统和姿态控制算法有着较高要求,动力系统要能够提供足够且稳定的升力,姿态控制算法则要保证飞行器在起飞过程中保持垂直稳定,避免出现倾斜、晃动等不稳定情况。
- 作业执行:从标识为 “A” 的 21 号区块开始寻找播撒作业起点 ,并在 360 秒内完成对图中所有绿色区块(50cm×50cm 虚线格区块,共 28 个)的全覆盖播撒。这就需要飞行器具备精确的定位和路径规划能力,结合先进的传感器技术,实时获取自身位置信息,根据作业区域地图规划出高效、无遗漏的飞行路径,确保在规定时间内完成任务。同时,飞行器用启闭可控、垂直向下安装的激光笔的闪烁光点表示播撒动作 ,光点在每个区块闪烁 1 - 3 次视为正常播撒。这要求对激光笔的控制逻辑与飞行器的飞行路径紧密配合,保证在正确的位置、正确的时间进行播撒动作。
- 降落:作业完成后,飞行器要稳定准确降落在起降点 ,飞行器几何中心点与起降点中心距离的偏差不大于 ± 10cm。降落过程同样考验飞行器的姿态控制和定位能力,在接近地面时,需要精确调整速度和角度,确保平稳、准确降落。
- 发挥部分
- 区域变更作业:将作业区中任意位置的 3 - 4 个连续播撒区块改为用非播撒区域颜色覆盖 ,飞行器需重复基本要求中的起飞、寻找起点和播撒作业流程。这进一步考察飞行器对环境变化的感知和适应能力,通过视觉识别等技术,能够准确判断区域的变更,及时调整播撒策略,避免在非播撒区域进行播撒。
- 条形码识别与降落:在作业区中放置一只高度为 150cm、直径 3.5 ± 0.5cm 的黑色杆塔 ,杆塔上套有圆环形条形码(放条码的高度为 120 - 140cm)。飞行器在作业中或返航途中,要识别条形码所表征的数字 ,并用 LED 闪烁次数显示数字,间隔数秒后再次闪烁显示。这需要飞行器配备图像识别模块,能够对条形码进行快速、准确的识别和解码。然后,以起降点 “十” 字中心为圆心,以上述识别的数字乘 10cm 为半径 ,飞行器在该圆周上稳定降落,飞行器几何中心点与该圆周最近距离的偏差不大于 ± 10cm。这对飞行器的导航和定位精度提出了更高要求,要能够根据识别的数字计算出降落圆周,并精确控制飞行器降落在指定位置。
- 现场编程:在测试现场随机抽取一个项目 ,30 分钟内现场完成一组飞行动作任务的编程调试,并完成飞行动作。这考察参赛团队对飞行器控制系统的熟悉程度和编程能力,能够在短时间内根据新的任务需求,编写并调试飞行程序。
2.2 涉及知识领域
- 无人驾驶航空器技术:包括飞行器的结构设计 ,如四旋翼、六旋翼等不同构型的特点和应用场景,要根据比赛要求选择合适的构型,保证飞行器的稳定性和负载能力;动力系统,如电机、电调、电池等的选型和匹配 ,确保提供足够的动力支持;以及飞行原理,如伯努利原理在旋翼产生升力中的应用,理解飞行原理有助于优化飞行器的性能。
- 自动控制理论:运用经典控制理论中的比例 - 积分 - 微分(PID)控制算法 ,对飞行器的姿态(俯仰、横滚、偏航)和位置进行精确控制。通过调整 PID 参数,使飞行器能够快速响应控制指令,保持稳定的飞行状态。同时,现代控制理论中的状态空间法等也可用于更复杂的系统建模和控制策略设计 ,提升飞行器的控制精度和鲁棒性。
- 智能传感技术:各类传感器在植保飞行器中起着关键作用。惯性测量单元(IMU) ,包含加速度计、陀螺仪等,用于测量飞行器的加速度和角速度,为姿态解算提供数据;全球定位系统(GPS) ,在室外环境下提供飞行器的位置信息,实现导航功能;光流传感器 ,通过检测地面纹理的变化来计算飞行器的水平速度和位移,在室内或 GPS 信号弱的环境下辅助定位;视觉传感器,如摄像头 ,用于识别作业区域、条形码等目标,为飞行器提供视觉信息,实现智能决策。
- 导航技术:航点导航是基本的导航方式 ,飞行器根据预设的航点坐标,按照一定的路径规划算法,依次飞行到各个航点,完成作业任务。同时,基于地图的导航技术,如同时定位与地图构建(SLAM) ,在未知环境中,飞行器通过传感器数据实时构建地图,并确定自身在地图中的位置,实现自主导航。
2.3 难点分析
- 飞行器稳定性控制:在飞行过程中,飞行器会受到多种干扰因素影响 。例如,气流的变化会导致飞行器产生晃动,特别是在室外环境下,不同方向和强度的气流对飞行器的姿态产生不同程度的影响;电机转速的波动也会影响飞行器的稳定性,电机制造工艺的差异、电池电压的变化等都可能导致电机转速不稳定。为解决这些问题,需要优化控制算法 ,采用自适应控制策略,根据飞行器的实时状态和外界干扰情况,动态调整控制参数,增强飞行器的抗干扰能力。同时,对硬件设备进行精确调试和校准 ,确保电机、传感器等设备的正常工作,提高飞行器的稳定性。
- 精准喷洒实现:实现精准喷洒面临着诸多挑战。一方面,飞行器的飞行速度和高度变化会影响农药的喷洒范围和剂量 。飞行速度过快,农药可能无法均匀覆盖目标区域;飞行高度过高,喷洒的农药会扩散,导致剂量不准确。另一方面,不同的农药具有不同的物理性质 ,如粘度、密度等,这对喷洒系统的设计和控制提出了更高要求。为实现精准喷洒,需要建立精确的喷洒模型 ,考虑飞行器的运动参数和农药的物理性质,通过实验和数据分析,确定最佳的喷洒参数,如喷头的流量、压力等。同时,采用先进的传感器技术 ,实时监测飞行器的状态和喷洒情况,对喷洒参数进行实时调整,确保农药的精准喷洒。
- 复杂环境适应性:比赛现场的环境条件复杂多变 。光照条件的变化,如室内照明不均、室外阳光直射等,会影响视觉传感器的识别效果,导致飞行器对作业区域和目标的识别出现偏差;场地的平整度和障碍物分布也会对飞行器的飞行产生影响 ,不平整的地面可能导致飞行器降落不稳,障碍物可能阻碍飞行器的飞行路径。为提高飞行器的环境适应性,需要对视觉算法进行优化 ,增强其在不同光照条件下的鲁棒性,采用图像增强、特征提取等技术,提高目标识别的准确性。同时,利用传感器融合技术 ,结合多种传感器的数据,如激光雷达、超声波传感器等,对环境进行全面感知,实现自主避障和稳定飞行。
- 现场编程挑战:在 30 分钟内完成现场编程调试 ,对参赛团队的技术能力和心理素质都是巨大的考验。需要参赛团队对飞行器的硬件和软件系统有深入的了解 ,熟悉各种飞行控制算法和传感器的使用方法。同时,具备快速分析问题和解决问题的能力 ,在短时间内根据新的任务需求,编写高效、可靠的代码,并进行调试和优化,确保飞行器能够准确执行任务。
三、软件代码实现思路
3.1 整体架构设计
软件代码整体架构采用分层模块化设计思想 ,主要分为底层驱动层、中间控制层和上层应用层。底层驱动层负责与硬件设备进行直接交互 ,包括对传感器、电机、通信模块等硬件的初始化和驱动。例如,通过编写特定的驱动程序,实现对惯性测量单元(IMU)传感器的数据读取,获取飞行器的加速度和角速度信息;对电机驱动芯片进行控制,调节电机的转速,从而实现对飞行器动力的控制。
中间控制层是软件的核心部分 ,实现各种飞行控制算法和数据处理功能。它接收底层驱动层传来的传感器数据,进行姿态解算、位置估计等处理,并根据预设的控制策略生成控制指令,发送给底层驱动层。例如,利用扩展卡尔曼滤波(EKF)算法对 IMU 数据和 GPS 数据进行融合,得到飞行器更准确的姿态和位置信息;采用 PID 控制算法,根据目标姿态和实际姿态的偏差,计算出电机的控制量,实现对飞行器姿态的稳定控制。
上层应用层则负责与用户进行交互 ,提供操作界面和任务管理功能。用户可以通过地面控制站的上位机软件,设置飞行器的飞行参数、任务规划等信息,通过无线通信模块发送给飞行器。飞行器接收到指令后,由上层应用层进行解析和处理,并调用中间控制层的功能模块,完成相应的任务。例如,用户在地面控制站中绘制飞行路径,飞行器接收后,根据路径信息进行导航飞行;在比赛中,根据现场编程的任务需求,上层应用层及时加载新的任务代码,控制飞行器执行新的飞行动作。
各模块之间通过定义良好的接口进行交互 ,保证数据的传输和处理的准确性和高效性。这种分层模块化的设计架构,使得软件具有良好的可维护性、可扩展性和可移植性 ,便于团队开发和后续功能的升级。
3.2 关键模块代码实现
3.2.1 飞行控制模块
飞行控制模块是实现飞行器稳定飞行和完成任务的关键。在代码实现中,主要运用 PID 控制算法对飞行器的姿态、速度和位置进行精确控制。以姿态控制为例 ,首先定义 PID 控制器的参数,包括比例系数(Kp)、积分系数(Ki)和微分系数(Kd) ,这些参数的设置直接影响到控制器的性能。通过实验和调试,确定合适的参数值,以保证飞行器在不同飞行状态下都能保持稳定。
在姿态解算方面 ,利用 IMU 传感器采集的加速度计和陀螺仪数据,通过四元数法或欧拉角法进行姿态解算 ,得到飞行器当前的俯仰角、横滚角和偏航角。例如,采用四元数法,根据陀螺仪测量的角速度数据,通过积分运算更新四元数,再将四元数转换为欧拉角,从而得到飞行器的姿态信息。
然后,将目标姿态与实际姿态进行比较 ,计算出姿态偏差。根据姿态偏差,利用 PID 控制算法计算出控制量 ,通过调整电机的转速来改变飞行器的姿态。例如,当飞行器的俯仰角大于目标俯仰角时,PID 控制器会计算出一个负的控制量,减小前侧电机的转速,增大后侧电机的转速,使飞行器的头部向下倾斜,减小俯仰角偏差。
在速度和位置控制方面 ,同样采用 PID 控制算法。通过 GPS 传感器获取飞行器的位置信息 ,通过光流传感器或其他速度传感器获取飞行器的速度信息,与预设的目标速度和位置进行比较,计算出速度偏差和位置偏差 ,再利用 PID 控制算法生成控制指令,调整飞行器的动力和姿态,实现对速度和位置的精确控制。例如,当飞行器的速度低于目标速度时,PID 控制器会增大电机的转速,使飞行器加速,达到目标速度。
3.2.2 数据采集与处理模块
数据采集与处理模块负责从各种传感器采集数据,并对采集到的数据进行处理和分析 ,为飞行控制和任务执行提供准确的数据支持。在代码实现中,首先初始化各个传感器 ,配置传感器的工作模式、采样频率等参数。例如,初始化 IMU 传感器,设置其采样频率为 100Hz,保证能够及时获取飞行器的运动状态信息;初始化 GPS 传感器,设置其定位精度和更新频率,确保获取准确的位置信息。
然后,通过编写中断服务程序或定时任务 ,定时读取传感器的数据。例如,利用定时器中断,每 10ms 读取一次 IMU 传感器的数据,将数据存储在缓冲区中 ,以便后续处理。在数据读取过程中,需要进行数据校验和滤波处理 ,去除噪声和异常数据。例如,采用中值滤波算法对加速度计数据进行滤波,去除因外界干扰产生的异常值,提高数据的准确性。
对于采集到的数据 ,根据不同的应用需求进行进一步的处理和分析。例如,在姿态解算中,对 IMU 数据进行融合处理 ,利用互补滤波或扩展卡尔曼滤波等算法,得到更准确的姿态信息;在导航过程中,对 GPS 数据进行处理,计算飞行器的飞行轨迹和航点偏差 ,为飞行控制提供导航信息。同时,还可以将处理后的数据通过通信模块发送给地面控制站或其他设备 ,以便实时监控飞行器的状态。例如,将飞行器的姿态、位置、速度等信息通过无线串口发送给地面控制站,在地面控制站的上位机软件中进行实时显示和分析。
3.2.3 通信模块
通信模块实现飞行器与地面控制站或其他设备之间的数据传输 ,确保信息的准确、及时传递。在代码实现中,首先选择合适的通信协议 ,根据比赛要求和实际应用场景,可选用串口通信协议(如 UART)、无线局域网通信协议(如 Wi-Fi)或蓝牙通信协议等。例如,对于短距离、低带宽的数据传输需求,可选用蓝牙通信协议,实现飞行器与地面控制站的简单数据交互;对于需要实时传输大量数据(如视频图像)的场景,则可选用 Wi-Fi 通信协议,提供更高的数据传输速率。
以串口通信为例 ,在代码中初始化串口通信参数 ,包括波特率、数据位、停止位和校验位等。例如,设置波特率为 115200bps,数据位为 8 位,停止位为 1 位,无奇偶校验,以保证数据的稳定传输。然后,编写数据发送和接收函数 ,实现数据的收发功能。在发送数据时,将需要发送的数据按照通信协议的格式进行打包 ,添加帧头、帧尾和校验位等信息,通过串口发送出去。例如,将飞行器的状态信息打包成一个数据包,包含帧头(0xAA)、数据长度、数据内容和校验和,通过串口发送给地面控制站。
在接收数据时 ,通过中断服务程序或轮询方式检测串口接收缓冲区 ,当有数据到达时,读取数据并进行解析。首先检查帧头和帧尾,验证数据的完整性,然后根据通信协议解析数据内容 ,提取出有用的信息。例如,地面控制站发送的控制指令数据包,飞行器接收后,解析出指令类型和参数,根据指令内容执行相应的操作,如改变飞行姿态、调整飞行速度等。同时,为了保证通信的可靠性 ,还可以加入重传机制和错误处理机制。当发送的数据没有得到正确的确认时,自动重传数据;当接收的数据出现错误时,进行错误提示和处理,确保通信的稳定和可靠。
四、代码示例与解释
4.1 核心函数展示
以下是部分关键代码函数示例,以 Python 语言为例,展示飞行控制算法函数和数据解析函数:
# 假设使用PID控制算法实现飞行姿态控制
class PIDController:
def __init__(self, kp, ki, kd):
self.kp = kp
self.ki = ki
self.kd = kd
self.prev_error = 0
self.integral = 0
def compute(self, setpoint, current_value):
error = setpoint - current_value
self.integral += error
derivative = error - self.prev_error
output = self.kp * error + self.ki * self.integral + self.kd * derivative
self.prev_error = error
return output
# 数据解析函数,假设解析GPS数据
def parse_gps_data(data):
# 简单示例,实际GPS数据解析更复杂
parts = data.split(',')
if len(parts) < 3:
return None, None
try:
latitude = float(parts[0])
longitude = float(parts[1])
return latitude, longitude
except ValueError:
return None, None
4.2 代码逻辑详解
- PIDController 类(飞行控制算法函数)
- __init__方法:这个方法是类的构造函数,用于初始化 PID 控制器的参数。kp、ki、kd分别是比例系数、积分系数和微分系数,这些系数决定了控制器对误差的响应方式。self.prev_error用于存储上一次计算的误差,初始值为 0;self.integral用于存储误差的积分,初始值也为 0 。在飞行器的姿态控制中,这些参数的合理设置非常关键,例如kp较大时,飞行器对姿态偏差的响应会更迅速,但可能会导致系统不稳定;ki用于消除稳态误差,kd则可以预测误差的变化趋势,提前进行调整 。
- compute 方法:该方法是 PID 控制器的核心计算部分。首先计算当前的误差error,即目标值(setpoint)与当前值(current_value)的差值。然后将误差累加到积分项self.integral中,用于消除系统的稳态误差。接着计算误差的微分项derivative,通过当前误差与上一次误差的差值得到,它反映了误差的变化率,用于提前调整控制量,防止系统超调。最后,根据 PID 控制算法的公式,计算出控制输出output,这个输出可以用于调整飞行器电机的转速等,从而实现对飞行器姿态的控制 。在每次计算完成后,将当前误差更新为上一次误差,以便下一次计算使用。
- parse_gps_data 函数(数据解析函数)
- 该函数用于解析 GPS 数据。假设输入的 GPS 数据是一个以逗号分隔的字符串,函数首先使用split(',')方法将字符串拆分成多个部分,存储在parts列表中。如果拆分后的部分数量小于 3,说明数据格式可能不正确,直接返回None, None 。在实际的飞行器应用中,准确的 GPS 数据解析至关重要,错误的数据可能导致飞行器的导航出现偏差,影响飞行任务的完成。
- 然后,尝试将parts列表中的第一个和第二个元素转换为浮点数,分别作为纬度和经度。如果转换过程中发生ValueError异常,说明数据格式有误,同样返回None, None 。如果转换成功,则返回解析得到的纬度和经度值,这些值可以用于飞行器的定位和导航,例如计算飞行器的当前位置与目标位置的偏差,从而调整飞行路径 。
五、常见问题与解决方法
5.1 实际操作中遇到的问题
在实现 G 题的过程中,实际操作中会遇到各种各样的问题。通信故障是较为常见的一种,比如在飞行器与地面控制站进行数据传输时,可能会出现信号中断、数据丢失等情况 。这可能是由于无线信号受到干扰,周围的电子设备、建筑物等都可能对无线信号产生干扰,导致信号强度减弱或出现波动;通信模块硬件故障也可能引发通信问题,如通信芯片损坏、天线接触不良等。
传感器数据异常也是一个棘手的问题 。传感器在长期使用过程中,可能会因为温度、湿度等环境因素的变化而出现数据漂移现象 ,导致采集到的数据不准确。例如,IMU 传感器的零偏会随着时间和温度的变化而改变,使得姿态解算的结果出现偏差;GPS 信号在受到遮挡或多径效应影响时,会出现定位不准确、信号失锁等情况 ,影响飞行器的导航精度。此外,电机故障也不容忽视 ,电机长时间运行可能会出现磨损、过热等问题,导致电机转速不稳定,影响飞行器的动力输出和飞行稳定性 。
5.2 针对性解决策略
针对通信故障,可以采取多种措施来解决。优化通信链路是关键,选择合适的通信频段和天线,减少信号干扰。例如,在室内环境中,可以选择 2.4GHz 频段的 Wi-Fi 通信模块,并使用高增益天线,增强信号强度和抗干扰能力。同时,采用数据校验和重传机制,确保数据的准确性和完整性 。在发送数据时,添加校验位,接收端根据校验位验证数据的正确性,如果发现数据错误,及时请求发送端重传。例如,采用循环冗余校验(CRC)算法,对发送的数据进行校验,提高数据传输的可靠性。
对于传感器数据异常问题 ,可以通过定期校准和滤波处理来解决。建立传感器校准模型,定期对传感器进行校准,补偿因环境因素导致的数据漂移 。例如,对于 IMU 传感器,可以在不同温度下进行校准,建立温度与零偏的关系模型,在实际使用中根据环境温度对零偏进行补偿。同时,采用滤波算法对传感器数据进行处理 ,去除噪声和异常值。例如,使用卡尔曼滤波算法,对传感器数据进行融合和预测,得到更准确的数据。
针对电机故障问题 ,需要加强对电机的监测和维护。安装电机电流、温度传感器,实时监测电机的工作状态 ,当电机电流过大或温度过高时,及时采取措施,如降低电机负载、增加散热等。同时,定期对电机进行保养和维护 ,检查电机的磨损情况,及时更换磨损严重的部件,确保电机的正常运行。
六、总结与展望
6.1 回顾与总结
在对 2021 电子设计大赛 G 题 “植保飞行器” 的探索中,我们深入剖析了从题目的任务要求、涉及的知识领域到难点攻克的全过程,也详细阐述了软件代码实现的思路、关键模块代码以及常见问题的解决方法。从理论知识的运用,如自动控制理论、智能传感技术等,到实际代码的编写和调试,每一个环节都充满了挑战与机遇。通过对飞行控制模块、数据采集与处理模块和通信模块等关键部分的代码实现,我们构建了一个能够初步满足植保飞行器功能需求的软件系统 。在这个过程中,我们不仅掌握了电子设计在农业领域应用的相关技术,也培养了自己解决实际问题的能力和团队协作精神。
6.2 对未来电子设计的展望
展望未来,电子设计在农业领域有着广阔的发展前景。随着科技的不断进步,人工智能、物联网、大数据等前沿技术将与电子设计深度融合,为农业现代化注入新的活力。在植保飞行器方面,未来的发展方向将是更加智能化和自主化 。飞行器将具备更强的环境感知能力,能够根据农田的实际情况,如作物的生长阶段、病虫害的分布情况等,自动调整作业策略,实现精准植保。同时,随着电池技术、材料科学等领域的发展,植保飞行器的续航能力、负载能力和可靠性将得到进一步提升 ,使其能够更好地适应复杂的农业生产环境。此外,电子设计还将在农业生产的其他环节发挥重要作用 ,如智能温室控制系统、农业机器人等,实现农业生产的全过程智能化管理,提高农业生产效率,保障粮食安全,为农业可持续发展做出更大的贡献。