简 介: 本文结合了太原工业学院晋速天槊星队的队员们在准备第十六届智能车大赛中的研究成果。车模为自制车模,核心处理器采用TC264处理器,软件平台为ADS开发环境。本文主要介绍智能小车的机械结构,软硬件结构及设计开发过程。
车模通过OV7725摄像头采集赛道信息,利用信标的红光和红外为导引信号,作为车的引导信号,使用PID控制算法调节电机和小车的运转和转向,实现对车运动速度和运动方向的开环控制。通过大量硬件和软件的测试调整改进验证方案可行。

关键词智能车节能无线充电PID控制

学 校:太原工业学院    
队 伍名称:晋速-天槊星     
参赛队员:魏建军 王文俊 吉新远
带队教师:左义海 苗丽丽    

第一章 引 言


1.1 设计背景

  全国大学生智能汽车大赛是受教育部高等教育司委托,由高等学校自动化专业教学指导委员会负责主办全国大学生智能车竞赛。该项比赛已列入教育部主办的全国五大竞赛之一。自第一届以来,此项大赛已成为各大高校的热点赛事。本届全国大学生智能车大赛全国总决赛将于将于 2021 年 8 月 20 日至 25 日在各个学校采取线上赛的模式举行。全国大学生智能汽车竞赛是以“立足培养、重在参与、鼓励探索、追求卓越”为宗旨,鼓励创新的一项科技竞赛活动。比赛涉及控制、传感技术、电子、计算机、机械等多个学科的专业知识,注重于对学生的知识融合和动手能力的培养,对高等学校控制及汽车电子学科学术水平的提高,具有良好的推动作用。

  本文介绍的是针对节能信标组比赛进行的智能车的设计。单片机选用英飞凌公司提供的 32 位 微控制器 TC264 作为核心控制单元,选用 逐飞科技的170°信标组总转风摄像头检测信标灯发出的红外光的方式来识别赛道,并针对本届比赛规则,选择合适的车模结构,设计无线接收模块、传感器排布方式、差速方向控制、电机速度控制等,最终设计出一套能够自主识别路线的智能车控制系统。比赛以准确和速度为主要评判标准,因此,设计主要以准确稳定提取赛道信息 以及快速控制方向和速度为主要设计目的。

1.2 调试问题汇总

  设计主要针对大赛规则以及赛题标准进行。首先,要求自制接收电能模块,通过法拉第电磁感应原理对官方提供的发射线圈发射的电能通过自制的接收模块进行收割,通过自制的超级电容组来进行电能的储存和转换。其次在小车运行过程中能准确检测赛道路径,最后,根据任务提出的要求,对智能车整体系统进行设计,包括机械、硬件电路模块以及软件程序算法的设计。 将上述设计中的主要调试问题汇总如下:

  1. 赛道检测:采用总转风摄像头处理图像。
  2. 调试手段:键盘显示、山外上位机观测、软件开发平台。
  3. 车速控制:全车电机开环控制,通过采集电容组电压,根据电压控制。

1.3 小结

  本章主要介绍了智能车竞赛的背景,本届智能车竞赛主要类别及简单的节能信标组识别赛道和我们在调试过程中遇到和解决的问题。十分感谢这个比赛建立的这个广阔交流的平台,由于经验有限,且时间仓促,所以我们团队在各个方面技术也略显不足,在一年的准备比赛过程中,队员各种找资料、逛论坛、试各种可行车模结构。所有队员都为此次智能汽车竞赛付出了大量的时间。这份报告凝聚着太原工业学院晋速-天槊星全体队员的心血和智慧。可能在撰写技术报告以及智能车的制作中还存在很多问题和错误,欢迎大家批评指正,也希望与大家真诚交流,共同提高!

第二章 智能车总体设计


  智能车作为一个整体系统,包括机械(Mechanics)、硬件(Hardware)、软件(Software)三部分,三部分互相联系,相互影响。总体设计具体介绍如下:

  1. 机械部分:
  由于今年节能信标组依然不允许使用现成的车模,所以我们选择自制车模。经过对比后我们选择了双电机带动的“轮胎车模”方案。决定方案后尝试了各种材质的车底板以及车轮后最终选择3D打印车底板并自制车轮。之后又对车模以及车轮进行多次调整后使车模更加稳定、节能。

  2. 硬件部分:
  节能组除了车模要尽量轻、尽量节能之外,还要求车模状态稳定、充电方案以及充电时间可行。我们车的硬件部分主要由负责处理各种信息的主控板及调参板、负责稳压以及驱动电机的驱动板,放置储能电容的电容板以及接受线圈的电压转接板构成。在各部分的精准要求下使车更加稳定。

  3. 软件部分:
  软件无非就是编写程序,处理各种信息,利用这些信息让车子行驶起来,精准的控制,处理好赛道上出现的问题,尽可能考虑到各种情况,为车子的行驶保驾护航。当然这些都是通过代码控制的,所以要求软件方面有缜密的逻辑结构,便于调试,有较高的容错率。使车的赛道适应性更强。

2.1 智能车机械结构整体设计方案

  机械设计的原则是低功耗以及节能,其要求结构紧凑、连接稳固、减轻重量、合理调整重心,再根据经典的机械原理,对智能车的传动结构、车长、车宽等进行规则允许范围内的调校。具体内容有车模的构造、支架的固定、线圈的固定、传动等,具体内容将在第三章中介绍,最终车模整体如图2.1。

▲ 图2.1 车模整体视图

2.2 智能车硬件电路整体设计方案

  智能车的电路包括:无线接收模块、电源、传感器电路、电机驱动电路以及外围电路。在设计中电路过于复杂无疑是给自己制造困难,何况节能组本身要求简洁,所以在符合要求的前提下提供足够的功能就足矣。因为在赛场上出现硬件问题最为严重所以设计出稳定可靠的电路是重要原则之一。此外需要考虑的就是设计的便捷性,毕竟出问题不是能预测到的,所以方便拆卸也是需要尽量达到的。硬件设计具体见第四章介绍。

