三大需求助ROS成为百度自动驾驶车载计算框架

来源:互联网 发布:游戏租号 软件 编辑:程序博客网 时间:2024/05/17 02:16

本文内容节选自2017年8月1日的百度技术沙龙上的演讲。百度技术沙龙是由百度主办的线下技术交流活动,每月一期,每期由1个话题,2场演讲以及Open Space开放讨论环节组成,旨在为中高端技术人员提供一个自由的技术交流和分享的平台。


作者何玮是百度自动驾驶权威架构师,专注于百度自动驾驶车载计算框架相关工作。

自动驾驶是个复杂的系统工程


我们知道自动驾驶系统是一个非常非常复杂的系统,它包含了感知、红绿灯检测、障碍物检测、决策以及车辆控制等相当多的模块,需要去采集处理激光雷达、相机、LiDAR、GPS等大量传感器的数据,以及实时处理这些数据。那么,我们如何能够把这么多功能各异、非常复杂的模块集成到一起,同时去协调车上有限的软硬件资源,把它们攒成一个完整的自动驾驶系统,从而去完成自动驾驶的任务?这是一个非常大的挑战,这也是我们在自动驾驶系统中需要使用车载计算框架的原因。

需要怎样的计算框架?


我认为在目前这个阶段,最重要的有以下三点:

第一,框架需要有一个高效的开发支持。大家都知道自动驾驶现在还处于一个快速发展、快速迭代的过程中。无论是具体的感知算法,还是决策算法,还是整体的技术方案,无论是以2D为主的Radar方案,还是3D为主的视觉方案,都是在一个持续的迭代过程中。那么在这个阶段,快速的算法迭代,快速地去调试、验证就是一个非常大的需求。对此,我们需要框架可以提供很好的开发效率,让我们的算法工程师能够更加聚焦在算法本身的开发和功能验证上,而诸如一些配置管理、环境配置以及整体运行及调试相关的功能,我们希望能够由框架来统一完成,这样的话大家不需要各个模块各个团队都去开发重复的功能。这样我们能够快速的构建系统原型来验证我们的算法和功能。

第二、框架需要让模块能够灵活配置。因为像感知、定位、决策模块,其实本身都是功能相对独立的模块。大家之间只是通过接口去定义相应的数据,这样的话,对于整体的一个数据开发过程中,我们希望各个模块能够独立的在线下去开发、调试,然后等放到车上的时候能够通过框架把它们整合成一个完整的整体去运行。

第三,我们的自动驾驶涉及了大量的图像、点云数据的处理算法,所以我们对大量的可视化工具有强烈的需求,比如,对于障碍物检测算法,我需要去看图像识别算法中障碍物框得准不准;对于决策算法,我需要去看规划出来的路径是否合理是否正确;对于定位算法,我在调试的时候需要去看我的车是否在正确的位置上,是否是在车道线之内。所以说在调试的过程中,可视化工具的支持也是非常重要的一点

我认为以上三点是框架最需要满足的要求。基于以上问题,我们选择了ROS作为自动驾驶系统开发和调试的框架

为什么是ROS?


相信大家如果是做机器人相关领域或无人车相关研究的,应该都比较了解ROS这个框架。ROS的前身是美国斯坦福大学(Stanford University)人工智能实验室设计出来的机器人开发框架。从软件架构的角度来讲,它是一个分布式、基于消息通信的进程框架。

ROS很早以来就被机器人行业所使用。同时,很多知名的机器人开源库,比如说基于四元数的坐标转换啊,3D点云驱动处理啊,或者基于SLAM的定位算法等等,都是一些开源贡献者基于ROS进行开发的。而且,截止现在,ROS框架大概有三千多个第三方代码包。正是有这样丰富的基础库支持,我们基于ROS的开发是可以达到很高的效率。

由于ROS本身是基于消息机制的,所以我们在开发过程中可以基于功能把整个自动驾驶分成多个独立的模块。每个模块只需要解决接收什么消息,消息如何处理,以及发布什么消息的问题。因此,模块可以在离线进行独立的调试和验证。当真正要上车的时候,通过框架可以把我们的模块快速的集成到一起。

此外,ROS也是现在学术界使用最广泛的一个框架,这样对于我们去实验各种最新的算法,有一个非常大的便利。

所以正式基于以上这些特性,我们在阿波罗中使用ROS作为开发和集成的框架。


公众号:ROS学习网

ID:learnros