本文是无人驾驶技术系列的第十篇,着重介绍无人驾驶硬件平台设计。无人驾驶硬件系统是多种技术、多个模块的集成,主要包括:传感器平台、计算平台、以及控制平台。本文将详细介绍这三个平台以及现有的解决方案。希望本文对无人驾驶从业者以及爱好者选择硬件的时候有帮助。

无人驾驶: 复杂系统

无人驾驶技术是多个技术的集成,如图1所示,一个无人驾驶系统包含了多个传感器,包括长距雷达、激光雷达、短距雷达、车载摄像头、超声波、 GPS、 陀螺仪等。每个传感器在运行时都不断产生数据,而且系统对每个传感器产生的数据都有很强的实时处理要求。比如摄像头需要达到60 FPS的帧率,意味着留给每帧的处理时间只有16毫秒。但当数据量增大了之后,分配系统资源便成了一个难题。例如,当大量的激光雷达点云数据进入系统,占满CPU资源,就很可能令摄像头的数据不能得到及时的处理,导致无人驾驶系统错过交通灯的识别,造成严重后果。因此,合理地选择计算平台完成实时的大规模传感数据处理,进行实时的驾驶预警与决策,对无人驾驶的安全性、可靠性、持续性至关重要。在提供高性能的数据处理支持的同时,计算平台还需要兼顾功耗、散热、硬件体积等问题,这对于持续的安全行驶同样重要。因此,在现有无人车计算平台中,各种硬件模块都有相关集成解决方案。不同的计算单元通过Switch或PCIe Switch相连,进行数据交换,完成协同运算。无人驾驶中除了需要对智能驾驶相关的传感器数据进行计算与决策,还需要传统汽车中各个机械部件进行配合控制,完成驾驶操作的执行与转换。这就需要控制平台:ECU与通信总线的协助。ECU从用途上讲是汽车专用微机控制器,它使用一套以精确计算和大量实验数据为基础的固定程序,不断地比较和计算各个机械部件传感器的数据,然后发出指令,完成机械控制。通信总线如CAN、USB3.0、LIN等则是在这个过程中实现汽车数据共享以及指令的有效传达。

图1 无人驾驶硬件平台范例

传感器平台

目前现有的车载传感器包括超声波雷达、激光雷达、毫米波雷达、车载摄像头、红外探头等。目前主流的无人驾驶传感平台以激光雷达和车载摄像头为主,并呈现多传感器融合发展的趋势。基于测量能力和环境适应性,预计激光雷达和车载摄像头会持续传感器平台霸主的地位,并不断与多种传感器融合,发展出多种组合版本。完备的无人驾驶系统应该如图2所示,各个传感器之间借助各自所长相互融合、功能互补、互为备份、互为辅助。

图2 各种传感器在无人驾驶中的应用

激光雷达

激光雷达的工作原理是利用可见和近红外光波(多为950nm波段附近的红外光)发射、反射和接收来探测物体。激光雷达可以探测白天或黑夜下的特定物体与车之间的距离。由于反射度的不同,也可以区分开车道线和路面,但是无法探测被遮挡的物体、光束无法达到的物体,在雨雪雾天气下性能较差。

1.激光雷达在无人驾驶运用中拥有两个核心作用。3D建模进行环境感知。通过雷射扫描可以得到汽车周围环境的3D模型,运用相关算法比对上一帧和下一帧环境的变化可以较为容易的探测出周围的车辆和行人。
    2. SLAM加强定位。3D雷射雷达另一大特性是同步建图(SLAM),实时得到的全局地图通过和高精度地图中特征物的比对,可以实现导航及加强车辆的定位精度。

激光雷达分类与产品

LIDAR以单线/多线及距离两大因素为标准,价格从几百美金到几万美金不等。单线激光雷达的应用在国内已经相对较广,像扫地机器人使用的便是单线激光雷达。单线激光雷达可以获取2D数据,但无法识别目标的高度信息。而多线激光雷达则可以识别2.5D甚至是3D数据,在精度上会比单线雷达高很多。目前在国际市场上推出的主要有4线、8线、16线、32线和64线。随着线数的提升,其识别的数据点也随之增加,所要处理的数据量也非常巨大。比如,Velodyne的HDL-32E 传感器每秒能扫描70万个数据点,而百度无人车和Google无人车配备的Velodyne HDL-64E通过64束的雷射束进行垂直范围26.8度,水平360度的扫描,每秒能产生的数据点则高达130万。Velodyne HDL-64E的内部结构如图3,主要由上下两部分组成。每部分都发射32束的雷射束,由两块16束的雷射发射器组成,背部是包括信号处理器和稳定装置。

图3 激光雷达结构图

激光雷达雷射发射器线束越多,每秒采集的云点就越多。然而线束越多也就代表雷射雷达的造价就更加昂贵,以Velodyne的产品为例,64线束的雷射雷达价格是16线束的10倍。HDL-64E单个定制的成本在8万元左右。目前,Velodyne公司已经开发出了相对便宜的LiDAR传感器版本HDL-32E和HDL-16E。其中HDL-16E是由16束雷射取代64束雷射,支持360度无盲区扫描,牺牲一定的数据规模云点,每秒钟只提供30万个数据点,但是售价仍高达售价8千美元。

表1 Velodyne激光雷达详细数据

图4 Velodyne激光雷达

如果激光雷达要想在无人车上普及首先就应该降低价格。有两种解决办法:其一,采用低线数雷达配合其他传感器,但需搭配拥有极高计算能力系统的无人车;其二,采用固态激光雷达。激光雷达最贵的就是机械旋转部件,固态激光雷达无需旋转部件,采用电子设备替代,因而体积更小,方便集成在车身内部,系统可靠性提高,成本也可大幅降低。但由于缺乏旋转部件,水平视角小于180°,所以需要多个固态雷达组合一起配合使用才行。

在CES2016上展出的两款重量级产品,其一是来自Quanergy的“固态”Solid State雷射雷达S3,采取相控阵技术,内部不存在任何旋转部件,仅为一盒名片大小,单个售价初步定在250美元,量产后可能降至100美元;其二是由Velodyne与福特共同发布的混合固态雷射雷达VLP-16 PUCK,2020年计划量产价为500美元,2025年计划把成本控制在200美金以内。奥迪的无人驾驶汽车A7 Piloted Driving就采用了Ibeo和Valeo合作的Scala混合固态雷射雷达,在外观上看不到旋转部件,但内部仍靠机械旋转实现雷射扫描。此前国内雷达制造商速腾聚创宣布完成的16线激光雷达采用的也是混合固态的形式。固态雷达雷达产品则由于采用电子方案去除了机械旋转部件,因此具有低成本(几百美元级别)和体积小、可集成至传统车辆外观中的特点。行业对固态雷达的出现仍处观望态度,主要因为:首先,对成本是否能有如此大幅下降抱有疑问;其次,激光特性在大雾等天气仍然并不适用。

国内外制造现况

目前,激光雷达已被应用在某些无人驾驶试验车中:

1. Google和百度的无人驾驶试验车均采用了Velodyne的64线雷射雷达;
    2.福特的混动版蒙迪欧安装了Velodyne的32线雷射雷达,第三代自动驾驶车辆Fusion Hybrid配置了2台Velodyne的混合固态雷射雷达;
    3. 日产LEAF搭载了6个Ibeo的4线雷射雷达,测试了其高级驾驶辅助系统;
    4.奥迪的无人驾驶汽车A7 Piloted Driving采用了Ibeo和Valeo合作的Scala混合固态雷射雷达;
    5.德尔福无人驾驶汽车配备了4台由Quanergy研发的固态雷射雷达;
    6.大众的一款半自动驾驶汽车搭载了Scala,该雷射雷达隐藏在保险杠内,用于取代毫米波雷达做AEB的测距模块。

国外激光雷达研发厂商比较有代表性的有 Velodyne、Ibeo和Quanergy,并且他们都背靠巨头。Velodyne成立于1983年,位于加州硅谷。当年美国举办的世界无人车挑战赛获得第一名和第二名的高校卡耐基梅隆大学和斯坦福大学,使用的就是Velodyne的激光雷达。目前其已有包括 Velodyne16、32、64线激光雷达三个系列。Ibeo 是无人驾驶激光雷达供应商,成立于1998年, 2010年和法雷奥合作开始量产可用于汽车的产品 ScaLa,其目前主要供应4线和8线的激光雷达。Quanergy位于加州硅谷硅谷中心,成立于2012 年,虽然相对“年轻”,但它造出了全球第一款固态激光雷达。

国内在激光雷达研发的企业则主要有北醒光子、思岚科技、镭神智能、速腾聚创、禾赛科技。其中,北醒光子目前的产品有三大系列:单线环境雷达DE-LiDAR 1.0、多线长距雷达DE-LiDAR 2.0 和固态雷达DE3.0系列(多线长距雷达目前正在研发,可做到8到32线);镭神智能成立于2015年初,是一家提供中远距离脉冲测距激光雷达等产品及解决方案的公司;速腾聚创刚宣布完成其混合固态的16线激光雷达研发。

表2 Velodyne和Ibeo产品规格对比

毫米波雷达

毫米波雷达通过发射无线电信号(毫米波波段的电磁波)并接收反射信号来测定汽车车身周围的物理环境信息(如汽车与其他物体之间的相对距离、相对速度、角度、运动方向等),然后根据所探知的物体信息进行目标追踪和识别分类,进而结合车身动态信息进行数据融合,完成合理决策,减少事故发生几率。

毫米波雷达的工作频段为30~300GHz毫米波,毫米波的波长为波长为1~10mm,介于厘米波和光波之间,因此毫米波兼有微波制导和光电制导的优点。雷达测量的是反射信号的频率转变,并计算其速度变化。雷达可以检测30-100米远的物体,高端的雷达能够检测到很远的物体。同时,毫米波雷达不受天气状况限制,即使是雨雪天都能正常运作,穿透雾、烟、灰尘的能力强。具有全天候、全天时的工作特性,且探测距离远,探测精度高,被广泛应用于车载距离探测,如自适应巡航、碰撞预警、盲区探测等。

相比激光雷达,毫米波雷达精度低、可视范围的角度也偏小,一般需要多个雷达组合使用。雷达传输的是电磁波信号,因此它无法检测上过漆的木头或是塑料(隐形战斗机就是通过表面喷漆来躲过雷达信号的),行人的反射波较弱几乎对雷达“免疫”。同时,雷达对金属表面非常敏感,如果是一个弯曲的金属表面,它会被雷达误认为是一个大型表面。因此,路上一个小小的易拉罐甚至可能会被雷达判断为巨大的路障。此外,雷达在大桥和隧道里的效果同样不佳。

图5 毫米波雷达应用范围

毫米波雷达分类

毫米波雷达的可用频段有24GHz、60GHz、77GHz、79GHz,主流可用频段为24GHz和77GHz,分别应用于中短距和中长距测量。比于24GHz,77GHz毫米波雷达物体分辨淮确度可提高2-4倍,测速和测距精确度提高3-5倍,能检测行人和自行车;且设备体积更小,更便于在车辆上安装和部署。如表3所示,长距离雷达的侦测范围更广,可适配开行速度更快的车辆,但是相应地探测精度下降,因此更适用于ACC自适应巡航这类的应用。典型的长距离雷达有博世的一款产品,其探测前向距离为250米;典型的短距离雷达有大陆的一款产品,其探测距离为前向60米后向20米。

图6 中距和短距雷达空间分辨率对比

为完全实现ADAS各项功能一般需要“1长+4中短”5个毫米波雷达,目前全新奥迪A4采用的就是 “1长+4短”5个毫米波雷达的配置。以自动跟车型ACC功能为例,一般需要3个毫米波雷达。车正中间一个77GHz的LRR,探测距离在150-250米之间,角度为10度左右;车两侧各一个24GHz的 MRR,角度都为30度,探测距离在50-70米之间。图7是奔驰的S级车型,采用的是7个毫米波雷达(1长+6短)。

图7 毫米波雷达在无人驾驶中的使用

电磁波频率越高,距离和速度的检测解析度越高,因此频段发展趋势是逐渐由24GHz向77GHz过渡的。1997年,欧洲电讯标准学会确认76-77GHz作为防撞雷达专用频道。早在2005年原信息产业部发布《微功率(短距离)无线电设备的技术要求》将77GHz划分给车辆测距雷达。2012年,工信部进一步将24GHz划分给短距车载雷达业务。2015年日内瓦世界无线电通信大会将77.5-78.0GHz频段划分给无线电定位业务,以支持短距离高分辨率车载雷达的发展,从而使76-81GHz都可用于车载雷达,为全球车载毫米波雷达的频率统一指明了方向。至此之后,最终车载毫米波雷达将会统一于77GHz频段(76-81GHz),该频段带宽更大、 功率水平更高、探测距离更远。

表3 中长距和短距雷达参数对比

毫米波雷达国内外制造现况

全球汽车毫米波雷达主要供应商为传统汽车电子优势企业,如博世、大陆、Hella、富士通天、电装、TRW、德尔福、Autoliv、法雷奥等传统优势企业。

