任务名称
2013年_B题 :四旋翼自主飞行器
任务要求
难度

一、任务

设计并制作一架四旋翼自主飞行器。飞行区域俯视图和立体图分别如图 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给出的设计方案:


一、设计方案

根据题目的要求,设计一个四旋翼自主飞行器。飞行器需要能够在给定区域内进行自主飞行,并具备起飞、悬停、飞行和降落的能力。

二、方案论证

  1. 飞控系统设计

    • 选用高性能的微控制器(如STM32系列)并结合IMU(惯性测量单元)实现精确的姿态控制。
    • 利用PID控制算法管理飞行器的稳定性,对四个电机的转速进行精确调节。
  2. 飞行路径规划

    • 通过预设的目标点进行路径规划,采用简单的状态机管理飞行步骤,包括起飞、前进、悬停、返回和降落。
  3. 传感器和模块

    • 使用超声波传感器进行实时高度测量和避障检测。
    • 结合GPS模块(若需户外应用)和光流传感器进行位置测量和反馈。
  4. 电源管理

    • 为保证长时间稳定飞行,选择高能量密度的锂电池及其配套电源管理系统。

三、重要指标的理论分析

  1. 稳定性

    • 通过PID控制算法进行姿态调整,确保飞行器在飞行过程中的稳定性。
  2. 精度

    • 使用高精度IMU和传感器确保飞行器位置信息的精确性。
  3. 响应时间

    • MCU和传感器的实时数据采集和处理能力将直接影响飞行器的控制响应。
  4. 续航和功能

    • 选用合适的锂电池容量和电源管理系统,确保飞行器在任务执行时间内拥有足够的电力支持。

四、电路原理图设计要点

  1. 飞控主控板

    • 包含MCU(如STM32),IMU单元(加速度计、陀螺仪、磁力计),传感器接口(超声波传感器、光流传感器等),通信模块(蓝牙或WiFi)。
  2. 电机控制电路

    • 每个电机使用一个PWM信号控制,驱动电路使用MOSFET或H桥电路,以便精确控制电机转速。
  3. 通信模块

    • 选用低功耗蓝牙或WiFi模块,实现与地面站的通信,或用于调试。

核心器件设计要点

  1. STM32系列MCU

    • 高性能处理能力,内置数字信号处理功能和多个外设接口(ADC、PWM、I2C、SPI等)。
  2. IMU

    • 高精度传感器如MPU6050,内置三轴加速度计和陀螺仪,结合磁力计进行姿态估算。
  3. 飞行电机与电调

    • 无刷电机与电子调速器(ESC),支持PWM控制,提供足够的动力和响应速度。

五、重要功能的C代码

MCU控制飞行任务:以下是MCU控制四旋翼飞行器起飞、悬停、飞行、返回和降落的示例代码片段:

#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; // 飞行成功
}

FPGA控制飞行任务,以下是FPGA实现飞行器控制任务的简化Verilog代码示例:

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对飞行任务的状态管理,以及相关电路如电源管理电路和通信模块设计。通过实现四旋翼飞行器的自主飞行和精准控制,考生需要综合运用多种工程技术和理论知识,确保系统的稳定性、可靠性和精确性。

硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号