2.3 智能车软件整体设计方案

  软件部分的设计主要是对微处理器TC264 的程序编写,通过计算, 对其各个端口进行读写控制,即将摄像头获取的电信号通过单片机端口读入,并经过处理,进行控制算法,最终通过单片机端口输出给硬件电路,对车速、打角等硬件电路进行控制,最终实现对车辆机械部分的控制。

  项目 单位 参数

  • 车模尺寸(长×宽×高) 毫米(mm) 270240230
  • 车模重量(带电容) 克(g) 428
  • 车模轮距 毫米(mm) 175
  • 车模平均电流(匀速行驶) 毫安(mA) ≈1300
  • 电路电容总量 法(F) ≈6.25

  软件的设计原则主要是:效率、结构化、规范、易读。因为软件部分涉及到端口输入输出数据的处理,要对车辆硬件进行控制,因此要提高软件处理的 效率以达到控制的及时性。另外,整个控制环节有紧密的逻辑关系,因此,软件的结构合理和规范化的设计有助于调理逻辑关系,便于修改、调试、扩展及拥有较强的适应能力。程序编写选用 IAR 为编译环境,C 语言为主要程序编写语言。具体软件设计详见第五章的介绍。

  • 2.4 智能车主要技术参数

  智能车主要技术参数包括物理尺寸、电路指标等,具体参数见表 2.1。

  • 摄像头 个 1
  • 电容组容量 法拉(F) 6.25
  • 电容组最高电压 伏特(V) 13.6
  • 核心处理器种类及个数 个 TC2641个

2.5 小结

  智能车的总体设计方案是经过我们多种方案的比较和调试最终确定的。包含了车模设计中大体的硬件设计,软件编程和车模整体性能参数。另外,展示出我们在设计比赛车的整体机械布局。在之后的章节中,我们将对整个系统的各个模块进行详细介绍。

第三章 机械系统的设计


  节能车机械部分设计主要包括制作和调整两部分内容,对我们来说,制作部分即整辆车的设计以及构建,因为并没有现成的车底板适合改装成为节能车模,所以我们整个车底板以及支架的固定、重心的调配以及齿轮的传动到最后轮胎的选择以及制作都是自己设计、并调整出较好状态的,除此之外不得不考虑节能组最重要的问题就是减轻重量、降低能耗。本章就车模的设计、支架的固定、重心的调整、齿轮及其传动、轮胎的制作进行介绍。

3.1 车模机械结构制作部分设计

  第十六届节能组相对机械设计而言创新性更强一些:做一辆摄像头节能信标车,对于我们这种没有做过摄像头节能的学校来说基本上是从零开始,所以说首先我们排除了舵机转向,这是不可行的。其次困扰我们的是采用双驱还是四驱,前者质量会更轻一些,或许在后续的制作中车身也会更短,整体更简洁;后者相对更重,四个电机带动无疑会带来足够多的动力、并且四个电机带动未必比两个电机耗能,但是对空间要求需要大一些。节能车重点还是要轻,所以我们选择了双电机方案。后期经过多次调整,使车模稳定并且节能。

3.1.1车模的选取与底盘设计

  我们选择三轮车模的原因其实很简单:在第十六届比赛细则公布之后我们当即表示先选择一种最稳妥的方案进行调试,如果进行的顺利,在进行别的相对更有难度并且更节能的方案。所以我们首先选择了相对稳妥的采用双驱方案,但之后由于种种原因,所以也只调试了这种方案,也成为了最终方案。

  节能车最主要就是节约能量,所以关键就是要轻,我们采用PLA材料通过 3D打印制作各部分打印件,然后使用碳杆连接起来,节省了很多不必要的连接件,减少了重量,同时在轻的基础上也保证了底盘足够牢固。

3.1.2传感器的选择以及固定

  传感器的固定取决于使用哪种传感器,在比赛细则出来后我们果断选择了纯摄像头有几方面原因:

  (1)比赛赛道上会有蓝罩元素,如果选择了辅助传感器,这样的话从结构上会显得更繁琐,质量也会稍重一些,供电方面也多了一个传感器耗电;

  (2)比赛场上可能会有光照、对于光照的处理我们并没有太大的把握,其他传感器也没有很好的效果,,所以把摄像头上几行参数屏蔽;

  综合以上几点,我们确定了纯摄像头车模方案。

  既然确定了传感器,确定了支架的固定方式,在各方面,包括支架、车底板等的一些东西在保证可以容纳所有硬件部分的前提下尽可能的提高前瞻,而同时又因为支架太长的话,会增加重量,这些重量不只会影响到整车的质量,而且会影响重心导致各方面的耗能,所以在选择支架材料的时候需要选择较轻、较为牢固的材料,最后我们选择碳纤维杆作为支架:足够轻、足够硬、便于设计。

3.2 车模机械结构的设计

3.2.1底盘

  底盘的机械结构是整辆车模的核心,它连接了支架、承接了电机、固定了线圈,同时在满足规则的前提下还要保证整体轻盈、牢固以及合理,所以说车底板不单单是要求轻,在轻的前提下,功能必须要全:电机的固定、支架的固定、线圈的固定等等。

  固定电机我们选择嵌入槽中再用胶加以固定的方法;支架我们固定在车的前方再用两根短的碳杆加以固定;线圈有明确规定不能作为支撑触地,所以我们固定在车的前方离地大约5cm。这样一来质量最大的电机规定在整个系统的中间,前后分别是碳杆支架以及线圈,重心略微靠后,之后通过摆放电路板以及电容的位置来调节即可。

