学校:山东大学(威海)
队伍名称:越野三队
参赛队员:郑睿、茅陈昕、余海波
带队教师:王小利刘萍萍
01 引 言
===========
第十七届全国大学生智能车竞赛将于 2022
年七至八月在全国各赛区有序展开,大赛旨在培养当代大学生创新与实践能力,增强团队意识与协作能力,以智能车为载体,鼓励各参赛队员创新创造,在比赛中充分发挥主观能动性,提升自我对于庞大知识体系的综合运用能力,并打破自身专业束缚,在实践中体验并理解学科交融和综合能力培养的重要性。
智能车竞赛自 2006
年开办以来,在赛程中引入多种元素和功能需求,涉及学科和领域十分广泛,鼓励学生充分了解电子、自动化、机械等多种学科,并通过对嵌入式系统、传感器技术、控制算法等多个领域中知识的综合运用实践,提升自我在实际工程中的操作能力和技术水平。
随着智能车竞赛年复一年的发展与举办,比赛组别、元素及完赛要求等都经历着巨大的变化,在今年的赛制要求中,“室外极速越野”组别由于其新颖的赛制、独特的赛道和全新的系统方案引起了我们组的极大兴趣,本室外寻迹系统便是基于此次越野组别比赛要求而设计,在能满足自主寻迹绕寻操场的基本需求上通过机械结构、硬件系统及软件算法的优化实现了较高的行进速度和稳定性,能在比赛中具有较强的竞争力。
本文将基于此次开发的过程,从系统整体设计、机械结构、硬件组成、软件编写和开发环境上系统介绍该工程的原理和工作流程。
02 系统设计
===========
此次系统设计立足于智能车竞赛室外越野组别基本规则而设计,以 L型车模为载体,自行设计和优化机械结构,编写控制算法,达到让小车按照指定路线自主寻迹的预期目的。
2.1 系统设计概述
根据此次比赛要求,智能小车需要沿 400
米标准赛道运行一周,采用 L
车模作为平台,使用 MindMotion
单片机作为微控制器,允许使用 GPS
、摄像头、 IMU
等多种传感器并可以自主选择是否更换无刷电机,同时车辆系统还需具备雨天运行能力。基于以上要求和设计指标,我们队在逐飞公司提出的方案基础上自主建立了一套完备的解决方案。
2.1.1 微控制器选择
此次我队选择 MM32F3277G9P
型号单片机最为整车的主控,其使用高性能的 Arm
®Cortex
®-M3
为内核的 32
位微控制器,最高工作频率可达 120MHz
,内置高速存储器,丰富的 I/O
端口和多种外设,拥有 3
个 12
位的 ADC
、2
个 12
位的 DAC
、2
个比较器、 2
个 16
位通用定时器、 2
个 32
位通用定时器、 2
个 16
位基本定时器和 2
个 16
位高级定时器,能充分满足此次开发的需要。
2.1.2 传感器选择
此次比赛允许使用多种传感器,其中由于室外光线稳定度较差等问题,决定暂不使用摄像头作为主要识别手段,同时经过仔细测试,发现市面上常见的 IMU
模块精度无法满足长航时独立惯性导航的需求,需依靠 GPS
等模块提供及时的位置修正,而超声波等传感器模块在识别速度上并不能达到需求,故最终我队采用以 GPS
模块 +IMU
模块作为主要传感器,并使用传感器组合识别制导的方式使智能车在高速行驶中依旧能保持良好的赛道识别和寻迹性能。
其中, GPS
采用逐飞出品的 GPS
模块方案,支持 GPS
、BDS
、GLONASS
等多种卫星接收频段,定位精度最高可达一米内,支持最高 10HZ
更新频率及 115200
波特率传输,实测能较好的满足比赛需求。
IMU
采用维特智能 HWT
系列产品,支持输出三轴(加速度、陀螺仪、角度、磁场)等数据,支持最高 1000HZ
回传速率,具有较高的精准度,在实测中能较好的满足及时性和精确性导航需求。
2.1.3 舵机选择
舵机采用 S-D9
数字舵机,其金属齿轮保证了在高速及恶劣环境使用下的稳定性和寿命。
2.1.4 电机及驱动方案选择
为提高速度上限及控制精准度,本次智能车动力设计选择无刷直流电机加方波(六步换相)驱动的方案,驱动上使用 MM32SPIN360C
作为微控制器,其内部集成的预驱能够较为方便地控制三相六臂电路中 MOS
管的通断,实现对于电机运行地精准控制。
2.2 预期功能及设计指标
根据比赛要求并结合自身情况,本次我队智能车设计预期能使小车以较高速度沿 400
米标准操场绕行一周,在不压到跑道最内线的前提下尽可能沿内道行驶,期间车辆运行状态稳定可控,并能在阴天甚至雨天等恶劣环境下正常运行。
03 机械设计
===========
3.1 系统平台设计及优化思路
L
车车型较大,传动部件较多,所以平面可利用空间较小,车模左侧用来摆放航模电池为整车供电,车模右边摆放舵机和无刷电机,为了保证车模重心的稳定,可以在车模两边分别加上配重。
3.2 转向轮结构调整
为了保证 L
车在高速行驶状况下,有着更好地直道性能,我们采用前轮束角外八形,后轮束角内八的方案,同时为了提高转向时轮胎的抓地力,前轮两轮胎的倾角为外倾状态。
▲ 图3.2.1 转向轮结构调整
3.3 电子平台安装方案
因为 l车内置传动轴,车模做部分需是电池的摆放空间,右面需要安装舵机的电机,难以在平面空间内摆放电路板,所以我们采用传动轴正上方架碳素杆的方法更好地利用立体空间摆放绘制的pcb
,同时使车模的结构更加稳定。Imu
和 GPS
的安装,采用亚克力和铜柱连接,固定在车头部分。
3.4 防水功能设计
反水部分,我们配套 l车模有防水车壳,同时所有的电路板电路共轭能模块都涂山了三防漆,来确保下雨天的稳定运行。
▲ 图3.4.1 车模机械结构
04 电路设计
===========
4.1 主控板设计
原理图部分:
▲ 图4.1.1 主板电路原理图
主板正面:
▲ 图4.1.2 主板正面
主板反面:
▲ 图4.1.3 主板反面
4.2 驱动设计
驱动原理部分:
▲ 图4.2.1 驱动板原理图
驱动正面:
▲ 图4.2.2 驱动板的反面
驱动反面:
▲ 图4.2.3 驱动板的反面
05 软件设计
===========
在此次开发中,由于引入了全新的赛道元素和传感器模块(如 GPS
模块等),如何在编写程序时能够突破传统组别的思维束缚,合理地融合 GPS
、IMU
等模块的数据、在基础方案上进行深度优化和提高稳定性便成为了我们需要解决的核心问题,也是本次软件设计的重点所在。
本章内容将从软件系统整体设计入手系统分析各个模块的特性和数据处理方法,通过数据解算、滤波、各模块间数据融合的方式,最终实现对于车辆的精准控制,并实现车辆在高速运行状态下的稳定度和性能。
5.1 软件控制系统设计框架与思路
正如前文所说,本次智能车系统开发将以 GPS
和 IMU
两个传感器模块作为主要赛道数据来源,通过对二者数据的融合得出车辆姿态偏差值,再通过滤波及 PID
等算法最终解算出输出值从而控制车辆的运动。
其中,由于 GPS
和 IMU
回传速率的不同,在实际运行中为了保证控制的实时性,将以 IMU
数据回传速率( 200HZ
)作为数据处理和输出更新的频率,实测后发现以 5ms
为周期的数据解算和控制能满足实际应用的需要。
该系统的总体设计框架和运行逻辑如下图所示:
▲ 图5.1.1 程序运行框图
由框图可见,程序开始执行后,会优先对各模块及片上外设功能进行初始化,之后便在 while
循环中处理 GPS
回传数据,由于其回传速率较慢,故而放在主循环中,以便在 IMU
中断发出后及时处理 IMU
的数据并计算出所需输出。
同时可以看到, IMU
中断在此处代替了常用的定时器中断,借助其 200HZ
的回传速率能及时调用数据融合和解算的相关函数,从而实现 5ms
控制一次电机和舵机的目的。
5.2 GPS数据处理
5.2.1 GPS模块及其数据的特点
在实际测试中我们发现, GPS
在回传数据时会出现以下两个明显的问题:
一是在上电时间较久之后, GPS
采集的数据会出现较明显的误差,例如在采点时,若采点时间较久,则即便实际采集终点和起点重合,但在经过 MATLAB
分析数据后所得的两点点坐标会有较大的出入。
二是即便实际起始点不变,在每次上电后 GPS
所测出的点的绝对数据也会有较大的差别,导致无法直接使用。
5.2.2 GPS数据处理
为解决以上问题,首先需要对于采集的点进行人工修正,以使其能够拟合出一个标准操场的路径,修正前后效果如下图所示:
▲ 图5.2.1 GPS采集点(未修正)
▲ 图5.2.2 GPS采集点(修正后)
可见,经过修正后的点在轨迹上明显更为顺滑和贴近实际赛道,而由于车辆绕操场一圈的时间在一分钟内,在实测中不会出现过大的数据点位漂移,因而该点能较好地满足实际导航的需求。
其次,对于每次上电其绝对数值不同的问题,采取计算当前实测起点和理论起点零偏并修正的方法来使实测点能够对齐理论轨迹,同时由于 GPS
每次回传的数据本身会在一个较小的范围内浮动,为避免突变数值对于对齐的影响,故先采集 50
个点取平均值后在进行对齐,对齐后实测点和理论点误差较小,如下图所示:
▲ 图5.2.3 车轮轨迹与理论点对比
其中蓝色点为理论路径,红色点为 GPS
数据对齐后采集的车辆实际运行轨迹,可见车辆轨迹较为贴合理论点,能够实现较为精准的寻迹。
5.3 IMU数据处理
5.3.1 IMU模块及其数据的特点
此处选用维特智能 HWT
系列产品,可以选择六轴或九轴模式,回传速率最高 200HZ
。在实测中我们发现,尽管九轴下 IMU
所传回的数据更为精确,但是在高度不够的情况下极易受到车载电子设备及电机等的磁场干扰而导致数据出错,但若架设高度过高则又会导致车辆机械结构稳定性严重下降,故最后选择六轴模式,这也意味着需要在发车前进行“对北”操作,以保证坐标轴偏航角 0
度对准正北方。
此外,在实际测试中我们发现车辆在高速运行下的抖动和抽动会对 IMU原始测试数据造成较大的影响,若不做修正则会严重影响正常寻迹。
5.3.2 IMU数据处理
由于此模块带有自动解算功能,故我们直接读取其解算出的绝对角度值,但是其使用的是顺时针 0-360
度坐标系,而 GPS
使用的是 0-180
坐标系,故为了方便后期计算,需要先将 IMU
数据对应到 GPS
所用坐标系上后在进行处理。
同时,正如上文所说,由于采用的是六轴模式,故需要进行对北,但在实际使用过程中,由于手动对北或多或少会有一点误差,且起始误差会对整个寻迹过程产生较大的影响,故需要在发车后对于 IMU
的整体零偏进行修正。而由于 GPS
解算出的绝对角度偏差不受对北影响,此处采用平均值解算修正的方法将发车初始阶段的 IMU
角度数值对齐 GPS
数值,使得对北误差显著降低。
而在实际运行中,为了解决高速运行中的 IMU
误差问题,则对其数据和 GPS
结算数据融合并进行卡尔曼滤波,使得误差不会过度发散,修正前后角度误差对比如下图所示:
▲ 图5.3.1 IMU与GPS结算数据对比(未滤波)
▲ 图5.3.2 IMU与GPS结算数据对比(滤波后)
其中蓝色为 GPS
解算值,红色为 IMU
解算值,可以看出在经过滤波修正之后 IMU
的误差大大缩小,足以满足实际需求。
5.4 数据融合和输出计算
通过将 GPS
返回的实时坐标数据和理论目标点的坐标进行对比我们可得车辆的预期目标姿态角,通过将其与 IMU
回传的车辆实际姿态进行对比可得角度偏差值,最后通过 PID
算法解算出实际输出。
5.5 数据处理算法详解
5.5.1 卡尔曼滤波
卡尔曼滤波是一种工程中常用的基于最优估计的滤波算法,它可以使含有不确定信息且连续变化的系统能准确预测出下一步的走向,其具有内存占用量小、处理速度快、实时性强等特点,仅需存储上一次的状态量即可准确运行,非常适合应用于嵌入式系统的开发。
卡尔曼滤波本质上是对均具有一定不确定性的预测值和测量值进行加权运算,数据的不确定性由数据方差决定,通过对比本次最优估计和预测值即可得到预测值的准确度,从而调整估计值和测量值的计算权重,并在下一次计算重复上述过程。
卡尔曼滤波的核心算法由五步构成,如下图所示:
▲ 图5.5.1 卡尔曼滤波五步计算公式
在第一行中通过系数矩阵 A、系数矩阵 B以及控制矩阵我们就可以根据过去的状态(最优估计)得出当前时刻的预测值,此数据是先验的。
在第二行中,根据上一次输出值的不确定性和估计噪声方差 Q即可得出本次预测值的协方差矩阵,从而知晓本次预测值的不确定性。
第三行公式通过本次预测值的协方差矩阵和观测噪声方差 R来确定卡尔曼增益 K的大小,进而确定计算中对于预测值和测量值的权重。
第四行公式即根据卡尔曼增益 K在预测值和测量值之间加权并最终得到最优状态估计。
第五行公式将计算出本次最优估计的协方差矩阵,在下一轮计算中被用于计算预测值的协方差矩阵,从而完成迭代。
在实际测试中,卡尔曼滤波大大提高了数据在系统高速运行状态下的稳定性和可靠性,大大减小了系统误差,对提升车辆表现和成绩有着举足轻重的作用。
5.5.2 PID算法
PID算法作为一种经典实用的算法,在控制领域有着极为悠久的历史和不可替代的重要作用,其中,PID指代的即是 proportional、integral和 derivative,即比例积分微分算法,其运算逻辑如下图所示:
图中:u(t)为结算后输出给控制的控制量,对应上图中输出给执行机构的量e(t)为偏差量,它等于给定量与传感器测量值之差,对应上图中的输入
其中,比例系数 P在目标值和当前值之间建立了一种线性关系,通过调整其大小可以使系统输出量以一定的速度接近目标值,从而对真个控制系统起到调节作用。但是,在仅仅使用 P进行调节时,若 P的值较大,则很容易在目标值附近形成震荡,此时为了使整个系统能平滑稳定地运行,就需要微分调节 D。D通过给整个系统一个适当的阻尼,从而避免系统出现超调而导致极大幅度输出变化,使得系统运行趋于稳定。
最后,为了修正系统的整体静态误差,公式中的 I将对整个系统的输出进行补偿,以保证其能够达到预期目标值。
PID三个参数对于系统调节的效果如下图所示:
▲ 图5.5.3 P调节效果示意图
▲ 图5.5.4 I 调节效果示意图
▲ 图5.5.5 D 调节效果示意图
5.6 数据存储
在本次开发过程中,由于操场赛道面积过大且运行途中较为颠簸,实际使用中发现无论是屏幕还是无线串口都难以完成数据记录和显示的任务,因此此处选择用flash
来存储运行中产生的数据,数据记录如下图所示:
通过对 GPS
、IMU
以及控制算法输出等数据的记录,再借助 MATLAB
等软件的分析我们可以轻松绘制出轨迹、角度误差等图像,从而直观地看出问题所在,大大提高了调试的效率,前文展示的部分图片,其原始数据便来自于 flash
存储的内容。
06 控制方案
===========
6.1 无刷电机内部结构与驱动原理
本次开发选用三槽两极内转子无刷直流电机(BLDC),其内部结构如下图所示:
▲ 图6.1.1 无刷电机内部结构示意图
可见,电机内部有三个线圈,通过给不同的线圈两端通电,电机内部就可以形成不同的磁场,若按照一定的顺序给电机三相通电,则转自就可以在磁场的吸引力下开始转动,从而驱动电机。在实际工程中,常常使用的驱动算法有两种,即 BLDC六步换相方波控制法和 FOC控制法。
6.2 BLDC六步换相方波控制法
正如上文所说,结合无刷电机内部结构,若按照一定顺序给电机三个定子上的线圈通电,则电机内部就可以产生按照稳定顺序变化的磁场,从而带动转子按照一定的方向和顺序旋转。
例如,给 A相通正电压,给 B相通负电压,则转子会按照电机内部磁场方向转动到如下位置:
▲ 图6.2.1 AB相通电电机内部示意图
因此,只要按照以上方法分六次改变电流通断情况,即可形成六个相,每次换相角度均为 60度,并驱动转子按照换相顺序旋转,六个相位对应的通电情况如下图所示:
▲ 图6.2.2 六步换向对应电流通断方式示意图
至此,就解决了让转子转动的基本问题。而后就需要检测转子当前所在位置,从而确定下一次的换相相位,检测转子位置的方式主要有以下三种:
- 过零检测:通过比较三相相电压和电机中性点的电压,根据比较器的输出信号确定转子的位置,从而再简化电路连接的基础上保证了换相的可靠性。
- 霍尔检测:通过霍尔检测来检测转子位置,通过三个间隔 120度的霍尔元件,可以轻松获取当前转子所在的相位号,从而得知下一次的换相号,或者准备好提前换相。
- 磁编码器检测:通过加装磁编码器来直接检测转子位置,但成本较高,此处不做考虑。
同时,闭环处理也可以选用传统的编码器或者单片机内部解算的方式,通过获取最近六次换相 ADC中断的次数,结合其中断频率便可算出当前实际运行一圈所用的时间,即可得出实际转速,然后结合内部 PID算法对其输出进行调节。
6.3 FOC(Field-Oriented Control)
FOC,即磁场定向控制(矢量控制),是目前 BLDC控制方法中最优秀也是应用最广泛的一种算法。正如上文所说,六步换相法通过检测相位和切换相位来实现电机的转动,这就不可避免地导致转子在不同位置受到的吸引力不同,使得电机输出的扭矩不稳定,造成电机运行时的巨大震动,也导致了运行效率的损失,而 FOC算法则能很好的解决以上弊端,此处对其算法原理进行简易介绍。
6.3.1 DQ坐标系
根据无刷电机的内部结构可知,当三相绕组产生的磁场方向始终和转子相切时,电机输出的扭矩最大,此时在保证输出平稳的同时也能获得最大的运行效率。若将与转子磁场方向相切的磁场定义为 IQ,将与其方向相反的磁场定义为 ID,则可构建出DQ坐标系,如图所示:
▲ 图6.3.1 DQ坐标系示意图
6.3.2 Park反变换和 Clark反变换
由于 DQ坐标系随转子的转动而旋转,三相绕组却是静止的,故需要将 DQ坐标系变换为静止的αβ坐标系,再进一步通过 Clark反变换将其转变为三相绕组坐标系,从而产生 ID和 IQ。
上述变换过程如下图所示:
▲ 图6.3.2 Park变换示意图
▲ 图6.3.3 Clark变换示意图
6.3.3 八段矢量
为了形成 ID和 IQ,则需要通过输入来控制 Ua、Ub、Uc的导通状态和时间,由于同一桥臂上下两组 MOS不能同时导通,否则会造成短路,故六组 MOS管总共可以产生八种状态,称为八种矢量,如下图所示:
▲ 图6.3.4 八矢量 示意图
▲ 图6.3.5 八矢量状态定义
通过控制八个矢量产生的周期即可产生出与转子相切的矢量。
6.3.4 SVPWM生成
根据上文所知,我们可以通过控制三相的输入产生所需要的矢量,而通过给每个MOS输入相应的 PWM信号即可控制 MOS的导通时间,进而产生对应矢量,最终形成所需的磁场,并在最后通过电流闭环实现精准控制。FOC整体控制流程如下图所示:
▲ 图6.3.6 FOC控制算法流程
07 车模参数
===========
智能汽车主要技术参数如下:
▲ 图7.1 车模主要参数
08 总 结
===========
在本次智能车系统的开发中,通过将系统机械结构、硬件电路和软件算法有机结合,最终在成功完成赛道任务的基础上使智能车具有高速运行的能力,并可以适应恶劣天气,在雨水天中也可以照常运行并完成既定目标。在分区比赛中活得山东赛区第一名的成绩,进一步印证了系统的可靠性和高性能。
在近一年的开发过程中,我们团队也遇到了很多困难,诸如疫情、天气等等问题接踵而至,但凭借自身努力,我们团队最终在比赛中交出来满意的答卷。
今年的极速越野组作为一个全新的组别,在传感器选用、赛道元素及场外干扰因素等等诸多方面和往年的传统组别有着诸多不同,要求我们摒弃固化思维,能将传统的寻迹控制算法和全新的传感模块相结合,开发出新思路新方向,以求能在最终的比赛中获得优势。
在本次智能车系统开发中,我们也存在着许多不足,在以下几个方面还有很大的进步空间:
首先,是对于电机的控制算法,稳妥起见还是选用了六步换相法,但其在高速运动下产生的剧烈震动对传感器以及整个系统的稳定性有着较大的隐患,在未来的改进方案中可能会选用 FOC方案以提高电机整体的运行性能。
而后,在主控算法处理阶段也有尚未解决的安全问题,例如在运行中,当主函数内 while循环正在处理 GPS数据时,需要分多行命令对相应的变量进行赋值以记录传感器数据,但若在数据尚未完全更新完成时恰好进入 IMU中断,则会立即执行 IMU数据处理算法并随即调用数据融合算法计算出输出值,则此时融合算法中使用的 GPS数据既包含本次的新数据,也可能包含一部分上一次的旧数据,导致数据出现偏差。当然,在实际测试中这种问题带来的影响极其微小,故没有做优先处理,但在未来的改进中,这仍将是需要优化的一环。
附录 A:电路板原理图
作者:越野三队
文章来源:TsinghuaJoking
欢迎大家点赞留言,更多Arm技术文章动态请关注极术社区IC比赛技术方案专栏欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。