第二十届智能车竞赛气垫越野组方案准备及分享

前言

各位参赛的同学们,大家好!新的一届智能车又来临了,和往届相比,第二十届智能车大赛的赛项发生了很大的变化。今天,我们将聚焦气垫越野组,由龙邱工程师为大家带来气垫越野组的全面讲解。讲解内容包括赛题解析,机械结构,硬件配置,软件基础与控制思路。

写这篇手册是帮助新同学快速的了解充满魅力的智能车大赛。同时,会在这里给大家分享我们气垫越野组的方案与调车心得。我们深知,没有绝对的最优解,但在手册里,我们会毫无保留地分享我们气垫越野组积累的方案经验与调车心得。希望这些内容能为大家提供一条清晰的探索思路,让大家在备赛过程中少走弯路,更加从容地应对比赛挑战

如果大家想要探讨智能车相关话题,欢迎加入我们的QQ讨论群。在这里,无论是智能车的硬件设计、软件编程,还是比赛策略、或者日常技术难题,都能展开交流。

综合技术交流群:228227119     气垫越野交流群:1053084521

1. 组别简介

1.1. 竞赛信息来源

  1. 智能汽车竞赛官网全国大学生智能汽车竞赛
  2. 卓老师 CSDN 博客《第二十届全国大学生智能汽车竞速比赛规则》第二十届全国大学生智能汽车竞速比赛规则_20届智能车-CSDN博客
  3. 卓老师微信公众号的推文、视频及其评论区

1.2. 赛题要求 

 

1.3. 规则解析

1.3.1. 主控平台

