精华内容
下载资源
问答
  • 常用的事实发现技术
    千次阅读
    2019-04-22 17:10:05

    俗话说的好,入乡随俗。既然打算入黑客之家,黑客的行话(即黑客术语,以理解为网络安全术语)还是得懂一些的,客官,继续往下看。
    黑客常见术语汇总

    1、黑帽

    为非法目的进行黑客攻击的人,通常是为了经济利益。他们进入安全网络以销毁,赎回,修改或窃取数据,或使网络无法用于授权用户。这个名字来源于这样一个事实:老式的黑白西部电影中的恶棍很容易被电影观众识别,因为他们穿着黑色的斯泰森,而“好人”则戴着白帽子。
      
    2、白帽

    黑客将自己的技能用于社会福利,或通过揭露其IT系统中的漏洞帮助组织。这是一顶黑帽子的反面。

    3、肉鸡

    “肉鸡”有点类似牵线木偶,是指的被黑客成功入侵并取得控制权限的电脑。黑客们可以随意的控制肉鸡,就像在使用自己的电脑一样,很形象的比喻,就像是养的肉鸡,任黑客宰杀和利用。关键的是,在成为肉鸡后,只要黑客不对电脑进行破坏,使用者很难发现,有可能就是被养在哪里,随时都可能被使用。不论什么系统都有可能沦为“肉鸡”。

    4、木马

    “木马”是一种在运行后可以得到系统的控制权的程序。拿网页木马举例,主要是利用浏览器的漏洞把网页木马搞到浏览器访问者本地上,然后自动执行的。

    5、后门

    黑客绕过安全软件等的防护,在通过某种手段成功控制目标主机之后,搞到系统的访问权限。访问系统后通过系统漏洞得到root权限,再安装rootkit,就可以较长时间地控制该目标主机,将其发展成为肉鸡。

    6、rootkit
    rootkit是攻击者用来隐藏自己的行踪和保留root(根权限,可以理解成WINDOWS下的system或者管理员权限)访问权限的工具。通常,攻击者通过远程攻击的方式获得root访问权限,或者是先使用密码猜解(破解)的方式获得对系统的普通访问权限,进入系统后,再通过,对方系统内存在的安全漏洞获得系统的root权限。然后,攻击者就会在对方的系统中安装rootkit,以达到自己长久控制对方的目的,rootkit与 我们前边提到的木马和后门很类似,但远比它们要隐蔽,黑客守卫者就是很典型的rootkit,还有国内的ntroorkit等都是不错的rootkit工具。

    7、弱口令

    弱口令的安全强度不高,易于被猜到破解的密码,比如123456。这种非常简单的密码就叫做弱口令,弱口令通常很容易被黑客破解,用最低端的暴力算号器都能试出来。所以,大家在设置密码的时候,竟可能的设置的复杂一点,以提高安全性。

    8、免杀

    “免杀”,顾名思义,就是免去杀毒软件的查杀。使用一些技术把程序进行修改,这些技术主要有加壳、加密、加花指令等。

    9、加壳

    “加壳”的目的主要有压缩文件、将程序编码加密、免杀等,主要通过一些不一般的算法改变可执行程序或者DLL动态链接库文件的编码。

    10、花指令

    “花指令”是用汇编语言写成的,导致杀毒软件无法对病毒进行合理地判断。因为杀毒软件有顺序规则,就是从头到尾来查杀病毒。而一旦病毒的头尾顺序不对,杀毒软件就歇菜了。

    11、漏洞

    人人都知道,又是一个很形象的比喻,漏指一个系统或软件存在的弱点或缺陷,来自应用设计时的缺陷或编码时产生的错误,而这些错误则会被黑客利用。现在我们使用的系统及软件,经常都会更新补丁及程序,目的就是为了修复发现的漏洞增加相应的防护及功能,确保更加安全。所以,在日常使用中,勤更新补丁,是一种保护电脑的良好习惯。

    12、扫描

    这个就更熟悉了,就像杀毒软件扫描病毒一样。黑客也会用一些工具来进行扫描,但用途则稍有不同,大多扫描的是IP、端口、漏洞等一切有利于入侵的信息。大概原理就是通过向目标计算机发送一些特定的请求,根据返回的信息来获取信息。

    13、病毒

    病毒大家都不陌生,指的就是具有破坏性的程序或者代码,电脑只要感染病毒后,即刻就会收到相应的破坏,病毒具有传染性、可不断复制,直接对电脑系统或者文件造成损坏。木马实际上也可以算病毒的一种。

    14、嗅探

    嗅探指的是对局域网中流经的数据包进行截取及分析,从中获取有效信息,早期用HUB组建的局域网中属共享原理,数据是通过MAC地址来分辨目的地的,改变网卡为混杂模式,则就可以接受并分析数据包了。而现在大多用交换机组建局域网,交换机原理高级,数据直接发送至目标主机的网卡端口,所以大多采用ARP欺骗,修改MAC地址欺骗等方式来嗅探。

    15、Shell

    “Shell”是一种程序或者命令的执行环境。比如,一般用远程溢出程序后,可以成功控制远程电脑,在该电脑执行系统命令的环境就是“Shell”。在这里说一下WindowsShell的执行环境怎么打开。按快捷键win+R,输入cmd,按回车调出来的命令提示符窗口就是。

    16、溢出

    确切的讲,应该是“缓冲区溢出”。简单的解释就是程序对接受的输入数据没有执行有效的检测而导致错误,后果可能是造成程序崩溃或者是执行攻击者的命令。大致可以分为堆溢出和栈溢出。

    关于黑客的术语其实还有很多,也以上就是最基本的几个,想要了解更多的朋友可以从书籍或者百度查询跟多的相关术语。

    更多相关内容
  • 自动驾驶技术发展的5个阶段和现状

    千次阅读 2020-07-27 15:13:45
    让人以为自动驾驶的技术会一级一级获得突破,最终迎来一辆L5级别的汽车,可以带我们到任何地方去。 业界第一款具备真正意义上的自动驾驶能力的量产车——全新奥迪A8 2017年7月才姗姗来迟。作为整个自动驾驶的第一...

    640?wx_fmt=jpeg

    来源:智车科技

    摘要:自动驾驶的级别从L1到L5(SAE),清晰而直观,是大家讨论自动驾驶行业的一个基准。但是,它也很容易误导人。让人以为自动驾驶的技术会一级一级获得突破,最终迎来一辆L5级别的汽车,可以带我们到任何地方去。

     

    业界第一款具备真正意义上的自动驾驶能力的量产车——全新奥迪A8 2017年7月才姗姗来迟。作为整个自动驾驶的第一个量产玩家,奥迪尽管已经走在了行业最前沿,但目前实现的还是3级的自动驾驶,也就是说这是一种在限定环境条件下,需要驾驶员始终有接管能力的自动驾驶,距离无限条件无需接管的自动驾驶还有相当长的路要走。

     

    回头看历史,猛然发觉第一届DARPA自动驾驶挑战赛已经是十年前的事了。对比互联网产业,十年前支付宝还没有手机支付业务,而微信根本还没诞生,再看现在,支付宝和微信已经全面占领了我们的生活。为什么汽车工业的动作慢如蜗牛?自动驾驶到底难在哪里?

     

    事实上,早在车企开始宣传“世界上第一款量产L3级别汽车”的时候,我们就应该揭穿他们的把戏。

     

    自动驾驶的级别从L1到L5(SAE),清晰而直观,是大家讨论自动驾驶行业的一个基准。但是,它也很容易误导人。让人以为自动驾驶的技术会一级一级获得突破,最终迎来一辆L5级别的汽车,可以带我们到任何地方去。

     

    醒醒吧,真实的技术部署从来不会按这样的“计划方案”发展。而且,这个行业里的公司“怎么说的”和“怎么做的”完全不是一回事。你能听到很多人,在画一张同样的大饼:我们在研发自动驾驶,我们将率先发布某个级别的汽车,我们将推出最先进的自动驾驶汽车叫车服务。

     

    不要轻易相信他们说的话。看看这些公司实际是怎么做的,你就能明白,这个行业里最有代表性的三家公司分别是英特尔的 Mobileye、特斯拉和 Google 的 Waymo,他们才真正代表了自动驾驶技术部署的三种实际路线。

     

    如果你熟悉SAE自动驾驶技术级别定义中的L5,你就知道我们说的是,在所有场景下都可以工作、永远都不需要人干预的自动驾驶汽车。换言之,人只能作为乘客,驾驶的任务完全交给汽车。

     

    640?wx_fmt=jpeg

     

    它与L4的唯一区别就是,L4能适应的场景依然是有限的,而L5“没有限制”。

     

    看明白了吗?从L4到L5,不过是一种典型的“线性”思维类推出来的结果,与古人想要速度更快的马,没有什么区别。在实际的技术部署中,首先是我们大部分人等不到这种汽车出现的那天;其次等它出现的时候,或许地球上更流行的是飞行汽车或者其他新型的私人交通工具。

     

    我们看看实际的技术部署会是什么样的。例如,有一种收垃圾的自动驾驶汽车,它只能在限定的范围内工作,就是到固定的地点收完垃圾,然后把垃圾集中放到固定的地方,接着自己回停车场充电,等待第二天执行同样的任务,全程不需要人干预。请问这种汽车我们称之为L4,还是L5有什么区别吗?

     

    再比如,一种自动驾驶的货车,大部分路程都在高速公路上,完全自动驾驶,只有在出高速之后的一小段市内路程,需要人来“监督”继续驾驶到卸货的地方。请问这种汽车我们称之为L3,还是L4有什么区别吗?

     

    现在,很多公司展开的自动驾驶测试已经表明,不同地方的技术难度是不一样的。高速公路比城市环路简单,城市环路比开放的城市道路简单,开放的城市道路也比胡同或小县城电动自行车穿梭其中的环境要简单。所以,当我们讨论自动驾驶的时候,本身就应该把地点等因素考虑进去,而不是简单地类推出一辆终极的、无所不能的L5汽车。

     

    稍微开一下脑洞,很有可能的场景是,当我们向系统输入目的地之后,系统会告诉我们,“今天的路程全程不用你来管,放心睡觉吧”。或者会告诉我们,“今天大部分的路都不用你管,但有一小段我没十足把握,到时候需要你帮忙”……自动驾驶的三种实际部署路线自动驾驶领域的很多公司在展开研究、在讲他们的故事,但是谈到“看得见、摸得着”的实际部署路线,最有代表性的就是 Mobileye、特斯拉和 Waymo 这三家公司。

     

    640?wx_fmt=jpeg

     

    用上边的流程图,我们看下这三种实际技术部署路线的区别。

     

    首先,Mobileye+传统车企走的是“谨小慎微,但求无过”的实际部署路线。从2017年就开始宣传,号称全球首款L3级别量产车的奥迪A8,今年上市后的真实情况是什么样的呢?就是连ACC自适应巡航这样的功能,都只在最顶配车型上提供。更别说传说中L3级别的 Traffic Jam Pilot 功能,实际情况是全系都没有,需要选装才行,然后在大部分国家连选配都不能选。

     

    就在这几天上市的福特福克斯2018款,也号称支持L2级别的 Co-Pilot360智能辅助驾驶系统,“入门车型配了顶级科技配置”。实际情况呢?同样连最顶配车型也没有包括ACC自适应巡航在内的Co-Pilot360系统,而且只有最顶配车型才能选装。换言之,传统车企宣传自己的技术很厉害,但实际上却不怎么敢让你用。

     

    对这种情况,汽车之家的创始人李想,在微博上曾有过评价:“传统汽车品牌和特斯拉在辅助驾驶/自动驾驶上最大的区别是:传统汽车品牌的消费者连用都不敢用,所以特别特别特别的安全。特斯拉的车主们每天辅助驾驶/自动驾驶的使用总时长,估计够所有其它汽车品牌一个月使用时长的总和。”

     

    接下来就聊特斯拉的路线,这家明星公司可以说是走在“急于求成、蒙眼狂奔”的路上。与传统车企不同,特斯拉视自动辅助驾驶技术为核心竞争力,所以为所有车型都预装了各种传感器硬件,但车主仍然需要花钱“激活”相应的功能,包括“增强版自动辅助驾驶”和“全自动驾驶能力”两个套装。

     

    特斯拉在行业中被普遍认为,过度宣传了自家的自动驾驶技术能力,尤其是被称为“全自动驾驶能力”的套装,对车主的误导性极强。就算不讨论之前特斯拉的两次广受关注的Autopilot致死事故(国外撞上了大货车,国内追尾道路清扫车),最近特斯拉撞上公路隔离带致死事故,也足以给特斯拉盖上“急于求成、蒙眼狂奔”的帽子。

     

    最近的开启Autopilot撞上隔离带致死事件之后,一位车主“以身试法”实地还原了当时的场景,发现特斯拉的Autopilot系统确实应付不了当时的情况,没有正确地识别出前方的车道已经消失,需要转到另一个车道。但是如果采用Waymo 的技术方案(事先给环境建模、激光雷达和计算机视觉互为冗余等),这种情况就很有可能避免。

     

    最后就是Waymo的“胆大心细、步步为营”路线。Waymo的车,准确的说是Waymo与克莱斯勒、捷豹合作特别定制自动驾驶汽车,是普通人现阶段根本买不起的,因为它装配了定制化的芯片和传感器,尤其是激光雷达传感器目前价格比车还贵。Waymo的方案是提前为自动驾驶车要运行的环境建模,比一般意义上的高精地图包含更多更多的环境细节信息,然后通过计算机视觉与激光雷达的算法融合,形成自动驾驶的策略和算法基础。对于特斯拉装上隔离带的情况,Waymo的优势在于它本身就应该会知道那个车道是不通的,而不需要通过计算机视觉临时来判断(再做反应可能就来不及了)。

     

    “胆大心细”,“胆大”说的是Waymo已经开始在部分地区,邀请真实用户上路体验自己的车;“心细”说的是Waymo也只敢在自己掌握完整环境数据的地区,开展这类服务。步步为营,则说的是Waymo在美国的各个地区、各种极端环境下展开测试,通过攻克一城一寨的方式,逐步扩大技术能适应的能力范围。

     

    三种路线的未来变数对于三种自动驾驶实际技术部署路线,行业中的人也有不同的看法。如果我们极端化描述(仅为了方便理解)这三种实际技术部署路线,总结起来就是有三种变数:

     

    一、(可能性49%)计算机视觉突飞猛进,不依赖激光雷达和提前环境建模就能做到足够好的自动驾驶。特斯拉胜。

     

    二、(可能性49%)激光雷达和提前环境建模成本大幅下降,便宜到所有车都可以装配。Waymo胜。

     

    三、(可能性2%)计算机视觉没有突飞猛进,激光雷达和提前环境建模成本也没有大幅下降,自动驾驶老出问题陷入困境,ADAS回潮。

     

    Mobileye+传统车企胜。不管怎么说,自动驾驶行业正处在黎明前的黑暗中。带我们冲破黑暗的,一定不是那些迫不及待、率先发布L5级别自动驾驶汽车的公司。

     

    先来一张各大车企自动驾驶技术的分级图,大致了解一下目前已经量产的自动驾驶技术哪家强。

     

    640?wx_fmt=jpeg

     

    自动驾驶从L2到L5是一个相对漫长的过程,现已发布的量产车型中有处于L3的奥迪A8、处于L2.5的Tesla、还有处于L2的凯迪拉克CT6等。那么每一级别之间具体的区别和需要克服的难点到底又有哪些?那就一级一级细细道来。按照国际惯例,谈论自动驾驶级别时必须上一张SAE的分级图。

     

    640?wx_fmt=jpeg

     

    下面我用给大家解释一下各个级别到底代表着什么样的技术哪些指标能立刻区分汽车属于哪个Level为什么Level越高,对技术的要求越高

     

    SAE Level 0:No Automation(无自动化)

     

    准确来说,现在我们已经很难看到 Level 0 的汽车了。要么早已报废,要么法规都禁止其上路了。无自动化意味着诸如ABS(自动防抱死)这种现在看来最基本的配置都没有。极端一点,你可以认为Level 0的车就是四个轮子加一个沙发。@吉利

     

    SAE Level 1:Driver Assistance(驾驶员辅助)

     

    生活中常见的车基本都属于Level 1。Level 1 称为驾驶员辅助系统,所有在驾驶员行驶过程中,对行车状态有干预的功能都叫驾驶员辅助,都属于Level 1。比如最基本的ABS,以及在ABS基础上升级而来的ESP,还有高速路段常用的定速巡航、ACC自适应巡航功能及LKA车道保持辅助。大家买车时,在底盘功能介绍中看到的各种英文缩写,或多或少都是属于SAE 规定的Level 1。

     

    SAE Level 2:Partial Automation(部分自动化)

     

    Level 2和Level 1最明显的区别是系统能否同时在车辆横向和纵向上进行控制。如果一个车辆能同时做到ACC+LKA(自适应巡航+车道保持辅助),那么这辆车就跨进了Level 2的门槛。

     

    2018款的凯迪拉克CT6拥有的半自动驾驶系统“Super Cruise”就是典型的Level 2级别。该车并不具备主动超车的功能。即目前的Super Cruise仅能实现单一车道内的加减速。再来说说自动驾驶话题下不得不提的特斯拉。特斯拉过度夸大了他们系统所具备的能力。为什么称 Tesla 目前的 AutoPilot 为 Level 2.5?

     

    因为特斯拉具备换道功能。驾驶员在确保安全的情况下,拨动转向灯杆,车辆即可依据该信号实现换道。也就是说,特斯拉的换道操作并不是全自动的,而是把这一块对环境感知的需求交给了人。特斯拉收到变道信号后会由车判断是否可安全变道后才会执行。比如前后车距离太近、实线都不会变道的。

     

    (重点来了!敲黑板)难点:Level 1 ~ Level 21.汽车横向控制和纵向控制配合的舒适性单独的横向控制(车道保持)或纵向控制(ACC等)技术已经十分成熟,那么两者同时控制时,如何将舒适性做到最优,这就是当前遇到的挑战。

     

    通知驾驶员接管车辆的时机选择Level 2的系统并不具备较高级别的自动驾驶功能,需要驾驶员实时监控并做好接管的准备。如何以最友好的和最恰当的交互方式通知驾驶员接管车辆,而不影响到驾驶员的心情,需要人机交互攻城狮费尽心思。

     

    SAE Level 3:Conditional Automation(有条件自动驾驶)

     

    有条件自动驾驶是指在某些特定场景下进行自动驾驶。比如全新奥迪A8在他们的宣传视频中就限定了十分常见的场景——堵车,该功能叫作Traffic Jam Pilot(交通拥堵巡航),功能描述如下:当车速小于或等于60公里/小时,用户可以启动道路拥堵状况下的自动驾驶功能。

     

    在当地法律允许的情况下,车辆会完全接管驾驶任务,直到系统通知用户再次接管。这也是目前在全球范围内,在实现量产的车型中拥有的最高级别的自动驾驶能力。引用出处:全球首款自动驾驶量产车奥迪A8背后的Audi AI。

     

    仔细想想,这些功能特斯拉通过升级软件也能实现,为什么只有Audi A8敢宣称自己达到 L3 呢?因为L3 相比 L2 最大的进步在于——不需要驾驶员实时监控当前路况,只需要在系统提示时接管车辆即可。这对于自动驾驶技术来说是一个很大的跨越,这也意味着自动驾驶系统代替人类成为了Driver & monitor。

     

    驾驶员变为乘客,而乘客是不需要实时监控当前路况的。传感器感知技术NTSB最近刚发布的,去年五月特斯拉撞卡车交通事故的宣判结果——特斯拉Autopilot的功能限制是导致2016年5月交通致死事故的主要原因,这里的功能缺陷实际上就是传感器感知的缺陷。AutoPilot 1.0的硬件配置很难处理特殊工况,比如交叉路口。图为特斯拉因传感器感知缺陷未正确识别卡车所导致的事故。

     

    640?wx_fmt=jpeg

     

    正是因为传感器感知缺陷这种客观因素的存在,整车厂做自动驾驶时就显得尤为保守,要么增加传感器以加强感知能力,比如全新奥迪A8加的四线激光雷达;要么就通过监视驾驶员的面部状态,确保驾驶员实时观测着前方路况,比如凯迪拉克CT6。

    目前中国还是不允许自动驾驶车在开放及高速道路测试的,所以在法规正式发布之前,自动驾驶还只能到封闭的试车场中测试。这一点国外走在前列。

     

    SAE Level 4:High Automation(高度自动驾驶)

     

    无论是国外的Waymo、Uber还是国内的Baidu L4事业部做的都是Level 4自动驾驶技术的研究。它们的自动驾驶汽车有一个很明显的共同点,就是头上顶着一个大大的激光雷达。如下。

     

    激光雷达提供了极高精度和极其丰富的感知信息,这使自动驾驶车自如处理极端工况成为可能。激光为主,视觉为辅,再加上车上各种功能冗余的传感器及高精度电子地图,在开放道路上实现A点到B点的自动驾驶不再遥远。

     

    难点:Level 3 ~ Level 4

     

    1.传感器成本激光雷达的成本短期内还降不下来,这也是 L4 自动驾驶汽车还未普及的重要原因之一。Waymo在今年年初宣布将激光雷达成本降低90%,希望低成本激光传感器早日到来。

     

    2.极高鲁棒性的自动驾驶算法及稳定的计算平台

     

    Level 4的自动驾驶算法准确性和精确性需要达到,甚至超过人类的认知水平,这就需要的是极具鲁棒性的算法和稳定的计算平台。确保自动驾驶汽车即使遇到突发情况也能较好应对。

     

    3.高精度地图采集资质这一项难点国外并不存在,但是国内确实是一个很大的壁垒(国防考虑)。除了大家耳熟能详的BAT有地图测绘资质外,国内有测绘资质的图商寥寥无几。

     

    近几年随着自动驾驶的发展,想在国内发展自动驾驶技术,图商说不定会成为稀缺资源。可以的话,推荐大家自己去调研国内有测绘资质的几家图商,买点他们的股票,看涨。

     

    4.乘坐人员接纳度

     

    现在让你去乘坐一辆没有方向盘,随时都无法接管的汽车,心里多少会有些忐忑吧。因此人类的接纳程度也是自动驾驶普及的一个大难点,需要时间建立信任。

     

    Level 5:Full Automation(完全自动驾驶)

     

    LEVEL5:车企看看就好

     

    Level 5全自动驾驶(无人驾驶),没有使用条件限制,无需监控和控制,甚至没有方向盘等控制机构。是汽车驾驶自动化系统研发的终极目标。研发难度极大,成本极高,需要非常强大的感知和决策能力,全天候工作。

     

    之前,Level 5研发的领头羊就是Google,Google把互联网软件公司的优势发挥的淋漓尽致,但同时也看到,经历了这么多年的研发,Google的无人驾驶小车依然“步履蹒跚”。

     

    传统主机厂在研发Level 2-3之后,也逐渐重视Level4和5,有车企的底子和供应商支持,进展神速!赶超Google我认为是迟早的事…Level5难度首先来自于感知,虽然有多种传感器,比如360度激光雷达和摄像头,但这些传感器输出大量原始数据。

     

    普通人看摄像头和激光雷达的数据很容易识别出里面的内容,但电脑就很困难。普通的模式识别识别率会很快达到瓶颈,这时候就需要深度学习,需要大量的数据进行训练,而当今深度学习以及人工智能并没有给识别工作带来质的飞跃。很多显而易见的场景,电脑就是认不出来。同时当数据量增多时,计算的时间也会延长,系统响应变慢,这就导致这些无人车只能低速行驶。

     

    另一大难题是决策控制。主流方式是专家系统,把所有的经验进行总结,归纳为代码。但驾驶场景万万千千,极难穷尽,遇到没见过的场景干脆就没响应了。于是另一种方式,人工智能成为解决问题的唯一希望。但纯靠人工智能进行决策控制还处于“扯淡”阶段,同样需要大量数据进行训练,而这种训练又不像训练人类驾驶员,能够互动沟通,讨论自身问题。

     

    训练这个系统就像对牛弹琴,让牛看你弹个千百遍,然后说,牛,该你了!牛会怎么弹其实你是不知道的,同样这个训练后的人工智能系统到底做出啥响应也是不确定的,一旦出错,你还没法回溯(就像你没法问牛你为啥这么弹)。

     

    最佳的方式似乎是结合专家系统和人工智能,但如果结合又是难点。说到Level5,不得不说,未必是所有主机厂的最终选择。其成本极高,带来的客户收益未必比L2高太多。

     

    所有很多主机厂都说不会研发没有方向盘的无人驾驶车,驾驶是每个爱车人的权利。这类车更多的是未来出行或者交通的新方向,而且只要限制车的行驶区域,比如封闭的校园或场馆,限制行进速度,这些降级的Level5 还是应该很快就能面试的。如果让Level5真像人类驾驶员一样开车,恐怕要很久很久了。

    展开全文
  • 无人驾驶 | 自动驾驶技术和机器人技术的对比

    千次阅读 多人点赞 2021-01-09 13:06:36
    机器人技术的核心是运动控制,包括定位、导航、感知、决策、跟踪等,可广泛应用在家庭服务机器人、工业自动化机器人等领域。自动驾驶是人工智能领域最炙手可热的方向,互联网巨擎(谷歌、Uber、百度等)、传统汽车大...

    这是学习中兴开发者社区金明、郑卫军的总结笔记,感谢大佬的总结,学习记录一下

    机器人技术的核心是运动控制,包括定位、导航、感知、决策、跟踪等,可广泛应用在家庭服务机器人、工业自动化机器人等领域。自动驾驶是人工智能领域最炙手可热的方向,互联网巨擎(谷歌、Uber、百度等)、传统汽车大厂商、 Tier1供应商以及很多初创公司都纷纷投入到这场全新的交通运输生态的创建中。截止2017年6月18日以来,共有34家公司获得美国加州路测资格,其中中国背景的公司就有9家。

     

    图片

    图片来自互联网

    通过对自动驾驶的深入了解,发现自动驾驶技术与机器人运动控制技术在框架构成、硬件平台、应用理解、软件核心算法上都基本契合。本文以百度的自动驾驶Apollo技术为例,比较自动驾驶和机器人运动控制技术的异同点。

    注:目前自动驾驶技术百度公开的最为彻底,它所用的思想代表了目前做自动驾驶的主流路线。

    技术框架对比

     

    ▍机器人运动控制的技术栈

     

    图片

    机器人运动控制分为四层技术栈:

     

    1. 基础运动平台

    一个机器人必须有可以运动的实体,一般来说,对于低速移动的机器人,差分轮式运动底座是比较普遍的选择。它有两个主动轮,可以分别控制转速和转向, 前面有一个被动万向轮。运动底座向上提供的基本接口包括:线速度,角速度或曲率控制, 查询当前里程计信息,完成上层对运动底座的控制和信息查询。

     

    2. 硬件平台

     运算单板是硬件部分,与运算单板同层的其它模块,都是感知单元,感知单元涵盖了目前主流的环境感知技术,可按照实际需求进行选取。

     

    3. 软件平台

    软件平台包括操作系统和上层算法。目前主流的机器人操作系统是ROS,ROS是Willow Garage公司在2010年发布的开源机器人操作系统,由于其具有点对点设计,不依赖于编程语言,分布式架构,强大的硬件抽象,广泛的社区参与贡献,丰富的可复用,知名的开源库资源,已经成为机器人设计的不二选择。对于低速运动场景,原生的ROS环境完全满足设计要求。

     

    感知、定位、避障、地图、路径规划、导航、跟踪是封装的软件算法模块,软件算法与感知单元采集的数据配合,完成机器人的各种功能。

     

    4. 云服务平台

    云服务平台包括仿真、安全、数据平台、训练平台、语音和全局地图功能,数据平台位于云端,通过深度学习和训练,使机器人获得更高的智能水平。仿真平台是做机器人测试的必要工具,用户可以不依赖于真实的机器人和测试环境,而是在仿真平台中建立机器人模型和测试环境,进而验证自己的算法。

     

    ▍百度自动驾驶Apollo技术框架

     

    图片

    图片来自互联网

    百度的自动驾驶分为四层技术栈:

     

    1. 参考汽车平台 

    一辆汽车, 必须可以实现电子化的控制,也就是线控。百度目前的参考设计使用的是Lincoln MKZ, enhanced by Autonomous Stuff, 为用户提供了一个无障碍的自动车辆平台。该平台为用户提供了一整套硬件和软件解决方案。用户可以直接获得车辆某些模块控制权限,如档位,速度和指示灯,如下图:

     

    图片

     

    2. 参考硬件平台

    为了实现高性能稳定的计算,百度采用的是工业级PC作为运算单元, 配置6th-Gen Intel® Core™ i7/i5 LGA1151 CPU 和NVIDIA® GeForce® GTX 1050* GPU,可以工作在-25°到60°的工作范围。

     

    图片

     

    定位采用的是GPS+IMU的融合方案,精度能达到厘米级别。在Apollo 1.0 中没有公开摄像头、Lidar(雷达)和Radar(毫米波雷达)信息,不过根据百度以前无人驾驶车的信息可以看到,它包含一个Velodyn 64线HDL64E雷达,配套一个长距毫米波雷达和中距毫米波雷达,一个鱼眼摄像头和一个摄像机镜头。

     

    3. 开源软件平台

    开源软件平台包括操作系统和上层算法。Apollo 采用 ROS 操作系统。其中ROS是做了定制化修改的,使得其能更适合自动驾驶的要求,后面的连载文章中会详细介绍。

    算法模块的构成与前面运动控制中的算法基本类似,多了端对端和HMI。HMI是百度自动驾驶提供的人机交互界面,方便操作者统计和调试。端对端算法是一种所见即行动的思想,通过深度学习,将感知直接转化为控制,这是一种实验性质的算法,目前还不是主流应用。

     

    4. 云服务平台

    主要有三个作用,  训练模型, 自动驾驶仿真, 高精地图提供。

     

    ▍两个技术栈的对比

     

    根据上述对机器人运动控制技术和自动驾驶技术栈的描述,可以看到两者之间有颇多相似的地方,同时也有一些差异点,具体分析如下:

     

    1. 运动底座 vs 参考汽车平台

    二者都是运动的控制主体,为上层算法提供控制接口进行驱动,提供查询接口进行反馈。运动底座和汽车进行控制时都要满足非完整约束,即不向前移动的情况下,无法单独完成横向位移。相比于运动底座,汽车平台的动力学模型会更加复杂,除了速度不是一个量级 ,惯性因素也会使得控制更加复杂。汽车的横向位移(转弯)靠前轮的朝向与前后轮形成直线的夹角的变化,属于自行车模型。机器人运动控制多采用差分轮运动底座,横向位移靠两个轮子相互反方向旋转,靠不同的旋转速度比,来满足不同曲率的要求,在控制算法的选取中,会有不同。

     

    2. 运算单元

    运动控制平台采用的是嵌入式异构计算单板, 满足低速简单运动场景的感知、决策、控制算法的计算要求。汽车应对的是高速、绝对可靠安全的场景,运算量不是一个量级,目前多采用工业级PC的方案来满足感知对于运算量的要求。各芯片厂商也纷纷推出自己的芯片方案,后续运算单元平台将是百花争艳的局面。

     

    3. 感知单元

    运动控制平台和自动驾驶采用的传感器大多重叠,也有几个不同地方, 如深度摄像头可以在运动控制平台的室内场景中使用,深度主要靠结构光技术,抗干扰能力差,目前在室外场景下不可靠。自动驾驶多采用双目摄像头来完成深度识别。运动控制平台采用超声和红外完成被动障碍感知, 自动驾驶采用汽车电子方面非常成熟的毫米波雷达方案。

     

    4. 操作系统

    两者都使用 ROS操作系统,汽车对于实时性、 带宽、分布式要求会更加严苛。原生的ROS 对于这三方面都无法达到自动驾驶的要求,虽然 ROS 2.0 会在这三个方面有很大的提升,但是仍然处于实验阶段。大部分自动驾驶厂商,包括百度,都是在ROS基础上作深度定制。 

     

    5. 上层算法

    两者的软件算法分类基本相同,所采用的算法实现有很多相互借鉴的地方, 在后面的连载文章中会详细介绍。

     

    6. 仿真

    运动控制平台的场景相对简单,在一些相对高配置的PC上基本能满足要求。自动驾驶一般要自动驾驶厂商自己搭建仿真平台, 汽车要仿真的环境非常复杂,计算量消耗很大,一般要采用云技术分布式平台。 

     

    7. 地图

    运动控制平台的地图创建所描绘的场景比较简单, 一般2D 场景地图即可满足要求,在运算单元上可以完成创建和使用。自动驾驶需要高精地图, 三维点云,精确到厘米级别, 其特点是需要花费巨大成本提前用采集车采集,生成的高精地图要随时更新,消耗大量的存储,一般要放在云端,自动驾驶车通过高速无线网络下载当时位置的高精地图满足实时决策要求。 

     

    8. 训练

    运动控制平台会对某些物体或人有简单的识别要求,模型可以提前在服务器端训练,训练数据相对不多。汽车有海量的数据要进行训练,如果要满足高可靠性的物体识别任务,要在云端进行训练。

     

    9. 运动控制平台的多机协作 vs 车联网

    运动控制平台涉及多机协作的要求,如多个AGV小车互联互通共同完成调度任务,是车车通信的一种方式。车联网方案是自动驾驶的一条路径,在百度Apollo框架中并没有提及。包含V2V(车车通信)、V2I( 车路通信)、 V2P(车人通信),完成信息共享后的汽车决策和控制算法。目前通信标准主要是欧美主推的DSRC(专用短程通信)和中国主推的5G标准LTE-V。

     

    自动驾驶 vs 机器人环境感知

    自动驾驶和机器人共同的三大关键技术为:

    图片

    环境感知是其中最重要、最基础的一环。

    图片

    自动驾驶和机器人主要通过传感器来获取周围环境信息,同时也会通过高精度地图和IoT技术来扩展环境感知能力。

    图片

    下面我们来了解一下每类传感器的特性,以及在机器人和自动驾驶汽车中的使用差异。

     

    ▍一、摄像头

    摄像头是机器人或自动驾驶汽车的眼睛,分类如下:

    图片

    1. 普通单目摄像头

    通过图像匹配进行目标识别,再通过目标在图像中的大小去估算目标距离,准确识别是准确估算距离的第一步。

    图片

    2. 单目结构光深度摄像头

    由一个RGB摄像头、结构光投射器(红外)和结构光深度感应器(CMOS)组成,通过投影一个预先设计好的图案作为参考图像(编码光源),将结构光投射至物体表面,再通过深度感应器接收该物体表面反射的结构光图案。

    这样,同样获得了两幅图像,一幅是预先设计的参考图像,另一幅是相机获取的物体表面反射的结构光图案。

    由于接收图案会因物体的立体形状而发生变形,因此可以通过该图案在摄像机上的位置和形变程度来计算物体表面的空间信息。

    图片

    单目结构光 Kinect一代

    同样是进行图像匹配,这种方法与双目匹配比较好处在于,参考图像不是获取的,而是经过专门设计的图案,因此特征点是已知的,而且更容易从测试图像中提取。

    3. 双目深度摄像头

    双目摄像头的测距方式则是通过对图像视差进行计算,直接对前方景物进行距离测量。双目摄像头的原理与人眼相似,人眼能够感知物体的远近,是由于两只眼睛对同一个物体呈现的图像存在差异,也称“视差”。

    物体距离越远,视差越小,反之视差越大。视差的大小对应着物体与眼睛之间距离的远近,这也是3D电影能够使人有立体层次感知的原因。

    图片

    优点

    1) 双目系统成本比单目系统要高,但尚处于可接受范围内,并且与激光雷达等方案相比成本较低。

    2) 没有识别率的限制,因为从原理上无需先进行识别再进行测算,而是对所有障碍物直接进行测量。

    3) 精度比单目高,直接利用视差计算距离。

    4) 无需维护样本数据库,因为双目没有样本的概念。

    难点

    1) 计算量大,对计算单元的性能要求非常高,这使得双目系统的产品化、小型化的难度较大。

    2) 匹配,双目匹配采用三角测量原理,完全基于图像处理技术,通过寻找两个图像中相同的特征点得到匹配点,从而得到深度值。

    双目测距中光源是环境光或者白光这种没有经过编码的光源,图像识别完全取决于被拍摄的物体本身的特征点,对表面颜色和纹理特征不明显的物体失效,匹配的精度和正确性很难保证,因此出现了结构光技术来解决匹配问题。

    因为结构光光源带有很多特征点或者编码,因此提供了很多的匹配角点或者直接的码字,可以很方便的进行特征点的匹配。

    4. TOF深度摄像头

    TOF是Time of flight的简写,直译为飞行时间的意思。

    所谓飞行时间法3D成像,是通过给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉冲的飞行(往返)时间来得到目标物体的距离。这种技术跟3D激光传感器原理基本类似,只不过3D激光传感器是逐点扫描,而TOF相机则是同时得到整幅图像的深度信息。

    TOF相机与普通机器视觉成像过程也有类似之处,都是由光源、光学部件、传感器、控制电路以及处理电路等几部单元组成。

    图片

    单目TOF Kinect二代

    各种摄像头性能和成本比较:

    图片

    由上表对比可知,无论是结构光还是TOF方案,都需要增加主动光,因此,其检测距离受到了光强度的限制,无法适用于远距离的检测,一般只用于机器人的感知,而普通单目和双目摄像头除了在机器人上应用,还可以用于ADAS和自动驾驶汽车上。

     

    ▍二、激光雷达

    激光雷达以激光作为信号源,由激光器发射出的脉冲激光,打到对面物体上,引起散射,一部分光波会反射到激光雷达的接收器上,根据激光测距原理计算,就得到从激光雷达到目标点的距离,脉冲激光不断地扫描目标物,就可以得到目标物上全部目标点的数据,用此数据进行成像处理后,即可得到精确的目标物体图像。

    图片

    激光雷达分为单线和多线,常见的多线激光雷达有4线,8线,16线,32线和64线。

    • 单线激光雷达扫描的区域可以简单定义为一个平面,是一个二维扫描方案。

    • 4线、8线雷达纵向扫描范围从3.2°到6.4°,这个范围不能称为一个3D的扫描,一般定义为2.5D扫描方案。

    • 64线雷达扫描的整个范围面就比较大,纵向甚至可以一直到30多度,讲究对整个环境、3D的点云数据收集,单位时间内收集到的反馈点数多,数据量大。

     

    图片

    SICK单线激光雷达

    图片

    单线二维激光雷达扫描图

    图片

    Velodyne多线激光雷达

    图片

    64线三维激光雷达扫描图

    激光雷达普遍用于定位、障碍物检测、物体分类、动态物体跟踪等应用,在机器人和自动驾驶汽车上都有使用。

    •  由于机器人的工作环境相对来说比较简单,而且迫于成本压力,一般采用单线激光雷达,用于定位和检测周边障碍物。

    • 自动驾驶汽车一般采用32线或64线的三维激光雷达置于车顶,完成对车辆四周较远物体的检测分类和跟踪。

      另外,在车灯或者保险杠附近的位置还需要安装4线和8线激光雷达,主要对车顶三维激光雷达进行补盲,对近距离的车辆、行人以及地线、马路牙、路肩、路栏等进行识别。

    缺点

    激光雷达容易受到大气条件以及工作环境的烟尘的影响,要实现全天候的工作环境是非常困难的事情。

    三、毫米波雷达

    毫米波是指波长在 1-10mm 之间的电磁波,换算成频率后,毫米波的频率位于30-300GHz 之间。

    毫米波的波长介于厘米波和光波之间,因此毫米波兼有微波制导和光电制导的优点:

    1. 同厘米波导引头相比, 毫米波导引头具有体积小、质量轻和空间分辨率高的特点。

    2. 与红外、激光等光学导引头相比, 毫米波导引头穿透雾、烟、灰尘的能力强,传输距离远,具有全天候全天时的特点,在雨天、大雪天气下,毫米波雷达是非常不错的选择。

    3. 性能稳定,不受目标物体形状、颜色等干扰。毫米波雷达很好的弥补了如红外、激光、超声波、摄像头等其它传感器在车载应用中所不具备的使用场景。

    目前车载雷达的频率主要分为24GHz频段和77GHz频段,其中77GHz频段代表着未来的趋势,这是国际电信联盟专门划分给车用雷达的频段。

    严格来说77GHz的雷达才属于毫米波雷达,但是实际上24GHz的雷达也被称为毫米波雷达。

    图片

    毫米波雷达在测量目标的距离、速度和角度上展现的性能和其它传感器还是略有区别的。

    • 视觉传感器得到的是二维信息,没有深度信息,而毫米波雷达则是具备深度信息的,可以提供目标的距离。

    • 激光雷达对于速度并不敏感,而毫米波雷达则对速度非常敏感,可以直接获得目标的速度,因为毫米波雷达会有很明显的多普勒效应,通过检测其多普勒频移可将目标的速度提取出来。

    • 毫米波雷达最基本的探测技术是使用FMCW连续线性调频波去探测前方物体的距离,毫米波雷达发射的是连续波,在后端处理上要比激光雷达的运算量大。

    毫米波雷达在ADAS领域是很难被取代的传感器,虽然有一些缺点,但是是唯一的全天候工作的传感器。

    其测速、测距的精度要远高于视觉,与激光雷达相比,其测速精度会高一些,穿透力会更好。

    而对于机器人的应用场景,利用毫米波雷达来探测障碍物,显得有点奢侈了,一般采用更低成本的超声波雷达来替代,但对于一些特殊应用场景的机器人(譬如消防,大型物流),由于需要在复杂环境下支持全天候、全天时作业,就必须采用毫米波雷达来实现避障。

     

    ▍四、超声波雷达

    超声波雷达是利用传感器内的超声波发生器产生 40KHz的超声波,再由接收探头接收经障碍物反射回来的超声波,根据超声波反射接收的时间差计算与障碍物之间的距离。

    超声波雷达成本较低,探测距离近,精度高,且不受光线条件的影响,因此常用于泊车系统中。

    图片

    超声波最大的缺点就是检测角度太小,一辆车需要在不同角度安装好几个,除此以外,都比上面几种方案更好。

    优点 

    • 防水,防尘,少量的泥沙遮挡也无妨

    • 有金属材质的探头,可以与车体外壳结合的很好

    • 通常适合3m内的检测,由于其空气损耗大,检测角度又小,因此车辆之间的干扰较小

    • 最小的监测距离可达到0.1-0.3m

    •  成本不高

    对于较常见的40KHz超声波传感器,其测距精度大约是1~3cm左右(取决于后端电路和数据处理性能),这个范围也能满足倒车雷达的要求,所以在倒车雷达的各个方案中,超声波是最容易被用户接受的。

    另外,超声波雷达由于成本低,检测距离适中,因此在机器人的避障中应用也很广。汽车相对于绝大部分室内应用的机器人来说,对防护等级要求较高,因此,汽车上用的都是高防护等级的收发一体化的超声波雷达。

     

    ▍五、红外

    红外线的工作原理是利用高频调制的红外线在待测距离上往返产生的相位移推算出光束度越时间△t,从而根据D=C△t/2得到距离D。红外传感器的测距基本原理为发光管发出红外光,光敏接收管接收前方物体反射光,据此判断前方是否有障碍物。根据发射光的强弱可以判断物体的距离,它的原理是接收管接收的光强随反射物体的距离而变化的,距离近则反射光强,距离远则反射光弱。 

    目前,使用较多的一种传感器红外光电开关,它的发射频率一般为38 kHz左右,探测距离一般比较短,通常被用作近距离障碍目标的识别。红外只适合短距离测距,因此基本上只用于低速移动的机器人上防碰撞。

    图片

    各种传感器的技术指标对比:

    图片

     

    ▍六、IMU

    IMU(惯性测量单元)是测量物体三轴姿态角(或角速率)以及加速度的装置。一般一个IMU包含三个单轴的加速度计和三个单轴的陀螺,加速度计检测物体在载体坐标系统独立三轴的加速度信号,而陀螺检测载体相对于导航坐标系的角速度信号,测量物体在三维空间中的角速度和加速度,并以此计算出物体的姿态。

    惯性传感器的定位误差会随着运行时间增长,但由于其是高频传感器,在短时间内可以提供稳定的实时位置更新。IMU大多用在需要进行运动控制的设备,如汽车和机器人上,在导航中有着很重要的应用价值。

     

    ▍七、GPS

    GPS由GPS接收机和卫星天线组成,主要通过卫星来计算我们当前的位置和速度。通过测量从卫星上接收信号的时间,设备能够实现精确度大约在10m左右的定位。

    一个略为改进过的定位系统上线了,我们可以把它称为差分全球定位系统(DGPS),因为使用了地面基准站的关系,这个系统的精确度被提升到了1m。但这个精度对机器人和自动驾驶汽车的使用场景来说,都是不够的。因此,GPS一般需要融合IMU实现厘米级的定位。

    另外,由于室内无法接收到GPS信号,因此,对于室内机器人则无法使用GPS进行定位。

     

    ▍八、信息交互

    对于自动驾驶汽车来说,还有一类技术虽然不是主动式的探测元件,但是属于协同式的全局数据辅助,可以扩展智能车的环境感知能力,在感知层同样扮演着不可或缺的角色,包括高精度地图、V2X车联网技术。每种类型的感知技术都有自己的优势和弊端,它们相互补充融合,最终使智能车达到驾驶场景下非常高的安全性要求。

     

    ▍九、结语

    传感器是机器人和自动驾驶汽车环境感知的基础,对于各个传感器采集的数据还需要算法来处理,这样才能进行自身的定位和环境障碍的识别,因此,单个传感器数据的处理以及多传感器数据融合的算法非常关键。

     

    自动驾驶 vs 机器人操作系统

    无论是自动驾驶还是机器人运动控制的技术栈,都有很关键的一层,即操作系统层。该层与下层的硬件平台接口,其上层为软件算法单元,如下图:

    ▍操作系统的选择

    机器人大多选择ROS(robot operation system) indigo, 百度的自动驾驶Apollo在ROS indigo的基础上做了定制。

    除了百度的Apollo,日本的tier IV公司也开源了自己的整套自动驾驶算法Autoware, Autoware也是基于ROS。

    另外在一些自动驾驶初创公司的公开信息中可以看到,他们的操作系统同样是基于ROS的。

    作为对比,我们看到大的车商更倾向于专业的商业解决方案,如宝马将操作系统和中间件的开发工作交给了Intel,我们都知道Intel是一家专业的计算芯片解决方案提供商,但是大部分人不知道2009年Intel 收购了嵌入式操作系统解决方案提供商风河公司。

    风河介绍

    做过嵌入式系统开发的人,都对这个曾经的霸主有所了解,虽然它在慢慢被人淡忘,因为现在嵌入式设备的操作系统是Linux 和基于Linux 的Anroid的天下。风河公司在加入Intel之后一直没闲着,只是一直隐藏在Intel背后。此前Intel和三星推出的Tizen操作系统,风河就一直参与其中。期望在汽车市场展开第二春的Intel,在软件上的王牌就是风河。

    2014年,风河成为谷歌开放汽车联盟的一员,与谷歌共同开发Android For Automotive。风河在汽车操作系统上有天然的优势,它很早就涉足汽车娱乐信息系统、显示屏和车联网业务,与车厂有长期稳定的合作关系,在此基础上,它又提供自动驾驶、高级辅助驾驶和汽车云服务,无缝连接,更值得车厂的信任。

    下图是2017年1月风河推出的面向汽车的软件解决方案Helix Chassis产品,该产品依仗的就是其1987年即开发出来的实时操作系统Vxworks。

    图片

    综上所述,我们可以看到汽车操作系统,基本分为两个阵营:

    • 传统车商

    他们的路线是商业产品,一直信赖平滑过渡的产品。

    • 行业闯入者 

    这个阵营如Google的Waymo,Tesla有实力及早布局自己的操作系统解决方案,其它大部分公司会选择ubuntu+ROS 深度定制的方案,加快自己的开发效率。

    ▍操作系统主要做什么工作?

    每个做计算机行业的人对操作系统的概念既熟悉又陌生。程序员的三大浪漫是操作系统、编译系统和图形学。评价一个牛人的标准之一就是:做过一个操作系统内核,能看Linux 内核代码并做贡献。实际中除非工作需要,软件人员一般不会在操作系统上面下功夫, 一个原因是它的确很难,另一个原因是它像水和空气一样,非常重要,但大部分情况下是免费的。

    操作系统的价值

    我们执行一段程序,其实不仅仅是代码编译好的机器码在执行,而是在操作系统的协助下一起执行,完成某项工作。操作系统会找到你要执行的程序(磁盘管理),将程序码导入内存(内存管理),分配进程,分CPU时间片去调度。 

    你的程序若访问其它硬件资源如显示器,操作系统会给你提供接口,把你的请求连接到显示系统进程中去,将请求翻译成显示屏上的像素值,达到显示目标。进程间对相同资源的访问,操作系统会透明地帮你安排好。 

    我们可以想象一下,没有操作系统,软件开发者大部分会成为废人,就算是一个高手,也要关注很多细节才能完成一个简单的任务。大部分操作系统都会有存储管理、内存管理、进程管理等一般化的工作。对于不同的需求,也会衍生出不同的有针对性的操作系统。我们的PC工作站,对人机交互体验和进程调用切换要求会更高一些,对于大部分嵌入式设备,CPU资源的占用敏感,实时性则是考虑重点,而不需要考虑人机交互。

    开源Linux 给操作系统领域带来的震撼,改变了这个领域的发展格局,在Linux内核的基础上,各个领域的计算机应用可以进行高效地量体裁衣的定制。以Android为例,很多人可能会以为它是一个全新的操作系统,事实上它是建筑在Linux内核基础上,它的应用有自己的特点,要无痛在各种硬件平台架构上无差异的执行,无论是Arm,PowerPC,还是 X86。 

    移动设备一般不会使用PC上的存储设备,但Flash,SD卡高效存取是它要着重考虑的。移动设备对能耗非常敏感,对人机交互要求很高,这一系列因素催生了我们所见到的Android的样子。 

    ▍为什么自动驾驶需要操作系统?

    一个汽车驾驶系统运行的软件包括感知、控制、决策、定位等一系列高计算消耗,逻辑十分复杂,对安全可靠性要求特别高的程序,简单的单片机肯定搞不定,需要建立在一个成熟的几乎五脏俱全的通用操作系统基础上,同时要满足实时性、分布式、可靠性、安全性、通用性等要求。从头搞一个操作系统是非常不明智的做法,所以对于没有风河Vxworks家底儿的玩家,首选是Linux,然后在Linux 基础上使用中间件的形式去扩展。  

    汽车行业的人可能会第一时间站出来表达不同意见,因为搞汽车电子的最熟悉的嵌入式系统是类Unix的QNX, 以往的汽车电子行业的嵌入式开发集中在汽车娱乐系统控制, QNX 体积小速度快,非常稳定和可靠,因此它占据了汽车电子近75%的份额。但是简单几个问题就能理解为什么它不可选:要做感知,目前公认的解决方案是使用深度学习网络进行识别,有现成的深度学习框架运行在QNX上吗,它能驱动GPU加速吗? 

    操作系统的选择更要考虑开发的难度、后续的扩展性和解决方案的开放性。Linux对于自动驾驶及机器人运动控制而言,可以说够,也可以说不够。因为机器人和自动驾驶汽车的自主运动,有一个很大的共性:各种传感、驱动以及模块是各自独立运作的,决策、感知等算法是完全独立的模块,各自工作,同时要互相交流,使用一种规格一致、统一的交流语言。每个模块需要别的模块配合,也就是我们常说的分布式协作系统。 

    如果把每个模块放入一个个独立的进程中,进程间通信将是一个十分重要的考虑因素。我们知道的Linux操作系统提供的一系列进程间通信的手段:信号量、队列、管道、共享内存、套接字,可以去做,但这需要大量的技术编码工作,而我们的注意力是算法,不是通信。那怎么解决这个问题呢?

    ▍选择ROS操作系统

    ROS完全封装了模块之间的通信细节,提供了优雅的方式进行各种类型的交互( 一对一、多对一、多对多、有返回、无返回、同步、异步),像这种通讯框架,会有很多其它现成的东西可以用。

    ROS 巨大的价值不仅如此,因为它出身高贵,前身是斯坦福人工智能实验室的机器人项目STAIR,后来由Willow garage 组织维护。它是免费的开源框架,软件架构清晰一流,提供: 

    • 多语言接口支持

    • 广泛的库文件实现以机动性、操作控制、感知为主的机器人功能

    • 大量的工具组合用以配置、启动、自检、调试、可视化、登录、测试、终止分布式计算系统

     ROS为常用的机器人和传感器提供了硬件驱动接口。从软件架构角度讲,它是 一种基于消息传递通信的、分布式多进程框架。ROS很早就被机器人行业使用,有很多知名的机器人开源库, 例如:

    • 基于Quaternion 的坐标转换

    • 3D点云处理驱动

    • 规划方面的MoveIt

    • OpenRAVE 规划库

    • 控制方面的OROCOS 实时运动控制库

    • 视觉图像处理方面的OpenCV 和PCL开源库

    • 定位算法SLAM等

    这些良好的特性吸引了成千上万的机器人爱好者加入贡献,提供了机器人相关的各种算法包,各大硬件传感器厂商,会缺省提供ROS的驱动Wrapper。ROS的支持与发展依托着一个强大的社区。ros.org尤其关注兼容性和支持文档,提供了一套“一站式”的方案使得用户得以搜索并学习来自全球开发者数以千计的ROS程序包。这个生态是无价的,正因为这样,ROS基本是科研单位和机器人相关行业的首选,更准确的说法是选择Ubuntu+ROS。 

    如今是技术开放的时代,做技术框架选择时,不能一味硬着头皮重复造轮子。在选择上,除了看技术先进性, 更要看技术的生态环境,参与到一个强大、开放、可扩展的技术生态中,从中索取和贡献是更明智的。选择Linux, 是因为生态,选择ROS,更是因为生态。

     ▍ROS在自动驾驶上有什么缺陷?

    ROS在机器人运动控制中完全够用,但是用于自动驾驶工程实践,其实是有很多问题的。

    1. 单点失败问题

    ROS的框架示意图如下,我们可以看到各个节点之所以可以互相认识,互相通信,是因为它们在启动前,把自己的信息告知一个统一的ROS Master,ROS Master 是一个名字服务器。

    这样就会造成一个问题, 这样的架构不是一个纯粹的分布式架构,有单点失败问题,这个单点专指 ROS Master, 其它应用节点的损失是互不影响的。这个问题对于自动驾驶这种要求高可靠性,甚至会为此设计冗余备份机制的场景来说是完全不能接受的。 ROS 节点与节点之间的通信是Socket,即使一对多的情况, 也是分解成 N对Socket, 如果是多对多,读者可以想象。

    2. 带宽拥塞

    自动驾驶有很多传感器,如图:

    它对于带宽资源是十分敏感的,以摄像头传感器为例,因为自动驾驶要高速行驶,采样率要高,至少每秒30帧, 以1080P的像素计算,大概为 180M/S,而且传感器的数据不只一个节点感兴趣,见下图:

    图片

    这个带宽的占用是很恐怖的, 这还只是一个摄像头,一般汽车配置多个摄像头, 还有64线雷达,数据量可想而知。当这种订阅者众多的时候,在ROS当前机制下带宽资源消耗是巨大的。 

    3. 消息不支持向前兼容

    ROS 传递的消息不支持向前兼容,也就是说在后面应用中,在已经定义的消息类型中,增加一个字段,这样新节点和老节点之间就这个消息进行沟通就会发生错误,准确的讲是md5校验失败。接口兼容性问题会对历史数据的使用造成很大的影响,尤其是自动驾驶领域,海量的历史数据是宝库,不能用了,或者做大量的处理才可以用都是不可接受的。

    4. 安全问题

    如果一个ROS node 被挟持,黑客可以通过这个node 将资源耗尽,进而将这个系统搞垮。如果ROS node与node之间的消息被截获或者伪造,那么自动驾驶汽车可能会被黑客控制。

    这四个主要问题,原生的ROS 1.0 都是无法解决的,ROS 2.0 虽然解决了部分,但还在测试阶段, 自动驾驶玩家是没有时间和耐心去等待ROS 2.0成熟的。

     ▍如何解决上述问题?

    1. 单点失败问题的解决

    解决单点失败一般有两个思路, 一个思路如百度自动驾驶Apollo 采用的一种叫RTPS 的服务发现协议,通过节点之间的自动发现,完成纯粹意义上的p2p分布式拓扑结构,见下图:

    图片

    图片

     

    图片

    图片

    ROS 2.0 其实也是用相同的思路去解决这个问题,它采用工业级别的DDS 中间件,节点之间可以自动发现。

    另一个思路是ROS Master 这个关键节点采取备份机制,如果ROS Master 宕机了,备份节点会顶上,可以采用开源的分布式协调框架zookeeper 去完成这个功能,见下图:

    图片

    2. 带宽拥塞问题的解决

    对于进程通讯使用socket 造成带宽的拥塞和CPU 的负担,方案很简单,进程通信采用共享内存机制,还是拿摄像机为例子,见下图:

    图片

    使用共享内存的好处,相比于套接字,越是多对多,对带宽利用的优化越明显。ROS 2.0 采用的DDS 中间件方案,已经考虑了进程间通信采用共享内存。

    3. 接口兼容问题的解决

    对于接口兼容问题, 百度自动驾驶Apollo 框架采用的方案是使用谷歌开源的protobuf(中间消息结构,类比XML,JSON,包括消息传递,序列化和反序列化机制)封装成ROS msg,来代替原生的ROS msg, protobuf 提供了良好的消息向前兼容性。这样修改不破坏原生ROS msg机制,而且仍然使用这个机制通信的其它ROS 节点,是一个比较干净的侵入修改方案。

    4. 安全问题的解决

    安全方面的问题,可以采用LXC(linux container) 这种轻量级虚拟化技术,把每个ROS node放入沙盒,限制每个ROS node 权限。节点与节点的通信消息可以进行加密解密处理,防止中间有人攻击。

     ▍结语

    以上,我们讲述了为什么自动驾驶和机器人运动控制都采用ubuntu+ROS 作为操作系统的背景和原因,总结了目前原生 ROS 1.0 在自动驾驶场景使用的问题及参考修改方案。希望通过本文的描述,大家会对机器人和自动驾驶的软件操作系统层面有一个大概的了解。

    展开全文
  • WEB服务器端技术

    千次阅读 2022-04-11 17:39:07
    事实上,对于Web系统来说,相比于客户端技术,服务器端技术更是深不可测,其各类技术,系统架构,处理方式等千变万化。服务器端的技术进步,同样要求软件测试技术的同步前进,也更加要求软件测试人员能够跟上技术的...

    WEB服务器端技术

    客户端是与用户交互的唯一接口,对于软件测试人员来说不可掉以轻心,那么服务器端又需要我们了解哪些技术呢?

    事实上,对于Web系统来说,相比于客户端技术,服务器端技术更是深不可测,其各类技术,系统架构,处理方式等千变万化。服务器端的技术进步,同样要求软件测试技术的同步前进,也更加要求软件测试人员能够跟上技术的步伐,否则测试将很难开展。

    虽然服务器端技术很复杂,作为测试人员,我们不能望而却步,否则我们的测试如何进步?本节就来为大家作一个整体的梳理,将服务器端的各类技术作一个总结:

    1. WWW简介

    WWW是World Wide Web(环球信息网)的缩写,也可以简称为Web,中文名字为“万维网”。它起源于1989年3月,由欧洲量子物理实验室 CERN(the European Laboratory for Particle Physics)所发展出来的主从结构分布式超媒体系统。通过万维网,人们只要通过使用简单的方法,就可以很迅速方便地取得丰富的信息资料。 由于用户在通过 Web 浏览器访问信息资源的过程中,无需再关心一些技术性的细节,而且界面非常友好,因而 Web 在Internet 上一推出就受到了热烈的欢迎,走红全球,并迅速得到了爆炸性的发展。

    长期以来,人们只是通过传统的媒体(如电视、报纸、杂志和广播等)获得信息。但随着计算机网络的发展,人们想要获取信息,已不再满足于传统媒体那种单方面传输和获取的方式,而希望有一种主观的选择性。现在,网络上提供各种类别的数据库系统,如文献期刊、产业信息、气象信息、论文检索等等。由于计算机网络的发展,信息的获取变得非常及时、迅速和便捷。

    到了1993年,WWW 的技术有了突破性的进展,它解决了远程信息服务中的文字显示、数据连接以及图像传递的问题,使得 WWW 成为 Internet 上最为流行的信息传播方式。 现在,Web 服务器成为 Internet 上最大的计算机群,Web 文档之多、链接的网络之广,令人难以想象。可以说,Web 为 Internet 的普及迈出了开创性的一步,是近年来Internet 上取得的最激动人心的成就。

    WWW 采用的是客户/服务器结构,其作用是整理和储存各种WWW资源,并响应客户端软件的请求,把客户所需的资源传送到 Windows 95(或Windows98)、Windows NT、UNIX 或 Linux 等平台上。

    1. Web服务器

    Web服务器是离客户端最近的服务器端,主要作用包含三个方面:

    1. 监听客户端请求。为什么我们需要启动服务器,目的也就在于启动后服务器才可以开始监听80端口(或其它自定义端口),也才可以获取到客户端发来的请求,便于处理。
    2. 处理客户端请求。如果是静态资源(HTML页面或图片等),则直接将该资源从硬盘上读取进内存并直接返回给客户端;如果是动态页面(如PHP或ASP页面等),则将该请求转交给相应的脚本引擎来进行处理。
    3. 客户端与数据库之间的屏障。在三层架构中,Web服务器是夹在客户端与数据库之间,一方面用于从数据库中读取或写入数据,另外一方面也为了有效地过滤掉一些非法的访问请求,保障数据安全。

    当前比较流行的Web服务器有以下五种:

    1. Apache:由开源基金会Apache维护,开源系统软件,由C语言开发。是目前世界上最流行的Web服务器(没有之一)。由于C语言较好的跨平台特性,Apache已经在所有的服务器操作系统上实现,如Unix, Linux和Windows。并且很多应用服务器也直接内置Apache服务器,因为它性能好,足够稳定,并且功能很强大。
    2. IIS:Microsoft的Web服务器产品为Internet Information Server (IIS), IIS 是允许在公共Intranet或Internet上发布信息的Web服务器。IIS是目前最流行的Web服务器产品之一,很多著名的网站都是建立在IIS的平台上。IIS提供了一个图形界面的管理工具,称为 Internet服务管理器,可用于监视配置和控制Internet服务。IIS是一种Web服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。它提供ISAPI(Intranet Server API)作为扩展Web服务器功能的编程接口;同时,它还提供一个Internet数据库连接器,可以实现对数据库的查询和更新。
    3. Tomcat:由开源基金会Apache维护,主要处理以Java为架构的动态页面。比如我们常见的JSP页面和Java Servlet等,均可以由Tomcat处理,并且Tomcat还部分支持SUN公司的J2EE规范,为使用J2EE架构的中小型应用提供了方便。
    4. Lighttpd:是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。lighttpd 是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能,而Apache之所以流行,很大程度也是因为功能丰富,在lighttpd上很多功能都有相应的实现了,这点对于apache的用户是非常重要的,因为迁移到lighttpd就必须面对这些问题。实用起来lighttpd确实非常不错,apache主要的问题是密集并发下,不断的fork()和切换,以及较高(相对于 lighttpd而言)的内存占用,使系统的资源几尽枯竭。而lighttpd采用了Multiplex技术,代码经过优化,体积非常小,资源占用很低,而且反应速度相当快。利用apache的rewrite技术,将繁重的cgi/fastcgi任务交给lighttpd来完成,充分利用两者的优点,现在那台服务器的负载下降了一个数量级,而且反应速度也提高了一个甚至是2个数量级!lighttpd 适合静态资源类的服务,比如图片、资源文件、静态HTML等等的应用,性能应该比较好,同时也适合简单的CGI应用的场合。
    5. Nginx 是一个很牛的高性能Web和反向代理服务器,它具有很多非常优越的特性,在高连接并发的情况下,Nginx是Apache服务器不错的替代品,Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应。

    所谓的反向代理,我们可以这么理解:通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。由于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设计为在Internet上搜寻多个不确定的服务器,而不是针对Internet上多个客户机的请求访问某一个固定的服务器,因此普通的Web代理服务器不支持外部对内部网络的访问请求。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。

    1. 应用服务器

    Web服务器作为一个最接近于客户端的应用,有其重要作用,必不可少。但同时,现在的网络应用越来越广泛,相应的业务逻辑也越来越复杂,一个Web服务器恐难担此重任。特别是对于业务逻辑的处理和数据库访问这一部分,对性能的要求是非常高的,我们理所当然需要一套更强大的服务器体系来进行处理,这就是应用服务器。应用服务器比Web服务器更靠后端,其目的并非监听或处理HTTP请求,而是处理复杂系统的业务逻辑和数据库访问等。

    例如,设想一个在线商店(网站)提供实时定价(real-time pricing)和有效性(availability)信息。这个站点(site)很可能会提供一个表单(form)让你来选择产品。当你提交查询(query)后,网站会进行查找(lookup)并把结果内嵌在HTML页面中返回。网站可以有很多种方式来实现这种功能。我要介绍一个不使用应用程序服务器的情景和一个使用应用程序服务器的情景。观察一下这两中情景的不同会有助于你了解应用程序服务器的功能。

    1. 情景1:不带应用程序服务器的Web服务器

    在此种情景下,一个Web服务器独立提供在线商店的功能。Web服务器获得你的请求(request),然后发送给服务器端(server-side)可以处理请求(request)的程序。此程序从数据库或文本文件(flat file,译者注:flat file是指没有特殊格式的非二进制的文件,如properties和XML文件等)中查找定价信息。一旦找到,服务器端(server-side)程序把结果信息表示成(formulate)HTML形式,最后Web服务器把会它发送到你的Web浏览器。

     简而言之,Web服务器只是简单的通过响应(response)HTML页面来处理HTTP请求(request)。

    1. 情景2:带应用程序服务器的Web服务器

    情景2和情景1相同的是Web服务器还是把响应(response)的产生委托(delegates)给脚本(译者注:服务器端(server-side)程序)。然而,你可以把查找定价的商业逻辑(business logic)放到应用程序服务器上。由于这种变化,此脚本只是简单的调用应用程序服务器的查找服务(lookup service),而不是已经知道如何查找数据然后表示为(formulate)一个响应(response)。 这时当该脚本程序产生HTML响应(response)时就可以使用该服务的返回结果了。

    在此情景中,应用程序服务器提供(serves)了用于查询产品的定价信息的商业逻辑。(服务器的)这种功能(functionality)没有指出有关显示和客户端如何使用此信息的细节,相反客户端和应用程序服务器只是来回传送数据。当有客户端调用应用程序服务器的查找服务(lookup service)时,此服务只是简单的查找并返回结果给客户端。

    通过从响应产生(response-generating)HTML的代码中分离出来,在应用程序之中该定价(查找)逻辑的可重用性更强了。其他的客户端,例如收款机,也可以调用同样的服务(service)来作为一个店员给客户结帐。相反,在情景1中的定价查找服务是不可重用的,因为信息内嵌在HTML页中了。

    总而言之,在情景2的模型中,在Web服务器通过回应HTML页面来处理HTTP请求(request),而应用程序服务器则是通过处理定价和有效性(availability)请求(request)来提供应用程序逻辑的。

    现在,XML Web Services已经使应用程序服务器和Web服务器的界线混淆了。通过传送一个XML有效载荷(payload)给服务器,Web服务器现在可以处理数据和响应(response)的能力与以前的应用程序服务器同样多了。

    另外,现在大多数应用程序服务器也包含了Web服务器,这就意味着可以把Web服务器当作是应用程序服务器的一个子集(subset)。虽然应用程序服务器包含了Web服务器的功能,但是开发者很少把应用程序服务器部署(deploy)成这种功能(capacity)(译者注:这种功能是指既有应用程序服务器的功能又有Web服务器的功能)。相反,如果需要,他们通常会把Web服务器独立配置,和应用程序服务器一前一后。这种功能的分离有助于提高性能(简单的Web请求(request)就不会影响应用程序服务器了),分开配置(专门的Web服务器,集群(clustering)等等),而且给最佳产品的选取留有余地。

    常见的应用服务器有如下两类:

    1. J2EE应用服务器:

    由SUN公司(已被Oracle收购)主导的JAVA实现了三个平台:它们是适用于小型设备和智能卡的Java 2平台Micro版(Java 2 Platform Micro Edition,J2ME)、适用于桌面系统的Java 2平台标准版(Java 2 Platform Standard Edition,J2SE)、适用于创建服务器应用程序和服务的Java 2平台企业版(Java 2 Platform Enterprise Edition,J2EE)。J2EE是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java 2平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如"编写一次、随处运行"的特性、方便存取数据库的JDBC API、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对 EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。

    目前实现J2EE技术规范的产品有5个,分别是IBM公司的WebSphere,BEA公司(已被Oracle收购)的Weblogic,Redhat公司的JBoss(前身为开源社区开发),中国金蝶公司的Apusic,开源的Resin(由CAUCHO公司开发)。它们都是非常不错的J2EE应用服务器。

    IBM WebSphere:

    WebSphere Application Server 是 一 种功能完善、开放的Web应用程序服务器,是IBM电子商务计划的核心部分,它是基于 Java 的应用环境,用于建立、部署和管理 Internet 和 Intranet Web 应用程序。 这一整套产品进行了扩展,以适应 Web 应用程序服务器的需要,范围从简单到高级直到企业级。

    WebSphere 针对以 Web 为中心的开发人员,他们都是在基本 HTTP服务器和 CGI 编程技术上成长起来的。IBM 将提供 WebSphere 产品系列,通过提供综合资源、可重复使用的组件、功能强大并易于使用的工具、以及支持 HTTP 和 IIOP 通信的可伸缩运行时环境,来帮助这些用户从简单的 Web 应用程序转移到电子商务世界。

    BEA WebLogic:

    BEA WebLogic Server 是一种多功能、基于标准的web应用服务器,为企业构建自己的应用提供了坚实的基础。各种应用开发、部署所有关键性的任务,无论是集成各种系统和数据库,还是提交服务、跨 Internet 协作,起始点都是 BEA WebLogic Server。由于 它具有全面的功能、对开放标准的遵从性、多层架构、支持基于组件的开发,基于 Internet 的企业都选择它来开发、部署最佳的应用。

    BEA WebLogic Server 在使应用服务器成为企业应用架构的基础方面继续处于领先地位。BEA WebLogic Server 为构建集成化的企业级应用提供了稳固的基础,它们以 Internet 的容量和速度,在连网的企业之间共享信息、提交服务,实现协作自动化。

    1. IIS: 首先IIS是Web服务器,其次微软公司也将其定义为.NET框架下的应用服务器。事实上微软从操作系统、服务器、数据库,再到解决方案,为IT业提供了一套相对完整的无缝集成的网络服务环境。如果我们说J2EE应用服务器是应用于JAVA平台的基础设施,那么IIS便是.NET平台的基础设施。所以,IIS完全有能力胜任应用服务器这一称呼。

    事实上,IIS不仅仅提供HTTP服务,还可以提供FTP, SMTP, 消息服务等。

    1. 脚本引擎

    我们都知道,现在的Web应用程序都是动态的,可交互的,可以根据用户输入的不同而返回不同的响应。而传统的HTML是无法支持动态网页的,因为HTML是静态的,由浏览器解析执行的。所以动态网页的处理都是在服务器端完成,由服务器端的脚本引擎处理完成后以标准的HTML格式返回给客户端。目前比较通用的脚本引擎有四种:

    1. ASP:Active Server Page,是微软IIS服务器的主要开发脚本,现在已经升级到ASP.NET,是微软.NET框架的一部分。传统的ASP页面主要使用VBScript脚本作为程序语言,再内置ASP服务器组件共同构成服务器端脚本引擎。而最新版本的ASP.NET则可以使用VBScript或JScript(注意与Javascript区别),并且与C#或VB.NET一起组成强大的服务器端开发环境。
    2. PHP:PHP 的简称原本为 Personal Home Page,后来更名为Hypertext Preprocessor,意为超文本预处理语言。是当前开源项目使用最多的脚本引擎,在sourceforge.net网站上我们可以找到很多流行的开源项目,如果该项目是以Web站点形式存在的,绝大部分都使用PHP开发。同时,PHP也同样适用于架构一些大型的应用,比如新浪网站。同时,PHP与MySQL,Apache及Linux的无缝集成,也催生了LAMP这一伟大的开源服务器平台。
    3. JSP: Java Server Page,是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
    4. RUBY:Ruby,一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言,在20世纪90年代由日本人松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada 以及 Lisp 语言。由 Ruby 语言本身还发展出了JRuby(Java 平台)、IronRuby(.NET 平台)等其他平台的 Ruby 语言替代品。
    1. 集群环境

    服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就象是只有一个服务器。集群可以利用多个计算机进行并行计算从而获得很高的计算速度(Load Balance – 负载均衡),也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行(Fail Over – 故障转移)。

    集群环境有多种实现方式:

    1. 硬件集群:直接使用硬件来完成,如知名的redware,可直接根据来访者的IP地址进行负载的分配与转移,并实时监听各集群节点,达到故障转移的目的。
    2. 操作系统集群:操作系统之间直接集群,属于软件级集群,通过集群分配算法实现。
    3. 应用服务器集群:应用服务器之间直接集群,根据应用服务器之间的性能指标进行负载的均衡和故障转移。
    4. 数据库集群:数据库系统直接集群,如Oracle RAC。

    其实无论何种集群方式,其核心目的就是实现负载均衡和故障转移。要实现该目的,必须要有一个负载分发器来作为系统的访问入口,当该负载分发器检测到有请求过来的时候,可根据集群节点的性能状况来决定由哪个集群节点来进行处理。同时,该负载分发器需要实时检测集群节点的健康状态,如果发现有节点无法提供服务时,将不再为其分配请求,并且及时发出警告通知系统管理员,这样就可以实现故障转移。所以说原理是很简单的,企业也完全可以自主开发软件来实现集群,只不过如何实现高可用性(High Availability)是一个比较复杂的问题,一些简单的算法可能很难保证其高负载情况下的稳定处理。

    1. 数据库

    我们每天都生活在数据库的世界,甚至都说不清楚是我们在控制数据库,还是被数据库控制。不妨来看看人们每天所做的哪些事情是跟数据库相关的:公交系统刷卡,上班打卡,银行取钱,超市消费,手机充值,天气查询,新闻阅读,户口信息,子女学籍……。

    目前数据库的类型及存在形式主要有以下四种:

    1. 文件型数据库:将数据保存在文件中,比如一个CSV的逗号分隔符文件,Excel文件,或者比较流行的XML(Extensible Markup Language - 可扩展标记语言)文件,它们都是用来描述数据的,并且由于它们都是以纯文本形式保存,其通用性和可移植性非常好,但是不太适用于大型的应用。
    2. 关系型数据库:将数据以二维表的形式保存,并且建立表与表或者列与列的各种关系,便于进行业务逻辑处理和数据展现。这也是近二十年来使用最为广泛的数据组织形式,在大型应用中显示出了巨大的优势。

    事实上,关系型数据库的数据本质上仍然保存在硬盘中,数据库管理系统只在需要时将数据文件从硬盘读取到内存中并提供给用户。当今最流行的5大数据库管理系统均为关系型数据库,如Oracle, SQLServer, MySQL, DB2, Informix。

    1. 内存型数据库:我们知道,硬盘的读写速度远慢于内存,笔者电脑上的硬盘(7200转)读写速度为80M/S左右,而内存(DDR3 1066MHz)的读写速度为6G/S,其速度相差接近80倍。即使现在的固态硬盘或者RAID 0磁盘阵列,其读写速度也就200M/S左右,仍然无法与内存的速度相提并论。于是,科学家们提出了内存型数据库,也就是将所有数据库文件全部置于内存中,这样可大大提高数据库处理速度。

    现在已经有很多数据库产品已经实现了内存数据库。比如Oracle的内存型数据库Times Ten,MySQL的MEMORY内存引擎,MemCached数据库产品等。当然,我们也需要注意到,使用这一类数据库对于系统稳定性有非常高的要求,因为内存中的数据一旦断电,将全部丢失。

    1. NoSQL:not only SQL,指的是非关系型的数据库。随着互联网Web 2.0网站的兴起,传统的关系数据库在应付Web 2.0网站,特别是超大规模和高并发的SNS类型的Web 2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。它打破了长久以来关系型数据库与ACID理论大一统的局面。NoSQL 数据存储不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型数据库无法比拟的性能优势。目前实现NoSQL的产品也很丰富,如Google 的BigTable与Amazon的Dynamo是非常成功的商业 NoSQL 实现。一些开源的 NoSQL 体系,如Facebook 的Cassandra, Apache 的HBase,也得到了广泛认同。从这些NoSQL项目的名字上看不出什么相同之处:Hadoop、Voldemort、Dynomite,还有其它很多。
    1. SOA

    Service-Oriented Architecture,指面向服务的体系架构。其核心在于“服务”。要了解SOA,必须首先理解什么叫Web Service (Web服务),Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。Web Service利用SOAP协议(Simple Object Access Protocol – 简单对象访问协议)和XML进行数据传输。SOAP协议又是依附于HTTP协议进行传输的,这些协议都是语言无关,平台无关的协议,所以利用Web Service,我们可以很轻易地在异构系统之间进行数据传递。

    SOA便是以Web服务为核心进行应用系统架构设计的一种全新技术,使得系统数据可以在任何平台下实现访问。

    1.  SaaS

    Software-as-a-Service,软件即服务。是随着互联网技术的发展和应用软件的成熟,而在21世纪开始兴起的一种完全创新的软件应用模式。它与“on-demand software”(按需软件),the application service provider(ASP,应用服务提供商),hosted software(托管软件)所具有相似的含义。它是一种通过Internet提供软件的模式,厂商将应用软件统一部署在自己的服务器上,客户可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务。用户不用再购买软件,而改用向提供商租用基于Web的软件,来管理企业经营活动,且无需对软件进行维护,服务提供商会全权管理和维护软件,软件厂商在向客户提供互联网应用的同时,也提供软件的离线操作和本地数据存储,让用户随时随地都可以使用其定购的软件和服务。对于许多小型企业来说,SaaS是采用先进技术的最好途径,它消除了企业购买、构建和维护基础设施和应用程序的需要。

    1. 云计算

    云计算概念是由Google提出的,这是一个美丽的网络应用模式。狭义云计算是指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需的资源;广义云计算是指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需的服务。这种服务可以是IT和软件、互联网相关的,也可以是任意其他的服务,它具有超大规模、虚拟化、可靠安全等独特功效;

    云计算(Cloud Computing)是网格计算(Grid Computing)、分布式计算(Distributed Computing)、并行计算(Parallel Computing)、效用计算(Utility Computing)、网络存储(Network Storage Technologies)、虚拟化(Virtualization)、负载均衡(Load Balance)等传统计算机技术和网络技术发展融合的产物。它旨在通过网络把多个成本相对较低的计算实体整合成一个具有强大计算能力的完美系统,并借助SaaS、PaaS、IaaS、MSP等先进的商业模式把这强大的计算能力分布到终端用户手中。Cloud Computing的一个核心理念就是通过不断提高“云”的处理能力,进而减少用户终端的处理负担,最终使用户终端简化成一个单纯的输入输出设备,并能按需享受“云”的强大计算处理能力!

    云计算的核心思想,是将大量用网络连接的计算资源统一管理和调度,构成一个计算资源池向用户按需服务。

    注:

      1. SaaS:Software-as-a-Service,软件即服务,主要以提供软件服务为核心。
      2. IaaS:Infrastructure-as-a- Servic,基础设施即服务。消费者通过Internet可以从完善的计算机基础设施获得服务。
      3. PaaS:Platform-as-a- Service,平台即服务,是指将软件研发的平台作为一种服务,以SaaS的模式提交给用户。
      4. MSP:Management Service Provider,管理服务提供商,最古老的云计算运用之一。这种应用更多的是面向IT行业而不是终端用户,常用于邮件病毒扫描、程序监控等等。

    云计算的特点:

    1. 数据安全可靠:

    首先,云计算提供了最可靠、最安全的数据存储中心,用户不用再担心数据丢失、病毒入侵等麻烦。

    很多人觉得数据只有保存在自己看得见、摸得着的电脑里才最安全,其实不然。你的电脑可能会因为自己不小心而被损坏,或者被病毒攻击,导致硬盘上的数据无法恢复,而有机会接触你的电脑的不法之徒则可能利用各种机会窃取你的数据。

    反之,当你的文档保存在类似 Google Docs 的网络服务上,当你把自己的照片上传到类似 Google Picasa Web的网络相册里,你就再也不用担心数据的丢失或损坏。因为在“云”的另一端,有全世界最专业的团队来帮你管理信息,有全世界最先进的数据中心来帮你保存数据。同时,严格的权限管理策略可以帮助你放心地与你指定的人共享数据。这样,你不用花钱就可以享受到最好、最安全的服务,甚至比在银行里存钱还方便。

    1. 客户端需求低

    其次,云计算对用户端的设备要求最低,使用起来也最方便。

    大家都有过维护个人电脑上种类繁多的应用软件的经历。为了使用某个最新的操作系统,或使用某个软件的最新版本,我们必须不断升级自己的电脑硬件。为了打开朋友发来的某种格式的文档,我们不得不疯狂寻找并下载某个应用软件。

    为了防止在下载时引入病毒,我们不得不反复安装杀毒和防火墙软件。所有这些麻烦事加在一起,对于一个刚刚接触计算机、刚刚接触网络的新手来说不啻一场噩梦!如果你再也无法忍受这样的电脑使用体验,云计算也许是你的最好选择。你只要有一台可以上网的电脑,有一个你喜欢的浏览器,你要做的就是在浏览器中键入 URL ,然后尽情享受云计算带给你的无限乐趣。   你可以在浏览器中直接编辑存储在“云”的另一端的文档,你可以随时与朋友分享信息,再也不用担心你的软件是否是最新版本,再也不用为软件或文档染上病毒而发愁。因为在“云”的另一端,有专业的 IT 人员帮你维护硬件,帮你安装和升级软件,帮你防范病毒和各类网络攻击,帮你做你以前在个人电脑上所做的一切。

    1. 轻松共享数据

    此外,云计算可以轻松实现不同设备间的数据与应用共享。

    大家不妨回想一下,你自己的联系人信息是如何保存的。一个最常见的情形是,你的手机里存储了几百个联系人的电话号码,你的个人电脑或笔记本电脑里则存储了几百个电子邮件地址。为了方便在出差时发邮件,你不得不在个人电脑和笔记本电脑之间定期同步联系人信息。买了新的手机后,你不得不在旧手机和新手机之间同步电话号码。

    对了,还有你的 PDA 以及你办公室里的电脑。考虑到不同设备的数据同步方法种类繁多,操作复杂,要在这许多不同的设备之间保存和维护最新的一份联系人信息,你必须为此付出难以计数的时间和精力。这时,你需要用云计算来让一切都变得更简单。在云计算的网络应用模式中,数据只有一份,保存在“云”的另一端,你的所有电子设备只需要连接互联网,就可以同时访问和使用同一份数据。

    仍然以联系人信息的管理为例,当你使用网络服务来管理所有联系人的信息后,你可以在任何地方用任何一台电脑找到某个朋友的电子邮件地址,可以在任何一部手机上直接拨通朋友的电话号码,也可以把某个联系人的电子名片快速分享给好几个朋友。当然,这一切都是在严格的安全管理机制下进行的,只有对数据拥有访问权限的人,才可以使用或与他人分享这份数据。

    1. 无限可能

    为存储和管理数据提供了几乎无限多的空间,也为我们完成各类应用提供了几乎无限强大的计算能力。想像一下,当你驾车出游的时候,只要用手机连入网络,就可以直接看到自己所在地区的卫星地图和实时的交通状况,可以快速查询自己预设的行车路线,可以请网络上的好友推荐附近最好的景区和餐馆,可以快速预订目的地的宾馆,还可以把自己刚刚拍摄的照片或视频剪辑分享给远方的亲友……

    离开了云计算,单单使用个人电脑或手机上的客户端应用,我们是无法享受这些便捷的。个人电脑或其他电子设备不可能提供无限量的存储空间和计算能力,但在“云”的另一端,由数千台、数万台甚至更多服务器组成的庞大的集群却可以轻易地做到这一点。个人和单个设备的能力是有限的,但云计算的潜力却几乎是无限的。当你把最常用的数据和最重要的功能都放在“云”上时,我们相信,你对电脑、应用软件乃至网络的认识会有翻天覆地的变化,你的生活也会因此而改变。

    互联网的精神实质是自由、平等和分享。作为一种最能体现互联网精神的计算模型,云计算必将在不远的将来展示出强大的生命力,并将从多个方面改变我们的工作和生活。无论是普通网络用户,还是企业员工,无论是IT管理者,还是软件开发测试人员,他们都能亲身体验到这种改变。

    1.     物联网

    物联网是新一代信息技术的重要组成部分。物联网的英文名称叫“The Internet of Things”。顾名思义,物联网就是“物物相连的互联网”。这有两层意思:第一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;第二,其用户端延伸和扩展到了任何物体与物体之间,进行信息交换和通信。

    因此,物联网的定义是:通过射频识别(RFID)、红外感应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,把任何物体与互联网相连接,进行信息交换和通信,以实现对物体的智能化识别、定位、跟踪、监控和管理的一种网络。

    展开全文
  • 常用技术面试题(软件测试)

    万次阅读 2020-05-22 22:04:15
    这是小编整理的软件测试常用技术面试题 请看下面 你的测试职业发展是什么?  测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年...
  • 大数据技术常用的12个工具总结

    万次阅读 2019-05-25 16:20:04
    在大数据技术作为概念和业务战略出现的十年中,涌现了执行各种任务和流程的数千种工具。而推出这些工具的提供商都承诺可以为企业节省时间和成本,并发现能够让企业获利的商业洞察力。显然,大数据分析工具的市场正在...
  • 程序员的自我进化:技术的广度与深度怎么权衡 ...我们都希望自己的技术既有广度又有深度,但事实上,鱼与熊掌不可兼得,在有限的时间和精力里,我们不可能掌握所有的技术,而且技术的更新速度很快。因此,我们需要有...
  • 计算机科学与技术专业:主要学什么? 本文主要包括如下内容: 程序员职位要求 CS 专业课程列表 怎样寻找资源学习? 程序员高薪排行榜 程序员职位要求 看课程之前,我们先来看看 BAT 的招聘岗位 JD: 新...
  • 技术加速隐私暴露,如何应对?

    千次阅读 2020-09-17 10:52:10
    技术加速隐私暴露,如何应对?(一) 原创数据玩家一个数据玩家的自我修养2019-10-09 收录于话题 #新技术与隐私保护 8个 点击上方蓝字关注数据玩家 正文约4000字,读完需11分钟 序 最近的大数据...
  • Java常用加密技术和代码总结

    万次阅读 多人点赞 2016-07-15 17:18:02
    Java常用加密技术和代码总结,还通过一些生活中容易理解的场景来解释算法复杂的逻辑。
  • “无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。” 前面介绍过,物联网的物物...
  • NAT(地址转换技术)详解

    万次阅读 多人点赞 2018-03-17 16:31:35
    NAT技术的工作原理和特点 静态NAT 动态NAT NAT重载(经常应用到实际中) NAT技术的优缺点 优点 缺点 NAT穿越技术 应用层网关(ALG) ALG的实际应用 NAT技术的未来 参考文献 NAT产生背景 今天,无数...
  • 物联网开发技术

    万次阅读 多人点赞 2018-04-12 10:44:17
    作为互联网技术的进化,物联网开发并非孤立的技术栈,而是向上承接了互联网,向下统领了嵌入式硬件开发的一个承上启下的全栈开发技术。 虽然我们并不能预测物联网技术栈最终的样子:统一的开发语言是 JavaScript ...
  • 通用技术知识点

    千次阅读 多人点赞 2020-06-26 00:18:59
    通用技术复习资料 /FU WEN CHAO/ 第一章走进技术世界 一、技术的价值: 1、技术与人的关系. 技术是人类满足自身的需求、愿望,更好的适应大自然,而采取的方法和手段。 (1)人类需要着衣裳遮身避寒- -纺织、印染、缝制...
  • 我不藏了:7个技术体系、共100篇文章、总计1OO万字

    万次阅读 多人点赞 2021-10-11 11:49:46
    ???? 作者主页:不吃西红柿 ???? 简介:CSDN博客专家 &... 粉丝专属福利:知识体系、面试题库、技术互助、简历模板。... 包邮送书(每周1-2次):关注公众号「... 技术互助:技术群大佬指点迷津,你的问题可能不是问题,
  • 技术博客那点事

    千次阅读 多人点赞 2019-02-16 18:57:18
    前言 写文章是一个短期收益少,长期收益...在IT行业内,技术博客是了解一个开发者最好的方式之一,特别是当你没有一张足够分量的文凭或者一段出彩的工作经历时,你就应该沉下心来好好打磨自己技术,打造自己的博客。...
  • 无线网络技术

    万次阅读 2019-01-29 14:49:21
    (一)无线通信技术有以下几种:  1、当前流行的无线通信技术有Bluetooth、CDMA2000、GSM、Infrared(IR)、ISM、RFID、UMTS/3GPPw/HSDPA、UWB、WiMAX Wi-Fi和ZigBee。各种无线通信技术的适用频段、调制方式、最大...
  • 信息收集与常用工具

    千次阅读 2022-04-05 22:48:32
    信息收集与常用工具 文章目录信息收集与常用工具前言一、收集域名信息a) whois查询b) 备案信息查询二、收集敏感信息a) 谷歌语法b) 黑暗引擎c) 历史漏洞信息三、收集子域名信息a) 子域名检测工具b) 搜索引擎...
  • 如何正确的做技术选型

    万次阅读 多人点赞 2018-10-07 21:26:30
    技术选型是项目的根基,如果选择了不适合自己业务场景的技术。初期由于业务复杂程度和业务量都比较小,所以可能感受不是十分明显,但是到了后期这将会是一个噩梦。会导致系统问题频发,极不稳定,甚至导致项目迭代...
  • 渗透测试常用工具

    千次阅读 多人点赞 2022-03-29 12:58:45
    渗透测试常用工具 文章目录渗透测试常用工具前言一、信息收集二、暴力破解三、web扫描四、系统审计五、web代理五、http代理六、系统扫描七、注入检测八、网站克隆九、sql注入扫描十、sql注入检测十一、盲注扫描十二...
  • 参加工作时间久一点的工程师应该有这样一个体会:...但是,如果你能刻意系统性地去补充一些关于“技术型写作”的理论知识,一定能够事半功倍。这就像我们刚学编程时,一顿学、一顿模仿,但是总感觉缺了点什么,自己再
  • WIFI无线网络技术详细分析

    万次阅读 2020-12-30 22:14:52
    WIFI无线网络在无线局域网的范畴是指“无线相容性认证”,实质上是一种商业认证,同时也是一种无线联网技术,以前通过网线连接电脑,而无线保真则是通过无线电波来连网;常见的就是一个无线路由器,那么在这个无线...
  • 下面根据常用技术选型套路,来说明如何进行技术选型。文中以工作流引擎技术选型为例详细说明。(一)了解内部情况,确定问题范围不确定“问题”就无所谓“解”。我们分析了解到电子政务领域的各种活动中,工作流程...
  • 接下来我将写一系列文章,回顾区块链核心技术演进之路。包括算法演进,挖矿演进,共识机制演进,代币演进,隐私的演进,以及容量和速率的演进等。题目比较大,抛砖引玉,望读者指正和补充。 算法演进 关于...
  • 声明式的 API 与可扩展(CRD + Controller)的编程接口,先进的设计思想使其在容器编排大战中(Kubernetes、Swarm、Mesos)处于王者地位,成为容器编排系统的事实标准。 通过采用 Kubernetes 平台,用户不必操心...
  • 入侵检测技术

    千次阅读 2022-01-15 20:15:57
    1987年,Dorothy Denning提出了入侵检测系统(Intrusion Detection System,IDS)的抽象模型,首次提出了入侵检测可作为一种计算机系统安全防御措施的概念,与传统的加密和访问控制技术相比,IDS是全新的计算机安全...
  • 论文总结——因果发现与推断

    千次阅读 2019-10-31 08:49:51
    很多科学都需要通过观测一组变量或者对其中一些变量进行干预试验,发现其中的因果关系,从而改造世界,对应于因果关系之梯的三个层级:观测,干预,反事实。通常情况下我们只有观测到的数据,传统的机器学习方法着重...
  • 优秀java程序员必须具备的技术技能

    千次阅读 2022-03-31 14:37:06
    很快,随着我遇到了一些我不知道如何解决的问题,我发现这些技能在真正的编程世界非常有用,而且解决起来相当简单——和有趣。 事实上,我认为这是软件开发最有趣的领域之一。解决难题并利用数据结构和算法来开发一...
  • 大数据技术概论

    千次阅读 2020-12-20 22:46:27
    大数据技术概论 大数据技术的产生 大数据的基本概念 ●大数据简介: 大数据是规模非常巨大和复杂的数据集,传统数据库管理工具处理起来面临很多问题,比如说获取、存储、检索、共享、分析和可视化,数据量达到PB、EB或ZB...
  • 关联规则常用算法

    万次阅读 多人点赞 2020-07-03 15:53:41
    关联规则常用算法   关联规则(Association Rules)是海量数据挖掘(Mining Massive Datasets,MMDs)非常经典的任务,其主要目标是试图从一系列事务集中挖掘出频繁项以及对应的关联规则。关联规则来自于一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 92,306
精华内容 36,922
热门标签
关键字:

常用的事实发现技术