3.3 智能车动力机构调整优化

  经过尝试了大量的 电机,寻求动力与效率的最佳配合,然后在根据实际情况配合齿轮。选定电机后我们尝试了一些齿轮比,最终确定了齿轮比为 1:7 挑好的电机运用效率最好,满足了坡道、颠簸的动力需求。 经过测试,电机是节能车耗能最多的元件,所以节能车需要稳定可靠的电机提供动力,并且电机的能耗不能太大,最后选用了一款体积较小直流电机。直流电机最大的好处就是控制方便,并且硬件电路设计的比较简单。相比于无刷电机,没有复杂的电调电路设计,而且电机的扭力跟转速都满足小车的动力要求。

3.4 智能车重心位置的调整

  为了达到较远前瞻,必须把摄像头架到较前的位置,会引起车重心特别靠前,后轮正压力不足导致甩尾。为了使重心后移,我们尝试了很多传感器支架的搭建方式,使得保证结构稳定的前提下尽量减轻重量。同时,我们把电容、电路板、往后移,最终我们确立了重心略微靠后的方案:一来重心略微靠后会保证车模运行时尽量平稳,不频繁“点头”;其次重心太靠后的话对于我们的处理坡道很不利,所以略微靠后是一个不错的选择,对于普通路以及蓝罩的处理都不会造成太大的起伏。

3.5 其它机械结构的调整

  另外,在模型车的机械结构方面还有很多可以改进的地方,比如说车轴、底盘高度等。由于赛题原因,需要把底盘架高防止卡住,此外由于转向造成的侧滑问题困扰了我们很久,所以我们也想了很多增大摩擦力的方法,最终我们选择对轮子下手,在轮子的表面增添了增大摩擦力的措施。

  最后,我们还对车身减重,以及底盘镂空等,都进行了相应的改 进和调整,均取得了不错效果。

3.6 小结

  摄像头自制车模本身来说就是一个挑战。自制车相比较于其他车模,机械问 题更加明显。比如,车模在运行过程中车体承受力以及缓冲减震的问题,一般都简化省略,可能造成车模在运行过程中比较晃动,姿态很难靠参数及时调整过来。另外,差速,是决定车子是否反应迅速的一个主要因素。所以在保证强度的基础上,保证其轻便。上述的这些机械问题都在一定程度上影响自制模的运行速度,所以在调试中我们就尝试用一些方法改进,尽量避免这些问题,后期车模的运行性能会大大提高。

第四章 硬件系统的设计及实现


  智能车电路部分由最小系统模块、电源模块、无线接收模块、电机驱动模块、传感器模块(摄像头传感器、超级电容电压采集模块)、以及调试模块组成。

4.1 电源和驱动板

4.1.1电源模块

  电源是智能车各个模块能量的来源,电源工作不稳定,整个系统将不能正常工作。节能组采用超级电容放电,根据电容的放点特性:放电成非线性,放电前期较快,而后期较慢,且最终可放电至一个较低的电压。为了使小车正常工作,需要将电容输入的电压转化为5V的电压,这就要求稳压芯片具有较宽的输入范围,且输出电流足以提供系统所需,因此我们经过对多种宽输入范围、较大电流输出的稳压芯片进行了对比,发现TPS63070稳压效果较好,且外围电路简单。故智能车系统用的TPS63070对5V进行稳压。TPS63070可以提供较大的稳压电流,具有较好的稳压性能,且纹波电压较小。设计为采用单路TPS63070对部分外设电路进行5V供电。

▲ 图 4.1.1 TPS63071

3.3V 电源:

  主要为核心主控供电,如果不稳定将会造成主控芯片复位重启、卡死等问题,TPS7333是带集成延时复位功能的低压差稳压器,我们选用TPS7333 单独为主控供电。摄像头传感器,TFT显示屏等用另一块电源芯片供电。

▲ 图4.1.2 3.3V稳压

  驱动电路采用的12V升压电路给驱动芯片供电,使用集成线性升压模块MT3608,该模块的优点是外部电路简单 ,节省空间。

▲ 图 4.1.3 MT3608

4.1.2驱动模块

  电机采用LR7843MOS管搭建的 H 桥电路,控制电机正反转。由 4 个 N 型 MOS 管构成,4 个 MOS 管相当于 4 个开关,采用半桥芯片 IR2104 驱动,IR2104 通过 HO 输出分别控制全桥驱动电路的上半桥 Q1 与 Q3 的导通与关断,而 IR2104 的 LO 输出分别控制全桥驱动电路的下半桥 Q2 与 Q4 的导通与关断 ,从而达到控制电机转速与正反转的目的。

4.2 无线接收模块

  节能组比赛规定发射线圈由组委会提供,接收线圈可由选手自制或者购买成品。发射线圈的频率为150kHZ。
  在制作接收电路的时候,一修改接收线圈串联以及并联的电容将接收LCC谐振频率也调整到150kHz。如果接收线圈没有谐振在150kHz,就会使得接收功率大大降低,同时也会使得电能发送模块输出级出现失谐,进而降低输出级的效率,严重时可能会引起发送模块热保护或者电路烧毁。

  在制作接收线圈谐振回路的时候,需要特别注意高频功率信号所引起的线圈和谐振电容的损耗。接收线圈需要使用多股纱包线进行绕制。谐振电容需要选择NPO高频电容,电容耐压等级需要能够达到谐振电压的2~3倍。耐压值过低,电容会由于过压引起内部短路或者断裂。

  将接收到的高频电压转换成直流电压可以使用倍压整流、或者全波整流,不使用半波整流方式。整流所使用的二极管一般使用大电流的肖特基二极管。在今年充电方案的选择上我们选择了LCC补偿网络外加桥式整流,四个二级管可以更好的收割能量,这样也使得在今年发射器频率低的情况下依然充电如此迅猛的关键所在。

4.3 主板

4.3.1最小系统模块

  最小系统用的是逐飞的TC264成品核心板。

