• [技术干货] 让华为手机有诊断仪的功能
    1.让华为手机有诊断汽车异响故障的功能提前排除故障保证驾驶员与车辆的安全树立民族品牌的标准打破外国汽车检测仪的拢断
  • [技术干货] 让华为手机有诊断仪的功能
    1.让华为手机有诊断汽车异响故障的功能提前排除故障保证驾驶员与车辆的安全树立民族品牌的标准打破外国汽车检测仪的拢断
  • [技术干货] 让华为手机有诊断仪的功能
    1.让华为手机有诊断汽车异响故障的功能提前排除故障保证驾驶员与车辆的安全树立民族品牌的标准打破外国汽车检测仪的拢断
  • [世界难题赛道] 让华为手机有检测仪的功能
    1.让华为手机有诊断汽车异响故障的功能提前排除故障保证驾驶员与车辆的安全树立民族品牌的标准打破外国汽车检测仪的拢断。2.让频繁地震的地方人手一机测出方位强度。
  • [世界难题赛道] 让华为手机有检测仪的功能
    1.让华为手机有诊断汽车异响故障的功能提前排除故障保证驾驶员与车辆的安全树立民族品牌的标准打破外国汽车检测仪的拢断。2.让频繁地震的地方人手一机测出方位强度。
  • [行业资讯] 使用数字孪生推动物联网
    50年前,美国国家航空航天局(NASA)将其太空舱的全尺寸模型放在手边,以帮助诊断太空中真实太空舱的问题,并帮助找到解决问题的方法。这与数字孪生的想法非常相似。然而,数字孪生模型不是建立太空舱或任何其他物理实体的物理模型,而是对物理实体进行精确的数字模拟。数字孪生的功能在许多方面,数字孪生与虚拟机相似,因为它是一个数字实体,旨在模仿物理对象的工作方式。但是,虚拟机是被设计用来替代真实的物理计算机的。相比之下,数字孪生被设计用来测试和实验,但最终目的是将从数字孪生中获得的任何见解用于其物理对象。一个很好的例子是使用汽车的数字孪生和数字碰撞测试假人。汽车设计师可以在许多不同的碰撞场景中运行汽车和一个或多个假人的数字孪生,并使用这些碰撞数据,最终目的是改善真实汽车的安全性。数字孪生和物联网创建太空舱、汽车碰撞测试的数字孪生是一项极其复杂的工作,涉及研究这些项目的物理特性,然后开发一个精确的数学模型来描述它们及其行为。但对物联网相关人员来说,好消息是,所讨论的“事物”通常是相对简单的传感器,与太空舱或汽车这样复杂的东西相比,这些传感器的数学建模要简单多了。这意味着创建多种类型物联网设备的数字孪生相对简单、快速,而且至关重要的是,成本低廉。许多物联网环境由大量简单的相同设备组成的,例如货柜中的温度或湿度传感器,或车辆中的 GPS 单元。这意味着一旦创建了设备的数字孪生,并向它们提供数据,就可以创建大量这些设备协同工作的模拟。这可以是“人造”数据,也可以是现有物理设备接收到的数据。正如我们将看到的,这对大规模物联网部署和管理的影响是巨大的。原型设计在物联网项目的开始,数字孪生可以用作设备原型,以帮助微调设备本身及其固件、加密系统和其他软件的精确设计。一旦该过程完成,可以使用数字孪生来帮助优化设备的部署,方法是测试实际需要多少设备,它们应该放置在哪里,以及它们应该如何通过各种网络连接到数据收集中心。测试更新和更改一旦部署了大量设备,数字孪生也可用于测试固件和其他软件补丁以及更新,然后再通过无线方式将它们发送给物理对应方。当对设备相互交互的方式进行更改时,这可能特别有用,因为大规模模拟允许开发人员在大规模部署补丁和更新之前查看结果。数字孪生的价值数字孪生特别适合物联网部署,因为物联网设备相对简单,而且数字孪生可以以很少或没有成本进行复制。认识到这一点,Gartner预测,在不久的将来,数字孪生将为“数十亿事物”而存在。Gartner 副总裁 David Cearley 表示,数字孪生对部署物联网的组织带来的好处是惊人的。他总结道:“在维护、维修和运营以及优化物联网资产性能方面,可以带来数十亿美元的节省”。
  • [行业资讯] 特斯拉申请扩建德州超级工厂 再扩将近5万平米
    7月1日消息,美国电动汽车制造商特斯拉本周三提交的文件显示,申请将德克萨斯州超级工厂再扩建50万平方英尺(约合46451平米)。此前特斯拉首席执行官埃隆·马斯克(Elon Musk)在今年4月份举行的Cyber Rodeo品牌日上表示,现有的德克萨斯州超级工厂比世界上任何单体建筑都要大。正如马斯克所说,德州超级工厂总长度有15个城市街区那么长。尽管规模庞大,德州超级工厂只占到特斯拉在德州所收购土地的一小部分。因此,特斯拉于本周三提交文件,扩建德州超级工厂的总装2区(General Assembly 2)以及总装3区。马斯克此前估计,特斯拉将于明年某个时候开始生产赛博电动皮卡和Semi电动卡车。虽然公司尚未正式宣布生产赛博电动皮卡的地点,但很有可能是在德州超级工厂。占地50万平方英尺的扩建项目将为特斯拉生产电动汽车提供更多空间。考虑到德州超级工厂不止一层,扩建项目如果获批,最终有望为特斯拉德州工厂再提供至少100万平方英尺(将近10万平米)的工作空间。原文链接:http://www.50cnnet.com/show-29-230936.html
  • [行业资讯] 美FCC授权SpaceX星链可为飞机、车辆等交通工具提供移动互联网服务
    7月1日消息,当地时间周四美国联邦通信委员会(FCC)授权SpaceX公司为飞机、船只、车辆等运行中的交通工具提供星链卫星互联网服务,这意味着SpaceX能够为消费者和企业提供移动互联网服务,是SpaceX公司进一步扩大星链服务的关键一步。FCC国际部门负责人汤姆·沙利文(Tom Sullivan)在周四发布的授权文件中写道:“授权SpaceX卫星系统提供新型客户终端,将扩大宽带互联网服务范围,满足用户日益增长的移动网络需求。无论是消费者驾驶房车在全国各地行驶,还是企业货轮从欧洲前往美国港口,再或是国内国际航班,都可以使用这项服务。”星链是SpaceX公司打造的近地轨道卫星网络,旨在为全球提供高速互联网服务。SpaceX公司已经发射大约2700颗星链卫星,这项服务的基础价格为每月110美元。SpaceX此前告知FCC,截至今年5月份,星链服务已经拥有超过40万用户。SpaceX已经与商业航空公司签署早期协议,为这一授权做准备。此前公司与夏威夷航空公司和私人包机供应商JSX签订协议,在飞机上提供Wi-Fi上网服务。到目前为止,SpaceX已经被批准进行有限的飞行测试,公司认为航空Wi-Fi市场“已经成熟,会迎来颠覆期”。SpaceX去年就要求扩展业务,不仅限于服务固定终端用户。FCC对星链服务的此次授权还涵盖船舶、拖车、休旅车等交通工具。SpaceX公司已经推出一项名为“房车星链”的服务,并收取了额外的“便携性”服务费用。但是便携性和移动性是两个概念,FCC的此次授权使得星链可以服务于移动用户。但FCC也对移动星链服务附加了条件。SpaceX被要求“接受来自当前和未来授权服务的任何干扰”,对星链的进一步投资需要“承担运营可能受到FCC附加条件或要求限制的风险”。此外,这项授权没有解决SpaceX与Dish Network和RS Access等无线互联网服务提供商之间的监管纠纷问题。这些公司正在争夺12GHz频段的使用权。FCC继续分析该频段是否能同时支持地面无线通信以及卫星通信服务,SpaceX敦促监管机构尽快做出裁决。原文链接:http://www.50cnnet.com/show-36-230939.html
  • [行业资讯] 到 2030 年,互联汽车的连接数量将达到 25 亿个,推动蜂窝物联网和 5G 的采用
    本周,Transforma Insights 发布了“2020-2030 年互联汽车概述”报告,该报告总结了其对所有各种互联汽车应用的看法。本篇文章提供了这两项研究的摘要。到 2030 年,互联汽车领域的总连接数将增长到 25 亿个。该领域中最重要的一个应用组是车辆主机单元,即工厂安装的远程信息处理单元。该机构即将发布的关于该主题的报告将显示 2030 年将有 18 亿辆互联汽车。除此之外,其互联汽车概览报告对市场进行了更全面的审视,并将另外7亿台售后市场设备作为其数据的一部分。互联汽车是其物联网预测中最重要的应用群体之一,到2021年底占蜂窝连接的28%,到 2030 年仅略微下降至 26%。作为一个拥有大量移动、高带宽蜂窝连接的行业,互联汽车占2030年物联网总支出的23%可能并不令人惊讶,尽管其在所有物联网设备中的份额不到8%。汽车行业对5G尤为重要。到 2030 年,超过 58% 的 5G“非 mMTC”(即不包括低功耗广域技术)连接将出现在互联汽车中。即便如此,到 2030 年,新出货的 4G 互联汽车设备将比 5G 多。如下图所示。当然,虽然互联汽车对 5G 很重要,但 5G 对汽车领域变得同样重要的可能性也越来越大。尽管汽车领域的物联网现在是一个相当成熟的市场,但 5G URLLC 在支持车对车 (V2V) 和车对万物 (V2X) 通信方面发挥着至关重要的作用。这些技术将在增强所有车辆的安全功能方面发挥越来越大的作用,并且对于未来自动驾驶汽车的成功运行至关重要。这最终将成为新车采用 5G 的驱动力。然而,4G的更低模块成本和更大的网络覆盖范围,将阻止5G 成为互联汽车中最重要的蜂窝技术,直到 2030 年以后。作为互联汽车概述的一部分,该机构对该领域的各种附加服务进行了细分。其中许多应用不需要增量连接,将纯粹作为车辆主机上的某个应用而存在。信息娱乐解决方案就是一个例子。在这些情况下,额外的创收单元(RGU)被计算在内,以说明额外的收入机会。到 2030 年,每辆互联汽车将至少有 2.2 个 RGU。
  • [技术干货] 【论文分享】智能网联汽车的安全威胁研究
    智能网联汽车的安全威胁研究荀毅杰1, 刘家佳2, 赵静11 西安电子科技大学网络与信息安全学院,陕西 西安 7100712 西北工业大学网络空间安全学院,陕西 西安 710072摘要智能网联汽车正成为未来汽车行业的主流,而汽车安全问题也逐渐成为汽车工业中不可忽视的难题。详细分析了智能网联汽车中存在威胁的攻击面,总结了一些具有代表性的攻击方法。在此基础上,讨论了一个利用控制器局域网络总线和汽车远程服务提供商漏洞对纳智捷U5汽车进行攻击的实际案例。实验结果表明,智能网联汽车中存在很多可以被利用的攻击面。最后,针对智能网联汽车中存在的威胁提出了一些可行的防御措施。关键词: 智能网联汽车 ; 远程服务提供商 ; 控制器局域网络总线 ; 电子控制单元 ; 安全威胁1 引言智能网联汽车(ICV,intelligent connected vehicle)正成为未来汽车行业的主流。许多先进的技术,如云计算、人工智能、V2X(vehicle to everything)通信和高级驾驶员辅助系统等,正越来越广泛地被应用于汽车中,使得网联汽车能够更加智能地为人们提供舒适的服务并保证司机和乘客的安全[1]。如别克、大众等汽车中普遍配备有自动泊车和自适应巡航功能,极大地减轻了司机的驾驶负担;特斯拉Model 3提供了远程云服务功能,司机利用手机可以直接对汽车车门开关、空调开关等进行远程控制;沃尔沃研发的自动防撞系统可以自动检测可能与汽车相撞的车辆、行人或其他障碍物,从而保证驾驶员、乘客和行人的安全。汽车与智能设备之间的多功能连接虽然能够为用户提供更多的便利和更好的驾驶体验,但也为恶意攻击者带来了大量入侵入口[2]。近年来,汽车与外界的互联互通已成为目前及未来汽车的发展趋势。大量接口被用于连接外部智能设备的同时,也可能被恶意攻击者用来实现对车辆内部网络的访问。一旦车辆内部网络被恶意攻击者入侵,不仅会造成驾驶员隐私信息丢失,还会使车辆被攻击者控制[3]。因此,研究ICV中存在的漏洞,并针对漏洞提出相应的防御措施是学术界和工业界中重要的研究课题。ICV安全已经引起了大量研究人员的关注,他们已在相关方面取得了显著成果。如Enev等[4]利用机器学习算法,对汽车控制器局域网络(CAN, controller area network)总线数据进行特征提取,实现对汽车驾驶员的身份识别,证明了用户隐私存在被泄露的风险。腾讯科恩安全实验室研究员远程入侵了特斯拉汽车的网关、车身控制模块(BCM,body control module)和自动驾驶控制单元,证明了汽车中存在很多安全隐患[5]。Zeng等[6]使用便携式GPS欺骗器实现了非法篡改车辆的GPS路线,严重威胁了车载GPS安全。Miller等[7]在DEFCON会议中指出,ICV中存在大量可被利用的攻击面,如远程无钥匙进入(RKE,remote keyless entry)、蓝牙、Wi-Fi、车载资讯系统、互联网、APP等,都有可能使用户隐私泄露,甚至导致车辆被远程控制。对 ICV 的安全威胁进行研究十分必要且具有重要价值。虽然越来越多的研究员开始关注ICV的安全问题,但在相关文献中却鲜有综述。鉴于此,本文首先介绍了 ICV 的车辆内部网络和无线通信网络的拓扑结构;其次,详细分析了ICV中存在威胁的攻击面和攻击实验,并总结了一些具有代表性的攻击方法;在此基础上,对纳智捷汽车的 CAN总线和汽车远程服务提供商(TSP,telematics service provider)的威胁漏洞进行了全面研究,证明了ICV中存在很多可以被利用的攻击面;最后,针对ICV中存在的威胁,提出了一些可行的防御措施,可以给新研究员提供一些基本指导。2 结束语ICV正成为未来汽车行业的主流,汽车安全问题也逐渐成为汽车工业中不可忽视的难题。本文详细分析了 ICV 中存在威胁的攻击面和相关的攻击实验,并总结了一些具有代表性的攻击方法。在此基础上,对纳智捷汽车的CAN总线和TSP的威胁漏洞进行了全面研究,证明了ICV中存在很多容易被利用的攻击面。最后,针对ICV中存在的威胁,提出了一些可行的防御措施。The authors have declared that no competing interests exist.作者已声明无竞争性利益关系。3 原文链接http://www.infocomm-journal.com/wlw/article/2019/2096-3750/2096-3750-3-4-00072.shtml
  • [行业资讯] 当自动驾驶汽车不知道该怎么做时,远程操作会介入
    在不久的将来,自动驾驶汽车将能够独立处理大多数任务。然而,它们还不能应对所有的交通状况。如果它们遇到不知道如何解决的问题,安全是首要考虑因素。大多数情况下,这意味着把车开到路边并停下来。德国航空航天中心 (DLR) 正在对这些车辆的远程操作进行研究,以便在未来安全、快速地处理此类状况。在不清楚如何处理的情况下,自动驾驶汽车可以向技术主管请求远程操作支持。远程操作——技术桥梁和法律要求DLR 交通系统研究所的 Michael Oehl 说:“自动驾驶汽车的远程操作是一座桥梁,可以将自动化领域的现有技术迅速投入使用并应用到道路上”。他的团队的工作重点是SAE 4级的自动驾驶,其中自动化接管了所有的驾驶任务。乘员无需干预,即使使用方向盘等控制元件仍然可以做到这一点。自动驾驶分级标准由SAE(前身为汽车工程师学会)制定,这种分级从0级到5级不等。在0级,车辆没有任何自动化。5 级相当于完全自动化,车辆完全自主,在所有的道路和环境条件下行驶。乘客只是乘客,人类不再需要干预,即使是通过远程操作。如今,4 级还不能在日常生活中使用,但是在很多地方,包括德国,已经有了使用它们的法律框架。《自动驾驶法》于 2021 年 7 月生效,随后《自动驾驶条例》对规则进行了更详细的规定。该法律允许4级在特殊路段、物流中心和高速公路等特定区域内自动驾驶。这为使用无人驾驶班车运送人员或货物等提供了可能性。对于操作和责任,法律定义的远程操作或技术监督起着决定性的作用。高度自动化的车辆 (4级) 变得越来越先进。然而,由于车辆可能遇到的潜在情况非常多,因此其自动化还不能无缝处理所有这些情况。远程协助作为远程操作的一种,是一种援助方式。专注于人类和自动化的协同工作Michael Oehl 说:“我们正处于开发初期,对于如何使车辆远程操作安全高效,我们有很多想法和概念。”“目前,我们主要关注人与自动化之间的交互,以及所需的界面设计——人机界面,简称 HMI。例如,我们正在研究远程操作工作站可能采用的形式、工作对人员的要求,以及如何从工作和工程心理学的角度进行工作站设计”。人为因素——远程操作的要求和工作场所设计未来,几个配备显示器、用户界面和耳机的远程操作员可以坐在一个控制中心,指导SAE 4级的自动驾驶车辆通过复杂的路段。例如,在尚未纳入系统的施工现场,汽车不会自动驶过,而是停在原地,因为车辆的自动化系统不知道如何操作。然而,在他们能够应对这些众多场景之前,DLR 的研究人员仍然必须解决一些基本问题。绘制车辆地图以进行监控的最佳方式是什么?需要哪些信息?一个人可以同时在屏幕上监控多少辆车?高度自动化车辆中的摄像头可以提供什么样的实时图像来帮助技术主管做出决策?处理援助请求平均需要多长时间?操作员需要多长时间才能做出决策?Michael Oehl 说:“在这种监控任务中,警惕性尤为重要。在研究中,我们用这个词来描述一种持续警觉的状态。即使长时间没有任何事情发生,你也必须能够在发生时快速做出反应。远程操作工作站必须经过专门设计,以防止出现人们分心或开始感到疲劳的情况。就像火车司机或飞行控制员一样,这些操作员不能经常过度工作。为了在车辆远程操作的背景下更深入地研究这些问题,该团队建造了一个工作站原型。通过这种方式,研究人员正在以一种面向应用的方式研究远程操作员未来在其工作站中需要哪些信息,以便能够在车辆自动化系统不清楚如何做的情况下快速、安全地支持SAE 4级自动驾驶汽车”。(编译:iothome)原文链接:https://www.iothome.com/archives/7263
  • [行业资讯] 华为数据中心ADN多云多DC方案,助力东风汽车迈入智联时代
    2022年4月16日上午,位于酒泉发射中心的东风着陆场,迎来了“出差”半年归来的神舟3位航天员。由东风自主研发生产的特种高机动越野车“东风猛士”,作为此次神舟飞船搜救任务的先导车,搜索一万平方公里,接英雄回家。这已不是东风猛士第一次承接航天搜救任务, 2021年神舟返航时东风猛士就协助搜救队伍顺利穿过黄沙戈壁,为航天的英雄归家之旅保驾护航。一代代神州人,见证了祖国科技的飞速发展。而在此期间,东风汽车也在不断创新发展,近日一辆国内首个24小时服务的车路协同无人驾驶接驳巴士——东风悦享Sharing-VAN“春笋号”迎来第1万名幸运乘客,见证了汽车行业正在迈入轻量化、电动化、智能化、网联化、共享化。随着智能网联、工业互联网、出行服务、数字化营销等创新业务的发展,其用户连接量、数据量百倍增长,需要足够的算力及更高的可靠性支撑业务有序发展。越来越多的企业也在完成跨界合作,加快布局数字化产业发展,迈向中国汽车智能时代。 创新引领,以“智”加“数”东风汽车始建于1969年,是中国汽车行业骨干企业之一。作为中国汽车行业 TOP3 的东风汽车集团,东风汽车曾表示,“十四五”期间,将实现新能源汽车销量100万辆,投放的全新车型100%实现电动化。为实现规模化的产量升级,东风汽车亟需完成数字技术的进一步升级。目前,由于不同时期建设的数据中心方案不同,东风汽车面临着已有传统数据中心、硬件SDN数据中心、软件SDN数据中心等组成异构网络协同管理的多个潜在问题亟需解决。一方面,东风汽车数据中心现网承载了1,000多个业务系统且横跨多个地理区域数据中心,当有业务变更时,需要花费长达一个月的时间,通过工单分解方式的变更跨多个数据中心互通业务,业务上线周期长且易出错。与此同时,还存在跨多个数据中心互联互通访问关系无法清晰可视,每次配置变更完全依赖人工经验判断,关键业务运维难以保障的问题。另一方面,云内流量及云内云外互通流量时,缺乏统一调度平台,导致东西南北向访问控制和L4-7层防护安全策略无法统一制定。为了满足数字化转型步伐,加速了数据中心的优化整合,建设东风汽车集团总部云化数据中心,通过数据汇聚和技术架构整合,支撑企业精准施策、精准管理,加快新兴技术平台运用和信息安全水平。 华为ADN多云多DC管理能力, 助力东风数字化转型升级2021年东风汽车集团联合华为启动了云数据中心建设项目,采用华为数据中心自动驾驶网络Autonomous Driving Network(ADN)解决方案,实现了跨数据中心的全生命周期网络的自动化开通、安全调度和统一运维。针对多数据中心需求,华为通过ADN的iMaster NCE-Fabric多云多DC管理能力,实现业务跨软件SDN/硬件SDN/传统网络的异构多分区自动化部署,E2E网络分钟级开通,拖拽式工作流编排,配置过程从人机协同变成机机协同,配置可靠不易出错,助力东风缩短业务上线时间,降本增效;与此同时,通过iMaster NCE-Fabric的多云多DC管理能力,实现了跨区域网络资源和拓扑可视化统一呈现,让错综复杂的互联互通关系尽收眼底。华为数据中心自动驾驶网络多云多DC解决方案为了满足安全诉求,华为通过iMaster NCE-Fabric的多云多DC管理能力完成了统一流量调度,将云内流量及云内云外互通流量引流到硬件防火墙。实现东风汽车防火墙由iMaster NCE-Fabric管理和安全策略统一制定,实现云内东西南北及云内云外访问控制和 L4-7层防护。作为同处于国家支柱性行业的企业,东风携手华为,对于提升中国汽车产业的竞争力、加速自主品牌汽车发展、推动汽车工业的转型升级,都有着重要的示范意义。华为数据中心自动驾驶网络ADN解决方案,将助力东风汽车集团紧紧抓住汽车制造、车联网等新兴产业带来的战略机遇,完成企业关键节点的数字化转型诉求,在新一轮的工业革命中抢占先机。在未来智能时代蓬勃发展的黄金十年,华为ADN将与企业一同迈向自动驾驶网络时代,让智能联接触手可及。智能联接携手千行百业,共创行业新高度,共赢行业新价值。转载于自动驾驶网络ADN微信公众号
  • [问题求助] 【IVS3800产品】【北向接口对接,与ROMA平台对接,ROMA取IVS3800车辆结构数据】
    【功能模块】restful对接【操作步骤&问题现象】1、需确定车辆结构化数据接口2、后期对接各种问题【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 自动驾驶:基于PCL的激光雷达感知
    介绍自动驾驶是现代技术中一个相对较新且非常迷人的领域。在2004年的DARPA Grand Challenge期间公开展示,并在2007年转向更具挑战性的城市环境,自那以后,工业界和学术界一直在追求自动驾驶。这些应用程序在个人自动驾驶汽车、自动出租车、运输、送货等方面都有所不同,但这项技术还没有成熟。自动驾驶陷入低谷的原因之一是,感知组件是一个非常复杂的问题。虽然大多数团队都采用基于激光雷达的感知方式,但仍有人试图通过相机来感知(Tesla 和 Wayve)。依赖激光雷达的解决方案也可以分为两类:处理点云的传统算法和基于深度学习的方法。神经网络有望以较高的平均精度解决感知问题,然而,如果我们想在最坏的情况下证明合理的准确性,这是不够的。在本文中,我们将看一看在PCL(一个开源的点云库)的帮助下制作的自动驾驶堆栈。首先,我们将坚持系统级的测试驱动开发(TDD),以确保在第一次现场部署之前对我们的整个代码进行彻底测试。为此,我们需要一个数据集来运行代码。卡尔斯鲁厄理工学院(Karlsruhe Institute of Technology)和芝加哥丰田理工学院(Toyota Technology Institute)2012年的经典数据集Kitti将非常适合这一目的。这是首批收集的大规模高质量数据集之一,可作为自动驾驶领域计算机视觉算法的基准。Kitti跟踪由21个同步PNG图像序列、Velodyne激光雷达扫描和来自RT3003 GPS-IMU模块的NMEA记录组成。数据集的一个重要特征是传感器之间的彻底相互校准,包括矩阵“Tr_imu_velo”,它是从GPS-imu坐标到Velodyne激光雷达坐标的转换。感知管道的架构如下所示。让我们分别讨论每一个组件,深入挖掘他们的C++实现。点云抽取为什么我们可能需要从深度传感器(可能是一个或几个激光雷达)中抽取点云?自动驾驶软件最重要的要求是满足实时操作约束。第一个要求是处理管道要跟上激光雷达扫描采样的速率。在现实生活中,扫描速度可能从10到25次/秒不等,这导致最大延迟为100毫秒到40毫秒不等。如果某些操作导致延迟超过100 ms(对于每秒10次扫描的速度),要么会发生帧丢失,要么管道的总延迟将开始任意增长。这里的解决方案之一是丢掉一些点,而不是丢失整个帧。这将逐渐降低准确性指标(召回率和精度),并保持管道实时运行。第二个要求是系统的总体延迟或反应时间。同样,总延迟应该被限制在至少100或200毫秒。对于自动驾驶来说,500ms甚至1秒的反应时间是不可接受的。因此,在算法设计开始时,首先采用抽取的方法处理少量的点是有意义的。抽取的标准选项包括:1. 有规律的2. (伪)随机3. 格栅下采样常规下采样速度很快,但可能会导致点云上的锯齿模式。随机或伪随机下采样也很快,但可能会导致不可预测的小对象完全消失。像PCL的pcl::VoxelGrid<>类一样的格栅下采样是智能和自适应的,但需要额外的计算和内存。原始点云:大量点云:多扫描聚合多扫描聚合是指当车相对于地面移动时,将多个历史激光雷达扫描记录到共同坐标系的过程。通用的坐标系统可以是局部导航框架或当前的激光雷达传感器坐标。我们将以后者为例。这个阶段在理论上是可选的,但在实践中是非常重要的。问题是,后续的聚类阶段依赖于LiDAR点的密度,如果密度不够,可能会产生过聚类的影响。过聚类意味着任何对象(汽车、公共汽车、建筑墙等)都可以被分割成几个部分。就其本身而言,这可能不是一个检测障碍的问题,然而,对于感知-跟踪-聚类的下游模块来说,这是一个实质性的挑战。跟踪器可能会不准确地关联对象的各个部分,这最终导致车辆突然刹车。我们绝对不希望聚类中的小错误在下游组件中造成雪崩式的错误。多次连续扫描(5到10次)的聚合成比例地增加了落在每个物体上的激光雷达点的密度,并促进了精确的聚类。汽车运动的一个很好的特点是,汽车能够从不同的视角观察同一物体,激光雷达扫描模式覆盖物体的不同部分。让我们看看执行聚合的代码。第一阶段是保留一个限制长度的队列,其中包含历史点云以及后续扫描仪的姿势转换。请注意,我们如何使用从RT3003 GPS-IMU模块获得的平移速度[Vx,Vy]和旋转速度Wz来构造姿势变换。// We accumulate the incoming scans along with their localization metadata// into a deque to perform subsequent aggregation.{  Transform3f next_veh_pose_vs_curr = Transform3f::Identity();if (gpsimu_ptr){    float frame_interval_sec = 0.1f;    // First, we need to calculate yaw change given the yaw rate    // (angular speed over Z axis) and the time inteval between frames.    float angle_z = gpsimu_ptr->wz * frame_interval_sec;    auto rot = Eigen::AngleAxisf(angle_z, Eigen::Vector3f::UnitZ());           next_veh_pose_vs_curr.rotate(rot);    // Second, we need a translation transform to the next frame    // given the speed of the ego-vehicle and the frame interval.    next_veh_pose_vs_curr.translate(Eigen::Vector3f(              gpsimu_ptr->vf * frame_interval_sec,              gpsimu_ptr->vl * frame_interval_sec,       0.0f           ));  }// Since later we want to aggregate all scans into the coordinate// frame of the last scans, we need the inverse transform.auto curr_veh_pose_vs_next = next_veh_pose_vs_curr.inverse();// Put the resulting pair of the cloud and the transform into a queue.auto cloud_and_metadata = CloudAndMetadata{decimated_cloud_ptr, curr_veh_pose_vs_next};m_queue.push_back(cloud_and_metadata);while (m_queue.size() > m_params->m_num_clouds){      m_queue.pop_front();  }}在第二阶段,我们从最新的扫描时间向后遍历队列,进行聚合,并将聚合转换应用到每个历史帧。使用这种方法,计算成本为O(N*D),其中N是点的数量,D是历史的深度(扫描的数量)。// We accumulate the transforms starting from the latest back in time and// transform each historical point cloud into the coordinates of the current frame.auto aggregated_cloud_ptr = std::make_shared<pcl::PointCloud<pcl::PointXYZI> >();Eigen::Matrix4f aggragated_transform = Eigen::Matrix4f::Identity();for (int i = m_queue.size()-1; i >= 0; i--){    constauto& cloud_and_metadata = m_queue[i];    constauto& cloud_ptr = cloud_and_metadata.cloud_ptr;    constauto& trans = cloud_and_metadata.transform_to_next;    pcl::PointCloud<pcl::PointXYZI>::Ptr transformed_cloud_ptr;    if (i != m_queue.size()-1){      aggragated_transform *= trans.matrix();      transformed_cloud_ptr = std::make_shared<pcl::PointCloud<pcl::PointXYZI> >();      pcl::transformPointCloud(*cloud_ptr, *transformed_cloud_ptr, aggragated_transform);  }else  {    // For the current scan no need to transform           transformed_cloud_ptr = cloud_ptr;  }// Concatenate the transformed point cloud into the aggregate cloud  *aggregated_cloud_ptr += *transformed_cloud_ptr;}聚合后,如果移动的物体看起来有点模糊,点云会显得有些模糊。可以在聚类阶段进一步解决。在这个阶段,我们需要的是一个更密集的点云,它可以从多个帧中积累信息。地面移除感知堆栈的目的是提供有关动态对象和静止障碍物的信息。汽车应该在道路上行驶,通常路面不被视为障碍物。因此,我们可以移除所有从路面反射的激光雷达点。要做到这一点,我们首先将地面检测为平面或曲面,并移除表面周围或下方约10厘米的所有点。有几种方法可以检测点云上的地面:1. 用Ransac探测平面2. 用Hough变换检测平面3. 基于Floodfill的非平面表面检测让我们在EGIN和PCL库的帮助下,研究RANSAC的C++实现。首先,让我们定义候选平面。我们将使用基点加法向量的形式。// A plane is represented with a point on the plane (base_point)// and a normal vector to the plane.struct Plane{    Eigen::Vector3f base_point;    Eigen::Vector3f normal;    EIGEN_MAKE_ALIGNED_OPERATOR_NEW};然后,我们定义了一个辅助函数,它允许我们在点云转换为平面坐标后,在Z坐标上找到满足条件的所有点的索引。代码中的注释给出了实现的细节。// This helper function finds indices of points that are considered inliers,// given a plane description and a condition on distance from the plane.std::vector<size_t> find_inlier_indices(  const pcl::PointCloud<pcl::PointXYZ>::Ptr& input_cloud_ptr,  const Plane& plane,  std::function<bool(float)> condition_z_fn){  typedef Eigen::Transform<float, 3, Eigen::Affine, Eigen::DontAlign> Transform3f;  auto base_point = plane.base_point;  auto normal = plane.normal;  // Before rotation of the coordinate frame we need to relocate the point cloud to  // the position of base_point of the plane.  Transform3f world_to_ransac_base = Transform3f::Identity();  world_to_ransac_base.translate(-base_point);  auto ransac_base_cloud_ptr = std::make_shared<pcl::PointCloud<pcl::PointXYZ> >();  pcl::transformPointCloud(*input_cloud_ptr, *ransac_base_cloud_ptr, world_to_ransac_base);  // We are going to use a quaternion to determine the rotation transform  // which is required to rotate a coordinate system that plane's normal  // becomes aligned with Z coordinate axis.  auto rotate_to_plane_quat = Eigen::Quaternionf::FromTwoVectors(            normal,             Eigen::Vector3f::UnitZ(  ).normalized();  // Now we can create a rotation transform and align the cloud that  // the candidate plane matches XY plane  Transform3f ransac_base_to_ransac = Transform3f::Identity();  ransac_base_to_ransac.rotate(rotate_to_plane_quat);  auto aligned_cloud_ptr = std::make_shared<pcl::PointCloud<pcl::PointXYZ> >();  pcl::transformPointCloud(*ransac_base_cloud_ptr, *aligned_cloud_ptr, ransac_base_to_ransac);  // Once the point cloud is transformed into the plane coordinates,  // We can apply a simple criterion on Z coordinate to find inliers.  std::vector<size_t> indices;  for (size_t i_point = 0; i_point < aligned_cloud_ptr->size(); i_point++){      constauto& p = (*aligned_cloud_ptr)[i_point];     if (condition_z_fn(p.z))   {          indices.push_back(i_point);     }   }   return indices;}最后,主要的Ransac实现如下所示。第一步是基于Z坐标对点进行粗略过滤。此外,我们需要再次抽取点,因为我们不需要聚集云中的所有点来验证候选平面。这些操作可以一次完成。接下来,我们开始迭代。在C++标准库的 std::mt19937伪随机生成器的帮助下,每次迭代采样3个随机点。对于每个三元组,我们计算平面并确保其法线指向上方。然后我们使用相同的辅助函数find_inlier_index来计算内点的数量。迭代结束后,我们剩下的是最佳候选平面,我们最终使用它来复制点云中所有索引不存在于列表中的点的副本。请注意std::unordered_set<>的用法。它允许执行恒定时间O(1)搜索,而不是对std::vector<>进行的线性O(N)搜索。// This function performs plane detection with RANSAC sampling of planes// that lie on triplets of points randomly sampled from the cloud.// Among all trials the plane that is picked is the one that has the highest// number of inliers. Inlier points are then removed as belonging to the ground.auto remove_ground_ransac(    pcl::PointCloud<pcl::PointXYZ>::Ptr input_cloud_ptr){  // Threshold for rough point dropping by Z coordinate (meters)  constfloat rough_filter_thr = 0.5f;  // How much to decimate the input cloud for RANSAC sampling and inlier counting  constsize_t decimation_rate = 10;  // Tolerance threshold on the distance of an inlier to the plane (meters)  constfloat ransac_tolerance = 0.1f;  // After the final plane is found this is the threshold below which all  // points are discarded as belonging to the ground.  constfloat remove_ground_threshold = 0.2f;  // To reduce the number of outliers (non-ground points) we can roughly crop  // the point cloud by Z coordinate in the range (-rough_filter_thr, rough_filter_thr).  // Simultaneously we perform decimation of the remaining points since the full  // point cloud is excessive for RANSAC.  std::mt19937::result_type decimation_seed = 41;  std::mt19937 rng_decimation(decimation_seed);  auto decimation_gen = std::bind(       std::uniform_int_distribution<size_t>(0, decimation_rate), rng_decimation);   auto filtered_ptr = std::make_shared<pcl::PointCloud<pcl::PointXYZ> >();  for (constauto& p : *input_cloud_ptr){       if ((p.z > -rough_filter_thr) && (p.z < rough_filter_thr))            {           // Use random number generator to avoid introducing patterns          // (which are possible with structured subsampling          // like picking each Nth point).           if (decimation_gen() == 0)               {                        filtered_ptr->push_back(p);                 }            }        }  // We need a random number generator for sampling triplets of points.  std::mt19937::result_type sampling_seed = 42;  std::mt19937 sampling_rng(sampling_seed);  auto random_index_gen = std::bind(       std::uniform_int_distribution<size_t>(0, filtered_ptr->size()), sampling_rng);  // Number of RANSAC trials  constsize_t num_iterations = 25;  // The best plane is determined by a pair of (number of inliers, plane specification)  typedefstd::pair<size_t, Plane> BestPair;  auto best = std::unique_ptr<BestPair>();  for (size_t i_iter = 0; i_iter < num_iterations; i_iter++)      {       // Sample 3 random points.      // pa is special in the sense that is becomes an anchor - a base_point of the plane              Eigen::Vector3f pa = (*filtered_ptr)[random_index_gen()].getVector3fMap();              Eigen::Vector3f pb = (*filtered_ptr)[random_index_gen()].getVector3fMap();              Eigen::Vector3f pc = (*filtered_ptr)[random_index_gen()].getVector3fMap();       // Here we figure out the normal to the plane which can be easily calculated             // as a normalized cross product.              auto vb = pb - pa;              auto vc = pc - pa;              Eigen::Vector3f normal = vb.cross(vc).normalized();      // Flip the normal if points down             if (normal.dot(Eigen::Vector3f::UnitZ()) < 0)            {                   normal = -normal;              }            Plane plane{pa, normal};        // Call find_inlier_indices to retrieve inlier indices.          // We will need only the number of inliers.          auto inlier_indices = find_inlier_indices(filtered_ptr, plane,                [ransac_tolerance](float z) -> bool {                         return (z >= -ransac_tolerance) && (z <= ransac_tolerance);                  });          // If new best plane is found, update the best          bool found_new_best = false;          if (best)         {                  if (inlier_indices.size() > best->first)                {                          found_new_best = true;                  }           }          else         {                // For the first trial update anyway                found_new_best = true;           }   if (found_new_best)        {                  best = std::unique_ptr<BestPair>(new BestPair{inlier_indices.size(), plane});          }  }  // For the best plane filter out all the points that are // below the plane + remove_ground_threshold.  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_no_ground_ptr;if (best)      {                cloud_no_ground_ptr = std::make_shared<pcl::PointCloud<pcl::PointXYZ> >();                auto inlier_indices = find_inlier_indices(input_cloud_ptr, best->second,                     [remove_ground_threshold](float z) -> bool {                            return z <= remove_ground_threshold;                       });                std::unordered_set<size_t> inlier_set(inlier_indices.begin(), inlier_indices.end());                for (size_t i_point = 0; i_point < input_cloud_ptr->size(); i_point++)              {                       bool extract_non_ground = true;                       if ((inlier_set.find(i_point) == inlier_set.end()) == extract_non_ground)                     {                             constauto& p = (*input_cloud_ptr)[i_point];                             cloud_no_ground_ptr->push_back(p);                       }                }           }          else         {               cloud_no_ground_ptr = input_cloud_ptr;           }    return cloud_no_ground_ptr;}让我们看看地面移除的结果。在移除地面之前:地面移除后:移除地面后,我们准备对剩余的点进行聚类,并通过凸包提取来压缩对象元数据。这两个阶段应该有自己的文章。我将在即将到来的第二部分中介绍它们的实现。同时下面是聚类的最终结果——凸包提取。可视化的最终对象:凸包绝对是任何跟踪器都渴望接受作为其输入的元数据类型。它们在RAM使用方面更加紧凑,并且比定向边界框更准确地表示对象的边界。KITTI 0003中的聚类点云:结论我相信,在生活质量和整体生产力方面,自动驾驶将是人类的一次飞跃。参考资料:感谢阅读!       原文标题 : 自动驾驶:基于PCL的激光雷达感知
  • [行业资讯] Car2Cloud 驱动未来 —— 数据存储驱动行业变革
    数据存储正在驱动汽车行业晋级汽车制造商正在将更智能的技术构建到可以改变交通方式的自动驾驶汽车 (AV) 中。 当自动驾驶汽车进一步融入社会时,它们有可能彻底改变人们的日常生活方式,甚至可能影响城市的设计方式。 实现这一目标的道路很长,但数据存储方面的创新可以帮助驾驭这一旅程。利用数据实现更多可能性AV 本质上是带轮子的超级计算机。借助一系列内置传感器、摄像头和内部网络,他们可以无缝检测正在发生的一切。他们能够从其他汽车、骑自行车的人、行人和路标上看到更多的道路上的东西。与大多数人类驾驶员相比,更智能的车辆对周围环境的感知能力更强。自动驾驶汽车也使用更多数据。一辆自动驾驶汽车相当于近 2,700 名普通互联网用户。Ruben最近在汽车行业研究和活动的领先提供商 Automotive World 上发表了演讲,解释了 AV 使用了多少数据,以及与普通互联网用户使用的数据相比如何。“到 2020 年,自动驾驶汽车平均每天处理 4,000 GB 的数据,而互联网用户平均处理 1.5 GB,”他说。随着自动驾驶汽车不断升级,配备更先进的摄像头和传感器,它们将拥有更智能的功能和技术,从而产生更多的数据。新的智能功能集可以帮助驾驶员在路上保持稳定。借助可靠的存储设备,可以启用车道偏离检测、后视视频和物体避让等方面。此外,可以推送来自制造商的无线 (OTA) 软件更新以添加新功能和改进。有些汽车甚至具有自动泊车的能力,可以完全自动化独立驾驶。但是,在自动驾驶汽车经常出现在街上之前,汽车世界还有一段路要走。升级车道美国国家公路交通安全管理局 (NHTSA) 发布了一个自动驾驶级别划分——1 级(无自动化)到 5 级(完全自动化)——来解释该行业的现状及其对未来的影响。今天上路的大多数 AV 都是 2 级——部分自动化或更低。 并且随着更高层次融入社会,潜在的发展空间和经济效益是巨大的。对于许多人来说,就业或独立生活依赖于驾驶能力。自动驾驶汽车可以帮助更多人上班,并为大约 200 万残疾人创造新的就业机会。随着汽车数据技术的发展,影响不仅仅局限于汽车。很快,道路和城市可能会开始在停车、道路建设和公共交通方面发生重大变化。“拓展”城市空间随着 AV 继续推出更多车载数字存储,达到 3 级及更高级别的自主性可能有助于减少交通和道路拥堵。这会对道路发展和城市布局的规划产生重大影响。未来,无人驾驶汽车可以让乘客下车,然后继续行驶。因此,曾经被停车场和大型车库占据的房地产可以被更多以人为本的需求所取代,例如住房、公园或购物中心。Russell Ruben 假设,甚至可能有一天人们不想拥有汽车。 “......相反,他们可以订阅共享驾驶服务,类似于音乐或电影的流媒体。”随着街道上更高效的自动驾驶汽车,汽车可以更紧密地行驶,为骑自行车的人和行人“拓展出”更多的空间。未来之“路”这仍然是自动驾驶汽车革命的开始。借助合适的 NAND 存储,车辆数据工作负载可以保持平衡,从根本上改善人们的旅行和体验生活的方式。这需要时间,但随着任何重大转变,都有可能使一切变得更好。扫描以下或点击链接即可下载技术白皮书: