发布询价单
您的位置:首页 > 资讯 > 综合资讯 > 正文

基于Spark与ROS的分布式无人驾驶模拟平台

2016-09-15 12:44 性质:转载 作者: 刘少山 来源:CSDN
免责声明:无人机网(www.youuav.com)尊重合法版权,反对侵权盗版。(凡是我网所转载之文章,文中所有文字内容和图片视频之知识产权均系原作者和机构所有。文章内容观点,与本网无关。如有需要删除,敬请来电商榷!)

  基于Spark的分布式模拟平台

  Spark是UC Berkeley AMPLab开源的通用并行计算框架。Spark基于内存实现的分布式计算,拥有Hadoop所具有的优点;但不同于Hadoop,Spark Job的中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地应用于需要迭代的Map-Reduce算法。

图4 分布式模拟平台总体架构

  如图4所示,为了高效地进行无人驾驶回放模拟,我们设计了基于Spark的分布式模拟平台框架。我们使用Spark进行资源的分配管理、数据的读写以及ROS的节点管理。在Spark Driver上,我们可以触发不同的模拟应用,比如基于LiDAR的定位、基于图片的物体识别、车辆决策与控制等。Spark Driver会根据数据量与计算量等需求请求Spark worker资源。每个Spark worker首先会把Rosbag数据读入内存,然后通过pipe启动ROS Node进程进行计算。我们也可以使用JNI方式连接Spark worker以及ROS Node,但这将涉及对ROS的修改,使得整个系统难以维护与迭代。经过权衡之后,我们最终选择了pipe的设计方案。

  在pipe的设计方案中,有两个问题需要解决:第一,Spark本身支持读取文本数据,但并不支持多媒体数据读取,我们需要设计一个高效的二进制文件读取方法。第二,Rosbag的play功能如何从内存中读取缓存的数据,record功能如何将数据缓存至内存中。以下我们将讨论这些设计。

  二进制文件流式管道处理

  Spark操作数据的核心是弹性分布式数据集(RDD),它允许程序员以一种容错的方式在一个大型集群上执行内存计算。百度美国研发中心之前的一个工作就是在这一数据结构的基础上引入了新的RDD来实现二进制文件流式管道处理。其结构如图5所示(关于这个设计的细节请参考《程序员》2016年1月刊《基于Spark的百度图搜变现系统架构》)。

图5  BinPiped RDD的总体设计和主要功能

  在每一个Spark的worker上,worker根据Binpiped RDD的信息通过标准输入流在内存中将数据传送给用户程序,用户程序处理完数据后通过标准输出流在内存中将数据传回给Spark的worker。worker将数据汇集存储到HDFS上。

  Rosbag缓存数据读取

  在当前使用场景下(如图6),我们的输入是一定量的Bag二进制文件,以某种形式存储在分布式文件系统上面,而用户想要的输出是所有这些Bag文件在每一个worker上回放信息进入模拟器后经过处理得到的数据,显然这一过程通过Rosbag的play和record功能最易实现。

图6  模拟器在分布式平台的运作流程


图7  MemoryChunkedFile设计

  不过这一过程中还存在缺失的环节,即Rosbag的play功能如何从内存中读取缓存的数据,以及record功能如何将数据缓存至内存中。为了实现这一功能,我们为原来的Bag和ChunkedFile的两层逻辑结构增加了一个分支逻辑层。如图7所示,MemoryChunkedFile类继承于ChunkedFile类并且重写了ChunkedFile所有的方法。MemoryChunkedFile在向下层读写文件时是向内存读写数据,而不是像ChunkedFile类一样向硬盘读写数据。这样做的一个好处就是worker通过标准输入流传给模拟器的数据不用经过磁盘I/O读写就可以被直接读入,经过模拟器处理的数据也不用经过磁盘I/O读写就可以由内存直接传回worker。这样的读写模式极大地缩短了模拟器处理数据的时间。

  通过这一逻辑层的添加,我们可以将模拟器部署到Spark集群内的每一台worker机器上。通过加载不同的配置文件使每台机器运行不同的模块;也可以通过部署相同模块不同模型的条件下运行相同数据,以比较模型的不同;还可以在相同模块相同模型的条件下运行不同数据,比对不同数据的差异。由此可见,分布式系统的使用为模拟器添加了无数扩展的可能。

  性能评估

  在设计实现的同时,我们对系统进行了性能评估。随着计算资源的增加,计算时间也在线性地降低,系统表现出很强的可扩展性,可以承受很大的数据量与计算量。在一个图像识别测试集中,使用单机处理图像数据耗时为3个小时,而使用8个Spark worker后,耗时仅25分钟。假设我们使用10000个Spark worker对谷歌无人车级别的数据进行大规模的图像识别模拟测试,整个实验也可以在100小时内完成。

  结论

  使用分布式系统能够极大提升模拟器的工作能力,使无人驾驶系统的测试工作得以大规模有序地扩展开来。这一结果是建立在模拟器架构模块化,以及测试用例组合模块化的基础之上的。采用分布式系统搭建模拟平台,使得在真车上路之前测试无人驾驶汽车将要行驶的每一条道路成为现实。当然无人驾驶汽车在真实道路上的测试依然必不可少,但是模拟器已经为无人驾驶系统测试了海量的基础情景,使我们可以以最低的成本最大限度地保障真车测试时的安全



  无人驾驶技术系列:

  • 光学雷达(LiDAR)在无人驾驶技术中的应用

  • 基于ROS的无人驾驶系统

  • 基于计算机视觉的无人驾驶感知系统

  作者:刘少山,PerceptIn联合创始人。加州大学欧文分校博士,研究方向包括智能感知计算、系统软件、体系结构与异构计算。现在主要专注于SLAM技术及其在智能硬件上的实现与优化。曾负责百度无人车系统架构与产品化。

123下一页

网友评论
文明上网,理性发言,拒绝广告

相关资讯

推荐图文

关注官方微信

手机扫码看新闻