4.3.2 传感器模块

  • 摄像头传感器
      摄像头主要分为数字和模拟两种,数字摄像头主要有 OV7620、OV6620、OV7670、OV7725,模拟摄像头主要有OV5116、BF3003、MT9V136。但是,根据比赛要求,有一定的阳光,为了减小阳光的干扰,我们选择了OV7725外加红外滤光片。

▲ 图 4.3 摄像头原理图

  • 超级电容电压检测模块
      本模块使用高精度电阻分压的方式对超级电容组电压进行测量,根据我们的经验,一般超级电容组的电量是和电压相关的, 比如5串超级电容组满电的时候是 13.5V(理论值),我们有可以通过监控电容组电压的变化,可以进行自动发车,控制速度的作用。

  下面是模块的原理图,简单分析可知,电容组电压经过电阻分压, 衰竭为原来的 1/11 之后,送单片机 ADC 检测,以 8/10/12 位 ADC 的 TC264 举例, Get_Battery 为ADC 采集的变量, 那么很容易计算得到电容的电量
  Battery_Voltage=Get_Battery3.311/4096( 单位: V)

▲ 图4.4电压检测电路

  其中 OUT 引脚可以直接接到单片机的 ADC 引脚采集。

4.3.3调试模块

  • 五轴按键模块

  五轴按键将五个按键集成在一个按键上,操作方便,节省空间。

▲ 图 4.5 五轴按键原理图

  • ips显示模块

  ips显示模块主要用于显示检测信息,设置控制参数。
  ips液晶广泛应用于各类便携式设备,与其它类型的产品相比,具有以下特
  点:全彩2.0寸液晶屏,8位并口;分辨率为240320;体积小巧为47.88MM34.6MM。

▲ 图 4.6 OLED显示屏原理图

  • 拨码开关模块

  拨码开关电路如图所示。拨码开关有四位,每位可以独立开合。SW1~SW4端分别接单片机的I/O端口。当开关闭合时,相应端为低电平。当开关断开时,相应端为高电平。改变拨码开关的开合状态,可以改变单片机I/O端口的值,单片机根据从PTE口读到的值进行相应的操作,从而实现了单片机的控制, 所接I/O端口采用内部上拉。

▲ 图 4.7 四位拨码开关原理图

第五章 软件系统


  软件系统是对传感器等输入设备输入的信息进行处理,然后通过一定算法,得到控制输出,对现有的硬件电路进行调度和控制,从而使智能车按照赛道前进。软件系统要达到的最终目的是让智能车更快更稳的在赛道上行驶,从而真正 达到“智能”。

  下面的内容中,我们着重介绍赛道信息提取、方向差速控制,速度控制等主要部分。

5.1 赛道信息提取

  赛道信息提取部分是最基础的程序,之后的控制程序都源于赛道信息的正确 提取,这部分程序主要包括硬件摄像头初始化和原始数据的读取、原始数据处 理及对数据进行分类三部分。

  首先介绍硬件摄像头初始化和原始数据读取。

  在有关的摄像头初始化方面,我们选择了使用逐飞以及封装好的摄像头初始化程序,并且可以直接进行像素点的像素值读取,然后进行简单的二值化以及灯标搜索,确定灯标出现在图像的哪个位置。

mt9v03x_init ();
GetOSTU(mt9v03x_image);

  获取当前扫描数据后,就要对数据进行处理,提取灯标信息,以便找寻光标。

  • 光标分析:通过光标出现的位置确定其距离车模的远近程度以及在车模哪个方向。
  • 找灯处理:我们为了减少电量消耗并未使用其他传感器,故此不能分辨灯标在车模背后的左右侧,于是规定像一个方向原地转圈到找到灯标为止。

5.2 转向差速控制

5.2.1 PID 控制原理

  PID 控制以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的 主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模 型时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用 PID 控制技术最为方便。

  PID 控制就是根据系统的误差,利用比例§、积分(I)、微分(D)计算出控制 量进行控制的。目前 PID 控制在工业控制系统中无处不见,随着控制效果的要 求不断提高,PID 逐渐向智能化发展,但形形色色的现代控制理论最终还是源自经典 PID 理论。

▲ 图 5.1 PID理论

  PID 解决了自动控制理论所要解决的最基本问题,既系统的稳定性、快速性 和准确性。调节 PID 的参数,可实现在系统稳定的前提下,兼顾系统的带载能 力和抗扰能力,同时,在 PID 调节器中引入积分项,系统增加了一个零积点, 使之成为一阶或一阶以上的系统,这样系统阶跃响应的稳态误差就为零。

  由于自动控制系统被控对象的千差万别,PID 的参数也必须随之变化,以满足系统的性能要求。因此 PID 参数的确定是 PID 控制中重要的部分之一。

  • PID 增量式算法

  离散化公式:

  △u(k)= u(k)- u(k-1)
  △u(k)=Kp[e(k)-e(k-1)]+Kie(k)+Kd[e(k)-2e(k-1)+e(k-2)]

  进一步可以改写成

  △u(k)=Ae(k)-Be(k-1)+Ce(k-2)
  对于增量式算法,可以选择的功能有:

  (1) 滤波的选择

  可以对输入加一个前置滤波器,使得进入控制算法的给定值不突变,而是有一定惯性延迟的缓变量。

  (2) 系统的动态过程加速

  在增量式算法中,比例项与积分项的符号有以下关系:如果被控量继续偏离给定值,则这两项符号相同,而当被控量向给定值方向变化时,则这两项的符号相反。

  由于这一性质,当被控量接近给定值的时候,反号的比例作用阻碍了积分作用,因而避免了积分超调以及随之带来的振荡,这显然是有利于控制的。但如果被控量远未接近给定值,仅刚开始向给定值变化时,由于比例和积分反向,将会减慢控制过程。

