极术小姐姐 · 2022年08月29日 · 北京市

单车技术方案

image.png

01方案综述

1.1 项目设计意义

  自行车机器人是双轮静态不稳定、动态可稳定机器人的典型代表。研制能自动驾驶的两轮智能交通工具,是控制领域经典而富有学术研究价值的问题。两轮不共轴系统与共轴系统相比,具有静止状态平衡、占地面积小、通过性强和灵活性高的特点。

  但是自行车研究目前存在以下问题,首先是自行车平衡系统成本高昂。在互联网上流传甚广的稚晖君的平衡自行车系统,其动量轮,驱动器与传感器的成本过高,不利于自行车机器人技术的普及。其次,目前自行车的平衡需要依靠高速旋转的动量轮,极易造成安全事故。

image.png

▲ 图1.1.1 稚晖君的平衡自行车

  因此,我组以《竞赛》规定的K型车模为基础,设计开发了基于Infineon Aurix平台的自平衡自行车系统,以较低的成本和较高的安全性,验证实现了自行车的自平衡与摄像头赛道循迹。

1.2 项目方案总述

image.png

▲ 图1.2.1 系统方案总体框图

  根据竞赛规则相关规定,平衡单车组智能车系统允许使用各类电磁、红外光电、摄像头、激光、超声传感器器件进行赛道和环境检测,车模微控制器使用Infineon Aurix系列多核单片机。赛车的位置信号可由摄像头或者电磁传感器采集,动控制决策。通过编码器测速模块来检测车速,进行脉冲计数计算速度和路程;电机转速控制采用 PID 串级控制。

1.3 项目任务要求

1.3.1 竞赛要求

image.png

▲ 图1.3.1 室内循环赛道示意图

  1. 车模单车使用K型车模。在车模上允许使用动量轮,动量杆维持车模平衡。如果采用无刷电机驱动动量轮,则需要使用基于Infineon的驱动方案。车模作品制作完毕后,对于车模外形尺寸没有限制。

  2. 微控制器与传感器车模微控制器采用Infineon单片机。传感器允许使用摄像头、CCD、光电管、电磁等。

  3. 赛道与比赛任务比赛赛道采用室内循环赛道,赛道上铺设有电磁引导线。车模从车库出发,在赛道上运行一周后,最终驶入车库。计时标准:车模从车库驶出到重新驶入车库之间的时间差。

image.png

▲ 图1.3.2 系统实物图

02 机械设计

2.1 总述

  对平衡自行车这类结构,机械设计是决定车辆性能的关键。为了降低控制复杂度,增强平衡控制的鲁棒性,尤其需要对车模的重心、转弯半径等参数进行严格的测试与控制。本项目依托《全国大学生智能汽车竞赛》的K车模进行搭建。在多轮测试下,我们选择了一种比较优秀的结构设计。有效提高了车身的稳定性。

  而为了适应自平衡等功能的需要,我们对车模进行了3D建模,并在此基础上,对车模进行了多层次的改造。

  我组对车模的机械改造主要分以下几个部分:动量轮以及支架的安装,电池安装与车模切割,摄像头支架安装等。

2.2 车模切割与支架安装

2.2.1 车模切割与电池安装

  单车车模体积小巧,如果想在车模已安装动量轮的前提下,原本放置电池的位置被动量轮替代,因此车模的必须要对车模进行裁剪,来安装电池降低重心,在保证车模原始结构不受影响的前提下,我们对车模进行了最低限度的裁剪。

image.png

▲ 图2.2.1 车模裁剪部位

  裁切完成之后,我们在车模底部位置粘贴了魔术贴,以此方便地进行电池的安装与更换。

2.2.2 动量轮与支架的安装

  为了使剪裁后的车模更加稳定,我们使用了龙邱的动量轮支架和的直流电机,实现车体、电机、飞轮、编码器和齿轮的配合。

  动量轮支架分为上下两部分,上部用于连接车模,下部用于固定电机和编码器,上下两部分之间使用三角体连接块连接。上半部分支架有多个螺丝安装孔,可以直接安装在车模原有孔位上,无需再对车模打孔。

image.png

▲ 图2.2.2 动量轮支架3D模型图

  关于动量轮支架的安装,我组尝试了两种方案:

  1. 在车模底部安装动量轮,可降低重心。

  2. 在车模顶部安装动量轮,可提升力矩。

  在根据理论推导与实际安装测试比较后,我组选择了方案一作为实装方案。

