Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.newenergycoder.club/llms.txt

Use this file to discover all available pages before exploring further.

赛事简介

全国大学生智能汽车竞赛(AIC, Automatic Intelligent Car)是以智能汽车为研究对象的创意性科技竞赛,涵盖多个组别和赛道。

竞赛组别

电磁组

基于电磁引导的智能车

摄像头组

基于视觉识别的智能车

创意组

开放式主题创新设计

越野组

复杂地形适应智能车

信标组

主动寻的信标智能车

AI组

深度学习与人工智能

备赛时间规划

备赛周期(约8-10个月):

第1-2月:规则研读与方案设计
├── 仔细研读比赛规则
├── 技术方案选型
└── 元器件采购清单

第3-5月:硬件开发与调试
├── 主板设计制作
├── 传感器选型调试
├── 电机驱动调试
└── 机械结构加工

第6-7月:算法开发与优化
├── 图像处理算法
├── 控制算法(PID/模糊)
├── 路径规划算法
└── 特殊元素识别

第8-9月:整车联调与优化
├── 整车集成调试
├── 参数整定优化
├── 稳定性测试
└── 速度提升

第10月:赛前准备
├── 模拟比赛
├── 故障预案
└── 心理素质训练

核心技术详解

图像处理(摄像头组)

图像采集

// MT9V034 摄像头初始化示例
void MT9V034_Init(void) {
    // 配置摄像头参数
    MT9V034_WriteReg(0x01, 0x0080);  // 曝光时间
    MT9V034_WriteReg(0x02, 0x0000);  // 增益
    MT9V034_WriteReg(0x03, 0x01E0);  // 图像高度 (480)
    MT9V034_WriteReg(0x04, 0x0280);  // 图像宽度 (640)
    
    // DMA配置
    DMA_InitTypeDef DMA_InitStruct;
    DMA_InitStruct.Channel = DMA_Channel_0;
    DMA_InitStruct.Direction = DMA_PERIPH_TO_MEMORY;
    DMA_InitStruct.PeriphInc = DMA_PINC_DISABLE;
    DMA_InitStruct.MemInc = DMA_MINC_ENABLE;
    DMA_InitStruct.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    DMA_InitStruct.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    DMA_InitStruct.Mode = DMA_CIRCULAR;
    DMA_InitStruct.Priority = DMA_PRIORITY_HIGH;
    HAL_DMA_Init(&DMA_InitStruct);
}

图像处理算法

# Python仿真代码,实际在单片机用C实现
import cv2
import numpy as np

def process_image(frame):
    # 1. 灰度转换
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # 2. 二值化
    _, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    
    # 3. 边缘检测
    edges = cv2.Canny(binary, 50, 150)
    
    # 4. 提取中线
    midline = extract_midline(edges)
    
    return midline

def extract_midline(edges):
    """提取赛道中线"""
    height, width = edges.shape
    midline = []
    
    for row in range(height - 1, -1, -10):  # 从下到上,每隔10行
        left = find_left_edge(edges[row, :])
        right = find_right_edge(edges[row, :])
        if left != -1 and right != -1:
            midline.append((row, (left + right) // 2))
    
    return midline

元素识别

元素识别方法难度
直道中线偏差小
弯道曲率计算⭐⭐
十字连通域分析⭐⭐⭐
圆环特征匹配⭐⭐⭐
三岔路路口判断⭐⭐⭐⭐
断路边缘突变检测⭐⭐⭐⭐

控制算法

舵机控制

class ServoController {
public:
    // PID参数
    float Kp = 1.0f;
    float Ki = 0.0f;
    float Kd = 0.5f;
    
    float calculate(int error) {
        integral += error;
        float derivative = error - lastError;
        lastError = error;
        
        float output = Kp * error + Ki * integral + Kd * derivative;
        
        // 限幅
        if (output > SERVO_MAX) output = SERVO_MAX;
        if (output < SERVO_MIN) output = SERVO_MIN;
        
        return output;
    }
    
private:
    float integral = 0;
    float lastError = 0;
};

电机控制

// 差速控制
void differential_control(float speed, float steering) {
    float leftSpeed, rightSpeed;
    
    if (steering > 0) {  // 右转
        leftSpeed = speed;
        rightSpeed = speed * (1 - steering / MAX_STEERING);
    } else {  // 左转
        leftSpeed = speed * (1 + steering / MAX_STEERING);
        rightSpeed = speed;
    }
    
    set_motor_speed(LEFT_MOTOR, leftSpeed);
    set_motor_speed(RIGHT_MOTOR, rightSpeed);
}

电磁组技术要点

电感排布方案

推荐排布(T型):

      L1
       |
  L2---+---L3
       |
      L4

L1,L4: 纵向电感,检测直道和弯道
L2,L3: 横向电感,检测横向偏差

信号处理

class EM_Sensor {
public:
    float filter(float raw) {
        // 滑动平均滤波
        buffer[bufferIndex] = raw;
        bufferIndex = (bufferIndex + 1) % BUFFER_SIZE;
        
        float sum = 0;
        for (int i = 0; i < BUFFER_SIZE; i++) {
            sum += buffer[i];
        }
        return sum / BUFFER_SIZE;
    }
    
    float get_error() {
        // 归一化处理
        float left = filter(L2_value) / L2_max;
        float right = filter(L3_value) / L3_max;
        
        // 计算偏差
        return (left - right) / (left + right + 0.001f);
    }

private:
    float buffer[BUFFER_SIZE];
    int bufferIndex = 0;
};

硬件选型建议

主控芯片

组别推荐型号主频特点
基础组STM32F10372MHz性价比高
高级组STM32H7480MHz性能强劲
AI组Jetson Nano四核AI推理

传感器

类型推荐型号参数
摄像头MT9V034752×480, 120fps
电感10mH工字型
编码器1024线增量式
陀螺仪MPU60506轴

电机与驱动

  • 电机:RS-380/RS-540(根据车重选择)
  • 驱动:IR2104 + MOS(自己打板)或成品驱动

调试技巧

上位机调试

# 串口数据可视化
import serial
import matplotlib.pyplot as plt
from collections import deque

class Debugger:
    def __init__(self, port):
        self.ser = serial.Serial(port, 115200)
        self.data = deque(maxlen=1000)
        
    def plot(self):
        plt.ion()
        while True:
            line = self.ser.readline().decode().strip()
            if line:
                value = float(line)
                self.data.append(value)
                
                plt.clf()
                plt.plot(self.data)
                plt.pause(0.01)

常见问题排查

A:
  1. 降低图像分辨率(如 188×120)
  2. 优化算法,减少浮点运算
  3. 使用 DMA 传输
  4. 减少图像采集行数
A:
  1. 降低 PID 的 P 值,增加 D 值
  2. 检查机械结构是否松动
  3. 增加滤波算法
  4. 降低控制频率
A:
  1. 提前减速,入弯前降到安全速度
  2. 使用差速控制
  3. 优化路径,走最佳赛车线
  4. 增加陀螺仪辅助判断

资源推荐

智能车竞赛论坛

国内最大的智能车技术交流平台

逐飞科技

提供开源库和开发板

龙邱科技

智能车配件供应商

NEC社区方案

社区开源代码仓库
本文档基于社区成员参赛经验整理,持续更新中。如有疑问,欢迎在社区讨论区交流。