精华内容
下载资源
问答
  • 关于硬件加速哪些优秀的资源总结

    千次阅读 2016-09-03 14:53:24
    (1)简而言之,transform 动画由GPU控制,支持硬件加速,并不需要软件方面的渲染。(2)浏览器接收到页面文档后,会将文档中的标记语言解析为DOM树。DOM树和CSS结合后形成浏览器构建页面的渲染树。渲染树中包含了...

    问题1:transform动画为什么没有经过大量的重绘?

    解答:为什么 transform 没有触发 repaint 呢?(1)简而言之,transform 动画由GPU控制,支持硬件加速,并不需要软件方面的渲染。(2)浏览器接收到页面文档后,会将文档中的标记语言解析为DOM树。DOM树和CSS结合后形成浏览器构建页面的渲染树。渲染树中包含了大量的渲染元素,每一个渲染元素会被分到一个图层中,每个图层又会被加载到GPU形成渲染纹理,而图层在GPU中transform 是不会触发 repaint 的,这一点非常类似3D绘图功能,最终这些使用 transform 的图层都会由独立的合成器进程进行处理。(3)3D 和 2D transform 的区别就在于,浏览器在页面渲染前为3D动画创建独立的复合图层,而在运行期间为2D动画创建。动画开始时,生成新的复合图层并加载为GPU的纹理用于初始化 repaint。然后由GPU的复合器操纵整个动画的执行。最后当动画结束时,再次执行 repaint 操作删除复合图层。(4)如果某一个元素的背后是一个复杂元素,那么该元素的 repaint 操作就会耗费大量的资源,此时也可以使用上面的技巧来减少性能开销(transform)。内容摘自CSS动画之硬件加速  CSS3 Filter的十种特效

    问题2:chrome浏览器控制台可能牵涉的渲染过程?

    recaculate style:这个过程是根据CSS选择器,比如.headline或.nav > .nav_item,对每个DOM元素匹配对应的CSS样式。这一步结束之后,就确定了每个DOM元素上该应用什么CSS样式规则。

    layout:上一步确定了每个DOM元素的样式规则,这一步就是具体计算每个DOM元素最终在屏幕上显示的大小和位置。web页面中元素的布局是相对的,因此一个元素的布局发生变化,会联动地引发其他元素的布局发生变化。比如,<body>元素的宽度的变化会影响其子元素的宽度,其子元素宽度的变化也会继续对其孙子元素产生影响。因此对于浏览器来说,布局过程是经常发生的。

    Paint Setup and Paint:本质上就是填充像素的过程。包括绘制文字、颜色、图像、边框和阴影等,也就是一个DOM元素所有的可视效果。一般来说,这个绘制过程是在多个层上完成的

    update layer tree:更新RenderLayer树

    composite layers:对页面中DOM元素的绘制是在多个层上进行的。在每个层上完成绘制过程之后,浏览器会将所有层按照合理的顺序合并成一个图层,然后显示在屏幕上。对于有位置重叠的元素的页面,这个过程尤其重要,因为一旦图层的合并顺序出错,将会导致元素显示异常。

    补充学习使用Chrome DevTools的Timeline和Profiles提高Web应用程序的性能 使用Chrome DevTools的Timeline分析页面性能  使用CSS3开启GPU硬件加速提升网站动画渲染性能   Google Chrome中的高性能网络(一)  Chrome渲染分析之Timeline工具的使用

    你可以仔细阅读Progressive Web App Dev Summit来了解CSS/JS->Style->计算样式->布局->绘制->渲染层合并的流程。同时使用transform/opacity实现动画效果一文也明确指出了如何通过上面的内容来提升动画的性能:

    (1)只使用transform/opacity来实现动画效果。但是这时候提升动画性能(没有reflow/repaint)是有条件的,也就是动画元素必须独占一个层,这时候可以通过第二点来实现

    (2)用`will-change`/`translateZ`属性把动画元素提升到单独的渲染层中
    (3)避免滥用渲染层提升:更多的渲染层需要更多的内存和更复杂的管理,同时由于每个渲染层的纹理都需要上传到GPU处理,因此我们还需要考虑CPU和GPU之间的带宽问题、以及有多大内存供GPU处理这些纹理的问题。

     (4)如果transform/opacity无法实现的动画,那么可以参考 FLIP principle

    下面属性的修改都会导致回流:


    如上图position,font-family,vertical-align,clear,lin-height等都会导致页面的回流。外加上一个clip属性也会导致页面的回流和重绘


    如果你动态修改上述任何一个属性都会导致重绘,同时他们所属的层会被传递到GPU中。在移动设备上是昂贵的,因为移动设备的GPU相比于桌面应用要弱小的多,而且CPU和GPU之间的通道有限,因此传输纹理可能需要很长的时间。

    动画的良好表现是提升用户体验的法宝,因此我们应该尽量避免对那些会导致重绘和回流的元素进行动画设置,因为他们是昂贵的而且会导致丢帧的问题。最好提前声明动画,因为这样浏览器可以提前对动画进行优化。目前为止transform是最好的设置动画的属性,因此如果你的动画可以使用下列的属性来完成,那么就应该用下面的属性进行替换:
    opacity,translate,rotate,scale。原文地址High Performance Animations 译文地址:前端性能优化(CSS动画篇)。当然,还有其他的属性也可能减少页面回流和重绘:

    在《你不知道的Z-Index》中有提到,如果某个元素处于以下状态:
    当一个元素位于HTML文档的最外层(元素)
    当一个元素position不为initial,并且拥有一个z-index值(不为auto)
    当一个元素被设置了opacity,transforms, filters, css-regions, paged media等属性。
    (当然还会有其他情况)
    那么就会产生一个新的渲染层(我觉得是是堆叠上下文,可以用于不同的composite layer之间的叠加次序),这时候执行动画,只需要GPU按照现有的位图,按照相应的变换在独立的渲染层中输出,然后再合并输出。这个过程并不需要主线程CPU的参与。你也可以阅读前端性能优化之更平滑的动画以及该文章引用的其他文章,但是个人认为,这里的堆叠上下文不是浏览器渲染时候的层的概念,只是元素排列时候堆叠次序。深入理解CSS中的层叠上下文和层叠顺序一文指出,层叠上下文只是为了解释元素发生重叠时候的表现形式,和我们这里说的分层的概念是完全不同的

    减少chrome硬件加速的抖动问题:

    -webkit-backface-visibility:hidden;
    -webkit-perspective:1000;

    3.网页的样式计算和布局计算?

    renderobject:对于所有的可视节点(script,meta,head等除外)webkit都会建立renderobject对象,该对象保存了为绘制dom节点所必需的各种信息,例如样式布局信息,经过webkit处理后renderobject对象知道如何绘制自己。下面情况都会为dom节点建立renderobject对象:

     dom树的document节点;dom树中的可视节点,如html,div等,webkit不会为非可视节点创建renderobject对象;某些情况下需要创建匿名的renderobject对象,其不对应dom树中任何节点,只是webkit处理上的需要,典型的就是匿名的renderblock节点

    renderobject树:这些renderobject对象同dom节点类似,也构成一棵树,称为renderobject树。

    注意:renderobject树时基于dom树建立的一颗新树,是为了布局计算和渲染等机制建立的一种新的内部表示.如果dom树中被动态添加了新的节点,webkit也需要创建相应的renderobject对象


    注意:从上图可以看出htmldocument节点对应于renderview节点,renderview节点时renderobject树的根节点。同时head元素也没有创建renderobject对象

    dom树建立之后->css解析器和规则匹配->renderobject树建立。css解析器和规则匹配处于dom树建立之后,renderobject树建立之前,css解释后的结果会保存起来,然后renderobject树基于该结果进行规范匹配和布局计算。当网页有用户交互和动画等动作的时候通过cssom等技术,js代码同样可以方便的修改css代码,webkit此时需要重新计算样式并重复以上过程。

    当webkit创建了renderoject对象后每个对象都是不知道自己的位置,大小等信息的(实际的布局计算在renderobject类中),webkit根据框模型计算他们的位置大小等信息的过程称为布局计算或者排版。布局计算分为两类:第一类是对整个renderobject树进行计算。第二类是对renderobject中某个子树的计算,常见于文本元素活着overflow:auto块的计算,这种情况一般是子树布局的改变不会影响其周围元素的布局,因此不需要计算更大范围内的布局。

    布局计算是一个递归的过程,这是因为一个节点的大小通常需要计算他的子女节点的位置大小等信息。步骤如下:

    首先,函数(renderobject的layout函数)判断renderobject节点是否需要重新计算。通常需要检查位数组中的相应标记位,子女是否要重新计算等

    其次,函数确定网页的宽度和垂直方向上的外边距,这是因为网页通常是在垂直方向上滚动而垂直方向上尽量不需要滚动。

    再次,函数会遍历每一个子女节点,依次计算他们的布局。每一个元素会实现自己的layout函数,根据特定的算法来计算该类型元素的布局,如果页面元素定义了自身的宽高。那么webkit按照定义的宽高来确定元素的大小,而对于文字节点这样的内联元素需要结合字号大小和文字的多少来确定对应的宽高。如果页面元素所确定的宽高超出了布局容器包含快所提供的宽高,同时overflow为visible或者auto,webkit会提供滚动条显示所有内容。除非网页定义了页面元素的宽高,一般来说页面元素的宽高实在布局的时候通过计算得到的。如果元素有子女元素那么需要递归这个过程。

    最后,节点依据子女们的大小计算的高度得到自己的高度,整个过程结束。那么哪些情况下需要重新计算:

    首先,网页首次打开的时候,浏览器设置网页的可是区域,并调用计算布局的方法。这也是一个可见的场景,就是当可视区域发生变化的时候,webkit都需要重新计算布局,这是因为网页块大小发生了变化(rem时候很显然)

    其次,网页的动画会触发布局计算,当网页显示结束后动画可能改变样式属性,那么webkit需要重新计算

    然后,js代码通过cssom等直接修改样式信息,也会触发webkit重新计算布局

    最后,用户的交互也会触发布局计算,如翻滚网页,这会触发新区域布局的计算

    注意:布局计算相对比较耗时,一旦布局发生变化,webkit就需要后面的重绘制操作。另一方面,减少样式的变动而依赖现在html5新功能可能有效的提高网页的渲染效率。

    4.网页层次和renderlayer树?

     网页是可以分层的,原因之一是方便网页开发者开发网页并设置网页的层次,二是为了webkit处理上的便利,也就是说为了简化渲染的逻辑。webkit会为网页的层次创建相应的renderlayer对象。当某些类型的renderobject的节点或者具有某些css样式的renderobject节点出现的时候,webkit就会为这些节点创建renderlayer对象。一般来说,某个renderobject节点的后代的都属于该节点,除非webkit根据规则为某个后代的renderobject节点创建了一个新的renderlayer对象。

    注意:renderlayer树时基于renderobject树建立起来的一颗新树,而且renderlayer节点和renderobject节点不是一一对应关系,而是一对多的关系。下面的情况renderobject对象需要建立新的renderlayer节点(而不是独立的图层,注意下面所说的图层是表示在chrome中有黄色的框包围):

    (1)It's the root object for the page
    (2)It has explicit CSS position properties (relative, absolute or a transform)
    (3)It is transparent
    (4)Has overflow, an alpha mask or reflection
    (5)Has a CSS filter
    (6)Corresponds to <canvas> element that has a 3D (WebGL) context or an accelerated 2D context
    (7)Corresponds to a <video> element

    下面是《webkit技术内幕的翻译版》:

    (1)dom树的document节点对应的renderview节点

    (2)dom树中的document的子女节点,也就是html节点对应的renderblock节点

    (3)显示的指定css位置的renderobject对象

      注意,下面的CSS不会产生一个独立的层(chrome中没有黄色的框包围),但是会产生一个renderLayer对象。

       div{
         	background-color: #ccc;
         	width:400px;
         	height:400px;
         	position: absolute;
         	left:100px;
         	top:100px;
         	transition:width 5s linear;
         	overflow: hidden;
         }
         .hv{
            width:100px;
         }

    (4)有透明效果(transparent)的renderobject对象,如果仅仅设置了一个opacity是不会产生一个独立的层的。这里如果是transparent就只会产生一个renderLayer节点,但是这里却会产生一个图层

        div{
         	background-color: #ccc;
         	width:400px;
         	height:400px;
         	opacity: 0.8;
         	transition:opacity 5s linear;
         	/*有opacity的变化也会产生一个独立的层,这里的transition可以是all也可以是opacity*/
         }
         .hv{
         	 opacity: 0;
         }

    (5)有节点溢出(overflow),alpha或者反射等效果的renderobject对象

    (6)使用canvas2d和3d(webgl)技术的renderobject对象

        canvas{
         	background-color: #ccc;
         	position:absolute;
         	left:100px;
         	top:100px;
         }
    
    上面这个canvas也不会产生一个独立的图层(但是会产生一个RenderLayer节点),但是如果结合第8点的transform就可以产生图层了

    (7)video节点对应的renderobject对象(其他情况参见CSS3硬件加速也有坑!!!)

    <video src="http://www.w3school.com.cn/i/movie.ogg"></video>

    (8)CSS Transform元素(通过把传递到GPU中的纹理和特定的transform属性结合产生图像就可以了,不需要重绘),这里会产生一个独立的图层,而不仅仅是Renderlayer

     如下:

      transform: translate3d(0,0,0);
       transform:translateZ(0);
      transform: scale3d(1,1,1);
      transform: scaleZ(1);
      transform:rotate3d(0,0,0,0);
    

    transform的scale/translate/rotate的动画也是会产生一个独立的图层的

    
    

     .container{
      	background-color: #ccc;
      	height:100px;
      	width:100px;
        transform:scale(0.5);
        transition:transform 5s linear;
       /*  这里的scale动画也会产生一个单独的图层,因此不会产生重绘回流等*/
      }
      .hv{
      	transform:scale(1);
      }

    如果仅仅设置一个transform其他的属性是不会产生一个独立的图层的,但是如果是一个动画又会产生一个独立的图层,通过动态的为元素添加下面这个running属性同样会产

    生一个独立的图层

    .running {
      animation: run-around 4s infinite;
    }
    @keyframes run-around {
      0%{
        transform: translate(0, 0);
      }
      25% {
        transform: translate(200px, 0);
      }
      50% {
        transform: translate(200px, 200px);
      }
      
      75% {
        transform: translate(0, 200px);
      }
    }

    3D 和 2D transform 的区别就在于,浏览器在页面渲染前为3D动画创建独立的复合图层,而在运行期间为2D动画创建。动画开始时,生成新的复合图层并加载为GPU的纹理用于初始化 repaint。然后由GPU的复合器操纵整个动画的执行。最后当动画结束时,再次执行 repaint 操作删除复合图层。摘抄自CSS动画之硬件加速

    注意:filter属性也不会产生一个独立的层,但是会产生一个RenderLayer对象

    那些renderLayer具有独立的后端存储?

    To make use of the compositor, some (but not all) of the RenderLayers get their own backing surface (layers with their own backing surfaces are broadly referred to as compositing layers). Each RenderLayer either has its own GraphicsLayer (if it is a compositing layer) or uses the GraphicsLayer of its first ancestor that has one. This is similar to RenderObject’s relationship with RenderLayers.(不是每一个RenderLayer都有自己的后端存储的,如果具有自己独立的GraphicLayer的RenderLayer对象就叫做合成层,合成层的概念见文末) 摘抄自GPU Accelerated Compositing in Chrome

    什么样的元素才能创建自己独立的后端存储呢(有了独立的后端存储就表示这个层只有该元素本身,这样对transform/opacity动画是绝好的机会,因为创建了独立的图层而且不需要重绘回流,而只有合成就可以了)?在Chrome中至少要符合以下条件之一:
    Layer has 3D or perspective transform CSS properties(有3D元素的属性)
    Layer is used by <video> element using accelerated video decoding(video标签并使用加速视频解码)
    Layer is used by a <canvas> element with a 3D context or accelerated 2D context(canvas元素并启用3D)
    Layer is used for a composited plugin(插件,比如flash)
    Layer uses a CSS animation for its opacity or uses an animated webkit transform(CSS动画)
    Layer uses accelerated CSS filters(CSS滤镜)

    div {
        min-height: 380px;
        margin-bottom: 20px;
        background-image: url('./woman.jpg');
        background-size: cover;
        background-repeat: no-repeat;
        filter: blur(60px) saturate(120%) brightness(140%);
        -webkit-tap-highlight-color: rgba(0,0,0,0);/*这个仅仅使用filter是不会产生一个独立的层的,除非结合translate3d等*/
      }
    Layer with a composited descendant has information that needs to be in the composited layer tree, such as a clip or reflection(有一个后代元素是独立的layer)
    Layer has a sibling with a lower z-index which has a compositing layer (in other words the layer is rendered on top of a composited layer)(元素的相邻元素是独立layer)

    以上内容来自:Javascript高性能动画与页面渲染

    下面是renderobject树和renderlayer树对应关系


    注意:上图renderlayer树应该包含三个renderlayer节点-根节点,子女节点以及叶子节点

    除了跟节点,也就是renderlayer节点,一个renderlayer节点的父亲就是该renderlayer节点对应的renderobject节点的祖先链中最近的祖先,并且祖先所在的renderlayer节点同该节点的renderlayer节点不同。基于这个原理,这些renderlayer节点也就构成了一个renderlayer树。每个renderlayer节点包含的renderobject节点都是一个renderobject子树,理想情况下,每个renderlayer对象都有一个后端类,这个后端类涌来存储改renderlayer对象的绘制结果。renderlayer节点可以有效的减少网页的复杂程度,并且在很多情况下能够减少页面重新渲染的开销。注意:renderlayer没有子类,但是renderobject有子类的概念,renderlayer只是表示网页的一个层次,没有子层次的概念。

    <!doctype html>
    <html>
    <head>
      <title></title>
      <style type="text/css">
        video,div,canvas{
          -webkit-transform:rotateY(30deg) rotateX(-45deg);
        }
      </style>
    </head>
    <body>
     <video src='vidwo.mp4'></video>
     <div>
       <canvas id='a2d'></canvas>
       <canvas id='a3d'></canvas>
     </div>
     <script type="text/javascript">
         var size=300;
         var a2dCtx=document.getElementById('a2d').getContext('2d');
         a2dCtx.canvas.width=size;
         a2dCtx.canvas.height=size;
         a2dCtx.fillStyle='rgba(0,192,192,80)';
         a2dCtx.fillRect(0,0,200,200);
         var a3dCtx=document.getElementById('a3d').getContext('experimental-wbgl');
    a3dCtx.canvas.width=size;
    a3dCtx.canvas.height=size;
    a3dCtx.clearColor(0.0,192.0/255.0,80.0/255.0);
    a3dCtx.clear(a3dCtx.COLOR_BUFFER_BIT);
     </script>
    </body>
    </html>

    这个例子就会创建四个层,如下图:


    所谓的根层就是跟节点创建的层,它对应着整个网页的文档对象。video对象创建一个层可以有效的处理视频解码器和浏览器之间的交互和渲染。同时需要3d转换的元素也会创建相应的层。位置上根层在最后,层3和层4在最前面。webkit创建新层实际上是为了渲染引擎处理上的方便和高效。下面的例子也会创建两个层:

    <!doctype html>
    <html>
    <head>
      <style>
      div {
        animation-duration: 5s;
        animation-name: slide;
        animation-iteration-count: infinite;
        animation-direction: alternate;
        width: 200px;
        height: 200px;
        margin: 100px;
        background-color: gray;
      }
      @keyframes slide {
        from {
          transform: rotate(0deg);
        }
        to {
          transform: rotate(120deg);
        }
      }
      </style>
    </head>
    <body>
      <div>I am a strange root.</div>
    </body>
    </html>
    通常,Chrome 会将一个层的内容在作为纹理上传到 GPU 前先绘制(paint)进一个位图中。如果内容不会改变,那么就没有必要重绘(repaint)。这样处理很好:花在重绘上的时间可以用来做别的事情,例如运行 JavaScript,如果绘制的时间很长,还会造成动画的故障与延迟。Chrome 并不会始终重绘整个层,它会尝试智能的去重绘 DOM 中失效的部分。在本例中,我们修改的 DOM 元素和整个层同样大小。但是在其他众多例子中,一个层内会存在多个 DOM 元素。至于为什么是后面的层更加靠近观察者,请仔细阅读深入理解CSS中的层叠上下文和层叠顺序

    5.webkit的渲染过程?

    第一阶段:从网页的url到构建完dom树

    具体示意图如下:


    注意:网页在加载和渲染过程中会发出domcontent事件和dom的onload事件,分别在dom树构建完成以及dom树构建完并且网页所依赖的资源都加载完成之后。

    具体过程如下:

    1.网页输入URL时候,webkit调用其资源加载器(总共有三类:特定资源加载器如imageloader,资源缓存机制的资源加载器如cachedresourceloader,通用资源加载器resourceloader)加载该URL对应的网页

    2.加载器依赖网页模块建立连接,发起请求并接受回复

    3.webkit接受到各种网页或者资源的数据,其中某些资源可能是异步的或者同步的

    4.网页被加载给html解释器变成一系列的词语(token)

    5.解析器根据词语构建节点node,形成dom树

    6.如果节点是js代码的话,调用js引擎解释并执行

    7.js代码可能会修改dom树的结构

    8.如果节点需要依赖其他资源,例如图片,css,视频等,调用资源加载器加载他们,但是他们是异步的,不会阻碍当前dom树的构建。如果是js资源,那么需要停止当前dom树的构建,直到js资源加载并将被js引擎执行后才继续dom树的构建。我们看看html解析器的解析过程:


    第二阶段:从dom树到构建完webkit绘图上下文(webkit利用css和dom树构建renderobject树直到绘图上下文)。具体过程如下:


    注意:renderobject树的建立并不表示dom树被销毁,事实上上面四个内部表示结构一直存在,直到网页被销毁,因为他们对于网页的渲染起了很大的作用

    1.css文件被css解析器解释成为内部表示结构

    2.css解析器工作完成之后,在dom树上附加解释后的样式信息,这就是renderobject树

    3.renderobject节点在创建的同时,webkit会根据网页的层次结构创建renderlayer树,同时构建一个虚拟的绘图上下文

    第三阶段:从绘图上下文到最终的图像


    这一过程主要依赖于2d和3d图像库,具体过程如下:

    1.绘图上下文时一个与平台无关的抽象类,它将每个绘图操作桥接到不同的具体实现类,也就是绘图具体实现类

    2.绘图实现类也可能有简单的实现,也可能有复杂的实现,在chromium中,他的实现相当复杂,需要chromium合成器来完成复杂的多进程和gpu加速

    3.绘图实现类将2d图形库和3d图形库绘制的结果保存下来,交给浏览器来同浏览器界面一起显示

    总结:现在的网页很多是动态的网页,这意味着在渲染完成之后,由于网页的动画或者用户的交互,浏览器其实一直在不停的重复执行渲染过程

    6.chrome控制台浏览器的加载过程





    我们试试navigation.timing


    navigationStart

    当load/unload动作被触发时,也可能是提示关闭当前文档时(即回车键在url地址栏中按下,页面被再次刷新,submit按钮被点击)。如果当前窗口中没有前一个文档,

    那么navigationStart的值就是fetchStart。 

    redirectStart

    它可能是页面重定向时的开始时间(如果存在重定向的话)或者是0

    unloadEventStart:

    如果被请求的文档来自于前一个同源(同源策略)的文档,那么该属性存储的是浏览器开始卸载前一个文档的时刻。否则的话(前一个文档非同源或者没有前一个文档)

    ,为0。

    unloadEventEnd:

    表示同源的前一个文档卸载完成的时刻。如果前一个文档不存在或者非同源,则为0。

    redirectEnd

    如果存在重定向的话,redirectEnd表示最后一次重定向后服务器端response的数据被接收完毕的时间否则的话就是0。

    fetchStart

    fetchStart是指在浏览器发起任何请求之前的时间值。在fetchStart和domainLookupStart之间,浏览器会检查当前文档的缓存。

    domainLookupStart

    这个属性是指当浏览器开始检查当前域名的DNS之前的那一时刻。如果因为任何原因没有去检查DNS(即浏览器使用了缓存,持久连接,或者本地资源),

    那么它的值等同于fetchStart。

    domainLookupEnd

    指浏览器完成DNS检查时的时间。如果DNS没有被检查,那么它的值等同于fetchStart。

    connectStart

    当浏览器开始于服务器连接时的时间。如果资源取自缓存(或者服务器由于其他任何原因没有建立连接,例如持久连接),那么它的值等同于domainLookupEnd。

    connectEnd

    当浏览器端完成与服务器端建立连接的时刻。如果没有建立连接它的值等同于domainLookupEnd。

    secureConnectionStart

    可选。如果页面使用HTTPS,它的值是安全连接握手之前的时刻。如果该属性不可用,则返回undefined。如果该属性可用,但没有使用HTTPS,则返回0。

    responseStart

    指客户端收到从服务器端(或缓存、本地资源)响应回的第一个字节的数据的时刻。

    responseEnd

    指客户端收到从服务器端(或缓存、本地资源)响应回的最后一个字节的数据的时刻。

    domLoading

    指document对象创建完成的时刻。

    domInteractive

    指文档解析完成的时刻,包括在“传统模式”下被阻塞的通过script标签加载的内容(除了使用defer或者async属性异步加载的情况)。

    domContentLoadedEventStart

    当DOMContentLoaded事件触发之前,浏览器完成所有script(包括设置了defer属性但未设置async属性的script)的下载和解析之后的时刻。

    domContentLoadedEventEnd

    当DOMContentLoaded事件完成之后的时刻。它也是javascript类库中DOMready事件触发的时刻。

    domComplete

    如果已经没有任何延迟加载的事件(所有图片的加载)阻止load事件发生,那么该时刻将会将document.readyState属性设置为"complete",此时刻就是

    domComplete。

    loadEventStart

    该属性返回的是load事件刚刚发生的时刻,如果load事件还没有发生,则返回0。

    loadEventEnd

    该属性返回load事件完成之后的时刻。如果load事件未发生,则返回0。

    检测用户通过哪种方式来到此页面:

    我们有几种方式来打开一个页面,例如,在地址栏输入url,刷新当前页面,通过history的前进后退。这时候 performance.navigation 就派上用场了。这个 API 有

    两个属性:

    • redirectCount:页面请求被重定向的次数
    • type:页面被载入的方式。

    以下列举了 type 属性的三种取值情况:

    • 0:用户通过点击链接或者在浏览器地址栏输入URL的方式进入页面。
    • 1:页面重载。
    • 2:通过浏览器history的前进或后退进入页面。
    7.webkit渲染方式?
    在构建完了dom树之后,webkit所要做的事情就是构建渲染的内部表达并使用图形库将这些模型绘制出来。网页的渲染方式有两种,第一种是软件渲染,
    第二种是硬件加速渲染。每一个层对应于网页中的一个或者一些可视元素,这些元素绘制内容到这个层中。如果绘图操作使用CPU来完成就叫做软件绘图,
    如果绘图操作使用gpu来完成,那么就叫做gpu硬件加速绘图。理想情况下每一个层都有一个绘制的存储区域,这个存储区域用于保存绘图的结果。
    最后需要把这些层的内容合并到同一个图像之中,叫做合成(compositing)。使用了合成技术的渲染称之为合成化渲染。
    在renderobject树和renderlayer树之后,webkit的内部操作将内部模型转化为可视结果分为两个阶段:每层的内容进行绘图工作以及之后将这些绘图的结果合并为一个图像。
    如果对于软件渲染,那么需要使用CPU来绘制每一层的内容,但是他是没有合成阶段的,因为在软件渲染中,渲染的结果就是一个位图,绘制每一层的时候都使用这个位图,
    区别在于绘制的位置可能不一样,当然每一层都是按照从后到前的顺序。当然你也可以为每一层分配一个位图,但是一个位图已经可以解决所有的问题了。
    下面是网页的三种渲染方式:

    软件渲染中网页使用的一个位图,实际上是一块CPU使用内存。第二种和第三种方式都是使用了合成化的渲染技术,也就是使用gpu硬件加速来合成这些网页,合成的技术
    都是使用gpu来做的,所以叫做硬件加速。但是,对于每一个层这两种方式有不同的选择。如第二种方式,某些层使用gpu而某些层使用CPU,对于CPU绘制的层,该层
    的结果首先当然保存在CPU内存中,之后被传输到gpu的内存中,这主要是为了后面的合成工作。第三种方式使用gpu来绘制所有的合成层。第二种和第三种方式都属于
    硬件加速渲染方式。
    那么上面三种绘图的区别:
    首先,对于常见的2d绘图操作,使用gpu来绘图不一定比CPU绘图在性能上有优势,因为CPU的使用缓存机制有效减少了重复绘制的开销而且不需要gpu并行性。其次,
    gpu的内存资源相对于CPU的内存资源来说比较紧张,而且网页的分层似的gpu的内存使用相对比较多。
    软件渲染:浏览器最早的渲染机制,比较节省内存特别是宝贵的gpu内存,但是软件渲染只能处理2d方面的操作。简单的网页没有复杂绘图或者多媒体方面的需求,
    软件渲染就适合处理这种类型的网页。但是如果遇到html5新技术那么软件渲染就无能为力,一是因为能力不足,如css3d,webGL;二是因为性能不好,如canvas2d和视频。
    因此软件渲染被用的越来越少,特别是移动领域。软件渲染和硬件加速渲染另外一个很不同的地方在于对更新区域的处理,当网页有一个更小型区域的请求如动画时,软件
    渲染只要计算极小的区域,而硬件渲染可能需要重绘其中的一层或者多层,然后再合成这些层,硬件渲染的代价可能大得多
    硬件加速的合成:每一个层的绘制和所有层的合成均使用gpu硬件来完成,这对需要使用3d绘图的操作来说特别合适。在这种方式下,在renderlayer树之后,
    webkit和chromium还需要建立更多的内部表示,例如graphiclayer(renderlayer中前景和背景层需要的一个后端存储,因为只有 GraphicsLayer 是作为纹理(texture)上
    传给 GPU 的)树,合成器中的层(如chromium的cclayer等),目的是支持硬件加速,这显然会消耗更多的内存资源。但是,一方面,硬件加速能够支持现在所有的回
    html5定义的2d或者3d绘图标准;另外一方面,关于更新区域的讨论,如果需要更新某个层的一个区域,因为软件渲染没有为每一层提供后端存储,因而它需要将和这个区域
    有重叠部分的所有的层次相关区域依次向后向前重新绘制一遍,而硬件加速渲染只是需要重新绘制更新发生的层次,因而在某些情况下,软件渲染的代价更大,当然,
    这取决于网页的结构和渲染策略
    软件绘图的合成化渲染方式结合了前面两中方式的优点,这是因为很多网页可能既包含了基本的html5元素也包含html5新功能,使用CPU绘图方式来绘制某些层,
    使用gpu绘图方式来绘制其他一些层。原因是前面所说的性能和内存综合考虑。
    8.webkit软件渲染技术
    很多情况下,也就是没有哪些硬件加速内容的时候(css3变形,变换,webgl,视频),webkit可以使用软件渲染来完成页面的绘制工作。软件渲染需要关注两个方面,
    分别是renderlayer树和renderlayer树包含的renderobject树:
    webkit如何遍历renderlayer树来绘制每一个层?
    对于每一个renderobject对象,需要三个阶段绘制自己。第一阶段:绘制该层中的所有块的背景和边框 第二阶段:绘制浮动内容 第三阶段:前景也就是内容部分,
    轮廓等部分。注意:内联元素的背景,边框,前景都是在第三阶段被绘制的,这是不同之处。注意:在最开始的时候,也就是webkit第一次绘制网页的时候,webkit绘制的
    区域等同于可视区域的大小,而在这之后,webkit只是首先计算需要更新的区域,然后绘制同这些区域有交集的renderobject节点。这也就是说,如果更新区域跟某个
    renderlayer节点有交集,webkit会继续查找renderlayer树中包含derenderobject子树中的特定的一个或者一些节点而不是绘制整个renderlayer对应的rendeobject子树。

    webkit软件渲染结果的存储方式,在不同的平台上可能不一样,但是基本上都是CPU内存的一块区域,多数情况下是一个位图。至于这个位图如何处理,如何和之前绘
    制的结果进行合并,如何显示出来,都和webkit的不同移植有关。
    9.webkit硬件加速
    对于gpu绘图而言,通常不像软件渲染那样知识计算其中更新的区域,一旦有更新请求,如果没有分层,引擎可能需要重绘所有的区域。因为计算更新部分对gpu来说可
    能耗费更多的时间,当网页分层之后部分区域的更新可能只在网页的一层或者几层,而不需要把整个网页进行重绘。通过重新绘制网页的一层或者几层,将他们和其他
    之前绘制完的层合并起来,既能使用gpu的能力,又能够减少重绘的开销。理想情况下,每一个renderlayer都有一个后端存储(renderlayerbacking对象),但是实
    际上都是不一样的,主要原因在于实际中的硬件能力和资源有限,为了节省gpu内存资源,硬件加速机制在renderlayer树建立之后需要做三件事情来完成网页的渲染:
    第一:webkit决定将哪些renderlayer对象组合在一起,形成一个有后端存储的新层,整个新层不久后用于之后的合成,这里称为合成层(compositing layer)。每一
    个新层都有一个或者多个后端存储,这里的后端存储可能是gpu内存。对于一个renderlayer对象,如果它没有后端存储的新层,那么就使用其父亲所使用的合成层
    第二:将每个合成层包含的这些renderlayer内容绘制在合成层的后端存储中,这里的绘制可能是软件绘制也可能是硬件绘制
    第三:由合成器将多个合成层合成起来,形成网页最终可视化结果,实际上就是一张图片。合成器是一个能够将多个合成层按照这些层的先后顺序,合成层的3d变形等
    设置二合成一个图像结果的设施。如果一个renderlayer对象具有以下特征之一那么就是合成层:
    (1)renderlayer具有css3d属性活着css透视效果
    (2)renderlayer包含的renderobject节点表示的是使用硬件加速的视频解码技术的html5的video元素
    (3)renderlayer包含的renderobject节点表示的是使用硬件加速的canvas2d元素或者webgl技术
    (4)renderlayer使用了css透明效果的动画或者css变换的动画
    (5)renderlayer使用了硬件加速的css filters技术
    (6)renderlayer使用了剪裁(clip)或者反射(reflection)属性,并且他的后代中包含了一个合成层
     (6.1)Layer has a descendant that is a compositing layer  。Composited descendant may need composited parent,为了在composited tree中正确的传播
    transform,perserve-3d或者clipping information。如下面的例子:
    body {
      text-align: center;
      padding: 30px;
    }
    .camera{
      -webkit-perspective:100;
      perspective:1000;
      background-color:#ccc;
      width:100px;
      height: 100px;
    }
    .space{
      -webkit-transform-style:preserve-3d;
      border:1px solid black;
      width:100%;
      height:80%;
    }
    /*box肯定会在一个独立的图层中进行渲染,space也会,camera也会,即使给我们*/
    .box{
         animation:x-spin 5s infinite;
        -webkit-animation:x-spin 5s infinite; /* Safari 和 Chrome */
    }
    @keyframes x-spin{
    	0% {
    	    -webkit-transform: rotateX(0deg);
    	}
    	50% {
    	    -webkit-transform: rotateX(180deg);
    	}
    	100% {
    	    -webkit-transform: rotateX(360deg);
    	}
    }
    DOM结构如下:
      <div class="camera">
        <div class='space'>
        	 <div class='box'>children</div>
        </div>
    </div>
    注意:此时camera,space,box都会生成独立的图层。而且因为camera使用了perspective产生了层叠上下文,所以其z-index级别相当于auto/0的级别。你可以运行一下
    这个例子来体会一下。同时我要告诉你,如果使用了translateZ来产生复合图层,那么父元素不会放在一个独立的复合图层中。

    (6.2)will-change:transform和will-change:opacity也会产生一个复合图层,如果设置为auto无效
    (7)renderlayer有一个z坐标(其实就是堆叠上下文)比自己小的兄弟节点,并且该节点是一个合成层。((in other words the layer overlaps a composited layer and
     should be rendered on top of it))
       主要原因在于:浏览器不知道当前具有较大的z-index的兄弟节点是否和合成层具有重叠的部分,必须创建一个合成层用于维持次序。
    我们来分析一下第7中情况,如下图:

    这时候假如所有的元素都在一个renderLayerBacking对象中进行绘制。但是我们通过一定的方式为蓝色框创建一个合成层(可能产生堆叠上下文进而在z轴上具有较大的值),
    于是成为下面这种情况

    这时候我们的绿色部分已经在蓝色部分下面的,这显然不是我们需要的(不能因为给元素创建了一个合成层进而影响到元素在Z轴上的顺序),因此chrome会自动为应该
    处于上层的元素创建一个合成层:

    这就是我们说的第7中情况,这种情况是因为我们的图层和一个合成层存在重叠,因此也会被创建为一个合成层。我们再来看一个例子:
    通过这个例子我们可以看到:首先我们的滚动条被绘制到一个单独的合成层中,因此他具有独立的后端存储,在变化的时候不需要进行重绘和回流操作;然后,我们看看
    DOM结构
     <h1>Poster Circle</h1>
        <p>This is a simple example of how to use CSS transformation and animations to get interesting-looking behavior.</p>
        <p>The three rings are constructed using a simple JavaScript function that creates elements and assigns them a transform
          that describes their position in the ring. CSS animations are then used to rotate each ring, and to spin the containing
          element around too.</p>
        <p>Note that you can still select the numbers on the ring; everything remains clickable.</p>
        <div id="stage">
          <div id="rotate">
            <div id="ring-1" class="ring"></div>
            <div id="ring-2" class="ring"></div>
            <div id="ring-3" class="ring"></div>
          </div>
        </div>
    我们的ring-1,ring-2,ring-3都是在一个独立的合成层(上面的6.1说明了rotate,stage都会产生一个独立的图层,而且其堆叠上下文是auto/0级别),但是p元素没有在一个独立的
    合成层当中。但是,问题来了,当我们给我们的p元素添加一个z-index:1;position:relative我们很明显的看到chrome会为我们的p元素也创建一个独立的合成层,但是如果
    我把p元素的z-index设置为0,那么创建的图层又会消失。这就是我们上面说的第七种情况,也就是一个元素具有z-index比自己小(auto/0级别),同时还是合成层的元素,
    那么chrome也会为当前元素创建合成层。最后,
    我们再来看一下我们上面标红的情况,也就是z坐标的比较(建议先读这篇文章来了解堆叠上下文的概念):
    堆叠上下文:堆叠上下文会flatten元素的subtree,就是在这个子树之外的任何元素都不会再子树之间绘制。也就是说:DOM树中,我们可以把堆叠上下文作为一个原子
    概念层(atomic conceptual layer)用于绘制。因此,堆叠上下文是一个用于定义绘制顺序的绝好概念(建议仔细阅读深入理解CSS中的层叠上下文和层叠顺序

    【堆叠上下文的绘制次序】:背景和边框,其次是负数z-index的节点,然后是正常文档流中的元素,接着是z-index0和绝对定位的子元素,最后是正的z-index的元素。

     这就是出现相互覆盖的原因。

    【何时选择复合层】

     (1)renderLayer子树被缓存和重组过后能够提升性能的情况下是可以的。

      (2) opacitytransform,filters,reflections:当drawing的时候非常容易被用于合成层,因为此时只是需要GPU处理,而不用重绘和回流

    (3)scrolling,fixed-position:当合成一个subtree内容的时候如果可以极大的减少重绘的数量的时候可以

    (4)content that is rendered separately:GPU中合成能够减少反复读取像素,例如WebGl,硬件解码video

    【图层挤压】

      GraphicLayer非常消耗内存和资源,如果一个层和具有独立后端存储的层存在重叠的部分,那么这个层也会被创建一个独立的后端存储。我们把一些如具有3D转换的层叫做

    ‘直接的’合成层,为了防止当很多在顶部(注意是顶部)的同时具有独立后端存储的层的存在而导致的‘层爆炸’问题,Blink就会把那些和‘直接’合成层重叠的层挤压到一个唯一的

    后端存储中,这就解决了层级爆炸问题。GPU Accelerated Compositing in Chrome如果动画运行的时候创建了很多的层,这时候应该是动画所在的层级比较低,所以

    可以把动

    画的层级提升就可以了

    【选择合成层的好处】
    首先当然是合并一些renderlayer层,可以减少内存的使用量;其二是在合并之后,尽量减少合并带来的重绘性能和处理上的困难;其三,对于那些使用单独层能够显著提
    升性能的renderlayer对象可以继续使用这个好处。如webgl技术的canvas元素。下面是renderlayer,renderlayerbacking,graphiclayer的对应关系:
















    展开全文
  • 计算机网络由哪些硬件设备组成?

    千次阅读 2020-02-07 05:01:39
    上面所说的有线网卡和无线网卡就属于外置网卡。 网络电缆 网络电缆用来连接网络中的各个设备,供设备之间进行数据通信。常见的网络电缆双绞线、光纤、电话线等。 双绞线 双绞线也就是网线。它是由两根具有绝缘保护...

    网络是计算机或类似计算机的网络设备的集合,它们之间通过各种传输介质进行连接。无论设备之间如何连接,网络都是将来自于其中一台网络设备上的数据,通过传输介质传输到另外一台网络设备上。

    本节将基于这个过程讲解网络的组成。

    网卡

    网卡也被称为网络适配器(Network Adapter),是连接计算机和传输介质的接口。网卡主要用来将计算机数据转换为能够通过传输介质传输的信号。

    网卡种类

    网络设备要访问互联网,就需要通过网卡进行连接。由于上网的方式不同,所使用的网卡种类也会不同。网卡的种类有以下几种:

    1) 有线网卡
    有线网卡就是通过“线”连接网络的网卡。这里所说的“线”指的是网线。有线网卡常见形式如图所示。


    2) 无线网卡
    与有线网卡相反,无线网卡是不需要通过网线进行连接的,而是通过无线信号进行连接。无线网卡通常特指 Wi-Fi 网络的无线网卡。无线网卡常见形式如图所示。


    3) 蓝牙适配器
    蓝牙适配器也是一种无线网卡。蓝牙适配器与无线网卡的区别是数据通信方式不同。蓝牙适配器常见样式如图所示。

    按安装方式分类

    网卡通常是网络设备的从属设备。根据其安装方式,网卡可以分为内置网卡和外置网卡。

    1) 内置网卡
    由于网卡已经成为连接网络的必要设备,所以很多网络设备都内置了网卡。因此,内置网卡也被称为集成网卡。例如,现在的主板都集成了有线网卡,如图所示。箭头所指的接口就是内置网卡提供的有线网卡接口。


    2) 外置网卡
    除了内置网卡外,很多网络设备都允许用户安装额外的网卡。这类网卡被称为外置网卡,有时被称为独立网卡。由于它可以插在主板的各种扩展插槽中,所以可以随意拆卸,具有一定的灵活性。上面所说的有线网卡和无线网卡就属于外置网卡。

    网络电缆

    网络电缆用来连接网络中的各个设备,供设备之间进行数据通信。常见的网络电缆有双绞线、光纤、电话线等。

    双绞线

    双绞线也就是网线。它是由两根具有绝缘保护层的铜导线缠绕组成的,如图所示。这样的铜线一共有 8 根。每根都通过对应的颜色进行区分。现实生活中,家庭和企业中的计算机进行上网,一般都是通过双绞线连接网络。这些双绞线在排序上往往采用 EIA/TIA 568B 的线序,依次为橙白、橙、绿白、蓝、蓝白、绿、棕白、棕。

    光纤

    光纤是一种传输光信号的细而柔软的媒质,多数光纤在使用前必须由几层保护结构包裹,如图所示。光纤的主要作用是把要传送的数据由电信号转换为光信号进行通信。在光纤的两端分别装有“光猫”进行信号转换。

    电话线

    电话线就是连接电话的线。电话线也是由绝缘保护层的铜导线组成的。与双绞线不同的是,电话线只有 2 根或 4 根线,而且不一定会缠绕在一起,也没有颜色排序,如图所示。

    网络设备

    网络设备指的是网络组成中的设备,如交换机、路由器、调制解调器等。它们是发送或接收数据的终端设备。

    交换机

    交换机(Switch)可以将多个网络设备连接起来组成一个局域网。它是一种用于电(光)信号转发的网络设备,用来进行数据交换。交换机外观如图所示。

    路由器

    路由器(Router)又称网关设备(Gateway),用于连接多个逻辑上分开的网络。所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个子网传输到另一个子网中时,可通过路由器的路由功能来完成。它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。路由器也是用来进行数据转换的。路由器与交换机很容易区分,最大的区别是,路由器上有 WAN 口和 LAN 接口,而交换机没有这些接口。

    常见的路由器外观如图所示。

    调制解调器

    调制解调器(Modem),俗称“猫”,是一种计算机硬件。它能把计算机的数字信号翻译成可沿普通电话线传送的脉冲信号,而这些脉冲信号又可被线路另一端的另一个调制解调器接收,并翻译为计算机的数字信号语言。调制解调器外观如图所示。

    展开全文
  • 想要理解ipfs/filecoin挖矿硬件的基本要求,我们就必须理解ipfs/filecoin挖矿原理。因为Fileconin相当于存储挖矿,所以对网络带宽很高的要求,还有矿机硬盘存储够大,挖矿获得的FIL币也就越多。 下面我们看看行业...

    想要理解ipfs/filecoin挖矿硬件的基本要求,我们就必须理解ipfs/filecoin挖矿原理。因为Fileconin相当于存储挖矿,所以对网络带宽有很高的要求,还有矿机硬盘存储够大,挖矿获得的FIL币也就越多。
    下面我们看看行业领先的火雷神算超算IPFS矿机配置:
    在这里插入图片描述
    [硬盘]:火雷神算超算IPFS矿机采用的是全球最大的硬盘制造商美国希捷,转速是7200转每分钟;
    [内存]:火雷神算超算IPFS矿机采用的是256G,属于最高配置;
    [CPU]:火雷神算超算IPFS矿机采用的是双CPU,多核多线程,我采用的是12核24线程的cpu;
    [GPU]:火雷神算超算IPFS矿机采用的是自己研发的GPU,并且申请了专利;
    [主板]:火雷神算超算IPFS矿机采用的是定制专用存储挖矿主板;
    [带宽]:火雷神算超算IPFS矿机选择的是千、万兆带宽接入的矿场。

    展开全文
  • 无人驾驶硬件平台

    千次阅读 2017-03-16 22:26:36
    本文是无人驾驶技术系列的第十篇,着重介绍无人驾驶硬件平台设计。...希望本文对无人驾驶从业者以及爱好者选择硬件的时候帮助。 无人驾驶: 复杂系统 无人驾驶技术是多个技术的集成,如图1所示,一个

    http://www.iteye.com/news/32227

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


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

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


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

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

    激光雷达
    激光雷达的工作原理是利用可见和近红外光波(多为950nm波段附近的红外光)发射、反射和接收来探测物体。激光雷达可以探测白天或黑夜下的特定物体与车之间的距离。由于反射度的不同,也可以区分开车道线和路面,但是无法探测被遮挡的物体、光束无法达到的物体,在雨雪雾天气下性能较差。
    • 激光雷达在无人驾驶运用中拥有两个核心作用。3D建模进行环境感知。通过雷射扫描可以得到汽车周围环境的3D模型,运用相关算法比对上一帧和下一帧环境的变化可以较为容易的探测出周围的车辆和行人。
    • 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线激光雷达采用的也是混合固态的形式。固态雷达雷达产品则由于采用电子方案去除了机械旋转部件,因此具有低成本(几百美元级别)和体积小、可集成至传统车辆外观中的特点。行业对固态雷达的出现仍处观望态度,主要因为:首先,对成本是否能有如此大幅下降抱有疑问;其次,激光特性在大雾等天气仍然并不适用。

    国内外制造现况
    目前,激光雷达已被应用在某些无人驾驶试验车中:
    • Google和百度的无人驾驶试验车均采用了Velodyne的64线雷射雷达;
    • 福特的混动版蒙迪欧安装了Velodyne的32线雷射雷达,第三代自动驾驶车辆Fusion Hybrid配置了2台Velodyne的混合固态雷射雷达;
    • 日产LEAF搭载了6个Ibeo的4线雷射雷达,测试了其高级驾驶辅助系统;
    • 奥迪的无人驾驶汽车A7 Piloted Driving采用了Ibeo和Valeo合作的Scala混合固态雷射雷达;
    • 德尔福无人驾驶汽车配备了4台由Quanergy研发的固态雷射雷达;
    • 大众的一款半自动驾驶汽车搭载了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 摄像头的应用场景

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

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

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

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

    车载摄像头在工艺上的首要特性是快速,特别是在高速行驶场合,系统必须能记录关键驾驶状况、评估这种状况并实时启动相应措施。在140km/h的速度,汽车每秒要移动40米。为避免两次图像信息获取间隔期间自动驾驶的距离过长,要求相机具有最慢不低于30帧/秒的影像捕捉速率,在汽车制造商的规格中,甚至提出了60帧/秒和120帧/秒的要求。在功能上,车载摄像头需要在复杂的运动路况环境下都都能保证采集到稳定的数据。具体表现为:
    • 高动态:在较暗环境以及明暗差异较大下仍能实现识别,要求摄像头具有高动态的特性。
    • 中低像素:为降低计算处理的负担,摄像头的像素并不需要非常高。目前30-120万像素已经能满足要求。
    • 角度要求:对于环视和后视,一般采用135度以上的广角镜头,前置摄像头对视距要求更大,一般采用55度的范围。
    • 同时,相比工业级与生活级摄像头,车载类型在安全级别上要求更高,尤其是对与前置ADAS的镜头安全等级要求更高。主要体现在:
    • 温度要求:车载摄像头温度范围在-40~80℃。
    • 防磁抗震:汽车启动时会产生极高的电磁脉,车载摄像头必须具备极高的防磁抗震的可靠性。
    • 较长的寿命:车载摄像头的寿命至少要在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组合的优势在于:
    • 系统精度的提高。利用GPS的长期稳定性弥补IMU误差随时间累积的缺点。GPS/IMU组合后的导航误差实际上要比单独的GPS或单独的惯导系统可能达到的误差都小。
    • 系统抗干扰能力的增强。利用IMU的短期高精度弥补GPS系统易受干扰、信号易失锁等缺点,同时借助IMU的姿态信息、角速度信息可进一步提高GPS系统快速捕获或重新锁定卫星信号的能力。
    • 导航信息的补全。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

    计算平台体系结构设计探索
    我们尝试对以下问题形成一些初步认识:
    • 各种计算单位最适合什么样的工作负载;
    • 能否使用移动处理器执行无人驾驶计算任务;
    • 如何设计一个高效的无人驾驶计算平台。
    计算单元与计算负载的匹配
    我们试图了解哪些计算单元最适合执行卷积和特征提取类应用,这是无人驾驶场景中最计算密集型工作负载。我们在现有的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技术及其在智能硬件上的实现与优化。

    点击阅读无人驾驶技术系列文章:
    展开全文
  • 本人为软件工程专业,硬件不是本专业的学习范畴,因为本人对硬件感兴趣,自学了部分51单片机知识,这个小车是20年上半年因为疫情被困在家中突发奇想做的,现在空闲时间就想着写一篇博客,分享给同样对硬件感兴趣的...
  • 今天,将挑选一些重要的硬件,给大家做详细介绍。 电源 电源相当于人体的心脏,需保障电力供应,如果要买服务器,应选择质量好一点的电源。 另外需要注意的是,在实际使用场景中,如果只是配置一个服务器负责...
  • android硬件加速 setLayerType

    千次阅读 2016-07-01 22:13:02
    从Android 3.0开始,Android的2D渲染管线可以更好的支持硬件加速。硬件加速使用GPU进行View上的绘制操作。 硬件加速可以在一下四个级别开启或关闭: ApplicationActivityWindowView Application级别 往...
  • 手把手教你智能硬件开发(一) 我选Arduino

    万次阅读 多人点赞 2016-09-02 22:03:31
    智能硬件怎么入门?没有适合软件开发者使用的硬件平台呢?本文将向您展示Arduino智能硬件的开发,带你入门。
  • Android硬件加速

    千次阅读 2014-12-17 21:09:11
    从Android 3.0开始,Android的2D渲染管线可以更好的支持硬件加速。硬件加速使用GPU进行View上的绘制操作。 硬件加速可以在一下四个级别开启或关闭: ApplicationActivityWindowView Application级别 往...
  • 电子/硬件工程师手册

    千次阅读 2020-01-17 10:09:29
    硬件工程师手册 目 录 第一章 概述 3 第一节 硬件开发过程简介 3 §1.1.1 硬件开发的基本过程 4 §1.1.2 硬件开发的规范化 4 第二节 硬件工程师职责与基本技能 4 §1.2.1 硬件工程师职责 4 §1.2.1 硬件工程师基本...
  • 硬件加速 setlayertype

    万次阅读 多人点赞 2012-12-17 15:03:10
    从Android 3.0开始,Android的2D渲染管线可以更好的支持硬件加速。硬件加速使用GPU进行View上的绘制操作。 硬件加速可以在一下四个级别开启或关闭: ApplicationActivityWindowView Application级别 往...
  • 计算机硬件知识

    千次阅读 2012-09-14 17:32:41
    计算机硬件知识 一、微机基本工作原理 1、计算机系统的组成 微型计算机由硬件系统和软件系统组成。 硬件系统:指构成计算机的电子线路、电子元器件和机械装置等物理设备,它包括计算机的主机及外部设备。 软件...
  • DSP系统硬件设计

    千次阅读 2017-06-13 14:01:18
    DSP硬件设计包括:硬件方案设计、DSP及周边器件选型、原理图设计、PCB设计及仿真、硬件调试等。前一讲我们详细讲述了硬件方案设计、DSP及 周边器件选型两部分内容,本讲详细讲述原理图设计、PCB设计、硬件调试等...
  • 网络硬件的组成

    2021-01-06 08:32:02
    在一般的局域网中,主机通常被称为服务器,是为客户提供各种服务的计算机,因此对其一定的技术指标要求,特别是主、辅存储容量及其处理速度要求较高。根据服务器在网络中所提供的服务不同,可将其划分为文件服务器...
  • ubuntu下查看硬件配置

    千次阅读 2019-04-09 17:04:16
    一、ubuntu下查看硬件配置 命令: lshw linux查看设备命令 系统 # uname -a # 查看内核/操作系统/CPU信息  # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息  # ...
  • 智能硬件行业产品经理

    千次阅读 2018-07-27 19:58:58
    智能硬件属于一个新兴的行业,不同于传统的互联网产品经理,除了把控匹配硬件的手机端应用外,还需要与管控硬件产品的质量,并且在保证硬件产品功能的基础上,做到与软件端产品协调上市。  如上述所说,智能硬件端...
  • Flash硬件知识

    千次阅读 2018-02-02 17:00:30
    Flash全名叫做Flash Memory,从名字就能看出,是种数据存储设备,存储设备很多类,Flash属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Volatile Memory Device)。关于什么是非...
  • 硬件工程师笔试题集

    万次阅读 多人点赞 2018-08-30 10:47:33
    逻辑,要实现它,在硬件特性上什么具体要求? 答:线与逻辑是两个或多个输出信号相连可以实现与的功能。在硬件上,要用   OC   门来实现 (   漏极或者集电极开路   ) ,为了防止因灌电流过大而烧坏   OC ...
  • 解读到底什么是硬件工程师?

    千次阅读 多人点赞 2019-06-18 11:31:44
    1、什么是硬件? 也就是说硬件是物理层面的,至少是你能看得到摸得着的东西,它是一种物质载体,物质基础。广义来说人类都是生活在物质基础之上,你可以把所有你能看到的东西都统称为硬件。当然狭义来说,一般我们...
  • 嵌入式系统硬件组成

    千次阅读 2019-09-11 13:26:03
    嵌入式硬件组成与嵌入式处理芯片 1.ARM处理器芯片内部结构 1)WDT看门狗定时器:当处理器进入错误状态后的一定时间内可使处理器复位 2)通用定时器:Timer 3)实时时钟RTC:直接提供年月日时分秒,使应用系统...
  • 目录 传输方式的分类 面向连接型与面向无连接型 面向连接型 面向无连接型 电路交换与分组交换 ...网络的构成要素-网络硬件设备 通信媒介与数据链路 网卡 中继器 网桥/2层交换机 ...
  • NVIDIA显卡硬件技术交流整理

    千次阅读 2018-08-02 16:05:53
    硬件有哪些限制,能否用于以太网络? 是否依赖网络带宽限制,能否达到网络带宽的极限传输速率? 使用什么协议传输数据,是否可靠? RDMA接收到的数据能否直接被其他进程使用,例如:Unity3D? 单机多卡是否对...
  • K60硬件最小系统

    万次阅读 2012-03-22 19:48:05
    MCU的硬件最小系统是指可以使内部程序运行的所必须的外围...芯片要能工作,必须电源与工作时钟,至于复位电路则提供不掉电情况下MCU重新启动的手段。由于Flash存储器制造技术的发展,大部分芯片提供了在板或在系统
  • 开源硬件的知识产权管理

    千次阅读 2020-01-10 21:03:26
    开源硬件社区组织及其知识产权管理问题研究点击上方“开源社”关注我们| 作者:梁尧|编辑:王玥敏| 责编:Corrie摘要开源硬件运动正在包括我国在内的全球范围内蓬勃发展,而开源硬件社区...
  • 科大讯飞 VBOX 智能音箱 - ...那么在接触和体验科大讯飞AIUI、亚马逊Alexa、Google Home 、微软小娜等实体化的硬件产品后,以及苹果的智能音箱HomePod即将上市之际,当我们打算总结时,却发现一直遗漏了一些需...
  • 计算机硬件性能指标参考

    万次阅读 2019-02-22 11:39:19
    标准型的内存条校验位,的没有;非标准的内存条均奇偶校验位ECC是Error Correction Coding Error Checking and Correcting 的缩写,代表具有自动纠错功能的内存,可以纠正一位二进制数的错误。ECC内存也是在...
  • ARM硬件知识和常见通信协议

    千次阅读 2017-10-17 22:30:38
    ARM硬件知识,常见通信协议I2C和SPI,电平标准TTL和RS232,内存,NAND Flash

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,481
精华内容 39,792
关键字:

属于硬件的有哪些