2.2.3 舵机选择与安装

  电单车依靠一颗舵机实现车头转向与平衡保持,是单车中最重要的执行机构。K 车模原配舵机为 SD12 舵机,其体积小,且为金属齿轮舵机,响应速度、扭矩满足使用需求。但实际使用后发现,调试时不可避免的车模失控,车头撞击墙等,容易导致小舵机齿轮损坏,损坏率高。考虑到整个舵机价格较高,为降低成本,选取了 SD5 舵机。相比 SD12 舵机,SD5 扭矩更大,不易损坏,响应速度满足要求。但由于不是原配舵机,其安装成了需要解决的问题。为此我们使用了简易的安装支架,如图:

image.png

▲ 图2.2.3 合金舵机支架

2.3 电路板的安装

  考虑到 K 车模上并没有较多的空间来安装电路板,因此采用极简的设计风格,放弃供应商提供的主控核心板,而采取全4层PCB+SMT的工艺。我组将电路板上所需的部分分为了2个模块,分别是:

  1. 主控板,包含主控芯片以及各种电源模块,同时也有部分传感器接口。

  2. 电机驱动板:包含电机驱动模块。

  电路板的安装需要考虑各种因素,所以我组对此也尝试了好几种方案,并且在最终选出了最适合我们车模的安装方式。

2.3.1 主控板PCB安装

image.png

▲ 图2.3.1 主控板PCB的安装方式

  主控板PCB上搭载MCU TC264D芯片、三组DC-DC供电与各类外设接口。为了方便主控板的安装,我组选择直接在车模侧面使用魔术贴固定主控板。

03硬件设计

3.1 外设选型

  本方案中,我们使用了大量的外设模块来实现各类功能。这些外设依托各种各样的总线、接口与MCU交换数据。例如,测量加速度和角速度的IMU使用I2C总线,TF卡使用了SPI接口,蓝牙串口使用了UART。其他大部分使用了GPIO口来模拟其他的通信协议或者连接了片上外设比如PWM输出等等。

3.1.1 使用模块简介

  在本方案中,我们使用MT9V032灰度摄像头采集赛道信息,ICM-20602感知车身的姿态,用舵机控制车身前进的方向,编码器采集转速,TF卡座和蓝牙串口作调试用,TFT屏幕显示各种状态。

  各种模块的供电电压不同,通信方式也千变万化,这里对这些模块进行一些简单的介绍,让我们在设计硬件的过程中对各种模块与MCU的连接不至于太陌生。

  各个模块的具体介绍与接口定义如下表,各种接口目前的封装都是标准的HDR2.54接口或者排线接口。

image.png

▲ 图3.1.1 系统外设模块总表

3.2 系统供电单元

3.2.1 供电方案分析

  智能车竞赛一般使用2芯或3芯串联的锂电池作为供电电池,这种电池额定电压为7.4V,在满电状态下最高不超过8.4V。因此必须使用降压电路,将电源电压降到3.3V才能正常驱动MCU和其他绝大部分外设,模块。事实上,考虑到一些外设需要5V供电加之5V也是常用的逻辑电平,我们常用的方案是将电源电压先降到5V,再从5V降到3.3V。

image.png

▲ 图3.2.1 SY8089,SY8113的电路3D仿真

  我组在两种常见的降压芯片类型,LDO和DC-DC之中选择DC-DC作为供电方案。

  LDO最大的优点是非常好用,1VIN,1VOUT和1GND三个引脚即可使用,几乎不会坏。但是LDO本质上还是线性稳压器,举个例子用5V转3.3V的LDO AMS1117-3.3,输出1A电流需要输入1A电流,也就是有1.7W的功率热耗散了。这就意味这LDO的输入输出压差不能太大,负载也不能很多。

  DC-DC,简而言之,就是开关电源,我们日常使用的充电器95%都用到了DC-DC电路。如果说LDO的降压方式类似于一个滑动变阻器的话,DCDC的降压方式类似与快速开关电源输入来达到预定的电压。这决定了DC-DC的效率一般可以超过90%。

3.2.2 DC-DC芯片选择(本方案选用)

  DC-DC的降压芯片选用在各种高端ARM的Reference Design中出现的矽力杰同步降压芯片SY8113和SY8089,这两款芯片目前在市面上使用广泛,且能找到各种廉价的PIN to PIN替代品。