图8 毫米波雷达主要供应商

其中,博世核心产品是长距离毫米波雷达,主要用于ACC系统;最新产品LRR4可以探测250米外的车辆,是目前探测距离最远的毫米波雷达;市场占有率最高,但客户集中在奥迪和大众。大陆客户分布广,产品线齐全,主力产品为24GHz毫米波雷达,并且在Stop & Go ACC领域占有率极高。Hella在24GHz-ISM领域客户范围最广,24GHz雷达传感器下线1000万片,出货量达650万片,市场占有率全球第一。第四代24GHz雷达传感器将在2017年中投入全球化生产。富士通天和电装主要占据日本市场,其中富士通天略胜一筹。富士通天、松下和电装是未来79GHz雷达市场领域的强者。

目前中国市场中高端汽车装配的毫米波雷达传感器全部依赖进口,国内自主车载毫米波雷达产品总体仍处于研制阶段。因研发成本及难度较低,国际市场上24GHz毫米波雷达供应链也已相对稳定,目前国内厂商研发方向主要集中于24GHz雷达产品,可从飞思卡尔等供应商获得24GHz射频芯片。目前较为成熟的产品仅有湖南纳雷、厦门意行、芜湖森思泰克的24GHz中短距雷达。而77GHz产品设计难度较大,成本较高;并且英飞凌、ST、飞思卡尔等芯片厂商并没有对中国开放供应77GHz射频芯片,因此国内77GHz毫米波雷达的开发受到很大限制。

图9 国内森思泰克和纳雷科技主要雷达产品

在雷达数据处理芯片领域,主要采用的是恩智浦(NXP)MR2001多通道77GHz雷达收发器芯片组, 包括:MR2011RX、MR2001TX 、MR2001VC;以及意行半导体24GHz 射频前端MMIC套片产品,包括:SG24T1、SG24R1、SG24TR1。2016年NXP推出了目前全世界最小(7.5×7.5mm)的单晶片 77GHz高解析度RFCMOS IC雷达晶片。该款车用雷达晶片的超小尺寸使其可以近乎隐形地安装在汽车的任意位置,且其功耗比传统雷达晶片产品低40%,为汽车传感器的设计安装提供了极大便利。

表4 各个主要厂商主要产品毫米波雷达

车载摄像头

车载摄像头的大致原理是:首先,采集图像进行处理,将图片转换为二维数据;然后,进行模式识别,通过图像匹配进行识别,如识别车辆行驶环境中的车辆、行人、车道线、交通标志等;接下来,依据物体的运动模式或使用双目定位,以估算目标物体与本车的相对距离和相对速度。

相比于其他传感器,摄像头最为接近人眼获取周围环境信息的工作模式,可以通过较小的数据量获得最为全面的信息,同时因为现在的摄像头技术比较成熟,成本可较低。但是,摄像头识别也存在一定局限性,基于视觉的解决方案受光线、天气影响大;同时,物体识别基于机器学习资料库,需要的训练样本大,训练周期长,也难以识别非标准障碍物;同时,由于广角摄像头的边缘畸变,得到的距离准确度较低。

从应用方案出发,目前摄像头可划分为单目、后视、立体(双目)、环视摄像头四种。如表5总结:

表5 摄像头的应用场景

1. 单目摄像头一般安装在前挡风玻璃上部,用于探测车辆前方环境,识别道路、车辆、行人等。先通过图像匹配进行目标识别(各种车型、行人、物体等),再通过目标在图像中的大小去估算目标距离。这要求对目标进行淮确识别,然后要建立并不断维护一个庞大的样本特征数据库,保证这个数据库包含待识别目标的全部特征数据。如果缺乏待识别目标的特征数据,就无法估算目标的距离,导致ADAS系统的漏报。因此,单目视觉方案的技术难点在于模型机器学习的智能程度或者说模式识别的精度;
   2. 后视摄像头,一般安装在车尾,用于探测车辆后方环境,技术难点在于如何适应不同的恶劣环境;
   3. 立体(双目)摄像头,是通过对两幅图像视差的计算,直接对前方景物(图像所拍摄到的范围)进行距离测量,而无需判断前方出现的是什么类型的障碍物。依靠两个平行布置的摄像头产生的“视差”,找到同一个物体所有的点,依赖精确的三角测距,就能够算出摄像头与前方障碍物距离,实现更高的识别精度和更远的探测范围。使用这种方案,需要两个摄像头有较高的同步率和采样率,因此技术难点在于双目标定及双目定位。相比单目,双目的解决方案没有识别率的限制,无需先识别可直接进行测量;直接利用视差计算距离精度更高;无需维护样本数据库。但因为检测原理上的差异,双目视觉方案在距离测算上相比单目以及毫米波雷达、激光雷达,其硬件成本和计算量级的加倍,也是另一个难关。
    4. 环视摄像头,一般至少包括四个摄像头,分别安装在车辆前、后、左、右侧,实现360°环境感知,难点在于畸变还原与对接。

根据不同ADAS功能的需要,摄像头的安装位置也有不同。主要分为前视、后视、侧视以及内置。实现自动驾驶时全套ADAS功能将安装6个以上摄像头。

图10 无人车摄像头方位设置

前视摄像头一般采用55度左右的镜头来得到较远的有效距离,有单目和双目两种解决方案。双目需要装在两个位置,成本较单目贵50%。环视使用的是广角摄像头,通常在车四周装备四个进行图像拼接实现全景图,通过辅助算法可实现道路线感知。后视采用广角或者鱼眼镜头,主要为倒车后视使用。侧视一般使用两个广角摄像头,完成盲点检测等工作,也可代替后视镜,这一部分功能也可由超声波雷达替代。内置使用的也是广角镜头,安装在车内后视镜处,完成在行驶过程中对驾驶员的闭眼提醒。其中,前视摄像头可以实现ADAS主动安全的核心功能如车道偏离预警、车辆识别应用、车辆识别、行人识别、道路标识识别等,未来将是自动紧急刹车(AEB)、自适应巡航(ACC)等主动控制功能的信号入口,安全等级较高,应用范围较广,是目前开发的热点。

表6 按功能需求的摄像头划分

车载摄像头在工艺上的首要特性是快速,特别是在高速行驶场合,系统必须能记录关键驾驶状况、评估这种状况并实时启动相应措施。在140km/h的速度,汽车每秒要移动40米。为避免两次图像信息获取间隔期间自动驾驶的距离过长,要求相机具有最慢不低于30帧/秒的影像捕捉速率,在汽车制造商的规格中,甚至提出了60帧/秒和120帧/秒的要求。在功能上,车载摄像头需要在复杂的运动路况环境下都都能保证采集到稳定的数据。具体表现为:

1. 高动态:在较暗环境以及明暗差异较大下仍能实现识别,要求摄像头具有高动态的特性。
   2. 中低像素:为降低计算处理的负担,摄像头的像素并不需要非常高。目前30-120万像素已经能满足要求。
   3. 角度要求:对于环视和后视,一般采用135度以上的广角镜头,前置摄像头对视距要求更大,一般采用55度的范围。
   4. 同时,相比工业级与生活级摄像头,车载类型在安全级别上要求更高,尤其是对与前置ADAS的镜头安全等级要求更高。主要体现在:
    5.温度要求:车载摄像头温度范围在-40~80℃。
    6.防磁抗震:汽车启动时会产生极高的电磁脉,车载摄像头必须具备极高的防磁抗震的可靠性。
    7.较长的寿命:车载摄像头的寿命至少要在8-10年以上才能满足要求。

图11 各种无人驾驶应用摄像头

根据IHS Automotive预测,车载摄像头系统出货量有望在2021年达到7400万套/年。国内行业龙头优势地位明显,如舜宇光学车载后视镜头出货量目前居全球第1位,全球市场占有率达30%左右,产品包括前视镜头、后视镜头、环视镜头、侧视镜头、内视镜头等。客户遍及欧美、日韩和国内。具体的型号包括有:4005、4408、4009、4017、4017、4034、4043、4044等。以4005与4043为例,其规格参数见表7。

表7 按功能需求的摄像头划分

GPS/IMU

GPS在复杂的动态环境中,尤其在大城市,其多路径反射的问题很显著,导致获得的GPS定位信息很容易产生几米的误差。另外,由于GPS的更新频率低(10Hz),在车辆快速行驶时很难给出精准的实时定位。单纯依赖GPS的导航很有可能导致交通事故。因此GPS通常辅助以惯性传感器(IMU)用来增强定位的精度。IMU是检测加速度与旋转运动的高频(1KHz)传感器,但IMU自身也有偏差积累与噪音等问题影响结果。通过使用基于卡尔曼滤波的传感器融合技术,我们可以融合GPS与IMU数据,结合GPS的定位精度高和误差无积累的特点,与IMU的自主性和实时性的优点。一方面可以实现导航设备之间优势互补,增强系统适应动态的能力,并使整个系统获得优于局部系统的精度;另一方面提高了空间和时间的覆盖范围,从而实现真正意义上的连续导航。因此,GPS/IMU组合的优势在于:

1.系统精度的提高。利用GPS的长期稳定性弥补IMU误差随时间累积的缺点。GPS/IMU组合后的导航误差实际上要比单独的GPS或单独的惯导系统可能达到的误差都小。
    2.系统抗干扰能力的增强。利用IMU的短期高精度弥补GPS系统易受干扰、信号易失锁等缺点,同时借助IMU的姿态信息、角速度信息可进一步提高GPS系统快速捕获或重新锁定卫星信号的能力。
    3.导航信息的补全。GPS/IMU组合系统与单GPS相比,除了可以提供载体运动的三维位置和速度信息外,还可提供加速度、姿态和航向信息;GPS/IMU组合系统此外可提供100Hz甚至高于100Hz的数据更新率。

IMU惯性器件的标定技术由于加速度计、陀螺仪等惯性器件本身存在缺陷,会产生一些器件误差,如标度因数误差等。另外,在对IMU进行集成的时候,各个器件之间的非正交安装会引起交叉耦合误差。以上这些误差可以通过器件标定来加以补偿,以达到提高其精度的目的。

GPS/IMU的主要制造商包括:NovAtel、Leica、CSI Wireless以及Thales Navigation。其中,NovAtel提出了SPAN技术。SPAN集合了GPS定位的绝对精度与IMU陀螺和加速计测量的稳定性,以提供一个3D的位置、速度和姿态解算结果。即使在GPS信号被遮挡的时候,也能提供稳定连续的解算结果。基于SPAN技术,NovAte有两款主要的GPS/IMU产品:SPAN-CPT一体式组合导航系统与SPAN-FSAS分式组合导航系统。SPAN-CPT采用NovAtel自主的专业级的高精度GPS板卡与德国的iMAR公司制造的光纤陀螺IMU。其解算精度在不同的模式下可适用于不同的定位需求,支持包括SBAS,L波段(Omnistar和CDGPS)和RTK差分等多种方式;系统最高航向精度0.05°;俯仰横滚精度0.015°。SPAN-FSAS也采用德国iMAR公司高精度、闭环技术的IMU,其陀螺偏差小于0.75度/小时和加速计偏差小于1mg,配合目前NovAtel 的FlexPak6™或ProPak6™集成了组合导航解算。从IMU-FSAS的惯性测量数据发送到GNSS接收机进行解算,GNSS+INS的位置,速度和姿态输出速率高达200Hz。

图12 NovAtel两款GPS/IMU产品

计算平台

当硬件传感器接收到环境信息后,数据会被导入计算平台,由不同的芯片进行运算。计算平台的设计直接影响到无人驾驶系统的实时性以及鲁棒性。本节将深入了解无人驾驶计算平台。
计算平台实现

为了了解无人驾驶计算平台的要点,我们来看一个行业领先的某四级无人驾驶公司现有的计算平台硬件实现。为了了解芯片制造商将如何解决这些问题,我们来看现有的不同芯片制造商所提供的无人驾驶计算解决方案。

这个四级无人驾驶公司的计算平台由两计算盒组成。每个计算盒配备了一颗英特尔至强E5处理器(12核)和四到八颗NVIDIA K80 GPU加速器,彼此使用PCI-E总线连接。CPU运算峰值速度可达400帧/秒,消耗400W的功率。每个GPU运算峰值速度可达8Tops/s,同时消耗300W的功率。因此,整个系统能够提供64.5 TOP/S的峰值运算能力,其功率需求为3000W。计算盒与车辆上安装的十二个高精度摄像头相连接,以完成实时的物体检测和目标跟踪任务。车辆顶部还安装有一个激光雷达装置以完成车辆定位及避障功能。为了保证可靠性,两个计算盒执行完全相同的任务。一旦第一个计算盒失效,第二个计算盒可以立即接管。在最坏的情况下两个计算盒都在计算峰值运行,这意味着将产生超过5000瓦的功耗并急聚大量的热量,散热问题不容忽视。此外,每个计算盒的成本预计为2至3万美元,这是普通消费者根本无法承受的整体解决方案。

现有计算解决方案