为了加快开始的动态过程,我们可以设定一个偏差范围 v,当偏差|e(t)|< β 时,即被控量接近给定值时,就按正常规律调节,而当|e(t)|>= β 时,则不管比例作用为正或为负,都使它向有利于接近给定值的方向调整,即取其值为|e(t)-e(t-1)|,其符号与积分项一致。利用这样的算法,可以加快控制的动态过程。

  (3) PID 增量算法的饱和作用及其抑制

  在 PID 增量算法中,由于执行元件本身是机械或物理的积分储存单元,如果给定值发生突变时,由算法的比例部分和微分部分计算出的控制增量可能比较大,如果该值超过了执行元件所允许的最大限度,那么实际上执行的控制增量将时受到限制时的值,多余的部分将丢失,将使系统的动态过程变长,因此,需要采取一定的措施改善这种情况。

  纠正这种缺陷的方法是采用积累补偿法,当超出执行机构的执行能力时,将其多余部分积累起来,而一旦可能时,再补充执行。

  • PID 位置算法

  离散公式:

  对于位置式算法,可以选择的功能有:
  a、滤波:同上为一阶惯性滤波
  b、饱和作用抑制:

  遇限削弱积分法 一旦控制变量进入饱和区,将只执行削弱积分项的运算而停止进行增大积分项的运算。具体地说,在计算 Ui 时,将判断上一个时刻的控制量 Ui-1 是否已经超出限制范围,如果已经超出,那么将根据偏差的符号,判断系统是否在超调区域,由此决定是否将相应偏差计入积分项。

  积分分离法

  在基本 PID 控制中,当有较大幅度的扰动或大幅度改变给定值时, 由于此时有较大的偏差,以及系统有惯性和滞后,故在积分项的作用下,往往会产生较大的超调量和长时间的波动。特别是对于温度、成份等变化缓慢的过程,这一现象将更严重。为此可以采用积分分离措施,即偏差较大时,取消积分作用;当偏差较小时才将积分作用投入。另外积分分离的阈值应视具体对象和要求而定。若阈值太大,达不到积分分离的目的,若太小又有可能因被控量无法跳出积分分离区,只进行 PD 控制,将会出现残差。

  离散化公式:

  • 当|e(t)|≤β 时

  q0 = Kp*(1+T/Ti+Td/T)
  q1 = -Kp*(1+2Ti/T)
  q2 = Kp*(Td/T)

  • 当|e(t)|>β 时

  q0 = Kp(1+Td/T)
  q1 = -Kp(1+2Td/T)
  q2 = Kp Td /T
  u(t) = u(t-1) + Δu(t)

  注:各符号含义如下
  u(t) 控制器的输出值。
  e(t) 控制器输入与设定值之间的误差。
  Kp 比例系数。
  Ti 积分时间常数。
  Td 微分时间常数。(有的地方用"Kd"表示)
  T 调节周期。
  β 积分分离阈值

5.2.2 转向差速控制实现

  转向差速的控制通过简单的 PD 控制的方法可以很好的实现最佳路径,并不需要过多的处理。

  由于采用的双轮 差速 结构,为了减少直道不必要的摇摆,我们采用陀螺仪 的角加速度计进行补偿,使用串级 PID,经测试,稳定性有了很大的提高.

5.3 小结

  软件控制是基于机械系统和硬件系统的完善的基础上开展起来的。我们设计摄像头程序控制算法的时候,首先根据显示屏上显示的图像,确定了我们所需要采取的数据,然后配合ips的图像显示将其中的像素信息反馈回来,再配合图像处理算法进行分析和处理。通过尝试过的方案优劣比较,最终确定采集特征值判断,效果比较明显。

第六章 系统开发及调试工具


6.1 软件开发的平台

  TC264是今年新加入的微控制器。TC264属于第一代AurixTM TC264xD系列产品,其创新多核心架构基于多达两个独立的32位TriCore CPU,转为满足极高的安全标准,同时大幅度提高性能而设计。TC264的程序编写是在TriCore Eclipse IDE下进行,Tasking EDE是在Windows环境下运行的嵌入式系统集成开发环境软件(IDE) 。Tasking EDE是面向工程(Project)的集成开发环境,能够完成从Edit、Make到Debug的“一条龙”服务。环境可以扩展和配置,支持鼠标,界面友好。EDE除开发工具一条龙服务外,还配套有辅助性服务,如Setup集成化、在线屏幕手册(Manual)集成化、出错管理(Error Handling)集成化、FSS窗口等。在此还需要感谢北京乾勤科技的软件使用培训,以及逐飞科技提供的TC264开源库,才使得备赛过程顺利进行。

6.2 上位机调试助手

  上位机的调试我们一般采用的是山外虚拟示波器,通过上位机返回的数据进行分析处理,通过对数据的分析处理找到问题的所在,更好的解决问题,比盲目的修改参数效率高。

▲ 图6.1 山外调试助手

6.3 人机交互界面

  因为比赛中可能会对一些参数做出修改,根据赛道情况做出不同的策略。比赛场上时间紧张,尽量要做到不必要的时间浪费,所以能不下程序就尽量不下,所以做出一个快捷的调参界面,我们通过五轴按键和拨码开关还修改参数。

6.4开发环境

  开发环境包括硬件开发环境和软件开发环境,硬件开发环境我们主要使用的 是 Altium Designer 版本进行开发,如下图所示。对于某些需要仿真的地方,我们选用了 Multisim 12.0 进行简易的仿真。

▲ 图 6.2 Altium Designer 硬件设计软件

6.4.1硬件调试

  首先,我们要根据需要的技术指标,确立硬件制作的标准,然后查阅大量资料,尤其是数据手册,进行元件选型,对于每一个硬件模块,都有不同的设计要求,比如最小系统板要求稳定工作、输入输出端口满足要求并适当备份;电源模 块要求供电稳定;传感器电路则要求几何精度和参数精度等。

  为了提高精度,需要制作电路板,而把实验用电路板送到制板厂加工制作无疑会带来巨大的成本浪费,节约成本是我们制作智能车必须考虑的。因此我们通过学习,发现了一种自己加工电路板的方法:通过使用线路板雕刻机进行电路板的雕刻,我们通过多次实验对现有方法进行了改善,使得加工精度较高,这些都足以满足实验电路精度。

6.5 机械调试

  我们对机械部分的调试主要通过对自己想法的大量实验,来验证自己的想法是否正确。其中我们对车模的整个重心的分布、导轮的位置、以及车体可能在车高速情况下 会出现的甩尾问题等这些问题我们都做过测试,最后选择目前这套方案。

  其实在中期的时候,我们发现其实很多时候机械可以解决的问题用程序解决的话会比较吃力,而且情况比较多变,不是我们所能掌控的,所以在中后期我们很注重对车体机械的研究,但是可以由于时间的原因我们做的并不完善,还是有待提高。

第七章 结论


  全国大学生智能汽车竞赛是以智能汽车为研究对象的创意性科技竞赛,是面向全国大学生的一种具有探索性工程实践活动,是教育部倡导的大学生科技竞赛之一,在此份技术报告中,我们主要介绍了准备比赛时的基本思路,包括机械、电路以及最重要的控制算法的创新思想。在电路方面,我们以模块形式分类,在最小系统、主板、电机驱动等模块分别设计,经过不断实验,最后决定了我们最终的电路图。在程序方面经过小组成员不断讨论、改进,终于设计出一套比较通用稳定的程序。

  在智能车制作过程中,遇到过很多问题,在老师和师兄们的帮助下,再加上我们的不懈努力调试,终于在不断的改进中,完成了智能小车的制作。在智能小车的制作过程中,不仅丰富了我们的知识,并且锻炼了动手能力,同时培养了团队合作精神。在此感谢组委会对本次比赛的大力支持,同时感谢创新工作室晋速智能车队晋速的指导老师左义海和师兄师姐们的帮助。也许我们的知识还不够丰富,考虑问题也不够全面,但是这份技术报告作为我们小组辛勤汗水的结晶,凝聚着我们小组每个人的心血和智慧,随着它的诞生,这份经验将永伴我们一生,成为我们最珍贵的回忆。
  最后非常感谢恩智浦智能车竞赛给我们提供的这个学习交流的平台,衷心希望全国大学生智能车比赛能更加蓬勃发展。

参考文献


[1] 关于举办第十六届全国大学生智能汽车竞赛的通知.
[2] 王盼宝,佟超等. 智能车制作. 北京, 清华大学出版社, 2001.
[3] 张剑平. 模拟电子技术基础. 北京, 清华大学出版社, 2011.
[4] 卓晴。公众号对于节能组的推文,2021.
[5] 阎石. 数字电子电路基础. 北京, 高等教育出版社, 2005.
[6] 邵贝贝. 单片机嵌入式应用的在线开发方法. 北京, 清华大学出版社, 2001. [7] 闫琪等. 智能车设计“飞思卡尔杯”从入门到精通.北京,北京航天航空大学出 版社, 2014.
[8] 潘新民, 王燕芳. 微型计算机控制技术. 北京, 高等教育出版社, 2001.
[9] 何立民. 单片机应用系统设计. 北京, 北京航天航空大学出版社, 1997.
[10] 谭浩强. C程序设计(第二版). 北京, 清华大学出版社, 2001.
[11] 谢处方,饶克谨.电磁场与电磁波(第 5版)[M].北京:高等教育出版社,2009.

■ 附录 部分参考源代码