3.2.3 供电电路的设计

  为了实现稳定供电并且最大限度滤除DC-DC带来的纹波,我组在参考了厂商的Reference Design的基础上进一步优化供电电路,如使用固态电容滤除杂波。最小化电流环与负反馈通路,减小对其他电路的干扰。SY8113与SY8089降压电路图如下:

image.png

3.3 主控板电路设计与实现

  智能车的主板是承载了MCU的最小系统,各种常用的板载外设,外设接口以及设备供电电路。作为一个复杂系统工程的硬件核心,主板可以说是智能车一切的基础。主板的设计,我们采用分而治之的策略,即将各种功能电路高度解耦,保证每一部分的正常工作,便可以得到一个完整主板。

image.png

▲ 图3.3.1 主控板PCB 3D渲染图

  以下是本方案的大致框架图,其中TC264D右侧的为板载外设,下方的均为通过2.54mm HDR接口与其他各种设备连接。电源方面,方案采用了串级DC-DC降压方案,提供稳定,高效率的5V/3.3V供电。

image.png

▲ 图3.3.2 主控板方案简图

3.3.1 TC264D的供电输入与核心电压配置

  TC264D是英飞凌AURIX系列嵌入式芯片中典型的一款,片上集成两个核心。AURIX系列芯片主要是面向汽车电子的各种控制类应用,集成了各种各样的复杂功能,因此对TC264D的供电,也不能想一般芯片那样,一正一负就可以正常工作。

  TC264D的供电主要分为3类,第一类是支持5V-3.3V宽电压输入的,比如说IO的供电和ADC的电源,第二类是只支持3.3V电压输入,在芯片中主要负责给Flash供电,最后是核心的1.3V电压,这与电脑CPU的供电类似,需要精确且高效的供电支持。

image.png

▲ 图3.3.3 TC264D 的电源

  TC264D内部集成了5V降压到3.3V的LDO和3.3V到1.3V的电路,理论上来说,只需要单独5V供电即可点亮芯片,但实际上为了稳定,我们通常使用3.3V供电+1.3V开关电源输入的方式为芯片提供电力。

image.png

▲ 图3.3.4 SMSP模式为TC264D提供1.3V核心电压

  TC264D内部还支持多种方式产生1.3V的核心电压,这里主要分为LDO和SMSP模式,正好对应了上文提到的两种降压方式。在本方案中,我们使用了较为稳定的SMSP模式产生1.3V电压,并使用了英飞凌的BSL215C P+N MOS管芯片作为上下管。

3.3.2 TC264D与主控板外设的连接

  TC264D的引脚大致可以分为,电源引脚(VCC,VSS等),功能引脚(如晶振,复位,JTAG等),IO(可以直接指定高低电平,也可以做片上外设输出),模拟输入引脚(默认作VADC的输入引脚)这四类。

  因为TC264D的应用场景是汽车电子,芯片内部大部分片上外设可以认为是面向功能的,这就导致了其片上外设经常将不同功能器件比如定时器,ADC等封装成一个外设。所以我们在后续编程的过程中,很重要的一步是将这些外设配置成我们希望的功能。

image.png

▲ 图3.3.5 主控板外设接口引脚与TC264D连接简表

3.4 驱动电路设计与实现

  为了使我们的系统拥有澎湃的动力,正确驱动电机必须要放在首位。就以竞赛中常见的380有刷电机举例,经我们实测,其稳定运行的电流在0.6A左右,而堵转时电流可以达到惊人的16A。如果直接用MCU的GPIO直接控制电机,无异于蚍蜉撼大树。因此,在智能车竞赛中,我们通常将功率输出与逻辑控制分离,使用一块和主板分立的电机驱动板来单独驱动电机。

3.4.1 智能有刷电机驱动芯片

  DRV8701芯片是TI公司在2015年发布的智能全桥驱动芯片,可以驱动4片外置的N-MOS组成的H桥,还支持多种逻辑控制方案,栅极驱动电流配置,限制堵转电流,3.3V/4.8V的LDO输出。

image.png

▲ 图3.4.1 DRV8701性能参数表

3.4.2 桥臂mos管选型

  下表列举了三种容易买到的贴片mos管,在驱动能力方面,都可以满足竞赛需要,可以根据具体需求,如厂家限制,封装选择,驱动板面积等可自行选择,最终我组选择TPH1R403NL作为实装的驱动mos管。

image.png

▲ 图3.4.2 MOS管选型