接下来,我们将分别介绍现有的针对无人驾驶的计算解决方案。

基于GPU的计算解决方案

NVIDIA的PX平台是目前领先的基于GPU的无人驾驶解决方案。每个PX2由两个Tegra SoC和两个Pascal GPU图形处理器组成,其中每个图像处理器都有自己的专用内存并配备有专用的指令以完成深度神经网络加速。为了提供高吞吐量,每个Tegra SOC使用PCI-E Gen 2 x4总线与Pascal GPU直接相连,其总带宽为4 GB/s。此外,两个CPU-GPU集群通过千兆以太网项链,数据传输速度可达70 Gigabit/s。借助于优化的I/O架构与深度神经网络的硬件加速,每个PX2能够每秒执行24兆次深度学习计算。这意味着当运行AlexNet深度学习典型应用时,PX2的处理能力可达2800帧/秒。

图13 NVIDIA PX2

基于DSP的解决方案

德州仪器提供了一种基于DSP的无人驾驶的解决方案。其TDA2x SoC拥有两个浮点DSP内核C66x和四个专为视觉处理设计的完全可编程的视觉加速器。相比ARM Cortex-15处理器,视觉加速器可提供八倍的视觉处理加速且功耗更低。类似设计有CEVA XM4。这是另一款基于DSP的无人驾驶计算解决方案,专门面向计算视觉任务中的视频流分析计算。使用CEVA XM4每秒处理30帧1080p的视频仅消耗功率30MW,是一种相对节能的解决方案。

图14 TI TDA2

基于FPGA的解决方案

Altera公司的Cyclone V SoC是一个基于FPGA的无人驾驶解决方案,现已应用在奥迪无人车产品中。Altera公司的FPGA专为传感器融合提供优化,可结合分析来自多个传感器的数据以完成高度可靠的物体检测。类似的产品有Zynq专为无人驾驶设计的Ultra ScaleMPSoC。当运行卷积神经网络计算任务时,Ultra ScaleMPSoC运算效能为14帧/秒/瓦,优于NVIDIA Tesla K40 GPU可达的4帧/秒/瓦。同时,在目标跟踪计算方面,Ultra ScaleMPSoC在1080p视频流上的处理能力可达60fps。

图15 Altera Cyclone V

基于ASIC的解决方案

Mobileye是一家基于ASIC的无人驾驶解决方案提供商。其Eyeq5 SOC装备有四种异构的全编程加速器,分别对专有的算法进行了优化,包括有:计算机视觉、信号处理和机器学习等。Eyeq5 SOC同时实现了两个PCI-E端口以支持多处理器间通信。这种加速器架构尝试为每一个计算任务适配最合适的计算单元,硬件资源的多样性使应用程序能够节省计算时间并提高计算效能。

图16 MobilEye EyeQ5

计算平台体系结构设计探索

我们尝试对以下问题形成一些初步认识:

1.计算单位最适合什么样的工作负载;
    2.能否使用移动处理器执行无人驾驶计算任务;
    3.如何设计一个高效的无人驾驶计算平台。

计算单元与计算负载的匹配

我们试图了解哪些计算单元最适合执行卷积和特征提取类应用,这是无人驾驶场景中最计算密集型工作负载。我们在现有的ARM SOC上完成了实验验证,此ARM SOC一个四核CPU、GPU、 DSP组成。为了研究研究各种异构硬件的能耗与性能行为,我们分别在CPU、GPU、DSP实现并优化了特征提取和卷积这两类计算负载,同时测量了芯片级能耗。

首先,我们分别在CPU、GPU、DSP实现了卷积应用,这是在对象识别和目标跟踪任务中最常用、计算也最为密集的阶段。当在CPU上运行时,每次卷积大约需要8毫秒来完成,能耗为20MJ;在DSP上运行时,每次卷积需要5毫秒来完成,能耗为7.5MJ;在GPU运行时,每次卷积只需要2毫秒来完成,能耗也仅需4.5MJ。这表明,无论是性能和能耗表现,GPU是执行卷积任务最有效的计算单元。

接下来,我们实现了分别在CPU、GPU、DSP特征提取应用。特征提取为无人驾驶的定位产生特征点,这是定位阶段计算量最大的工作负载:在CPU上运行时,每个特征提取的任务大约需要20毫秒来完成,耗能50MJ;在GPU上运行时,每个特征提取的任务需要10毫秒来完成,耗能22.5 MJ;在DSP中运行时,每个特征提取的任务仅需要4毫秒,仅消耗6MJ。这些结果表明,从性能和能耗的角度出发,DSP是特征提取最有述分析,这是因为对GPU和DSP这类专注于并行的硬件而言,上述任务侧重于控制逻辑因为得不到高效执行。

移动处理器上的无人驾驶?

我们尝试了解无人驾驶系统在上述ARM移动SoC上的执行情况,并探索支持自动驾驶的最低硬件平台配置。图17显示了一个面向基于视觉的无人驾驶驾驶的移动SoC系统组成。在这个移动SoC实现中,我们利用DSP处理传感器数据,如特征提取和光流;我们使用GPU完成深度学习任务,如目标识别;采用两个CPU线程完成定位任务以实现车辆实时定位;我们使用一个CPU线程实现实时路径规划;使用另一个CPU线程进行避障操作。如果CPU尚未被全占有,多个CPU线程则可以在同一CPU核心上运行。

图17 无人驾驶的Mobile SOC设计

令人惊讶的是,实验数据证明,无人驾驶系统在ARM SOC上运行的性能并不差。定位流水线每秒可处理25帧图像,图像生成速度为每秒30帧图像,这说明产生的图像大部分可以得到及时处理,不会产生大规模的丢帧。深度学习流水线每秒能够执行2到3个目标识别任务。规划和控制流水线目标是在6MS内完成路径规划。当使用ARM移动端SOC进行无人驾驶时,我们能够以5英里/小时的速度行驶车辆,并且不损失任何定位信息;同时,整个SOC平均功耗为11W。移动SoC的硬件资源有限,能够支持有限范围内的无人驾驶系统确实是非常令人惊喜的发现。这说明如果增加更多的计算资源,硬件平台就能够处理更多的数据,并支持车辆以更快的速度行驶,最终满足产品级无人驾驶系统的需要。

控制平台

控制平台是无人车的核心部件,控制着车辆的各种控制系统,包括汽车防抱死制动系统(ABS)、汽车驱动防滑转系统(ASR)、汽车电子稳定程序(ESP)、电子感应制动控制系统(SBC)、电子制动力分配(EBD)、辅助制动系统(BAS)、安全气囊(SRS)和汽车雷达防碰撞系统、电控自动变速器(EAT)、无级变速器(CVT)、巡航控制系统(CCS)、电子控制悬架(ECS)、电控动力转向系统(EPS)等等。控制平台主要包括了电子控制单元ECU与通信总线两大部分:ECU主要实现控制算法,通信总线主要实现ECU以及机械部件间的通信功能。接下来我们详细介绍一下控制平台。

