一、任务
设计并制作一架四旋翼自主飞行器。飞行区域俯视图和立体图分别如图 1和图 2 所示。
二、要求
1. 基本要求
(1)四旋翼自主飞行器(下简称飞行器)摆放在图 1 所示的 A 区,一键式启动飞行器起飞;飞向 B 区,在 B 区降落并停机;飞行时间不大于 45s。
(2)飞行器摆放在 B 区,一键式启动飞行器起飞;飞向 A 区,在 A 区降落并停机;飞行时间不大于 45s。
2. 发挥部分
(1)飞行器摆放在 A 区,飞行器下面摆放一薄铁片,一键式启动,飞行器拾取薄铁片并起飞。
(2)飞行器携带薄铁片从示高线上方飞向 B 区,并在空中将薄铁片投放到B 区;飞行器从示高线上方返回 A 区,在 A 区降落并停机。
(3)以上往返飞行时间不大于 30s。
(4)其他。
三、说明:
1.飞行器桨叶旋转速度高,有危险!请务必注意自己及他人的人身安全。
2.飞行器控制板的 MCU 必须使用组委会统一下发的 R5F100LEA,必须安装在明显位置,以便检查。
3.飞行器可自制或外购,带防撞圈,外形尺寸(含防撞圈)限定为:长度≤50cm,宽度≤50cm。飞行器机身必须标注参赛队号。
4.薄铁片为边长 4cm 的正方形,厚度≤0.05cm。
5.飞行区域地面为白色;A 区、B 区形状大小相同,由直径 20cm 黑色实心圆和直径 75cm 的同心圆组成,同心圆虚线线宽小于 0.1cm;引导线宽度 4cm,可用黑色胶带;示高线为直径 0.5~0.8cm 的黑色电缆线,横向悬挂于飞行区中间,距地高 100cm。飞行区域不得额外设置任何标识、引导线或其他装置。
6.允许测试 2 次,每次测试全程不得更换电池。两次测试之间允许更换电池,更换电池时间小于 2 分钟。
7.飞行器不得遥控,飞行过程中不得人为干预。
8.飞行器飞行期间,触及地面后自行恢复飞行的,酌情扣分;触地后 5s 内不能自行恢复飞行视为失败,失败前完成动作仍计分。
9.飞行器起飞,距地面高度 10cm 以上视为飞离地面。
10.一键式启动是指飞行器摆放在 A 区或 B 区后,只允许按一个键启动。如有飞行模式设置应在飞行器摆放在 A 区或 B 区前完成。
11.为保证安全,可沿飞行区域四周架设安全网(长 500cm,宽 300cm,高200cm),顶部无需架设。若安全网采用排球网、羽毛球网时可由顶向下悬挂不必触地,不得影响视线。安装示意图如图 3 所示。
GPT-4o给出的设计方案:
根据题目的要求,设计一个四旋翼自主飞行器。飞行器需要能够在给定区域内进行自主飞行,并具备起飞、悬停、飞行和降落的能力。
飞控系统设计:
飞行路径规划:
传感器和模块:
电源管理:
稳定性:
精度:
响应时间:
续航和功能:
飞控主控板:
电机控制电路:
通信模块:
STM32系列MCU:
IMU:
飞行电机与电调:
#include "stm32f4xx.h" // 根据具体芯片型号选择相应的库
// 初始化函数
void init_system() {
SystemInit();
init_motors();
init_sensors();
init_pid();
}
// 飞行任务状态机
typedef enum {
TAKEOFF,
FLY_TO_B,
LAND_AT_B,
FLY_TO_A,
LAND_AT_A,
IDLE
} FlightState;
FlightState currentState = TAKEOFF;
void main() {
init_system(); // 初始化系统
while(1) {
switch (currentState) {
case TAKEOFF:
if (takeoff()) {
currentState = FLY_TO_B;
}
break;
case FLY_TO_B:
if (fly_to_b()) {
currentState = LAND_AT_B;
}
break;
case LAND_AT_B:
if (land()) {
currentState = FLY_TO_A;
}
break;
case FLY_TO_A:
if (fly_to_a()) {
currentState = LAND_AT_A;
}
break;
case LAND_AT_A:
if (land()) {
currentState = IDLE;
}
break;
case IDLE:
// 等待命令
break;
}
}
}
bool takeoff() {
// 起飞代码
return true; // 起飞成功
}
bool fly_to_b() {
// 飞行到B区代码
return true; // 飞行成功
}
bool land() {
// 降落代码
return true; // 降落成功
}
bool fly_to_a() {
// 飞行到A区代码
return true; // 飞行成功
}
module flight_control(
input wire clk,
input wire rst_n,
output reg [1:0] state_led // 用于指示当前状态的LED
);
typedef enum logic [2:0] {
IDLE = 3'b000,
TAKEOFF = 3'b001,
FLY_TO_B = 3'b010,
LAND_AT_B = 3'b011,
FLY_TO_A = 3'b100,
LAND_AT_A = 3'b101
} flight_state_t;
flight_state_t current_state, next_state;
// 状态转移
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
current_state <= IDLE;
else
current_state <= next_state;
end
// 状态机逻辑
always @(*) begin
case (current_state)
IDLE: next_state = TAKEOFF;
TAKEOFF: next_state = FLY_TO_B;
FLY_TO_B: next_state = LAND_AT_B;
LAND_AT_B: next_state = FLY_TO_A;
FLY_TO_A: next_state = LAND_AT_A;
LAND_AT_A: next_state = IDLE;
default: next_state = IDLE;
endcase
end
// 状态指示输出
always @(posedge clk) begin
case (current_state)
IDLE: state_led = 2'b00;
TAKEOFF: state_led = 2'b01;
FLY_TO_B: state_led = 2'b10;
LAND_AT_B: state_led = 2'b11;
FLY_TO_A: state_led = 2'b10;
LAND_AT_A: state_led = 2'b01;
default: state_led = 2'b00;
endcase
end
endmodule
通过上述设计方案和代码,可以满足题目中四旋翼自主飞行器的功能要求。设计中重点考虑了硬件平台的性能和软件控制算法的优化,以确保飞行器能稳定、安全地完成指定任务。
本题目考察的主要知识要点:
本题考察了多方面的知识,包括飞行控制算法、硬件电路设计、传感器应用和嵌入式系统编程等。具体来说,重点包括四旋翼飞行器的电机控制、PID姿态调节算法、飞行路径规划、传感器数据采集与处理、MCU或FPGA对飞行任务的状态管理,以及相关电路如电源管理电路和通信模块设计。通过实现四旋翼飞行器的自主飞行和精准控制,考生需要综合运用多种工程技术和理论知识,确保系统的稳定性、可靠性和精确性。