3.4.3 DRV8701外围电路设计

  使用DRV8701驱动有刷电机需要对参考电压与电机电流进行限制,如下式:

  其中A_V是芯片内部放大器的放大系数,等于20V/V,V_off=0.05V,所以一般取0.02Ω,即可实现10A左右的电流控制。

  如此,DRV8701便可以被我们完美的使用起来了。在本方案中,实际上未使用电流限制,以便达到最大驱动电流。参考设计如下:

image.png

▲ 图3.4.3 DRV8701设计全桥驱动电路

04 软件设计

4.1 系统软件框架

  对于一个多任务的,涉及运动平衡、图像处理、存储等功能的复杂系统,良好健康的软件框架尤其重要。

4.1.1 4-Layers架构

  因为本项目的相关功能代码从嵌入式底层到实时操作系统均有涉及,跨度较大。因此,我组将工程代码抽象为4层:

Hardware(硬件层)→Peripheral(外设层)→Algorithm(算法层)→Thread(线程层)

image.png

▲ 图4.1.1 系统层次简图

  • Hardware Layer与Infineon的iLLD库耦合,负责对MCU的各类片上外设进行配置并抽象出通信接口。
  • Peripheral Layer通过Hardware Layer访问系统的外设模块如SD卡、IMU等,根据各个模块的具体功能抽象出接口给算法使用。
  • Algorithm Layer依靠Peripheral Layer提供的数据进行相关算法处理比如Kalman Filter、Image Process等
  • Thread Layer则是按照RTOS的逻辑将各类算法,外设操作按照线程分类、组织,并最终构建系统。

4.2 实时操作系统RT-Thread

4.2.1 移植RT-Thread到Aurix MCU

  RT-Thread是当前热门的国产RTOS,版权属于上海睿赛德电子科技有限公司,于2006 年1月首次发布,初始版本号为0.1.0,经过10来年的发展,如今主版本号已经升级到3.0,累计开发者达到数百万。

  为了在TC264D上使用RT-Thread,就必须进行移植,尤其是线程切换等设计内核操作的函数。而TriCore 提供了一种硬件的上下文机制,这种机制是专为嵌入式实时操作系统设计的,目的就是为了能提高线程切换的效率。

  因此,我们借助厂商的支持,在TC264D的CPU0内使用了RT-Thread进行线程管理,而CPU1作为协处理器进行异步的图像处理操作。

4.2.2 RT-Thread在项目中的调度

  在本项目中,我组主要使用了RT-Thread的动态线程与信号量功能。在所有片上,片外外设初始化完毕后,系统创建若干线程,交由RT-Thread进行调度。

image.png

▲ 图4.2.1 RT-Thread系统线程调度示意图

  Thread Balance负责车辆的姿态解算、平衡控制与其他各类运动学控制。系统接收到由IMU ICM20602发出的125Hz中断信号即发出信号量将Thread Balance添加到就绪队列进行运动学处理与控制。

  Thread Camera主要接收来自协处理器CPU1处理、提取完成的图像信息,进而进行方向控制。同时在也查询接收按键信号量来进行拍摄任务。

  Thread Key 负责对系统的8个按键开关进行扫描,只要检测到按键从release跳转到press或者long press状态就发送对应的信号量供其他线程接收。

  Thread Life 负责对系统状态进行监测,若系统长时间无法切入Life线程,则发出提示信号,是调试代码时,检验系统稳定性的保障。

image.png

▲ 图4.2.2 系统运行时检测画面

05 控制原理

5.1 总述

  本项目在竞赛要求的基础上,搭建一个可保持自平衡,具有环境感知能力并且能够在保持稳定的系统。其中系统的自稳定最为关键。我组使用动量轮与控制前轮方向的舵机作为协同平衡控制器,icm20602为陀螺仪和加速度计的硬件架构。软件控制算法为PID控制,使用了串级PID、增量式PID、积分分离等手段。对于传感器测量的源数据则采用了Kalman Filter和滑动滤波来得到控制的反馈量。系统的平衡算法,先后经过MATLAB系统仿真与实机调试验证,具有较好的性能。

5.2 硬件传感器设计

  要保持平衡就需要获取车身的状态,包括车身角度、车身角速度。在此我组使用ICM20602作为实装IMU。ICM20602是新一代MEMS IMU具有极小的零漂与封装尺寸。仅需使用一个模块就可以完成对两个量的测量。同时,ICM20602支持的通信端口包括I2C和10MHz的高速SPI,完全适用于单车的平衡控制。

image.png