电子控制单元ECU

ECU(Electronic Control Unit)电子控制单元,俗称“车载电脑”。是汽车专用微机控制器,也叫汽车专用电脑。发动机工作时,ECU采集各传感器的信号,进行运算,并将运算的结果转变为控制信号,控制被控对象的工作。固有程序在发动机工作时,不断地与采集来的各传感器的信号进行比较和计算。把比较和计算的结果控制发动机的点火、怠速、废气再循环等多项参数的控制。它还有故障自诊断和保护功能。存储器也会不停地记录行驶中的数据,成为ECU的学习程序,为适应驾驶习惯提供最佳的控制状态,这叫自适应程序。在高级轿车上,有不止一只ECU,如防抱死制动系统、四轮驱动系统、电控自动变速器、主动悬架系统、安全气囊系统、多向可调电控座椅等都配置有各自的ECU。随着轿车电子化自动化的提高,ECU将会日益增多,线路会日益复杂。宝马、奔驰和奥迪三大车厂各系列高阶车款皆已包含超过一百个电子控制单元(ECU)。ECU的电压工作范围一般在6.5-16V(内部关键处有稳压装置)、工作电流在0.015-0.1A、工作温度在-40~80℃, 能承受1000Hz以下的振动,损坏率非常小。

ECU从用途上讲是汽车专用微机控制器,也叫汽车专用单片机。它和普通的单片机一样,由微处理器(CPU)、存储器(ROM、RAM)、输入/输出接口(I/O)、模数转换器(A/D)以及整形、驱动等大规模集成电路组成。存储器ROM中储存的是一套固定的程序,该程序是经过精确计算和大量实验取的数据为基础。固有程序在发动机工作时,不断地与采集来的各传感器的信号进行比较和计算,然后输出指令,以控制发动机的点火、空燃比、怠速、废气再循环等多项参数的设置,判断是否需要改变的喷油量多少,点火正时是需要提前还是延后,气门开度的大小等 。

详细来说,当发动机启动时,电控单元进入工作状态,某些程序从ROM中取出,进入CPU,这些程序专用于控制点火时刻、控制汽油喷射、控制怠速等等。执行程序中所需的发动机信息,来自各个传感器。这些传感器信号一经采集首先进入输入回路接受处理,如果是模拟信号,则需先经过A/D转换器转换成数字信号。大多数传感器信息将先暂存在RAM内,然后根据程序处理顺序由从RAM送至CPU。接下来是将存储器ROM中的参考数据引入CPU,与传感器输入数据进行比较。CPU在完成对这些数据比较运算后,作出决定并发出指令信号,经I/O接口进行放大,必要的信号还经D/A转换器变成模拟信号,最后经输出回路控制执行器动作。

随着轿车电子化自动化的提高,ECU将会日益增多,目前高端汽车在总计100多个ECU系统中包含多达200个微处理器。这数百个ECU,在汽车内部组成了一个区域网。一个ECU发出的数据包,所有的节点都会接收到,但只有承担该数据包任务的节点,才会去执行命令。举个例子,比如刹车灯。当监控刹车踏板的ECU,监测到踏板行程有变动时,就会通知监测尾灯的ECU。此时,该ECU控制尾灯,并将其通电点亮。这一个简单的操作,其实背后有至少2个ECU的配合。要让所有的这些ECU之间相互配合,就需要采用一种称为多路复用通信网络协议进行信息传递, 控制器区域网(Controllers Area Network,CAN)总线是其中之一。

借助CAN协议,汽车内部的数百个ECU可以组建一个区域网, 有效地解决线路信息传递所带来的复杂化问题。通用、沃尔沃、特斯拉等车型支持远程控制,其原理就是手机发出的指令先到达伺服器,然后被转发到车载通讯模块。车载通讯模块接收到指令后,再通过CAN总线将指令传达到各个ECU。

为了弥补CAN协议在某些方面的不足,汽车工业还研发出了很多其他协议,比如LIN协议。相比CAN,LIN的带宽要更小,承载的数据量更少,但同时成本也更低,适合应用于一些简单的ECU中,比如车窗升降等。随著技术进步,汽车内部的数据量暴增。尤其是大萤幕的普及和流媒体技术的介入,让CAN总线在某些时候“力不从心”,已无法胜任工作。于是,更高级的通讯协议问世了,比如MOST、FlexRay、乙太网等。这些协议标准,拥有更大的带宽与更强的稳定性。其中,MOST是一种高速多媒体传输接口,专门为汽车内部的一些高码率音频、视频提供传输。FlexRay也是一种高速协议,但不仅限于多媒体传输。在自动驾驶的奥迪A7中,位于后备箱的车载CPU(奥迪称之为zFAS)模组,就是依靠FlexRay协议来读取前置摄像头捕捉的数据。

EUC的主要生产厂商包括有博世(BOSCH)、德尔福(DELPHI)、马瑞利(MARELLI)、日立(Hitachi)、大陆(Continental)、日本电装(DENSO)等。主要产品包括有:博世的M7、M7.9.7、M7.9.7.1、ME7、ME7.9.7、ME7.8.8、EDC16、054K0;德尔福的MT20U2、MT20U、MT20、MR140、MT80、ITMS-6F;日立/电装的69J0、69EB、77J0、3601015A28K;西门子SIM2K-34、SIM2k-51.4、SIM2k-D51、SIMK43等系列。

CPU是ECU中的核心部分,它具有运算与控制的功能,发动机在运行时,它采集各传感器的信号,进行运算,并将运算的结果转变为控制信号,控制被控对象的工作。它还实行对存储器(ROM、RAM)、输入/输出接口和其他外部电路的控制。Power Train ECU采用的CPU基本来自于Infineon、ST、Freescale。BOSCH的16位ECU M(E)7系列早期主要使用Infineon C167内核的CPU。之后ST为BOSCH定制了ST10系列CPU,价格上更有优势,因此BOSCH后期的16位ECU都基本上采用ST10系列CPU。BOSCH的32位ECU ME9系列主要使用Freescale的PowerPC内核的CPU MPC55系列。ME9主要在美国市场上销售的MED17系列则使用Infineon的Tricore内核CPU TC17xx。MED17系列ECU有好多分枝,分别使用不同型号的TC17xx CPU。MEDC18系列依然沿用PowerPC路线,选择了选择ST和Freescale两家供应商,使用了Freescale的XPC56系列CPU以及ST的SPC56系列CPU。车身ECU的则选择更多,Infineon、ST、Freescale、NEC和瑞萨电子都提供相关CPU的支持。