气垫越野组可用的微控制器(MCU)指定为深圳国芯人工智能有限公司推出的STC/AI芯片,具体可用型号为以下四款(第20届全国大学生智能汽车竞赛 STC 指定参赛芯

AI8051U、AI8052U、STC32G12K128 和 STC8H8K64U。

 当然了,在初期学习时可以使用龙邱为大家准备好的体积更小的AI8051U开发板,其中核心板是可以直接用于参赛的,如此一来同学们只需要根据自己的各外设接口来设计合适自己的母板。

1.3.2. 规则要点

  1. 比赛环境室外 操场 气垫船车模(不能有主动轮,仅依靠桨叶推动气体提供动力)
  2. 场地适应性和通过能力:在气垫越野比赛中,包含多种复杂地形,如草地、石子或颠簸路,以及完成指定任务要求等。参赛队伍需要确保其车模能够在各种路况下顺畅通行而不被困住或翻倒。因此对于车模动力设计有一定的要求。
  3. 自主导航控制:竞赛规则可以使用GPS、摄像头、惯性导航,主要是车模需要在从发车后无人操作的情况下自行完成不同科目的比赛任务,并且在过程中还有颠簸路段、草地、桥洞(由锥桶和白色布基胶带组成),需要借助这些传感器数据辅助车模完成任务到达指定位置。
  4. 自制电路板要求:自制的电路板需在正面覆铜面展示队伍信息,包括学校名称、队伍名称、制作日期。

 2. 硬件准备

 2.1. 车模

针对室外气垫越野组所采用的自制车模,考虑到需要经过颠簸、草地、甚至可能的坡道情况,即使比赛环境为操场,若用由围裙的带气室的结构,则气垫布于地面的摩擦将会非常大,再加上自制原因,底部设计材料不可能和玩具气垫船那般有量身设计的结构和全体塑料的轻便,在行进上将变得困难。因此抛弃传统方式,以气为动力将气垫布的大面积摩擦改为小面积接触的硬摩擦,就有点像没有轮子的飞机在地面啊滑行一样。如此一来则对于爬坡、越过障碍、经过草地而言将变得相对简单许多。下图为龙邱自制气垫越野车模,经过反复验证,也是可直接用于比赛。

 1. 动力与结构创新轻量化材料:采用碳纤维主体板+PLA材质3D打印,车体重量较标准车模降低30%以上,同时保持高强度抗冲击能力,测试视频:B站搜索 20届智能车竞赛|LQ越野气垫船

 2. 定制化驱动系统:搭载优化后的STC无感无刷驱动+高速2205无刷电机,动力十足,轻松应对室外越野、极速竞速等场景需求

 2.2. 器件清单

模块名称

作用

是否必需

是否需要自制

 AI8051U母板

稳压电源、统一外核心板设接口

 AI8051U核心板

MCU 最小系统

BD1202模块

接收GPS信号,用来循迹

线性CCD模块

辅助定位,识别桥洞元素

STC无感无刷驱动

驱动控制无刷电机

LQ气垫越野车模

轻质(碳纤维+PLA3D打印),稳定

是(可以使用成品)

 LQ新版SDZ编码器x1 5V

检测车模运行速度

LQ9AGM陀螺仪

姿态反馈

 OLED 屏幕 5V

显示数据

 208BLE蓝牙模块

日常调试用,比赛禁用

遥控器

日常调试用,比赛禁用

2.3. 模块详解 

2.3.1. AI8051U核心板

  1. AI8051 芯片,推荐主频 42MHz,LQFP48 封装,体积小,有助于减小整车风阻等;
  2. 核心板带有 Type-C接口,可直接使用 Type-C 数据线烧录程序和在线串口通信调试,不需要单独购买核心板和下载器。
  3. 核心板设计PW按键,可以通过按键控制通断电,方便复位管脚被用于IO使用时,烧录复位不起作用时使用断电上电方式进入烧录模式。
  4. 引出所有GPIO管脚资源,方便母板扩展板外设连接。

 2.3.2. AI8051U母板

 如上图所示为AI8051U母板或叫主板,在一个控制系统中主板可以说是必要的存在,一是它不但提供了与主控芯片之间的连接通路从而将芯片上的各个I/O与外设接口连接,方便各种外设传感器,控制器,驱动等通过线缆与主板连接,而是主板设计有更稳定的供电方案,可以保证板子上的各个芯片稳定工作,统一集中到一起构成某些特定功能的集合。

AI8051U的主板,主要针对电磁组和室外气垫越野组,设计所需外设模块接口,对于室外气垫组而言,需要驱动至少3个以上的无刷电机,也就是说PWM输出接口是必须的,要接收GPS信号,则需要UART串口接口,还有屏幕,陀螺仪等。

值得注意的是,母板上并没有专门标注CCD摄像头的接口,其实CCD摄像头只需要一路ADC和一个I2C即可,因此使用ADC输入接口供其使用,这样当不需要摄像头时该接口做ADC输入使用。

2.3.3. STC无感无刷驱动 

电机应该都比较熟悉,在电机两端施加电压,电机就会旋转,电压越大,转速越快。通过电压越大,转速越快这句话,我们可以想到用PWM来控制转速,但是直接把电机直接接在核心板I/O口是不可行的(因为I/O口电压比较低,而且电流太小),因而就需要专门的电机驱动控制器来驱动电机,像要让电机按照指定的方向以多大的转速转动只需要给电机驱动控制器输入对应的PWM信号和方向控制信号即可。但是无刷电机的控制更为复杂,一般的分为能够为有感驱动和无感驱动,更高级的还有FOC驱动,FOC无刷驱动器也可以叫做矢量磁场控制驱动器它对电机的控制可以精确到力矩、旋转角度、电流。而我们主要使用如下的无感BLDC驱动器。

 

  • 电源输入口,外接3S电池,供电电压11-13V。
  • 无刷电机连接端口,接无刷电机三相电源线。
  • 外部信号输入口,外接输入信号。
  • 下载及串口接口,可通过此接口下载程序。
  • 复位按钮,下载程序或复位程序使用。
  • RGB指示灯:待机->蓝色、启动->白色、稳定运行->绿色、堵转->红色、电池低压->红色闪烁。

LQ-STC无感无刷驱动采用预驱芯片 EG2134 +STC32G主控完成,并设置了保护措施。虽然在驱动对电机的控制上时很复杂,但是对于控制者来说却比有刷直流电机还简单,因为一个电机只需要一根PWM信号线即可,图中控制口只需要接GND和PWM到主控板的PWM输出接口即可。

控制方法:控制一个电机只需要一个 PWM 信号就能控制电机的启停和加减速,如果启动后发现电机转动方向不对,只需要调换该电机的三相线中的任意两根后重新启动即可。

需要注意:这个PWM信号频率需要在45到300Hz之间,脉冲高电平时间要求在1~2ms以内,以50Hz为例,f=50则:

也就是说该信号的周期时间为20ms,想要达到控制电机要求的高电平时间,则为满占空比的5%~10%。以LQ AI8051U的PWMA某通道为例(PWMA时钟分频到1MHz),初始化一个50Hz的PWM信号,则其定时器装载值在1000000/50=20000。也就是该信号的占空比装载值可调范围在0~20000,那么想要以它控制无刷电机驱动来让电机运行起来,则1ms的脉宽需要设置的值为20000*5%=1000,即给该PWM通道的占空比装载值为1000,最大则为2000对应2ms也对应无刷电机满转速(由驱动确定)。再加上无刷驱动控制器的启动死区设置,假设死区为50,那么至少需要大于1050才可以启动无刷电机。

特别地:24年末对STC无感无刷驱动做了优化,启动更加丝滑,拆除了三颗采样滤波电容后,从硬件上降低了一定的滞后性,同时软件上对启动、换向控制等都进行了优化,总体从启动到闭环稳定运行时间减小至不超过80ms且启动成功率趋近100%,电流限制提高到7.2A (2205电机+4寸6叶桨 满速情况下不限制约14A,电流与实际负载有关经供参考),动力和响应速度大幅提升。

2.3.4. BD1202 GPS模块 

LQBD1202模块是一种高性能双频GNSS定位模块,基于先进的CYNOSURE III架构,支持GPS、BeiDou、GLONASS、Galieo、NAVIC/IRNSS、QZSS。该模块继承了高效的电源管理架构,同时提供高精度、高灵敏度和低功耗的GNSS解决方案,适用于骑车、电子产品的导航应用等。支持所有民用GNSS系统;支持BDS-3信号:B1C、B2A;可同时接收L1和L5波段信号,亚米级定位精度,智能抗干扰。 

模块与单片机之间通过串口通信,使用简单方便,单片机例程中提供坐标解析程序和坐标转换程序,使定位更准确。

2.2.5. 摄像头

摄像头作为获取赛道信息的视觉传感器,是所有视觉类赛项最核心的传感器。室外情况除了依靠GPS模块确定位置外,有时候还需要用到其他传感器来辅助完成比外任务,气垫越野组不同于其他组别受限于主控芯片没有足够的外设资源和性能来驱动其他摄像头因为选择LQTSL1401CL线阵CCD来作为辅助传感器,因为桥洞元素由白色布基胶带和锥桶组成,因此可以利用到白色胶带来辅助GPS在桥洞时可能存在的漂移和不足。

线阵CCD作为一种光学传感器,和智能车中使用的摄像头不一样,它不具备自动曝光的功能,所以常常CCD信号的不稳定是影响比赛成绩的主要因素,根据往届赛场情况来看,现场的光线较为强烈,且属于直射光,因此采用运放对信号进行处理,容易产生饱和状态,从而导致车模无法循迹,因此在程序算法上要京可能地考虑到在室外光线影响中的处理,如自动阈值处理等。

在镜头的选取上若采用的镜头不适合则会导致两边的死区过大,处理算法难度大,智能车中使用最多的两种镜头57°自然角镜头和大于90°的广角镜头,57°镜头视角相对于广角镜而言同样的高度视角偏窄,但线性度比较好,黑白分明,即当传感器所有像素点扫描在白色赛道区域上所有像素点的电压值相近,这样对于爱好二值化处理的同学来说非常方便。

2.3.6. 陀螺仪

 

陀螺仪在智能车中的应用:(上图为LQ9AGM和LQICM42688陀螺仪模块

  1. 与转向环串级使用,达到更好的控制效果。
  2. 调整平衡车姿态,使车身平衡且能正常转向和前进。
  3. 作为角度环闭环控制的输入。
  4. 积分角度作为元素状态切换条件,例如确定环岛的进环、环内、出环时机。

陀螺仪主要由加速度计与陀螺仪两部分组成,加速度计用于测量物体的加速度,陀螺仪用于测量物体的角速度。通过对加速度和角速度的测量,可以推导出物体的角位移。简单来说就是可以读取物体的偏移角度,以及移动的加速度。可以通过程序处理得到物体的欧拉角以及移动加速度。

陀螺仪的欧拉角是用来描述物体在空间中的姿态(即旋转角度)的一种表示方法,包括滚转角(Roll)、俯仰角(Pitch)和偏航角(Yaw)。

滚转角(Roll)是物体绕X轴旋转的角度,用来描述物体绕自身前后倾斜的程度。当物体绕X轴正方向逆时针旋转时,滚转角为正值,绕X轴负方向顺时针旋转时,滚转角为负值。

俯仰角(Pitch)是物体绕Y轴旋转的角度,用来描述物体绕自身左右倾斜的程度。当物体绕Y轴正方向逆时针旋转时,俯仰角为正值,绕Y轴负方向顺时针旋转时,俯仰角为负值。

偏航角(Yaw)是物体绕Z轴旋转的角度,用来描述物体绕自身旋转的方向。当物体绕Z轴正方向逆时针旋转时,偏航角为正值,绕Z轴负方向顺时针旋转时,偏航角为负值。

通过测量陀螺仪的角速度,可以积分得到物体的欧拉角。欧拉角的变化可以用来控制物体的姿态,例如在飞行器中,通过调整滚转角、俯仰角和偏航角,可以实现飞行器的稳定控制和导航功能。

需要注意的是,欧拉角表示的是物体在空间中的绝对姿态,而非相对于某个参考物体的姿态。在实际应用中,为了避免欧拉角的奇异性问题,常常使用四元数或旋转矩阵等其他表示方法。

2.3.7. 编码器

在智能车中,编码器的主要功能是测量定时器中断周期内的脉冲数,用作速度控制回路中的实际反馈值。通过将此实际值与预设的目标值进行比较,并采用PID控制器来调整输出,从而实现精确的速度闭环控制。

编码器发送脉冲信号,定时器引脚接收脉冲信号,通过AB信号的差异或者根据方向引脚电平判断是正值还是负值,脉冲信号值会在定时器中累计,直到手动清除,所以每次读取编码器值后需要清除累计值,才可以获得实时速度值。

细心的读者可能会发现,相同转速下编码器值读取大小与读取时间间隔有关,读取时间间隔越大,累计值越大,读取到的值也越大。

3. 开发工具

3.1. 硬件设计软件

熟练掌握至少一种常用的电路设计软件,如 Altium Designer、 立创 EDA 等。了解软件的界面布局、基本操作流程和常用功能模块,如原理图设计、PCB 布局、布线、铺铜、规则检查、生成报表等。

能够使用软件进行简单的电路原理图绘制和 PCB 设计, 包括元件库的创建和管理、原理图的连接和标注、PCB 的布局规划和布线、铺铜等。掌握 PCB 布局和布线的基本技巧和方法,如元件的合理布局、信号线的走向和间距控制、电源线和地线的布线方式、过孔的使用和优化等。

了解 PCB 设计的基本原则和规范,如电气性能要求、信号完整性、电源完整性、电磁兼容性(EMC)等。能够根据电路的功能和性能要求,进行合理的 PCB 设计,确保 PCB 的电气性能和可靠性满足实际应用的需求。同时,要了解 PCB 制造工艺和生产流程,掌握 PCB 设计文件的输出和制作要求,能够与 PCB 制造商进行有效的沟通和协作,确保 PCB 的制造质量和生产进度。

我司提供的资料中包含 PDF 版原理图、基于 Altium DesignerAD)的原理图封装库和 PCB 封装库。同学们在自己制作 PCB 时可以使用 AD 导入我司提供的封装库文件,参考 PDF 版原理图完成电路板设计。主板原理图中包含了智能车竞赛中常用的外设模块端口,在自己制版时仅需要画出用到的外设接口即可,没有用到的接口不需要引出。

需要注意:自制的电路板需在正面铜箔曾放置队伍信息,包括学校名称、队伍名称、制作日期。

3.2. 搭建开发环境

3.2.1. 安装 Keil 集成开发环境

在此我们以 AI8051U 单片机为例通过查阅规格书(可在 STC 官网深圳国芯人工智能有限公司-芯片手册 获取)可知,AI8051U型号可支持 32 位模式和 8 位模式。如果用户需要使用 32 位模式,则需要安装 Keil 的 C251 编译器,这里推荐使用32位模式;如果用户需要使用 8 位模式,则需要安装 Keil 的 C51 编译器;如果需要同时使用 32 位模式和 8 位模式,则 C251 和 C51 都需要安装。在此我们使用的是 32 位模式,故需要安装 Keil C251。

首先登录 Keil 官网,下载最新版的 C251 安装包,下载链接如下:Keil Product Downloads

信息随便填写,点确定后进入下载页面进行下载。下载完成后双击安装包开始安装,点击“Next”:

勾选“I agree to all the terms of the preceding License Agreement”,然后点击“Next”:

 选择安装目录,然后点击“Next”:

 接下来随意填写即可,然后点击“Next”:

 安装完成,点击“Finish”结束。

安装完成后需要注册,CSDN 上相关注册教程有很多,大家可以自行搜索关键词“keil 注册”等即可找到,这里就不再赘述。

3.2.2. 安装 STC-ISP 烧录软件

进入 STC(宏晶科技)官网:深圳国芯人工智能有限公司-工具软件

在置顶选项中找到“软件工具”,单击进入后即可下载最新版的 ISP 烧录软件。

3.2.3. 添加型号和头文件到 Keil 

使用 Keil 之前需要先安装仿真驱动。仿真驱动的安装步骤如下:

首先打开 ISP 烧录软件,然后在软件右边功能区的“Keil 仿真设置”页面中,先选择对应的单片机型号(此处以 AI8051U 为例),然后点击“添加型号和头文件到 Keil 中 添加仿真器驱动到 Keil 中”按钮;

 接下后会出现如下画面:

 将目录定位到 Keil 软件的安装目录,然后确定。安装成功后会弹出如下的提示框:

 即表示驱动正确安装了。

 3.2.4. 安装 CH340 串口驱动

进入以下网址下载安装即可:

南京沁恒微电子股份有限公司

3.2.5. 下载开源库

开源库获取途径:

  1. 码云Gitee地址:龙邱科技AI8051U开源例程库: 基于AI8051U芯片32位模式,针对龙邱产品模块和常用外设资源移植驱动例程,以方便参加智能车竞赛和使用我们产品的人入门学习使用。
  2. 龙邱20届智能车综合技术交流群:228227119,以及越野气垫群、电磁组交流群
  3. 龙邱科技淘宝客服获取对应自己组别母板程序资料

库总工程结构说明:

模块例程包括:GPIO 输入输出、ADC 数据采集、UART 串口收发、OLED 屏幕、定时器中断、编码器读取、电机控制、陀螺仪数据读取、EEPROM 掉电存储等诸多使用示例。

3.2.6. 拓展 Keil 的 C 代码中断号

在 Keil 目前的 C51、C251 编译环境下,默认中断向量号只支持 0~31,即中断地址必须小于0100H。程序里使用的中断向量号超过 31,编译时就会报错。随着芯片的功能越来越多、越来越强,STC 单片机的部分中断向量号已经超出 31。此前临时解决的方法是借用 13 号中断向量地址,通过汇编代码从当前中断地址跳转到 13 号中断地址执行。

此外,可以从STC官网下载 keil 中断号拓展插件,安装到 C51、C251 目录下也可以解决中断向量号超 31 时编译报错的问题。 插件安装方法:首先打开开源库文件夹中的“软件工具”文件夹,双击运行文件夹内的可执行文件:

点击“打开”按钮,选择 Keil 的安装目录,然后点击确定按钮:

 安装成功后显示如下提示:

即表示安装完成。(注意:部分旧版本 Keil 编译器可能不支持此插件) 

3.2.7. 点灯程序测试

首先打开 Keil 软件,点击置顶栏中的“Project”,点击“Open Project”:

选择开源库中的初始工程文件,双击打开工程:

打开工程后,在左侧边栏中找到“User”中的“main.c”双击打开,然后翻到约第55行的LED灯闪烁测试程序,选中后取消注释。

 然后点击“Build”即可编译程序,生成可下载进单片机的 hex 文件:

编译成功后窗口左下角会出现如下提示:

使用 Type-C 数据线连接主板或核心板,或者使用 USB 转 TTL 模块连接单片机串口。

打开 Aiapp  ISP 烧录软件,在工程文件夹中找到工程成功编译后生成的 hex 文件并打开。

接下来选中对应单片机串口,配置好频率(AI8051频率设置为42Mhz),点击左下角的“下载/编程“,给单片机通电复位即可完成下载。

3.3. 多功能调试助手

在日常的备赛过程中,上位机或图传等调试助手扮演着至关重要的角色,它能提供实时的数据反馈,帮助研发人员快速定位并解决问题。使得开发者可以更加专注于智能车算法的设计和优化,而不用被琐碎的调试所困扰。可以提高开发效率,使团队能在短时间内完成更复杂的任务。

       1\线阵CCD模块可以使用,这款专门的上位机软件来查看,实际采样情况:

       2\龙邱通用调试工具软件,集成串口、网络,图像、虚拟示波器等众多功能为一体的上位机调试助手。

上面这个多功能调试助手软件,虽然还没有正式和大家见面,但龙邱的工程师们已经日常使用很久了,为了让大家使用顺手,我们内部日常使用反复测试,不断优化升级。

4. 外设基础

在使用外设时,首要步骤是明确这些设备与单片机之间连接的具体引脚。引脚查询方法:

  1. 查看电路板丝印层的标注。
  2. 查看电路板设计原理图。

4.1. GPIO 输入输出

GPIO是通用输入输出(General Purpose Input/Output)端口的简称。通俗来讲就是单片机可控制的引脚,所有的GPIO引脚都有基本的输入输出功能。

最基本的输出功能是由单片机控制引脚输出高、低电平,实现开关控制,如把GPIO引脚接入到LED灯,那就可以控制LED灯的亮灭,引脚接入到继电器或三极管,那就可以通过继电器或三极管控制外部大功率电路的通断。

最基本的输入功能是检测外部输入电平,如把GPIO引脚连接到按键,通过检测电平高低区分按键是否被按下。下图为常用的几种模式

 还有两种模式,想必学过STM32的同学并不陌生:

对于AI8051U来说其在传统8051基础上增强了驱动能力和模式灵活性,尤其适合需要高电流驱动、多协议通信和低功耗设计的场景,开发者可通过库函数快速配置。

AI8051U支持4种GPIO常用工作模式(上下拉单独配置),通过PxM1和PxM0寄存器组合配置:

  1. 准双向模式(弱上拉):默认模式,适用于普通输入/输出,驱动能力较弱但功耗低。
  2. 推挽输出模式(强上拉/下拉):提供高驱动能力(可达20mA),适合驱动LED等大电流设备。
  3. 高阻输入模式:用于模拟信号输入(如ADC)或外部信号检测,输入阻抗高,避免信号干扰。
  4. 开漏输出模式:需外接上拉电阻,支持总线级联(如I2C通信),也可以配置开启内部上/下拉电阻达到目的。

上面提到驱动能力指输出电流的能力。对于驱动大负载(即负载内阻越小,负载越大)时,例如I/O输出为5V,驱动的负载内阻为10欧姆,于是根据欧姆定律可以正常情况下负载上的电流为0.5A(推算出功率为2.5W)。显然一般的I/O不可能有这么大的驱动能力,也就是没有办法输出这么大的电流。于是造成的结果就是输出电压会被拉下来,达不到标称的5V。当然如果只是数字信号的传递,下一级的输入阻抗理论上最好是高阻,也就是只需要传电压,基本没有电流,也就没有功率,于是就不需要很大的驱动能力。

可以通过龙邱开源例程库函数直接配置寄存器,例如使用GPIO_InitConfig(P0_1,OUT_PP);       将P01配置成推挽输出模式,无需手动操作底层寄存器。

特别地,与传统51不同,STC32/AI8051U的所有GPIO均可中断,其中断触发类型支持端口级别中断(非引脚独立中断),通过软件查询具体触发的引脚。触发方式包括电平变化(跳变沿)、上升沿、下降沿(官方文档提示某些模式需谨慎使用,但实际测试可用)同样,在开源库例程中可通过函数直接进行配置,包括中断优先级等配置,极大的方便了初学者。

4.2. ADC 采集

ADC 是“Analog-to-Digital Converter”的英文简称,能将模拟信号转变为数字信号。通常是将信号采样并保持以后,再进行量化和编码,这两个过程是在转化的同时实现的。具体的转化步骤在这里就不展开说了,如果是开发者使用,我们应该关注哪些参数

  1. 分辨率—表示 AD 对输入信号的分辨能力,及数值部分的精度。一般模拟采样中使用 8 位还是 12 位的 ADC 说的就是分辨率。例如:输入模拟电压的变化范围为0~3.3 V,输出12位二进制数可以分辨的最小模拟电压为 3.3V / 4095  0.806mV;
  2. 工作电压和基准电压(内部或者外部基准):工作电压是 AD 芯片工作的额定电压,关键的是基准电压,又叫参考电压,可以来之芯片内部又或者外部接入,其决定了 AD 的分辨率,所有基准电压一定要稳。
  3. 对于使用龙邱AI8051U核心吧/母板的来说,区别STC32G的ADC独立参考电压需要外部稳压源提供,AI8051U直接内部参考VCC工作电压,而我们的板子上VCC工作电压为5V,因此ADC的参考电压就是5V,即当ADC管脚输入电压为5VADC读取转化后的值为4095(12bitADC),与GND短接时为0.

4.3. 定时器中断

定时器中断是一种基于定时器的中断,它允许在特定时间间隔内触发一个事件或一段代码。在智能汽车竞赛中,定时器中断常用于周期性任务,例如定时、传感器数据采集、转向环和速度环控制、编码器计距离或者陀螺仪角度积分

例如设置中断周期为5ms,那么就会每5ms执行一次中断里的程序

AI8051U在STC32G的基础上多增加了一个Timer11共有6个24位的定时器可用,在我们的库中默认使用了两个定时器来用作外部计数使用,也就是给编码器了,串口通信默认使用Timer2作为波特率发生器,需要注意如果多个串口使用同一个定时器来产生波特率,则多个串口的波特率须保持一致,否则需要单独使用。

4.4. PWM

PWM是一种用数字信号模拟模拟信号的技术,它通过在一个固定的时间周期内改变信号的脉冲宽度来模拟电压或电流的变化。PWM信号通常用于控制各种设备,如电机、LED灯、伺服机构等,以调整它们的输出或工作状态。PWM信号具有两个主要参数:

  1. 周期/频率(Period):PWM信号的一个完整周期持续的时间,通常以微秒或毫秒为单位。电机通常选择 10kHz ~ 20kHz 的PWM频率频率过低会导致电机噪音和发热,频率过高可能超出驱动芯片的响应能力舵机通常要求 50Hz ~ 333Hz,其角度由高电平脉冲宽度(0.5ms ~ 2.5ms)决定。对于无感无刷电机驱动/电调来说也需要使用这个脉宽的信号来驱动。
  2. 占空比(Duty Cycle):高电平状态所占整个周期的百分比。它代表了PWM信号的有效平均电压或电流值。

PWM信号的占空比决定了目标设备的输出特性,例如电机的转速或LED的亮度。更大的占空比通常表示更高的输出值。在智能车竞赛中,PWM是实现电机速度控制和舵机转向调节的核心技术。通过调整PWM信号的占空比,可以精确控制电机的转速和舵机的转向角度

STC近年推出的增强型8051内核的单片机,在PWM的功能上可谓时下了功夫,相比其他单片机而言可谓时很强大的;AI8051U的PWM模块支持高达135MHz的高速输出能力、可配置为AB相编码器解码模式,通过硬件直接处理正交编码信号、支持推挽、互补输出等多种PWM模式,支持死区时间插入和故障保护机制

4.5. 串口通信

单片机中的串口是一种用于数据传输的通信接口,它可以将数据以串行的方式进行传输。串口通常由两个引脚组成,即发送引脚(TX)和接收引脚(RX)。当单片机需要发送数据时,它将数据转换为串行格式,并通过TX引脚发送出去。接收方通过RX引脚接收数据,并将其转换为原始格式,从这里可以知道串口通信在连接时需要将发送引脚(TX)连接接收引脚(RX)。

串口通信可以通过硬件或软件实现,其中硬件串口通常具有更高的速度和可靠性,而软件串口则具有更高的灵活性和可定制性。在单片机中,串口通常用于与其他设备进行通信,例如遥控器、传感器、显示屏、上位机等。

串口协议是指在串行通信过程中,双方之间所遵守的通信规则和约定。UART串口协议包含以下内容:

  1. 数据帧格式:UART串口协议使用包含起始位、数据位(5至8位)、可选的奇偶校验位及1或2个停止位的数据帧来传输信息。具体格式需双方预先协商确定。
  2. 波特率:UART串口协议使用波特率来指定数据传输的速率。波特率表示每秒钟传输的位数。常见的波特率包括9600、19200、38400、57600和115200等。通信双方必须使用相同的波特率才能正确地接收和发送数据。
  3. 帧同步:UART串口协议使用起始位和停止位来标识每个数据帧的开始和结束。起始位是一个低电平信号,用于通知接收端数据帧的开始。停止位是一个高电平信号,用于通知接收端数据帧的结束。
  4. 错误检测:UART串口协议利用奇偶校验位检查数据位数量是否符合预期,并通过校验和验证整个数据帧的完整性,以此来发现传输过程中的错误。
  5. 数据流控制:UART串口协议支持硬件数据流控制和软件数据流控制。硬件数据流控制使用CTS和RTS信号来控制数据传输。软件数据流控制使用XON(ASCII码为0x11)和XOFF(ASCII码为0x13)字符来控制数据传输。

串口通信作为一种基础而强大的技术手段,广泛应用于智能车等自动化领域中,可以实现数据的传输,从而对系统进行实时监控和调试。

感兴趣的也可以搭配龙邱的USB-TTL模块学习,或者跟进一步可以使用BLE蓝牙模块进行无线串口透传实现无线通信。

5. 通用控制算法

5.1. PID 算法简介

PID 算法是工业应用中最广泛算法之一,是一种常用的反馈控制算法,它是根据系统当前状态与期望状态之间的差异来调整控制器输出的方式。在闭环系统的控制中,可自动对控制系统进行准确且迅速的校正。PID 算法已经有 100 多年历史,在四轴飞行器,平衡小车、汽车定速巡航、温度控制器等场景均有应用。PID  Proportional-Integral-Derivative 的缩写,分别代表比例、积分和微分三个部分。

PID控制算法将比例、积分和微分三个部分的输出进行线性组合,得到最终的控制器输出。通过调整三个部分的权重和参数,可以实现对系统的精确控制

       其中:

Kp:比例增益,为调试参数。

Ki:积分增益,为调试参数。

Kd:微分增益,为调试参数。

Error:误差 = 设定值(输入)- 反馈值(测量元件输出值)

根据实际系统的特性和需求,调整PID控制算法中的比例、积分和微分三个部分的权重和参数,以使系统能够以最佳的性能响应和控制的过程,我们一般称之为“调参”。

在调参过程中:

Kp 过大会对误差的变化做出过大的反应,从而导致系统动作幅度过大,容易引起振荡甚至不稳定。过小意味着对误差的调整力度不足,系统达到目标值的速度变慢,响应滞后。

Kp 即使设置得较好,仅靠 Kp 控制仍会存在部分问题:

Kp 控制对持续存在的小误差没有累计作用,无法完全消除系统的稳态误差。这是因为比例控制的输出直接与当前误差成正比,而当误差较小时,调整力度可能不足。需要Ki(积分)控制来消除这种误差。

Kp 控制对快速变化的误差反应不足,而Kd(微分)控制可以预测误差变化趋势,帮助提高系统动态性能,避免过冲,减少超调。

5.2. 电机闭环控制

给定占空比 → 测转速 → 比较实际转速和目标转速 → 重新调整占空比,这样的过程其实就是一个闭环控制,我们发现这个过程形成了一个回环:每次调整的占空比大小都是基于上一次结果得到的。相比开环控制,闭环控制多了信息反馈环节(测电机转速),我们根据反馈信息再做出进一步调整,接着获得调整后的反馈信息,再基于更新过的反馈信息进行新一轮的调控。

通常我们使用增量式 PID 算法来实现对电机的闭环控制。示例代码(并非气垫船实际代码):

头文件:

typedef struct PID
{
double Error;  // 当前偏差
    double LastError;  // 上次偏差
    double PrevError;  // 上上次偏差
    float KP;  // 比例系数
    float KI;  // 积分系数
    float KD;  // 微分系数
}PID;

extern PID left_MotorPID, right_MotorPID;  // 左右电机结构体变量声明

#define MOTOR_MAX_DUTY 3000  // 电机最大占空比限制

c文件:

PID left_MotorPID, right_MotorPID;   // 定义左右电机 PID 结构体变量

/**
 * @brief 占空比限幅保护函数
 * @return 限制后的占空比值
 */
double limit_DutyCycle(double duty, double min, double max)
{
    return duty >= max ? max : (duty <= min ? min : duty);
}

/**
 * @brief 增量式PID控制器实现
 * @param pid 指向PID控制器的指针
 * @param actual_Speed 实际速度值
 * @param target_Speed 目标速度值
 * @return 本次PID计算得到的增量值
 */
double PID_Increment(PID *pid, double actual_Speed, double target_Speed)
{
    double Increment = 0;
    
    // 设置PID参数
    pid->KP = 18;
    pid->KI = 18;
    pid->KD = 0;

    pid->Error = target_Speed - actual_Speed;  // 计算误差

    // 计算增量
    Increment = pid->KP * (pid->Error - pid->LastError)
              + pid->KI * pid->Error
              + pid->KD * (pid->Error - 2 * pid->LastError + pid->PrevError);

    // 更新误差记录
    pid->PrevError = pid->LastError;
    pid->LastError = pid->Error;

    return Increment;
}

/**
 * @brief 电机控制函数
 * 计算并更新左右电机的占空比
 */
void control_Motors()
{
    // 更新左电机占空比
    left_MotorDuty += PID_Increment(&left_MotorPID, left_EncoderValue, left_TargetSpeed);
    left_MotorDuty = limit_DutyCycle(left_MotorDuty, -MOTOR_MAX_DUTY, MOTOR_MAX_DUTY);

    // 更新右电机占空比
    right_MotorDuty += PID_Increment(&right_MotorPID, right_EncoderValue, right_TargetSpeed);
    right_MotorDuty = limit_DutyCycle(right_MotorDuty, -MOTOR_MAX_DUTY, MOTOR_MAX_DUTY);
}

 6. 气垫越野组思路分享

 6.1. 气垫越野整体系统基本结构

整个系统所用的器件相对其他组别时比较少的,其中无线模块可以不要,只不过在调试阶段,为了保证车模运行过程中以免出现意外从而更好地控制车模,这里保留了下来,主要就是遥控器或蓝牙模块等,一是方便返回一些调试过程中的参数信息,而是因为车模桨叶在高速运行过程中时比较危险的,没法在运动过程中去用手按键什么的调试,所以使用无线模块调试,配合遥控器,即使车模跑跑飞了也能手动操控,以免失控,保证安全。

以下给出一个简单的调试程序结构,其中GPS数据解析,陀螺仪数据读取、编码器数据读取、GPS数据接收解析函数 均在定时器中周期执行,简图中不在指出,注意该流程图不是最终整车控制完成比赛科目控制逻辑,不过也是差不多的,在平时调试时添加遥控控制是非常防方便的。

6.2. 北斗GPS模块的使用

6.2.1. 数据接收与解析

单片机通过串口接收GPS数据,GPS输出的数据为一个字符串,使用前需要将字符串解析获取到经纬度坐标并保存在数组中方便循迹使用。以下是数据解析程序,通过识别是否接收到字符串和“,”判断数据有效信息和位置,并将经纬度信息保存在数组中。

void parseGpsBuffer(void)
{
  char *subString;
  char *subStringNext;
  char i = 0;
  if (Save_Data.isGetData)      //如果字符串不为空
  {
    for (i = 0 ; i <= 8 ; i++)  //循环7次
    {
      if (i == 0)
      {
        if ((subString = strchr(Save_Data.GPS_Buffer, ',')) == NULL)  //没有检测到逗号
          while(1);             //解析错误
      }
      else  //检测到逗号,返回逗号的位置
      {
        subString++;    //位置加1(定位到逗号的后一位)
        if ((subStringNext = strchr(subString, ',')) != NULL)//定位下一个逗号的位置
        {
          char usefullBuffer[2];
          switch(i)
          {
          case 1:
              memcpy(Save_Data.UTCTime, subString, subStringNext - subString);       //两个逗号之间为 时间信息 并转换成北京时间
              Save_Data.UTCTime[1] = Save_Data.UTCTime[1]+ 8;
              if(Save_Data.UTCTime[1] > '9')
              {
                Save_Data.UTCTime[0]++;
                if(Save_Data.UTCTime[0] == '3')
                  Save_Data.UTCTime[0] = '0';
                Save_Data.UTCTime[1] = (Save_Data.UTCTime[1] % '9') + '0'-1;
              }
              break;//结束switch
          case 2:memcpy(usefullBuffer,            subString, subStringNext - subString);break; //数据是否有效标志
          case 3:memcpy(Save_Data.latitude,       subString, subStringNext - subString);break;  //获取纬度信息
          case 4:memcpy(Save_Data.N_S,            subString, subStringNext - subString);break;  //获取N/S
          case 5:memcpy(Save_Data.longitude,      subString, subStringNext - subString);break;  //获取经度信息
          case 6:memcpy(Save_Data.E_W,            subString, subStringNext - subString);break;  //获取E/W
          case 7:memcpy(Save_Data.speed,          subString, subStringNext - subString);break;  //获取速度
          case 8:memcpy(Save_Data.direction,      subString, subStringNext - subString);break;  //获取方向
          default:break;
          }
          subString = subStringNext;    //下一个逗号位置给第一个指针,
          Save_Data.isParseData = 1; //手动给真值,(数据是否解析完成)
        }
        else
        {
          while(1); //解析错误
        }
      }
    }
  }
}

6.2.2. 坐标系转换

GPS采集到的数据默认为WGS-84坐标系,WGS-84坐标系是一种地心坐标系,在这个坐标系中,坐标通常以常以经度(λ)、纬度(φ)和大地高(h)来表示。而我们实际应用的值需要转换为平面坐标系,需要将WGS-84坐标转换成平面直角坐标,才能被工程使用。在我们的例程中已经添加了坐标转换程序,可以直接调用”latlon2utm()函数直接转换。

/*  UTM坐标转换简单测试 */
void Test_UTM(void) 
{
    struct Point p1 = {39.908722, 116.397499};   //手动给个坐标,感兴趣的可以自己实时读取
    struct UTM utm1 = latlon2utm(p1);
    printf("UTM坐标(带号%d):%.8f, %.8f\n", utm1.zone, utm1.ux, utm1.uy);
    OLED_CLS();
    OLED_P8x16Str(5, 0,"Test_UTM"); // 将txt中 内容显示出来
    
    while(1)
    {
        LED_Ctrl(LED0,RVS);
        delay_ms(100);
    }
}

6.2.3. 判断方向

当有了平面直角坐标系后,我们就可以使用坐标系中任意两个点判断方向,在车模行进过程中,我们可以提前记录下一个目标点的坐标,车模再通过采集自身的坐标,即可计算出车模当前位置与下一个目标点位置的真北角度是多少,还可以通过计算车模上一个采集到的位置坐标和当前采集的位置坐标,获取当前车模的运动方向。再通过当前车模运放方向和到下一个目标点方向计算得出车模需要循迹的偏航角度。

6.2.4. 判断距离

判断距离是为了检测当前车模位置到下一目标点位置的距离,如果距离过远可以加速冲刺,接近下一目标点时可以提前减速,方便车模转弯。在平面直角坐标系中可以通过两个坐标点求平方根sqrt()函数得到距离信息。

next_dis = 
sqrt(pow((T_self.PX - T_peak[T_Trg_C].PX),2) + pow((T_self.PY - T_peak[T_Trg_C].PY),2));

6.3. 陀螺仪的使用 

陀螺仪在气垫越野组中起着非常重要的作用,因为 GPS采集到的数据并不是一直稳定不变的而是可能会出现漂移,加上陀螺仪后,可以更好地判断方向来辅助完成整个比赛。在比赛中我们可以利用陀螺仪欧拉角计算车模运动方向,在常规车模中陀螺仪可以配合编码器累加计算距离的惯性导航算法再配合上GPS做调整可以更加精准的完成车模循迹,遮掩就使得循迹过程中细节的处理有更多可操作性。使用陀螺仪还可以检测车身的倾斜状态,当在颠簸路段和坡道时,车模的前后倾斜状态会发生改变,主控可以及时的采集到车模的倾斜状态,控制电机及时进行加速或减速,或者倾覆后立即刹车,防止无刷高速带动得桨叶撞击到其他地造成伤害等。

在气垫越野中,陀螺仪的主要应用侧重于方向上的辅助,因为气垫船的前进动力来源于两个向后桨叶在控制器的推力来使得窗体向前,但在实际情况中,地面两侧摩擦力不同,平整程度不同,往往在控制船体直线向前时出现左右晃动甚至偏离目标,加上陀螺的偏航角与方向控制组成闭环,来。实时调整最有桨叶输出功率达到实时调整船体前进姿态的目的,同样在定点行驶任务中有陀螺仪在方向上的辅助将会更加容易完成。

6.4. 编码器的使用

气垫船最然没有像常规车模那样的机械传动结构,也不能通过与电机输出轴相连接直接获得车轮转速来活动精确的电机输出数据,但是只要气垫船行驶在路面依靠巧妙地拖轮结构将编码器的机械传统转变为编码器小轮与地面的滚动机械传递,这样就可以获得船体在地面的基本速度参考变量。

既然能够获得船体速度参考量,那么就可以带入系统控制中用作速度调节的参考变量,这样一来就算船体被卡住了,上坡或者下坡,都能通过编码器反馈检测到,从而更好地通过程序来调节船体加减速,或者异常情况刹车关闭电机。

6.5. 转向差速控制

电机差速控制是指通过控制车辆两侧电机的转速差异来实现车辆的转向和转弯。一般来说,当车辆需要向左转时,右侧电机的转速会比左侧电机的转速快,从而使车辆向左转弯。反之,当车辆需要向右转时,左侧电机的转速会比右侧电机的转速快,从而使车辆向右转弯。

比赛中,单片机通过转向环的输出值,在基础速度的基础上,通过差速计算公式分别计算出左右轮的目标速度然后结合电机PID闭环控制实现速度的精确调节。

  BL_motor_4w.BL = duty + mapValue2(rc_RLR)+Speed_.out; 
            BL_motor_4w.BR = duty - mapValue2(rc_RLR)+Speed_.out;      
void BLmotor_w4_Ctrl(BL_motor_Type *BL_Motor)
{
    BL_Motor->DL = limit_ab(BL_Motor->DL,1170,1935);// 双边限幅,防止因传入非电机控制范围内的数据导致电机反复启停
    BL_Motor->DR = limit_ab(BL_Motor->DR,1170,1985);
    BL_Motor->BL = limit_ab(BL_Motor->BL,1170,1985);
    BL_Motor->BR = limit_ab(BL_Motor->BR,1170,1985);
 
    if(Run_flag)  //启动电机的标志位
    {
        UpdatePwmCh(PWM1,BL_Motor->DL);   //Servo1 //数据更新
        UpdatePwmCh(PWM2,BL_Motor->DR);   //Servo2
        UpdatePwmCh(PWM3,BL_Motor->BL);   //BLmotor1
        UpdatePwmCh(PWM4,BL_Motor->BR);   //BLmotor2
    } else {
        UpdatePwmCh(PWMA, 0);     
    }
}

上面是一段控制电机PWM输出的代码,其中BL_motor_4w.BL是左后电机的PWM值,同理另一个是右后电机的PWM值,它由电机驱动死区+初速PWM(低于死区值电机不启动)duty、遥控器的方向数据mapValue2(rc_RLR) 以及速度环PID计算的输出值 Speed_.out构成,,通过接收遥控器数据实时调整行进输出电机的输出大小来达到控制方向的目的,最终对PWM输出进行限制输出。

6.6. 元素处理思路

气垫越野同极速越野组的比赛一样均分为三个科目,由简入难的比赛模式使得每个科目可以选择使用不同的循迹方式。

科目一:往返赛道,这个科目主要考察车模的运动特性,包括车模的极限速度、加减速特性。车模从发车区域出发,经过掉头区折返。这个科目主要考察学生电机驱动的设计以及定位精度,同学们在制作电机驱动板板时要尽量电路简单,选用大功率的MOS管,对于MOS管的供电和电机输出部分,布线要充分利用板子空间,将耐流做到足够充裕,防止炸板。在循迹上可以考虑GPS加陀螺仪,让车模在直线循迹上尽量保持直线行驶,尽量不出现因GPS数据漂移导致车模形式起来左右晃动。

科目二:八字赛道,这个科目主要考察车模转向特性以及定位特性。车模从发车区域出发,绕行赛道中的锥桶之后返回。锥桶间距大于等于2米。由于锥桶间距较小,考虑到GPS循迹漂移可能实现绕锥桶比较困难,可以考虑通过陀螺仪来稳定转向,其次就是采点路线,不要采到距离锥桶太近的地方,可以适当规划将距离拉大一点,给车模留出给多的空间调整姿态来准确的完成循迹。

科目三:特殊路况考察,这个科目考察车模运动的稳定性、安全性、路径通过的精确度,和可控性。其中包括坡道、颠簸路面、草坪区域以及桥洞。车模从发车区域出发,通过掉头区域运行之后返回发车区。这个科目最只要的就是定位的精准度,精准度越高通过元素越简单,可以考虑陀螺仪、摄像头、GPS三者结合循迹,在坡道、颠簸路段上,可以考虑使用GPS加陀螺仪,GPS提供到导航定位信息,陀螺仪可以检测车模的前后倾斜角度,及时的控制电机加减速,防止翻车;识别人工草坪和桥洞时,由于草坪颜色和跑道颜色差异较大、桥洞中间具有10CM宽白色引导线,可以考虑使用摄像头完成精准循迹,先通过GPS循迹引导车模到元素附近结合摄像头辅助通过元素。

值得注意的是因为AI8051U不能像极速越野一样使用神眼,只能使用CCD来辅助判断桥洞,而众所周知CCD在室外对光线是比较敏感的,所以在不同的时段地点以至于天气情况等都可能会干扰其识别的准确性,所以算法优化与阈值调节在此处比较关键,在调试时就需要带着电脑去操场上多采集实际情况,在算法中做充分的准备,另外就是在GPS上做充分的准备,尽量降低在过桥洞时对CCD的依赖。

7. 综合备赛建议与资源推荐

以下是针对智能车竞赛初次参赛者的准备要点总结,结合竞赛特点和实践经验整理而成

7.1、基础技能与知识准备

  1. 编程与硬件基础
    • 学习C语言基础、单片机原理(推荐STM32系列、STC/AI32等),掌握PWM控制、ADC采集、中断处理等核心功能。
    • 熟悉常用传感器(如摄像头、电磁传感器、陀螺仪)的驱动与数据处理。
  2. 硬件设计与调试
    • 优先使用龙邱科技等官方合作商的成熟模块(如电机驱动、摄像头模块),降低开发难度。
    • 学习PCB设计基础,注意元器件封装选择(如贴片封装更轻量化)和电路隔离设计(如电机与控制器地线隔离)。

7.2、车辆硬件搭建

  1. 机械结构调整
    • 降低重心:通过调整电池和主控板位置提升高速稳定性。
    • 舵机安装:确保舵机连杆水平安装,避免左右打角不对称。
  2. 传感器布局优化
    • 摄像头组需关注图像采集时序(场中断与行中断),电磁组需合理布置电感位置以增强信号质量。

7.3、算法与控制策略

  1. 基础控制实现
    • 优先完成传感器信号处理(如摄像头二值化、电磁信号滤波),再调试PID控制(速度、方向)。
    • 尝试开环调试验证机械结构合理性,再过渡到闭环控制。
  2. 赛道元素识别
    • 针对弯道、坡道、障碍物等元素编写专用处理逻辑,可参考网上开源代码优化算法或向往届优秀组别学习。

7.4、比赛流程与资源整合

  1. 规则与工具熟悉
    • 仔细阅读《竞赛规则》和《裁判员手册》,关注赛道元素判罚标准(如视觉组图片分类规则)。
    • 推荐龙邱的多功能 试助手(如无线串口模块,蓝牙/lora/WiFi模块等)实时监控数据。
  2. 资源获取与协作
    • 加入龙邱的官方交流群,获取开源代码库和技术支持。
    • 与队友分工明确(硬件、软件、机械),定期进行联调测试。

7.5、实战建议

  1. 分阶段验证
    • 第1-2周:完成基础功能(如电机转动、舵机打角);
    • 第3-4周:实现简单巡线;
    • 第5-6周:优化速度与稳定性。
    • * * * * * * *
  2. 调试技巧
    • 有条件可以使用Matlab仿真PID参数,减少实车调试时间;
    • 记录每次参数调整结果,建立调试日志。

7.6推荐学习路径

  1. 教程与开源项目
    • 龙邱科技以及往届智能车相关方案资料、视频;
    • GitHub/gitee开源仓库(搜索“智能车竞赛”)学习往届优秀案例。
  2. 官方资源
    • 关注公众号“TSINGHUAJOKING”获取规则更新;
    • 观看龙邱B站直播教程。
  3. 学习路径:C语言→单片机基础→传感器实验→算法移植。
  4. 团队分工:
    • 硬件——电路设计板子焊接制作
    • 软件——算法调试,完成控制程序
    • 机械——车模改装
  5. 学习资源:CSDN、往届技术报告、GitHub、gitee、B 站学习视频。

以上内容综合了硬件搭建、算法设计、比赛策略等关键环节,建议结合具体组别(如摄像头/电磁组)进一步细化方案。

结语

到这里,这篇手册分享就结束了。智能车大赛的魅力不仅在于追求胜利,更在于探索过程中的每一次自我突破大家在参考我们方案的同时,别忘了充分发挥自己的创造力去挖掘更多可能。

祝愿每一位同学都能在比赛中有所收获,享受智能车带来的乐趣。期待在赛场上看到你们的精彩表现,祝大家都能取得理想的成绩,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值