▲ 图5.2.1 ICM20602内部结构图

  对于动量轮的控制,除了使用合适的驱动来控制电机还需要安装编码器来实时测量动量轮的转速,使其向我们的目标转速(0rad/min)趋近。在此我们使用的是1024线正交编码器。实际使用只要4根线电源、地、A相、B相。由于动量轮的转速变换范围较大,如果使用96线或更小的编码器会导致在低转时量化误差较大。1024线时在经济和性能考虑下较为合适的选择。

5.3 自行车运动学建模与仿真

  对自行车平衡控制,需要对系统进行建模来分析系统的各类性能。为了建模的方便,我们将自行车的车身近似为刚体处理,动量轮为偏移车身重心的提供动量的刚体。于是,我们化用倒立摆系统对自行车的运动学进行分析。

5.3.1 简化系统的建模分析

  我们常见的倒立摆或单摆系统如图一所示。若要对其进行控制,需要在转轴出基于摆杆一个力矩,如下图:

image.png

▲ 图5.3.1 倒立摆系统模型示意图

  对于此系统利用牛顿运动定理和简单的线性化即可得到系统对于的状态空间方程:

image.png

  但对于我们的单车模型来说,虽然也可近似为一个倒立摆模型,但其控制输入量来源于动量轮,而非转轴支点处的力矩简化如图二。这极大的增加了系统的复杂程度。

image.png

▲ 图5.3.2 基于飞轮的倒立摆系统

  利用拉格朗日方程推导运动学方程:

image.png

image.png

5.3.2 倒立摆系统的SIMULINK仿真

  由上面的系统状态方程我们可以在SIMULINK中建立如下系统:

image.png

▲ 图5.3.3 倒立摆系统的SIMULINK仿真结构

  或者也可以建立物理模型进行仿真:

image.png

▲ 图5.3.4 系统物理仿真框图

  为了与实际状态更加相似,在物理模型中添加了一个配重块,使摆杆的平衡角度不在竖直状态。此时模拟的飞轮倒立摆系统仿真如下图:

image.png

▲ 图5.3.5 运动仿真系统3D模型

  如此,可以建立其作为被控对象的子系统,在创建一个控制部分的子系统即可完成控制:

image.png

▲ 图5.3.6 动量轮倒立摆仿真控制模型

  但实际上,此时电机的转速是在一直增加的,由此利用电机转速可以增加并连一条PID控制,保持电机转速维持在较低的值。但此时,就无法保证达到任意的设定值了,倒立摆倾向于在临界稳定角度附近摆动。摆角响应曲线如下图:

image.png

▲ 图5.3.7 摆杆角度变化(时间单位s)

5.4 姿态传感器数据获取与卡尔曼滤波

  虽然,上文提到的ICM20602 IMU和1024线编码器可以得到我们需要的数据。但直接由传感器获得的数据往往具有很多噪音,需要进行滤波处理。

  对于编码器数据可以采用滑动滤波,这相当于一个低通滤波。由于微分对突变量十分敏感故滑动滤波可以在一定程度上消减突变的干扰。

  对于车辆倾角测量,icm20602可以得到实时的角速度与倾角。由角速度积分可以得到倾斜角度,但其具有误差累积的特性。而加速度计可以直接解算出倾角,但其受多方影响,十分敏感,数值跳动剧烈。所以需要利用卡尔曼滤波得到更逼近真实值的倾角估计。

5.4.1 卡尔曼滤波理论分析

image.png

▲ 图5.4.1 基于协方差的最优估计算法

  卡尔曼滤波简单来说只有五个公式:

image.png

5.4.2 IMU的建模与应用卡尔曼滤波

image.png

  融合后的波形大致如图八所示,其中红色的就是加速度解算出的角度,可以看到其在角度变换时有较大峰值,而紫线是滤波后的波形,跟随灵敏且无超调。

image.png

▲ 图5.4.2 卡尔曼滤波前后实测数据波形
紫色为Kalman Filter,红色为 Raw

5.5 PID平衡控制算法

  PID的控制对象是动量轮,其接收icm20602和编码器的反馈将单车角度稳定在目标倾角。在此,采用串级PID控制,角度环作内环,而速度环作为外环。也就是说速度环的输出是角度环的输入,直观理解速度环江改变设定的目标角度,从而达到自适应平衡的目标。在此速度环采用了增量式PID,其输出叠加在我们预先设定的目标角度上。如此在保证平衡的前提下,使动量轮的速度趋近于0,如此更有利于单车的动态控制。