通信总线

随着汽车各系统的控制逐步向自动化和智能化转变,汽车电气系统变得日益复杂。为了满足各电子系统的实时性要求,我们须对汽车数据,如发动机转速、车轮转速、节气门踏板位置等信息,实行共享,因而我们需要汽车通信总线。目前,车用总线技术被美国汽车工程师协会SAE下属的汽车网络委员会按照协议特性分为A、B、C、D四类。

图18 车用通信总线

下面我们主要了解下局部互联协议LIN,控制器局域网CAN,以及高速容错网络协议FlexRay。

局部互联协议LIN

LIN是面向汽车低端分布式应用的低成本,低速串行通信总线。它的目标是为现有汽车网络提供辅助功能,在不需要CAN总线的带宽和多功能的场合使用,降低成本。LIN相对于CAN的成本节省主要是由于采用单线传输、硅片中硬件或软件的低实现成本和无需在从属节点中使用石英或陶瓷谐振器。这些优点是以较低的带宽和受局限的单宿主总线访问方法为代价的。LIN采用单个主控制器多个从设备的模式,在主从设备之间只需要1根电压为12伏的信号线。这种主要面向“传感器/执行器控制”的低速网络,其最高传输速率可达20Kb/S,主要应用于电动门窗、座椅调节、灯光照明等控制。典型的LIN网络的节点数可以达到12个。以门窗控制为例,在车门上有门锁、车窗玻璃开关、车窗升降电机、操作按钮等,只需要1个LIN网络就可以把它们连为一体。而通过CAN网关,LIN网络还可以和汽车其他系统进行信息交换,实现更丰富的功能。

LIN包含一个宿主节点(Master)和一个或多个从属节点(Slave)。所有节点都包含一个被分解为发送和接收任务的从属通讯任务,而宿主节点还包含一个附加的宿主发送任务。在实时LIN中,通讯总是由宿主任务发起的。除了宿主节点的命名之外,LIN网络中的节点不使用有关系统设置的任何信息。我们可以在不要求其它从属节点改变硬件和软件的情况下向LIN中增加节点。宿主节点发送一个包含同步中断、同步字节和消息识别码的消息报头。从属任务在收到和过滤识别码后被激活并开始消息响应的传输。响应包含两个、四个或八个数据字节和一个检查和(checksum)字节。报头和响应部分组成一个消息帧。LIN总线上的所有通讯都由主机节点中的主机任务发起,主机任务根据进度表来确定当前的通讯内容,发送相应的帧头,并为报文帧分配帧通道。总线上的从机节点接收帧头之后,通过解读标识符来确定自己是否应该对当前通讯做出响应、做出何种响应。基于这种报文滤波方式,LIN可实现多种数据传输模式,且一个报文帧可以同时被多个节点接收利用。

图19 LIN总线

控制器局域网CAN

在当前的汽车总线网络市场上,占据主导地位的是CAN总线。CAN总线是德国博世公司在20世纪80年代初为了解决现代汽车中众多的控制与测试仪器之间的数据交换问题而开发的一种串行数据通讯协议。它的短帧数据结构、非破坏性总线性仲裁技术及灵活的通讯方式适应了汽车的实时性和可靠性要求。CAN总线分为高速和低速两种,高速CAN最高速度为1Mbps(C类总线),低速CAN为250Kbps(B类总线)。

图20 CAN总线

CAN总线一般为线型结构,所有节点并联在总线上。当一个节点损坏时,其他节点依然能正常工作。但当总线一处出现短路时,整个总线便无法工作。CAN总线是采用CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)机制。各节点会一直监听总线,发现总线空闲时便开始发送数据。当多个节点同时发送数据时,会通过一套仲裁机制竞争总线。每个节点会先发送数据的ID,ID越小表示优先级越大,优先级大的会自动覆盖小的ID。当节点发现自己发送的ID被覆盖掉时,就知道有比他优先级更高的消息正在被发送,便自动停止发送。优先级最高的消息获得总线使用权,开始发送数据。当高优先级的数据包发送完后,各节点便又尝试竞争总线。如此反复下去。这样能最大程度的利用总线。弊端是会有时效延迟,优先级越低的数据包,可能需要等待的时间越长。从这点上来讲,CAN总线不是一种实时总线。当CAN总线有节点发现当前发送的数据有误时,会发送错误帧告知总线上的所有节点。发送错误数据的节点会重发。每个节点都有一个错误计数器。当一个节点总是发送或接收错误超过一定次数时,会自动退出总线。

高速容错网络协议FlexRay

FlexRay总线数据收发采取时间触发和事件触发的方式。利用时间触发通信时,网络中的各个节点都预先知道彼此将要进行通信的时间,接收器提前知道报文到达的时间,报文在总线上的时间可以预测出来。即便行车环境恶劣多变,干扰了系统传输,FlexRay协议也可以确保将信息延迟和抖动降至最低,尽可能保持传输的同步与可预测。这对需要持续及高速性能的应用(如线控刹车、线控转向等)来说,是非常重要的。

图21 FlexRay总线

FlexRay总线用的是TDMA(Time Division Multiple Access)和FTDMA(Flexible Time Division Multiple Access)两种周期通信方法。FlexRay将一个通信周期分为静态部分、动态部分、网络空闲时间。静态部分使用TDMA方法,每个节点会均匀分配时间片,每个节点只有在属于自己的时间片里面才能发送消息,即使某个节点当前无消息可发,该时间片依然会保留(也就造成了一定的总线资源浪费)。在动态部分使用FTDMA方法,会轮流问询每个节点有没有消息要发,有就发,没有就跳过。静态部分用于发送需要经常性发送的重要性高的数据,动态部分用于发送使用频率不确定、相对不重要的数据。当FlexRay总线通信过程中出现数据错误时,该周期里接收到的所有数据都会被丢弃掉,但没有重发机制。所有节点会继续进行下一个周期的通信。FlexRay同样也有错误计数器,当一个节点发送接收错误过多时会被踢出总线。

FlexRay具有高速、可靠及安全的特点。FlexRay在物理上通过两条分开的总线通信,每一条的数据速率是10MBit/s。FlexRay还能够提供很多网络所不具有的可靠性特点。尤其是FlexRay具备的冗余通信能力可实现通过硬件完全复制网络配置,并进行进度监测。FlexRay同时提供灵活的配置,可支持各种拓扑,如总线、星型和混合拓扑。FlexRay本身不能确保系统安全,但它具备大量功能,可以支持以安全为导向的系统(如线控系统)的设计。