```python
&emsp;&emsp;nt core0_main(void)
{&emsp;&emsp;All_init_1();//基本主程序
&emsp;&emsp;while (TRUE){//        systick_start(STM0);
&emsp;&emsp;picture_show();
&emsp;&emsp;if(!mode)
&emsp;&emsp;ips();
//        int32 time = 0 ;
//        time = systick_getval_ms(STM0);
//        ips200_showint32(0,0,time,5,RED);}
}&emsp;&emsp;void picture_show(void)//总图像函数
{&emsp;&emsp;if( mt9v03x_finish_flag == 1 )//标志位判断{&emsp;&emsp;Otse = GetOSTU(mt9v03x_image);
&emsp;&emsp;if(Otse < otse){&emsp;&emsp;Otse = otse ;}
&emsp;&emsp;else if(Otse > MAX){&emsp;&emsp;Otse = MAX_Otse ;}
&emsp;&emsp;binaryzation(mt9v03x_image[0], a[0] , WIDTH , HEIGHT , Otse , WID_MULTIPLE , HEI_MULTIPLE);//二值化
//        search();
//        error = centre - x;
&emsp;&emsp;mt9v03x_finish_flag = 0;//标志位清零}
}&emsp;&emsp;void flash_write_ips(void)
{&emsp;&emsp;disableInterrupts();&emsp;&emsp;uint32 write_buf;&emsp;&emsp;if(flash_check(0,0))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,1))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,2))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,3))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,4))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,5))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,6))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,7))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,8))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,9))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,10))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,11))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,12))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,13))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,14))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,15))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,16))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,17))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,18))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,19))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,20))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,21))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,22))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,23))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,24))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,25))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,26))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,27))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,28))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);
&emsp;&emsp;if(flash_check(0,29))//校验当前 扇区所在页是否有数据,如果有数据则擦除整个扇区
&emsp;&emsp;eeprom_erase_sector(0);&emsp;&emsp;write_buf = otse;
&emsp;&emsp;eeprom_page_program(0, 0, &write_buf);
&emsp;&emsp;write_buf = exposure;
&emsp;&emsp;eeprom_page_program(0, 1, &write_buf);
&emsp;&emsp;write_buf = MAX;
&emsp;&emsp;eeprom_page_program(0, 2, &write_buf);
&emsp;&emsp;write_buf = MAX_L;
&emsp;&emsp;eeprom_page_program(0, 3, &write_buf);
&emsp;&emsp;write_buf = MAX_R;
&emsp;&emsp;eeprom_page_program(0, 4, &write_buf);
&emsp;&emsp;write_buf = float_conversion_uint32(p);
&emsp;&emsp;eeprom_page_program(0, 5, &write_buf);
&emsp;&emsp;write_buf = float_conversion_uint32(d);
&emsp;&emsp;eeprom_page_program(0, 6, &write_buf);
&emsp;&emsp;write_buf = float_conversion_uint32(P);
&emsp;&emsp;eeprom_page_program(0, 7, &write_buf);
&emsp;&emsp;write_buf = float_conversion_uint32(I);
&emsp;&emsp;eeprom_page_program(0, 8, &write_buf);
&emsp;&emsp;write_buf = float_conversion_uint32(D);
&emsp;&emsp;eeprom_page_program(0, 9, &write_buf);
&emsp;&emsp;write_buf = float_conversion_uint32(start_voltage);
&emsp;&emsp;eeprom_page_program(0, 10, &write_buf);
&emsp;&emsp;write_buf = STOP_time;
&emsp;&emsp;eeprom_page_program(0, 11, &write_buf);
&emsp;&emsp;write_buf = lr_error;
&emsp;&emsp;eeprom_page_program(0, 12, &write_buf);
&emsp;&emsp;write_buf = centre;
&emsp;&emsp;eeprom_page_program(0, 13, &write_buf);
&emsp;&emsp;write_buf = clipping;
&emsp;&emsp;eeprom_page_program(0, 14, &write_buf);
&emsp;&emsp;write_buf = Turn_L;
&emsp;&emsp;eeprom_page_program(0, 15, &write_buf);
&emsp;&emsp;write_buf = Turn_R;
&emsp;&emsp;eeprom_page_program(0, 16, &write_buf);
&emsp;&emsp;write_buf = stop_y;
&emsp;&emsp;eeprom_page_program(0, 17, &write_buf);
&emsp;&emsp;write_buf = float_conversion_uint32(i);
&emsp;&emsp;eeprom_page_program(0, 18, &write_buf);
&emsp;&emsp;write_buf = MIN_L;
&emsp;&emsp;eeprom_page_program(0, 19, &write_buf);
&emsp;&emsp;write_buf = MIN_R;
&emsp;&emsp;eeprom_page_program(0, 20, &write_buf);
&emsp;&emsp;write_buf = MAX_Otse;
&emsp;&emsp;eeprom_page_program(0, 21, &write_buf);
&emsp;&emsp;write_buf = T_y;
&emsp;&emsp;eeprom_page_program(0, 22, &write_buf);
&emsp;&emsp;write_buf = stop_s;
&emsp;&emsp;eeprom_page_program(0, 23, &write_buf);
&emsp;&emsp;write_buf = max_s;
&emsp;&emsp;eeprom_page_program(0, 24, &write_buf);
&emsp;&emsp;write_buf = TWO_L;
&emsp;&emsp;eeprom_page_program(0, 25, &write_buf);
&emsp;&emsp;write_buf = TWO_R;
&emsp;&emsp;eeprom_page_program(0, 26, &write_buf);
&emsp;&emsp;write_buf = float_conversion_uint32(T_P);
&emsp;&emsp;eeprom_page_program(0, 27, &write_buf);
&emsp;&emsp;write_buf = float_conversion_uint32(T_I);
&emsp;&emsp;eeprom_page_program(0, 28, &write_buf);
&emsp;&emsp;write_buf = float_conversion_uint32(T_D);
&emsp;&emsp;eeprom_page_program(0, 29, &write_buf);&emsp;&emsp;enableInterrupts();
}/*******************************************
&emsp;&emsp;**************调参界面读取*****************
&emsp;&emsp;*******************************************/
&emsp;&emsp;void flash_read_ips(void)
{&emsp;&emsp;otse            = flash_read(0,0, int16);
&emsp;&emsp;exposure        = flash_read(0,1, int16);
&emsp;&emsp;MAX             = flash_read(0,2, int16);
&emsp;&emsp;MAX_L           = flash_read(0,3, int16);
&emsp;&emsp;MAX_R           = flash_read(0,4, int16);
&emsp;&emsp;p               = flash_read(0,5, float);
&emsp;&emsp;d               = flash_read(0,6, float);
&emsp;&emsp;P               = flash_read(0,7, float);
&emsp;&emsp;I               = flash_read(0,8, float);
&emsp;&emsp;D               = flash_read(0,9, float);
&emsp;&emsp;start_voltage   = flash_read(0,10,float);
&emsp;&emsp;STOP_time       = flash_read(0,11,int16);
&emsp;&emsp;lr_error        = flash_read(0,12,int16);
&emsp;&emsp;centre          = flash_read(0,13,int16);
&emsp;&emsp;clipping        = flash_read(0,14,int16);
&emsp;&emsp;Turn_L          = flash_read(0,15,int16);
&emsp;&emsp;Turn_R          = flash_read(0,16,int16);
&emsp;&emsp;stop_y          = flash_read(0,17,int16);
&emsp;&emsp;i               = flash_read(0,18,float);
&emsp;&emsp;MIN_L           = flash_read(0,19,int16);
&emsp;&emsp;MIN_R           = flash_read(0,20,int16);
&emsp;&emsp;MAX_Otse        = flash_read(0,21,int16);
&emsp;&emsp;T_y             = flash_read(0,22,int16);
&emsp;&emsp;stop_s          = flash_read(0,23,int16);
&emsp;&emsp;max_s           = flash_read(0,24,int16);
&emsp;&emsp;TWO_L           = flash_read(0,25,int16);
&emsp;&emsp;TWO_R           = flash_read(0,26,int16);
&emsp;&emsp;T_P             = flash_read(0,27,float);
&emsp;&emsp;T_I             = flash_read(0,28,float);
&emsp;&emsp;T_D             = flash_read(0,29,float);

● 相关图表链接:

  • 图2.1 车模整体视图
  • 图 4.1.1 TPS63071
  • 图4.1.2 3.3V稳压
  • 图 4.1.3 MT3608
  • 图 4.3 摄像头原理图
  • 图4.4电压检测电路
  • 图 4.5 五轴按键原理图
  • 图 4.6 OLED显示屏原理图
  • 图 4.7 四位拨码开关原理图
  • 图 5.1 PID理论
  • 图6.1 山外调试助手
  • 图 6.2 Altium Designer 硬件设计软件

智能车竞赛技术报告 | 节能信标组 - 太原工业学院 - 晋速-天槊星相关推荐

  1. 智能车竞赛技术报告 | 节能信标组 - 中国计量大学 - 赛博 - 8

    学校:中国计量大学    队伍名称:赛博-8       参赛队员:叶佳航 周豪 杨敬淳 带队教师:金小萍 陈东晓    第一章 引言 1.1智能车研究背景 1.1.1发展历史   近些年,一方面随着 ...

  2. 智能车竞赛技术报告 | 节能信标组 - 兰州交通大学 - 先锋队

    简 介: 本文以第十六届全国大学生智能车大赛为背景,介绍了兰州交通大学节能信标组在比赛中的实现方案.本次比赛采用了3D打印的自制车模,主控芯片采用了英飞凌的TC264芯片,软件平台采用的IAR.本文中 ...

  3. 智能车竞赛技术报告 | 节能信标组 - 宿迁学院 - MAkkaPakka

    学 校:宿迁学院      队伍名称:Makka Pakka    参赛队员:王妙龙 吴子敬 李翔 带队教师:倪亚南 袁静     第一章 引言   全国大学生智能车竞赛是旨在加强学生实践.创新能力和 ...

  4. 智能车竞赛技术报告 | 节能信标组 - 重庆大学- 赛博坦汽车人联盟

    简 介: 本文以第十六届全国大学生智能车竞赛为背景,介绍了智能赛车控制系统 的软硬件结构和开发流程.该比赛采用自主设计的车模和硬件,使用LCC谐振电路接收无线充电能量并存储在超级电容组中,以英飞凌的T ...

  5. 智能车竞赛技术报告 | 节能信标组 - 华南理工大学 - 华工雨花队

    简 介: 本文以第十六届"恩智浦杯"全国大学生智能车竞赛为背景,介绍了华工雨花队在该次比赛节能信标组别的参赛智能车技术成果.本文将从智能车的机械结构设计,硬件电路设计,摄像头寻灯算 ...

  6. 智能车竞赛技术报告 | 节能信标组 - 洛阳理工学院 - Since 2021

    参赛队员签名:程超杰张帅兵董英梁 带队教师签名:武超张伟民     日期: 2021.08.24 第一章 引言 1.1竞赛背景   全国大学生智能汽车竞赛是本科自动化及相关专业学科领域的顶级赛事之一, ...

  7. 智能车竞赛技术报告 | 节能信标组-哈尔滨工业大学紫丁香五队

    简 介: 本设计以第十六届全国大学生智能汽车竞赛节能信标组赛题要求规范为背景,结合3D打印技术.PCB制板技术等制作一辆以英飞凌单片机为核心控制单元的节能信标车模.以ADS为开发环境.利用摄像头获取赛 ...

  8. 智能车竞赛技术报告 | 节能信标组 - 北京科技大学节能信标组

    学 校:北京科技大学      队伍名称:北京科技大学节能信标组 参赛队员:叶浩然         夏清悦         张子龙         带队教师:康翌婷         第一章 引言    ...

  9. 智能车竞赛技术报告 | 节能信标组 - 浙江大学 - 浙大三队

    参赛学校:浙江大学        队伍名称:浙大三队        参赛队员:朱呈翔.余江涵.张博群 带队教师:姚维.韩涛       第一章 引言   全国大学生智能汽车竞赛是一项以"立足 ...

最新文章

  1. 智源论坛 | 知识与认知图谱(5月30日,活动报名)
  2. spring+mybatis 多数据源整合
  3. C语言文件操作解析(二)
  4. Hive学习笔记 —— Hive概述
  5. 解决Windows下Arm下Linux下Qt4程序的中文乱码问题
  6. pycharm 运行.py文件如何像控制台那样传参?
  7. 爬取虎扑NBA首页主干道推荐贴的一只小爬虫,日常爬不冷笑话解闷
  8. Nmap渗透测试详解(一)
  9. java基数排序简单实现_基数排序简单Java实现
  10. HDOJ 1698 Just a Hook(线段树成段更新)
  11. numpy——zeros(), ones(), empty(), eye()
  12. android常用窗口动画,android 自定义dialog,窗口动画,
  13. ZFNet: Visualizing and Understanding Convolutional Networks
  14. WebSocket websockets
  15. Ubuntu8.04上用飞信 libfetion
  16. Java链表入门(超详细)
  17. linux虚拟文件系统(二)-ext4文件系统结构
  18. win10 计算机组策略,win10家庭版系统找不到组策略gpedit.msc的解决方法
  19. 棉猴论坛VIP之驱动基础系列教程 视频教程
  20. 苹果税务信息填写教程

热门文章

  1. Core Animation简介
  2. C#利用Attribute实现简易AOP介绍 (转载)
  3. 谈谈对于企业级系统架构的理解(zz)
  4. Html2excel 1.4.1 发布,Html 转 Excel 工具包
  5. vc++ 6.0下Glut的配置 及 Glut 框架介绍
  6. .NET版本与CLR版本及兼容性
  7. 4.4学习笔记-REGEXP1(正则表达式)
  8. 交换一个整数二进制表示中的奇数位和偶数位
  9. java编程中的点_Java的21个技术点和知识点归纳(转)
  10. 怎么装python解析器_linux 下安装 python 解析器