5.5.1 传统分立式PID控制

  直立车传统控制系统下所示。为使其具有速度控制与姿态平衡能力,利用2个单独的闭环分别进行控制,输出电机控制信号为各环输出的叠加。该控制方案虽简单但存在一定问题,如:仅单独施加直立控制,其车身平衡效果虽能满足要求,但此时如果在该基础上额外施加速度控制,速度控制势必会打破直立车的平衡姿态,使得速度与直立控制互相耦合,此时如果再施加转向控制,就会导致高速时转向控制实时性和姿态的平衡性欠佳。

image.png

▲ 图5.5.1 传统的角度PID与速度PID分离的控制结构

5.5.2 串级PID控制算法

  而串级的PID控制系统如图5.12所示,速度控制车模的行驶姿态和动量轮速度。在速度闭环中,速度PID 计算输出的值为单车在机械零点角需要左倾或者右仰的角度,该输出值需与机械零点角相加才能将速度控制转化为角度控制,而角度的变化是要由角速度产生的俯仰角度PID 计算输出值为单车需要保持的角速度,倾斜角角速度PID 计算结果即为串级的输出值

  单车平衡控制使用串级PID,外环角度,内环角速度,只需要通过姿态传感器采集一个轴的数据即可。根据串级PID控制理论,外环(速度环)的控制周期需要略小于内环,在此内环角度环的控制频率设为与传感器采样频率一致(125Hz)。另外,外环输出传递给内环之前,先加一个限幅防止异常突变数据的干扰,实测效果非常稳定,不会震荡,也不会出现明显的反应滞后。速度控制和平衡控制,转化为角度的控制,整个控制系统中仅仅有角度环的输出给电机控制,原理上可以有效地消除传统速度PID 与直立平衡PID 并联所产生的耦合。

image.png

▲ 图5.5.2 串激PID系统框图

  当系统受到多级噪声时,内环会先进行调整,再由外环进行调整,所以控制的精度和稳定性都优于单极PID控制[2]。通过实际小车运行状态来看,如图十一所示。传统算法围绕中线产生了较大过调;串级PID算法过调明显较小,且跟随能力远强于传统算法,可以看出常规PID 的稳定时间比串级控制短。串级PID控制器比常规PID 控制系统具响应迅速,稳定性高等优点[3]。

image.png

▲ 图5.5.3 串激PID与常规PID控制效果

06 图像处理

6.1 总体思路

  在本项目中我们通过MT9V032 摄像头进行图像采集,在软件上通过图像处理识别黑线,并进行相应的速度控制以及速度反馈。总体目的是为了控制车模在既定规则前提下,以最快的速度,跑完整个赛道。不论上哪种方案,软件的总体框架总是相似的,我们追求的就是稳定至上,兼顾速度。

  以下是我组关于图像处理方案的框图。整体步骤可以概况为①灰度图像二值化②八邻域法搜索边线③提取边线拐点④赛道元素分析这几步。

image.png

▲ 图6.1.1 图像处理方案

6.2 灰度图像处理

  通过MT9V032 摄像头我们得到了120*80大小的灰度图像,而处理图像的第一步就是处理灰度图像,主要有以下几种思路实现:

6.2.1 固定阈值法

  二值化图像算法中最为基础的算法,即通过给定一个阈值,将每个像素点与之进行比较,从而确定出来这个像素点是黑或白,之后的图像处理就使用这个二值化后的数组进行处理。

  这种方法在图像处理的过程中仅需遍历一次图像,处理速度极快。但其对于光线的鲁棒性较低,在实际的运行过程中,会由于光线不均匀使得设定的单一阈值在每段赛道的效果层次不齐。

image.png

▲ 图6.2.1 原始灰度图与固定阈值二值化

6.2.2 OTSU二值化

  OTSU算法是由日本学者OTSU于1979年提出的一种对图像进行二值化的高效算法。利用最大类间方差将原图像分成前景,背景两个图像。

image.png

▲ 图6.2.2 OTSU算法需要分析图像的直方图寻找阈值

  OTSU算法实现的伪代码如下:
image.png

▲ 图6.2.3 OTSU的伪代码

  OTSU算法实现简单,当目标与背景的面积相差不大时,能够有效地对图像进行分割。但是当图像中的目标与背景的面积相差很大时,表现为直方图没有明显的双峰,或者两个峰的大小相差很大,分割效果不佳,或者目标与背景的灰度有较大的重叠时也不能准确的将目标与背景分开。同时该方法忽略了图像的空间信息,将图像的灰度分布作为分割图像的依据,对噪声也相当敏感。