宝马公司在07款X5系列车型的电子控制减震器系统中首次应用了FlexRay技术。此款车采用基于飞思卡尔的微控制器和恩智浦的收发器,可以监视有关车辆速度、纵向和横向加速度、方向盘角度、车身和轮胎加速度及行驶高度的数据,实现了更好的乘坐舒适性以及驾驶时的安全性和高速响应性,此外还将施加给轮胎的负荷变动以及底盘的振动均减至最小。

结论

如果说算法是无人驾驶的灵魂,那么硬件平台就是无人驾驶的肉体。一个没有肉体的灵魂也只是孤魂野鬼而已。再高大上的算法也需要实现在硬件平台上才有实用价值。而硬件平台的设计直接决定了无人驾驶对环境的感知能力,计算性能与能耗,鲁棒性,安全性等。而无人驾驶的硬件平台又分为传感器平台、计算平台、以及控制平台三大部分。本文详细介绍这三种平台以及现有的解决方案。希望本文对无人驾驶从业者以及爱好者选择硬件的时候有帮助。

作者简介:

唐洁,华南理工大学计算机科学与工程学院副教授。主要从事面向无人驾驶和机器人的大数据计算与存储平台、面向人工智能的计算体系架构、面向机器视觉的嵌入式系统研究。
    刘少山,PerceptIn联合创始人。加州大学欧文分校计算机博士,研究方向:智能感知计算、系统软件、体系结构与异构计算。现在PerceptIn主要专注于SLAM技术及其在智能硬件上的实现与优化。

【无人驾驶系列十】无人驾驶硬件平台设计相关推荐

  1. BizTalk开发系列(十二) Schema设计之Group与Order

    更多内容请查看:BizTalk动手实验系列目录                       BizTalk 开发系列 开发BizTalk项目的时候会先约定各系统之间往来的消息格式. 由于BizTalk ...

  2. 【无人驾驶系列九】无人驾驶系统安全

    目前针对无人车攻击的方法有许多,如何防御这些攻击以保证无人车的安全是个重要的课题.本文是无人驾驶技术系列的第九篇,详细介绍针对无人车传感器.操作系统.控制系统.车联网的攻击手段以及防御方法. 针对无人 ...

  3. 【无人驾驶系列四】 基于Spark与ROS分布式无人驾驶模拟平台

    本文是无人驾驶技术系列的第四篇,着重介绍基于Spark与ROS的分布式无人驾驶模拟平台.无人驾驶的安全性和可靠性是通过海量的功能和性能测试来保证的.无人驾驶系统是一个复杂的系统工程,在它的整个研发流程 ...

  4. 来自极客标签10款最新设计素材-系列十六

    本周我们推荐来自极客标签社区带来的10款免费设计素材,大家可以在这里免费下载你需要的内容.如果你也有更好的作品,欢迎分享到社区中来,在得到帮助的同时,也能与更多人分享来自你的作品. 免费图标:扁平风格 ...

  5. 无人驾驶系列——概述

    无人驾驶行业概述 什么是无人驾驶 A self-driving car, also known as an autonomous car, driver-less car, or robotic ca ...

  6. ChatGPT常用的指令(prompts)系列十——房地产经纪人、物流人员、牙医、网站设计

    系列文章目录 内容翻译自:https://github.com/f/awesome-chatgpt-prompts,并加入自己的实践内容 1. ChatGPT常用的提示语(prompts)系列一 2. ...

  7. 计算机游戏设计软件有哪些,除了玩游戏还能做设计?十代酷睿设计软件实操

    众所周知,英特尔酷睿H系列处理器是主要面向游戏本推出的平台.但是近年来随着英特尔与业界合作伙伴共同努力,并细分出创意设计PC之后,兼顾多核心和高主频特性,并拥有先进指令集的酷睿H系列处理器也成为这类新 ...

  8. Oracle Golden Gate 系列十五 -- GG Trails 说明

    一.Trails 说明 理论知识在系列一里有说明,这里在拿出来看一下: Oracle Golden Gate 系列一 -- GG 架构 说明 http://blog.csdn.net/tianleso ...

  9. 数学之美 系列十 有限状态机和地址识别

    数学之美 系列十 有限状态机和地址识别 地址的识别和分析是本地搜索必不可少的技术,尽管有许多识别和分析地址的方法,最有效的是有限状态机. 一个有限状态机是一个特殊的有向图(参见有关图论的系列),它包括 ...

最新文章

  1. idea中设置指向源代码Scala
  2. api分层内部外部 spring_java - Spring boot restful API分层架构验证 - SO中文参考 - www.soinside.com...
  3. 云效助力新金融DevOps转型——南京银行实践之路
  4. LUA表 pairs, ipairs输出顺序问题
  5. else if mybatis 嵌套_新手如何书写C++代码,远离深度嵌套的if-else
  6. mysql between 查询不出来_mysql的语句优化
  7. 深度优先搜索之在图上寻找路径
  8. php递归删除空数组,php 递归删除非空文件夹示例
  9. 自监督学习详细介绍(学习笔记)
  10. FDTD Solutions初学笔记
  11. html 在线测试 鱼缸,研究员试图用AR鱼缸欺骗鱼的感官系统,结果反被鱼识破
  12. Oracle | Oracle初级全程学习笔记
  13. python 3 过滤股票
  14. bootstrap中使用日历控件
  15. linux 常用文本处理工具
  16. UUP, Windows 11 更新机制的未来
  17. 中枢神经的运动控制理论,神经网络运动控制方式
  18. LEARN TO DESIGN THE HEURISTICS FOR VEHICLE ROUTING PROBLEM翻译
  19. 51单片机 Proteus仿真 简易计算器设计 清零 十以内
  20. 介绍Namada:链间资产不可知(Asset-agnostic)隐私

热门文章

  1. 多普达硬启动方法整理
  2. linux ip1180,Fedora Ubuntu 成功安装 佳能 ip1180 打印机驱动
  3. 机房搬迁IBM磁盘阵列哪些信息需要抓取
  4. 汉泰示波器 6524BD
  5. Pandas的学习之——使用Pandas进行描述性统计
  6. 搞笑诺贝尔颁出,中国科学家入选!阿蟑有磁性、睾丸热不对称,10大奇葩研究来了...
  7. msys2及MinGW工具使用学习笔记
  8. 游戏资讯查询易语言代码
  9. Python实现Decision Tree
  10. 新手买房必读的25个购房小知识