# 白塔岭 143 技术报告 （第十九届）

## 引言

>在引言部分，对于智能汽车制作情况进行概述，对于相关联的文献进行综述。阐明后面报告内容框架安排。

### 智能车大赛背景

 为了加强学生实践、创新能力和培养学生团队精神，从2006年开始，由教育部高等教育司委托高等学校自动化类教学指导委员会举办全国大学生智能车竞赛。在继承和总结前十八届比赛实践的基础上，竞赛组委会拓展新的竞赛内涵，设计新的竞赛内容，创造新的比赛模式，在第十九届比赛中开设气垫组赛道，进一步激发大学生的想象力和创造力。

### 气垫组比赛规则

气垫组比赛赛道为白色平整PVC材料，边缘由黑色电工胶带固定到蓝色背景布，四周有深色挡板以屏蔽环境的影响。赛道包含直线赛道、曲线弯道、交叉路口、环岛、路障五种赛道元素，车模需要从赛道起跑线出发，绕行赛道一周后，返回到起跑线。气垫组允许车模冲出赛道，但不允许在弯道内侧冲出赛道抄近道行进。

  气垫组要求参赛队伍自行制作气垫船，运行过程中分别使用两组风扇，分别提供车模垂直方向的悬浮力以及水平运动的推力，不允许依靠改变车模姿态将悬浮力转换成水平推动力，也不允许车模有轮子对车模产生支撑和推动作用力。

  气垫组对传感器没有限制，但要求必须只使用STC（专科）或WCH的RISC-V架构（本科）的微控制器进行信息处理和控制。

### 本文结构

本文将从硬件电路、机械结构、软件代码三个部分介绍参赛作品的设计思路和计数细节。

## 车模整体设计思路

## 硬件设计

> 稳定且可靠的硬件是保证车模正常运行的关键。根据上文提出的设计要求，硬件设计的主要工作量为运动控制主控、图像处理主控以及无刷电机调速器三个部分，最终车模主要保留该部分共四款电路版。

硬件设计上，主要考虑到对后续改进的兼容性要求以及对易损部件的快速替换要求，将主要电路分为了多个模块。

在车模设计初期，运动控制和图像处理采用单片 CH32V307VCT6 主控，但是由于单片机 RAM 容量较小（准确来说是对于图像处理任务较小），所以对于采集的图像大小限制较大，无论是采样图像中部区域还是采用棋盘采样，都会或多或少的损失一定的图像信息。本着“宁在硬件上折腾，不在软件上妥协”的观念（不过主要是该主控外围简单并且价格尚可），将图像处理和运动控制部分在硬件上分离，交由两个主控处理。

在双主控的通信上，由于设计上两个主控并不在同一板中，所以需要考虑能满足图像处理和控制速率的板间通讯方式。此外考虑到传输线邻近有电机等干扰源，所以对传输的可靠性有一定要求。综合下来，基于 485 标准的串口通讯和 CAN 接口成为首选考虑。理论上在实现上 CAN 由于规定了底层的帧协议，所以实际上实现功能更简单，不过彼时由于对 CAN 配置不甚了解，所以选择了平时使用更多的基于 485 的串口通信方式。

对于图像处理主控，硬件上主要确定了显示屏、五向按键、EEPROM、摄像头接口、485 收发器、和主控及外围电路几个部分。为了避免摄像头的并口和数据传输收到外来信号干扰，尽量减少了 fpc 排线的长度，并且在走线上保持一定间隔，减少信号间的耦合（该速率下基本上只需要尽量避免被功率部分干扰即可，传输等长和传输线阻抗等影响较小，但还是尽量减少线长，降低信号衰减）。另外因为是点对点通信，不需要考虑网络中节点失效以及线路负载的问题，所以采用了自动换向的 485 收发电路。使用该电路需要注意通信频率不能过高，否则三极管切换速率不足，会导致边沿过于平缓或者不完整。由于仅是短距离板间通讯，所以没有添加负载电阻和额外的保护电路。

对于运动控制主控，最终使用的版本由于是在省赛前赶工绘制的，所以存在一些错误和纰漏。设计考虑到需要使用四路有刷电机作为推进和提供向心力的动力。为了节省船内空间以及满足快速更换的需求，采用了板间对插的安装形式，两块完全一致的有刷驱动可以直接插在主控板上，损坏后可以快速更换，不需要任何焊接和额外接线。但是由于后续采用全无刷的方案，主控板较大的面积实际上有些多余，但是为了稳定没有使用专为全无刷方案设计的主控（其实是太懒不想布线）。主控板的电路设计没有特别需要关注的，电源采用了 tps562201 + xc6206 的方案，主要是出于转换效率和看起来有些多余的成本考量（学校给报销，而且对于非量产设计来说，省几毛钱没多大意义），另外优信电子没有特别好的国产同步降压芯片卖，矽力杰的芯片是拒绝的。