image.png

▲ 图6.2.4 原灰度图与OTSU二值化图像

6.2.3 Sobel动态阈值二值化

  Sobel算子为边缘检测的手段之一,通过对图片进行卷积,得到当前像素在四个方向上的梯度信息,在梯度变化明显的区间图像会出现很明显的高值,因此能够检测出完整的边沿。

image.png

▲ 图6.2.5 Sobel算子卷积

  因为每个像素位置处的二值化阈值是由其周围邻域像素的分布来决定的,同亮度、对比度、纹理的局部图像区域将会拥有相对应的局部二值化阈值,所以Sobel算子适合处理光照不均的图像。唯一的缺点是,其需要进行大量的运算,平均一帧需要处理20~30ms。

image.png

▲ 图6.2.6 原灰度图与Sobe了边缘检测图像

6.3 八邻域跟踪算法

  在本项目中,我们主要采用八邻域跟踪算法实现巡线。

image.png

▲ 图6.3.1 八邻域搜索流程

image.png

▲ 图6.3.2 原始二值化图像与八邻域发得到的边线图

  可以看到通过八邻域搜线能够完整保留边界信息,得到每一段边线的所有像素,有了这个可靠基础,我们下一步进行拐点的搜寻。

6.4 拐点搜索

  在拐点搜索上,我们采用比较基础的平面几何思想来进行求解,在上一阶段,我们获取了赛道的各段边线以及起始终止点信息,通过连接每段边线的起始终止点,我们计算该段边线中距离这条直线距离最大的点,即为该段边线的拐点。

image.png

▲ 图6.4.1 拐点搜索

6.5 路径拟合与赛道元素判别

6.5.1 十字路口元素

  ①十字前

  正入十字情况下,连接十字的左右前后拐点进行补线。

image.png

▲ 图6.5.1 原始二值图像与补线之后的图像

  ②十字中

  十字中段,找到两个后拐点,并利用最小二乘法向前拉线。

image.png

▲ 图6.5.2 原始二值图像与补线之后的图像

  ③斜入十字

  在进入十字中,存在不是以正常角度进入的情况,即斜入十字,在这种情况下,找到一个后拐点以及另一边的前后拐带进行补线。

image.png

▲ 图6.5.3 原始二值图像与补线之后的图像

6.5.2 环岛元素

  ①入环前

  当识别到一边为直线,另一边出现了前后两个拐点时,进行环岛前补线。

image.png

▲ 图6.5.4 原始二值图像与补线之后的图像

  ②入环中

  在环内直接按照基本巡线思路进行巡线。

image.png

▲ 图6.5.5 原始二值图像与补线之后的图像

6.5.3 小弯道

  当存在边线值方差相差不大时,判定为小弯道,进行最小二乘拟合。

image.png

▲ 图6.5.6 原始二值图像与补线之后的图像

07程序调试

7.1 上位机调试软件简介

  在拥有较完善的硬件配置和软件系统后,我们需要对现场调试中涉及的大量参数进行软硬件联合调试,而这个过程需要一整套的开发调试工具以确定这些参数的最优组合。

  为此,我们团队自主开发了一套功能较完备的上位机软件用于图像二值化、赛道边线的调试,并且能够实时监测智能车在赛道上的运行状态。

image.png

▲ 图7.1.1 上位机主界面

image.png

▲ 图7.1.2 上位机二值化调试主界面

image.png

▲ 图7.1.3 上位机边线调试主界面

image.png

▲ 图7.1.4 上位机运行检测主界面

7.2 离线SD卡数据分析

  因为摄像头车模所需处理的信息量非常大,在调试过程中往往需要存储这些信息以供研究分析,而TC264的存储空间远不能满足我们的要求。所以我们设计了外部 SD 卡来存储海量信息,这让我们在图像处理上有很多的发挥空间。

  通过 SD卡,我们存下了我们需要的图像信息和处理之后的信息,然后通过串口发送给上位机,这样我们就可以方便地分析出图像上的各种问题,以便在程序上做出修改。