无刷驱动主要有两版，初版是最初为了驱动底部风扇所采用的小型化设计，尺寸大致为 20 * 30mm，选用 DFN-8 3x3 封装的 NMOS 搭建三相半桥。后续用于推进和侧向电机驱动是，发现由于加减速频繁导致发热较大，而该封装的散热性能要差于 5x6 的封装，导致其由于温升内阻上升较快，发热较多，有一定使用风险。

第三版无刷驱动在硬件设计上考虑了对于[逐飞开源项目](https://gitee.com/seekfree/CH32V203_BLDC_Project)和[基于 CH32V203 的 AM32 移植工程](https://github.com/TianpeiLee/CH32V203_ESC)的兼容性。经过对比发现两者仅在信号输入引脚存在差异，分别使用了 PA0 和 PA15，在代码上只需修改重映射设置即可。

无刷驱动的供电方面，由于供电电压确定仅支持 3s 以下电池，且预驱驱动电源部分直接从电池输入引入，所以仅需为主控供电。综合体积和成本考虑，采用了 7805 + 6206 的稳压器方案，约能提供 0.5W 的功率，满足主控供电需求。

在主控和其外围电路方面。主控选择了 C8U6 型号，其 QFN-48 的封装更小，并且对于同系列里的其他封装来说，仍保留了单独的外部晶振引脚（而不是和其他引脚合封）。在无刷 v2 版本的设计中，仍采用主控内部晶振作为时钟源，调试中可见漂移程度较大（明显现象是脉宽捕获不准确）。所以 v3 版本中添加了 16MHz 的外部晶振，并在 AM32 的移植版本中配置使用。

![bldc_driver_v3](bldc_driver_v3_page-0001.jpg)

## 结构设计

结构设计上由于是自制车模，所以做过较多的验证版本，最后选择“逐飞版本”算是对于稳定性考量较多。

由于和赛道是面接触，切向和法向全部是滑动摩擦，所以车辆行进速度较快时仅由摩擦力提供的向心力并不足够，按照“逐飞方案”，直接由侧向风扇提供向心力就显得简单粗暴，控制上可以比较直接，根据曲率大小调整风扇转速即可。而转向方面，依靠后侧推进风扇产生的力矩进行运动，增大力臂能有效增大转向力矩，这也是在电机性能有限时提升转向效率的最简单方式。在满足避障的要求下，可以尽量外移。

对于气垫而言，我们最开始的结构采用了浮动侧裙的方案，出风口的
硬质框架浮动且因重力贴于地面，该方案的在地面不平时由于硬质框架为整体，很容易出现测漏的情况。后期采用了“逐飞方案”中使用气垫裙本身产生一个柔性密闭环境的方式，通过调整活动裙身的高度，可以得到较好的密封和通过性能。

此外对于气垫风扇，设计上有一定的考量。

气垫盒主要设计中，我们认为需要保证盒内有足够的静压以支撑气垫，主要对鼓风风扇罩和箱体结构进行了优化设计。

鼓风风扇罩设计上使用了下图所示的结构，其风道“先收敛，再扩张”。

![气垫风扇罩](clipboard_2024-08-09_15-51.bmp)
![气垫风扇罩剖视图](clipboard_2024-08-09_15-2.bmp)

理论上这种结构的风道能够产生文氏效应，在收敛段，气流速度增加，静压降低。然而，在扩张段，气流速度减小，静压会相应增加。并且文氏管能够一定程度上引导气流，减少湍流和涡流，从而降低动能损失，使气流均匀流向盒中。但是本设计中的文氏管没有进行准确的设计计算以及仿真过程，仅在实际测试中进行过比较，对比平行风道确实可见明显的效果提升。

在箱体设计中，我们设置了一定数量的导流板，能够将气流引导至箱体的特定区域，从而减少气流直接冲击箱体壁面的情况，减少了能量损失和动压的产生。同时，导流板也减少了气流的湍流和涡流，使气流流动更加平稳。此外，导流板增加了气流的阻力，有助于将更多的动能转化为静压能，从而提高了静压。下图可见所属的五片导流板和隔板（原设计中间并非用整板隔开，而是分为两个短导流板，但后续有对两侧风量动态调整的需求，所以修改成带小孔的整体隔板。

材料上使用桐木制作，除了潮湿环境下会略有变形，其成本上和重量上均优于碳纤维（即使是 2mm 玻纤板也略重于 3mm 厚桐木同规格船体结构）和 FR4 玻纤板，并且桐木可以采用激光切割方式加工，避免了雕刻刀加工内角的刀具半径限制，使得设计和装配更容易。

![船体结构底部视图](clipboard_2024-08-09_16-34.bmp)

## 程序设计

### 运动控制主控程序设计

### 图像处理主控程序设计

图像处理主控主要的任务包括：读取图像、提取图像特征、获得控制参数、数据组包下发、以及一些交互界面的处理。

图像处理手段上，采用了[上海交通大学 AuTop 战队](https://github.com/SJTU-AuTop/RT1064-Code)的开源代码作为基础，裁剪了一些弃用的元素处理和功能，并添加了一些例如曲率计算、障碍判断、出界停车等功能。由于图像处理主控没有其他任务、flash 和 ram 资源比较充沛，所以采集图像大小为 140*90，并且可以再另外存储两个逆透视和畸变矫正变换表（横纵向各一个）。在元素辨识和角度计算上总体思路上未对 AuTop 代码做过多修改，因此不再多表。

### 运动控制主控程序设计

运动控制主控主要是任务是接收图像处理主控下发的图像特征信息（如赛道角度、弯直道、曲率等），然后根据这些信息控制侧面、推进和气垫电机完成船体的运动控制。此外还需要能够对控制参数进行储存、显示和修改。

对于侧面电机的控制，由于侧面电机主要作用是在转弯过程中提供一部分向心力，而赛道元素直接曲率比较平滑、很少存在类似阶跃的情况。所以实际上对响应速度并无较高要求，而是希望侧面电机能够平滑且持续的提供向心力。因此侧面电机将赛道曲率的倒数作为输入，在直线赛道上时曲率半径无穷大，则输入量接近于 0 ，反之亦然，但是可能需要对输入值做一定的重映射，已获得更好的输入曲线（如使用反正切函数进行归一化，使得电机在曲率增加较快的时候也能较快加速到足够提供向心力的程度）。

对于推进电机的控制要稍微复杂，由于推进电机需要同时完成转向和速度控制，而转向反馈量的内环采用陀螺仪的角速度值，这样导致前进速度和转向差速之间的耦合关系较弱，只能将转向和速度作为并级输入。实际上如果能在船体两侧放置两个测速轮，在确定角度和速度时，可以求解出两个测速轮需求的速度值，而后侧风扇仅需跟踪对应的速度即可，将角度值作为外环是输入，不过由于规则限制，只能作罢。而对于并级控制器的设计，主要需要考虑到两个控制器的输出权重问题。我们知道电机的调速范围是有限的，如果速度环输出较大，则两个电机速度值将都很接近上界，而如果同时需要转向时，直接叠加可能会导致速度较快的电机控制量超出限幅值而被截断，最终将导致差速不足，无法转向。对于以较快速度行进的车模来说显然是不利的。所以我们很简单的设定了一套「转向优先」的策略，即当速度环和转向环叠加出现超限时，首先需要保证满足转向环的差速输出，对超限的电机保持上限输出，另一侧则直接从上限减去需求的差速值，这样另一侧会比原有叠加的输出低，保证了转向的优先。当然这一处理仍然不够完善，对后侧两风扇进行分析，其提供的推力可以根据力的平移性质移动到船体质心，同时附加一个力偶，最后两风扇的叠加效果可视作一个向前的推进力和一个力矩。但是对于船体的运动而言，所收到的滑动摩擦力是与运动方向相反的，而推进力却指向船体几何正前方，当船体两力不共线时，会产生一个侧向的分力，这就导致船体运动时会出现一些奇怪的姿态，有时内切有时外切，取决于船体跟踪的状态。当然，这只是对于气垫船的运动进行了一些简单的分析，先入为主的认为船体为刚体且作为单点接触分析，实际情况要复杂很多。

某种意义上来说，采用全向四风扇，能够进行力的矢量控制的构型似乎更合理，但是该结构似乎存在多解问题，仅在初期进行过简单验证。

![早期矢量推进验证船](image.png)