7.3 上位机运行模式

  • 仿真模式:由于图像处理越来越复杂,对于图像仿真越来越重要,在PC 端我们可以直接将单片机代码导入,查看图像处理结果。
  • 离线模式:小车的实际图像反馈对于调车非常重要,利用 SD 卡将小车行进中的图像以及处理信息保存,上传到上位机,以便利用视频随时随地调试。
  • 在线模式:为了提高调试效率,特别为上位机做了在线调试系统,即串口实时传输图像到上位机,能够在线直接通过上位机对其中的参数进行调节,极大的节约时间消耗。
  • 参数保存:上位机可以直接通过Ctrl+s保存当前调节的参数至txt中。

08 功能测试

8.1 静态平衡性能分析

  将车模放置于静止无风的桌面上。开启电源,自检完成后系统便开始工作。由于自稳定开始工作之前,车模实际倾角与机械零位存在较大偏差,舵机与动量轮同时工作维持平衡测量,记录车模从开始工作到平衡的一系列数据,分析如下:

image.png

▲ 图8.1.1 系统静止平衡状态

image.png

▲ 图8.1.2 舵机与动量轮协同控制折线图

  可见,在最初开始工作的1秒,为了将车身角度控制到机械零位,舵机与动量轮同时工作,输出了较大的控制量。同时可以发现,舵机控制量与动量轮控制量在输出形式上是基本互补的。

  当车身姿态稳定之后,动量轮速度缓慢下降,最终以静止的姿态达到平衡。

image.png

▲ 图8.1.3 车身姿态角曲线

  同时,也可以发现,车身在静止后的一段时间出现了姿态的波动,这是由于串级PID中速度环的K_i较小导致的。实际使用中,较大的积分值能够在高动态的环境下较好地工作,因此对静态的系统性能有一定程度上的影响。

09 结  论

9.1 智能车主要技术参数

  本次设计开发的Infineon Aurix平台的自平衡自行车系统,以Infineon Tricore架构的TC264D双核MCU为主控,搭载RT-thread实时操作系统。成功地验证并实现Kalman Filter-串级PID算法。在动量轮-舵机协同控制下的实现了车身自平衡功能。

image.png

▲ 图9.1.1 车模参数简表

9.2 不足与改进

  我们自身还是存在一些不足。例如,准备初始阶段,由于自身知识积累不够,我们遇到很多困难,走了不少弯路,也犯了不少错误。我们在系统建模与仿真方面的能力还是略显不足。但我们在不断学习中、在实践中熟练操作 MATLAB,逐渐对建模、仿真等有了进一步的了解。

  由于上海市和同济大学疫情防控要求,在本学期后阶段嘉定校区实施足不出宿舍等形式的封闭管理,项目开发不幸陷入停滞状态。原本对车模的3D建模,异型PCB,无刷电机驱动控制等更进一步的功能开发,甚至完整赛道运行调试均无法正常进行。希望能在未来,使用机理建模的方法,采用主流的先进控制方法如LQR、MPC等等。

9.3 致谢

  由于上海市疫情,在本学期后阶段项目开发不幸陷入一连数月的停滞状态。原本对车模的3D建模,异型PCB,无刷电机驱动控制等更进一步的功能开发,甚至完整赛道运行调试均无法正常进行。所幸,在学院和指导老师的大力支持下,我们积极应对现状,通过线上渠道进行沟通,在家附近租用场地进行调试,在临近比赛前几天,我们更是在宾馆中夜以继日的赶进度。在这个过程中,是队员的齐心协力,攻坚克难,才让小车从开始的颤颤巍巍到如今的坚强屹立。

  在本文结束之际,特向同济大学智能车及机器人竞赛实验室的全体参赛队员、助管学长、指导老师以及所有给予我们帮助、建议和意见的朋友表示衷心的感谢!而这个过程中,离不开老师,学长和同学的帮助。也向筹备华东赛区和全国总决赛的南京信息工程大学表示感谢。感谢张志明、徐和根老师的教导和支持,感谢助管学长方少腾、韩子奇、曾宪坤、赵师兵、冯翊的无私帮助,感谢实验室同学的相互支持和帮助。最后要感谢实验室的队友,道路是坎坷的,感谢大家的彼此陪伴和支持,一路走到了最后。我们一直相信,是团队协作的一个个夜晚,是遇到bug的一次次思考,是赛场调试的一场场分析,才最终造就了智行·YYYDS!正如我们队伍的logo,只有三人彼此支撑,才能屹立不倒,做彼此的YYDS!

作者:TsinghuaJoking
文章来源:同济大学单车组
欢迎大家点赞留言,更多Arm技术文章动态请关注极术社区IC比赛技术方案专栏欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
18030
内容数
129
基于Arm技术竞赛作品的分享,欢迎交流~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息