《无人驾驶_1.docx》由会员分享,可在线阅读,更多相关《无人驾驶_1.docx(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、无人驾驶这是学习中兴开发者社区金明、郑卫军的总结笔记感谢大佬的总结学习记录一下机器人技术的核心是运动控制包括定位、导航、感悟、决策、跟踪等可广泛应用在家庭效劳机器人、工业自动化机器人等领域。自动驾驶是人工智能领域最炙手可热的方向互联网巨擎谷歌、Uber、百度等、传统汽车大厂商、Tier1供给商和很多初创公司都纷纷投入到这场全新的交通运输生态的创立中。截止2017年度6月18日以来共有34家公司获得美国加州路测资格其中中国背景的公司就有9家。图片来自互联网通过对自动驾驶的深化解析发现自动驾驶技术与机器人运动控制技术在框架构成、硬件平台、应用理解、软件核心算法上都根本契合。本文以百度的自动驾驶Ap
2、ollo技术为例比拟自动驾驶以及机器人运动控制技术的异同点。注目前自动驾驶技术百度公开的最为彻底它所用的思想代表了目前做自动驾驶的主流道路。技术框架比照机器人运动控制的技术栈机器人运动控制分为四层技术栈1.根底运动平台一个机器人必须有可以运动的实体一般来讲对于低速挪动的机器人差分轮式运动底座是比拟普遍的选择。它有两个主动轮可以分别控制转速以及转向前面有一个被动万向轮。运动底座向上提供的根本接口包括线速度角速度或者曲率控制查询当前里程计信息完成上层对运动底座的控制以及信息查询。2.硬件平台运算单板是硬件局部与运算单板同层的其它模块都是感悟单元感悟单元涵盖了目前主流的环境感悟技术可按照实际需求进展
3、选取。3.软件平台软件平台包括操作系统以及上层算法。目前主流的机器人操作系统是ROSROS是WillowGarage公司在2020年度发布的开源机器人操作系统由于其具有点对点设计不依赖于编程语言分布式架构强大的硬件抽象广泛的社区介入奉献丰富的可复用知名的开源库资源已经成为机器人设计的不二选择。对于低速运动场景原生的ROS环境完全知足设计要求。感悟、定位、避障、地图、途径规划、导航、跟踪是封装的软件算法模块软件算法与感悟单元收集的数据配合完成机器人的各种功能。4.云效劳平台云效劳平台包括仿真、平安、数据平台、训练平台、语音以及全局地图功能数据平台位于云端通过深度学习以及训练使机器人获得更高的智能
4、程度。仿真平台是做机器人测试的必要工具用户可以不依赖于真实的机器人以及测试环境而是在仿真平台中建立机器人模型以及测试环境进而验证自己的算法。百度自动驾驶Apollo技术框架图片来自互联网百度的自动驾驶分为四层技术栈1.参考汽车平台一辆汽车必须可以实现电子化的控制也就是线控。百度目前的参考设计使用的是LincolnMKZ,enhancedbyAutonomousStuff,为用户提供了一个无障碍的自动车辆平台。该平台为用户提供了一整套硬件以及软件解决方案。用户可以直接获得车辆某些模块控制权限如档位速度以及指示灯如下列图2.参考硬件平台为了实现高性能稳定的计算百度采用的是工业级PC作为运算单元配置
5、6th-GenIntelCorei7/i5LGA1151CPU以及NVIDIAGeForceGTX1050*GPU可以工作在-25到60的工作范围。定位采用的是GPSIMU的交融方案精度能到达厘米级别。在Apollo1.0中没有公开摄像头、Lidar(雷达)以及Radar(毫米波雷达)信息不过根据百度以前无人驾驶车的信息可以看到它包含一个Velodyn64线HDL64E雷达配套一个长距毫米波雷达以及中距毫米波雷达一个鱼眼摄像头以及一个摄像机镜头。3.开源软件平台开源软件平台包括操作系统以及上层算法。Apollo采用ROS操作系统。其中ROS是做了定制化修改的使得其能更合适自动驾驶的要求后面的连
6、载文章中会详细介绍。算法模块的构成与前面运动控制中的算法根本类似多了端对端以及HMI。HMI是百度自动驾驶提供的人机交互界面方便操统计以及调试。端对端算法是一种所见即行动的思想通过深度学习将感悟直接转化为控制这是一种实验性质的算法目前还不是主流应用。4.云效劳平台主要有三个作用,训练模型自动驾驶仿真高精地图提供。两个技术栈的比照根据上述对机器人运动控制技术以及自动驾驶技术栈的描绘可以看到两者之间有颇多相似的地方同时也有一些差异点详细分析如下1.运动底座vs参考汽车平台二者都是运动的控制主体为上层算法提供控制接口进展驱动提供查询接口进展反应。运动底座以及汽车进展控制时都要知足非完好约束即不向前挪
7、动的情况下无法单独完成横向位移。相比于运动底座汽车平台的动力学模型会更加复杂除了速度不是一个量级惯性因素也会使得控制更加复杂。汽车的横向位移转弯靠前轮的朝向与前后轮形成直线的夹角的变化属于自行车模型。机器人运动控制多采用差分轮运动底座横向位移靠两个轮子互相反方向旋转靠不同的旋转速度比来知足不同曲率的要求在控制算法的选取中会有不同。2.运算单元运动控制平台采用的是嵌入式异构计算单板知足低速简单运动场景的感悟、决策、控制算法的计算要求。汽车应对的是高速、绝对可靠平安的场景运算量不是一个量级目前多采用工业级PC的方案来知足感悟对于运算量的要求。各芯片厂商也纷纷推出自己的芯片方案后续运算单元平台将是百
8、花争艳的场面。3.感悟单元运动控制平台以及自动驾驶采用的传感器大多重叠也有几个不同地方如深度摄像头可以在运动控制平台的室内场景中使用深度主要靠构造光技术抗干扰才能差目前在室外场景下不可靠。自动驾驶多采用双目摄像头来完成深度识别。运动控制平台采用超声以及红外完成被动障碍感悟自动驾驶采用汽车电子方面非常成熟的毫米波雷达方案。4.操作系统两者都使用ROS操作系统汽车对于实时性、带宽、分布式要求会更加严苛。原生的ROS对于这三方面都无法到达自动驾驶的要求固然ROS2.0会在这三个方面有很大的提升但是仍然处于实验阶段。大局部自动驾驶厂商包括百度都是在ROS根底上作深度定制。5.上层算法两者的软件算法分类
9、根本一样所采用的算法实现有很多互相借鉴的地方在后面的连载文章中会详细介绍。6.仿真运动控制平台的场景相对简单在一些相对高配置的PC上根本能知足要求。自动驾驶一般要自动驾驶厂商自己搭建仿真平台汽车要仿真的环境非常复杂计算量消耗很大一般要采用云技术分布式平台。7.地图运动控制平台的地图创立所描绘的场景比拟简单一般2D场景地图即可知足要求在运算单元上可以完成创立以及使用。自动驾驶需要高精地图三维点云准确到厘米级别其特点是需要花费宏大本钱提早用收集车收集生成的高精地图要随时更新消耗大量的存储一般要放在云端自动驾驶车通过高速无线网络下载当时位置的高精地图知足实时决策要求。8.训练运动控制平台会对某些物体
10、或者人有简单的识别要求模型可以提早在效劳器端训练训练数据相对不多。汽车有海量的数据要进展训练假如要知足高可靠性的物体识别任务要在云端进展训练。9.运动控制平台的多机协作vs车联网运动控制平台涉及多机协作的要求如多个AGV小车互联互通共同完成调度任务是车车通信的一种方式。车联网方案是自动驾驶的一条途径在百度Apollo框架中并没有提及。包含V2V(车车通信、V2I(车路通信、V2P车人通信完成信息分享后的汽车决策以及控制算法。目前通信标准主要是欧美主推的DSRC(专用短程通信以及中国主推的5G标准LTE-V。自动驾驶vs机器人环境感悟自动驾驶以及机器人共同的三大关键技术为环境感悟是其中最重要、最
11、根底的一环。自动驾驶以及机器人主要通过传感器来获取周围环境信息同时也会通过高精度地图以及IoT技术来扩展环境感悟才能。下面我们来解析一下每类传感器的特性和在机器人以及自动驾驶汽车中的使用差异。一、摄像头摄像头是机器人或者自动驾驶汽车的眼睛分类如下1.普通单目摄像头通过图像匹配进展目的识别再通过目的在图像中的大小去估算目的间隔准确识别是准确估算间隔的第一步。2.单目构造光深度摄像头由一个RGB摄像头、构造光投射器(红外)以及构造光深度感应器(CMOS)组成通过投影一个预先设计好的图案作为参考图像(编码光源)将构造光投射至物体外表再通过深度感应器接收该物体外表反射的构造光图案。这样同样获得了两幅图
12、像一幅是预先设计的参考图像另一幅是相机获取的物体外表反射的构造光图案。由于接收图案会因物体的立体形状而发生变形因此可以通过该图案在摄像机上的位置以及形变程度来计算物体外表的空间信息。单目构造光Kinect一代同样是进展图像匹配这种方法与双目匹配比拟好处在于参考图像不是获取的而是经过专门设计的图案因此特征点是已知的而且更容易从测试图像中提取。3.双目深度摄像头双目摄像头的测距方式那么是通过对图像视差进展计算直接对前方景物进展间隔测量。双目摄像头的原理与人眼相似人眼可以感悟物体的远近是由于两只眼睛对同一个物体呈现的图像存在差异也称“视差。物体间隔越远视差越小反之视差越大。视差的大小对应着物体与眼睛
13、之间间隔的远近这也是3D电影可以使人有立体层次感悟的原因。优点1双目系统本钱比单目系统要高但尚处于可承受范围内并且与激光雷达等方案相比本钱较低。2没有识别率的限制因为从原理上无需先进展识别再进展测算而是对所有障碍物直接进展测量。3精度比单目高直接利用视差计算间隔。4无需维护样本数据库因为双目没有样本的概念。难点1计算量大对计算单元的性能要求非常高这使得双目系统的产品化、小型化的难度较大。2匹配双目匹配采用三角测量原理完全基于图像处理技术通过寻找两个图像中一样的特征点得到匹配点进而得到深度值。双目测距中光源是环境光或白光这种没有经过编码的光源图像识别完全取决于被拍摄的物体本身的特征点对外表颜色以
14、及纹理特征不明显的物体失效匹配的精度以及正确性很难保证因此出现了构造光技术来解决匹配问题。因为构造光光源带有很多特征点或编码因此提供了很多的匹配角点或直接的码字可以很方便的进展特征点的匹配。4.TOF深度摄像头TOF是Timeofflight的简写直译为飞行时间的意思。所谓飞行时间法3D成像是通过给目的连续发送光脉冲然后用传感器接收从物体返回的光通过探测光脉冲的飞行往返时间来得到目的物体的间隔。这种技术跟3D激光传感器原理根本类似只不过3D激光传感器是逐点扫描而TOF相机那么是同时得到整幅图像的深度信息。TOF相机与普通机器视觉成像经过也有类似之处都是由光源、光学部件、传感器、控制电路和处理电
15、路等几部单元组成。单目TOFKinect二代各种摄像头性能以及本钱比拟由上表比照可知无论是构造光还是TOF方案都需要增加主动光因此其检测间隔受到了光强度的限制无法适用于远间隔的检测一般只用于机器人的感悟而普通单目以及双目摄像头除了在机器人上应用还可以用于ADAS以及自动驾驶汽车上。二、激光雷达激光雷达以激光作为信号源由激光器发射出的脉冲激光打到对面物体上引起散射一局部光波会反射到激光雷达的接收器上根据激光测距原理计算就得到从激光雷到达目的点的间隔脉冲激光不断地扫描目的物就可以得到目的物上全部目的点的数据用此数据进展成像处理后即可得到准确的目的物体图像。激光雷达分为单线以及多线常见的多线激光雷达
16、有4线8线16线32线以及64线。单线激光雷达扫描的区域可以简单定义为一个平面是一个二维扫描方案。4线、8线雷达纵向扫描范围从3.2到6.4这个范围不能称为一个3D的扫描一般定义为2.5D扫描方案。64线雷达扫描的整个范围面就比拟大纵向甚至可以一直到30多度讲究对整个环境、3D的点云数据采集单位时间内采集到的反应点数多数据量大。SICK单线激光雷达单线二维激光雷达扫描图Velodyne多线激光雷达64线三维激光雷达扫描图激光雷达普遍用于定位、障碍物检测、物体分类、动态物体跟踪等应用在机器人以及自动驾驶汽车上都有使用。由于机器人的工作环境相对来讲比拟简单而且迫于本钱压力一般采用单线激光雷达用于定
17、位以及检测周边障碍物。自动驾驶汽车一般采用32线或者64线的三维激光雷达置于车顶完成对车辆四周较远物体的检测分类以及跟踪。另外在车灯或保险杠附近的位置还需要安装4线以及8线激光雷达主要对车顶三维激光雷达进展补盲对近间隔的车辆、行人和地线、马路牙、路肩、路栏等进展识别。缺点激光雷达容易受到大气条件和工作环境的烟尘的影响要实现全天候的工作环境是非常困难的事情。三、毫米波雷达毫米波是指波长在1-10mm之间的电磁波,换算成频率后,毫米波的频率位于30-300GHz之间。毫米波的波长介于厘米波以及光波之间,因此毫米波兼有微波制导以及光电制导的优点:1.同厘米波导引头相比,毫米波导引头具有体积小、质量轻
18、以及空间分辨率高的特点。2.与红外、激光等光学导引头相比,毫米波导引头穿透雾、烟、灰尘的才能强,传输间隔远,具有全天候全天时的特点在雨天、大雪天气下毫米波雷达是非常不错的选择。3.性能稳定,不受目的物体形状、颜色等干扰。毫米波雷达很好的弥补了如红外、激光、超声波、摄像头等其它传感器在车载应用中所不具备的使用场景。目前车载雷达的频率主要分为24GHz频段以及77GHz频段其中77GHz频段代表着将来的趋势这是国际电信联盟专门划分给车用雷达的频段。严格来讲77GHz的雷达才属于毫米波雷达但是实际上24GHz的雷达也被称为毫米波雷达。毫米波雷达在测量目的的间隔、速度以及角度上展现的性能以及其它传感器
19、还是略有区别的。视觉传感器得到的是二维信息没有深度信息而毫米波雷达那么是具备深度信息的可以提供目的的间隔。激光雷达对于速度并不敏感而毫米波雷达那么对速度非常敏感可以直接获得目的的速度因为毫米波雷达会有很明显的多普勒效应通过检测其多普勒频移可将目的的速度提取出来。毫米波雷达最根本的探测技术是使用FMCW连续线性调频波去探测前方物体的间隔毫米波雷达发射的是连续波在后端处理上要比激光雷达的运算量大。毫米波雷达在ADAS领域是很难被取代的传感器固然有一些缺点但是是唯一的全天候工作的传感器。其测速、测距的精度要远高于视觉与激光雷达相比其测速精度会高一些穿透力会更好。而对于机器人的应用场景利用毫米波雷达来
20、探测障碍物显得有点奢侈了一般采用更低本钱的超声波雷达来替代但对于一些特殊应用场景的机器人譬如消防大型物流由于需要在复杂环境下支持全天候、全天时作业就必须采用毫米波雷达来实现避障。四、超声波雷达超声波雷达是利用传感器内的超声波发生器产生40KHz的超声波,再由接收探头接收经障碍物反射回来的超声波,根据超声波反射接收的时间差计算与障碍物之间的间隔。超声波雷达本钱较低,探测间隔近精度高,且不受光线条件的影响,因此常用于泊车系统中。超声波最大的缺点就是检测角度太小一辆车需要在不同角度安装好几个除此以外都比上面几种方案更好。优点防水防尘少量的泥沙遮挡也无妨有金属材质的探头可以与车体外壳结合的很好通常合适
21、3m内的检测由于其空气损耗大检测角度又小因此车辆之间的干扰较小最小的监测间隔可到达0.1-0.3m本钱不高对于较常见的40KHz超声波传感器其测距精度大约是13cm左右取决于后端电路以及数据处理性能这个范围也能知足倒车雷达的要求所以在倒车雷达的各个方案中超声波是最容易被用户承受的。另外超声波雷达由于本钱低检测间隔适中因此在机器人的避障中应用也很广。汽车相对于绝大局部室内应用的机器人来讲对防护等级要求较高因此汽车上用的都是高防护等级的收发一体化的超声波雷达。五、红外红外线的工作原理是利用高频调制的红外线在待测间隔上往返产生的相位移推算出光束度越时间t进而根据DCt/2得到间隔D。红外传感器的测距
22、根本原理为发光管发出红外光光敏接收管接收前方物体反射光据此判断前方是否有障碍物。根据发射光的强弱可以判断物体的间隔它的原理是接收管接收的光强随反射物体的间隔而变化的间隔近那么反射光强间隔远那么反射光弱。目前使用较多的一种传感器红外光电开关它的发射频率一般为38kHz左右探测间隔一般比拟短通常被用作近间隔障碍目的的识别。红外只合适短间隔测距因此根本上只用于低速挪动的机器人上防碰撞。各种传感器的技术指标比照六、IMUIMU惯性测量单元是测量物体三轴姿态角(或者角速率)和加速度的装置。一般一个IMU包含三个单轴的加速度计以及三个单轴的陀螺加速度计检测物体在载体坐标系统独立三轴的加速度信号而陀螺检测载
23、体相对于导航坐标系的角速度信号测量物体在三维空间中的角速度以及加速度并以此计算出物体的姿态。惯性传感器的定位误差会随着运行时间增长但由于其是高频传感器在短时间内可以提供稳定的实时位置更新。IMU大多用在需要进展运动控制的设备如汽车以及机器人上在导航中有着很重要的应用价值。七、GPSGPS由GPS接收机以及卫星天线组成主要通过卫星来计算我们当前的位置以及速度。通过测量从卫星上接收信号的时间设备可以实现准确度大约在10m左右的定位。一个略为改良过的定位系统上线了我们可以把它称为差分全球定位系统(DGPS)因为使用了地面基准站的关系这个系统的准确度被提升到了1m。但这个精度对机器人以及自动驾驶汽车的
24、使用场景来讲都是不够的。因此GPS一般需要交融IMU实现厘米级的定位。另外由于室内无法接收到GPS信号因此对于室内机器人那么无法使用GPS进展定位。八、信息交互对于自动驾驶汽车来讲还有一类技术固然不是主动式的探测元件但是属于协同式的全局数据辅助可以扩展智能车的环境感悟才能在感悟层同样扮演着不可或者缺的角色包括高精度地图、V2X车联网技术。每种类型的感悟技术都有自己的优势以及弊端它们互相补充交融最终使智能车到达驾驶场景下非常高的平安性要求。九、结语传感器是机器人以及自动驾驶汽车环境感悟的根底对于各个传感器收集的数据还需要算法来处理这样才能进展自身的定位以及环境障碍的识别因此单个传感器数据的处理和
25、多传感器数据交融的算法非常关键。自动驾驶vs机器人操作系统无论是自动驾驶还是机器人运动控制的技术栈都有很关键的一层即操作系统层。该层与下层的硬件平台接口其上层为软件算法单元如下列图操作系统的选择机器人大多项选择择ROSrobotoperationsystem)indigo,百度的自动驾驶Apollo在ROSindigo的根底上做了定制。除了百度的Apollo日本的tierIV公司也开源了自己的整套自动驾驶算法Autoware,Autoware也是基于ROS。另外在一些自动驾驶初创公司的公开信息中可以看到他们的操作系统同样是基于ROS的。作为比照我们看到大的车商更倾向于专业的商业解决方案如宝马将
26、操作系统以及中间件的开发工作交给了Intel我们都知道Intel是一家专业的计算芯片解决方案提供商但是大局部人不知道2020年度Intel收买了嵌入式操作系统解决方案提供商风河公司。风河介绍做过嵌入式系统开发的人都对这个曾经的霸主有所解析固然它在渐渐被人淡忘因为如今嵌入式设备的操作系统是Linux以及基于Linux的Anroid的天下。风河公司在参加Intel之后一直没闲着只是一直隐藏在Intel背后。此前Intel以及三星推出的Tizen操作系统风河就一直介入其中。期望在汽车市场展开第二春的Intel,在软件上的王牌就是风河。2021年度风河成为谷歌开放汽车联盟的一员与谷歌共同开发Andro
27、idForAutomotive。风河在汽车操作系统上有天然的优势它很早就涉足汽车娱乐信息系统、显示屏以及车联网业务与车厂有长期稳定的合作关系在此根底上它又提供自动驾驶、高级辅助驾驶以及汽车云效劳无缝连接更值得车厂的信任。下列图是2017年度1月风河推出的面向汽车的软件解决方案HelixChassis产品该产品依仗的就是其1987年度即开发出来的实时操作系统Vxworks。综上所述我们可以看到汽车操作系统根本分为两个阵营传统车商他们的道路是商业产品一直信赖平滑过渡的产品。行业闯入者这个阵营如Google的WaymoTesla有实力及早布局自己的操作系统解决方案其它大局部公司会选择ubuntuRO
28、S深度定制的方案加快自己的开发效率。操作系统主要做什么工作每个做计算机行业的人对操作系统的概念既熟悉又生疏。程序员的三大浪漫是操作系统、编译系统以及图形学。评价一个牛人的标准之一就是做过一个操作系统内核能看Linux内核代码并做奉献。实际中除非工作需要软件人员一般不会在操作系统上面下功夫一个原因是它确实很难另一个原因是它像水以及空气一样非常重要但大局部情况下是免费的。操作系统的价值我们执行一段程序其实不仅仅是代码编译好的机器码在执行而是在操作系统的协助下一起执行完成某项工作。操作系统会找到你要执行的程序磁盘管理将程序码导入内存内存管理分配进程分CPU时间片去调度。你的程序假设访问其它硬件资源如
29、显示器操作系统会给你提供接口把你的恳求连接到显示系统进程中去将恳求翻译成显示屏上的像素值到达显示目的。进程间对一样资源的访问操作系统会透明地帮你安排好。我们可以想象一下没有操作系统软件开发者大局部会成为废人就算是一个高手也要关注很多细节才能完成一个简单的任务。大局部操作系统都会有存储管理、内存管理、进程管理等一般化的工作。对于不同的需求也会衍生出不同的有针对性的操作系统。我们的PC工作站对人机交互体验以及进程调用切换要求会更高一些对于大局部嵌入式设备CPU资源的占用敏感实时性那么是考虑重点而不需要考虑人机交互。开源Linux给操作系统领域带来的震撼改变了这个领域的开展格局在Linux内核的根底
30、上各个领域的计算机应用可以进展高效地量体裁衣的定制。以Android为例很多人可能会以为它是一个全新的操作系统事实上它是建筑在Linux内核根底上它的应用有自己的特点要无痛在各种硬件平台架构上无差异的执行无论是Arm,PowerPC,还是X86。挪动设备一般不会使用PC上的存储设备但FlashSD卡高效存取是它要着重考虑的。挪动设备对能耗非常敏感对人机交互要求很高这一系列因素催生了我们所见到的Android的样子。为什么自动驾驶需要操作系统一个汽车驾驶系统运行的软件包括感悟、控制、决策、定位等一系列高计算消耗逻辑特别复杂对平安可靠性要求十分高的程序简单的单片机肯定搞不定需要建立在一个成熟的几乎
31、五脏俱全的通用操作系统根底上同时要知足实时性、分布式、可靠性、平安性、通用性等要求。从头搞一个操作系统是非常不明智的做法所以对于没有风河Vxworks家底儿的玩家首选是Linux然后在Linux根底上使用中间件的形式去扩展。汽车行业的人可能会第一时间站出来表达不同意见因为搞汽车电子的最熟悉的嵌入式系统是类Unix的QNX,以往的汽车电子行业的嵌入式开发集中在汽车娱乐系统控制QNX体积小速度快非常稳定以及可靠因此它占据了汽车电子近75%的份额。但是简单几个问题就能理解为什么它不可选要做感悟目前公认的解决方案是使用深度学习网络进展识别有现成的深度学习框架运行在QNX上吗它能驱动GPU加速吗操作系统
32、的选择更要考虑开发的难度、后续的扩展性以及解决方案的开放性。Linux对于自动驾驶及机器人运动控制而言可以讲够可以以讲不够。因为机器人以及自动驾驶汽车的自主运动有一个很大的共性各种传感、驱动和模块是各自独立运作的决策、感悟等算法是完全独立的模块各自工作同时要相互沟通使用一种规格一致、统一的沟通语言。每个模块需要别的模块配合也就是我们常讲的分布式协作系统。假如把每个模块放入一个个独立的进程中进程间通信将是一个特别重要的考虑因素。我们知道的Linux操作系统提供的一系列进程间通信的手段信号量、队列、管道、分享内存、套接字可以去做但这需要大量的技术编码工作而我们的注意力是算法不是通信。那怎么解决这个
33、问题呢选择ROS操作系统ROS完全封装了模块之间的通信细节提供了优雅的方式进展各种类型的交互一对一、多对一、多对多、有返回、无返回、同步、异步像这种通讯框架会有很多其它现成的东西可以用。ROS宏大的价值不仅如此因为它出身高贵前身是斯坦福人工智能实验室的机器人工程STAIR后来由Willowgarage组织维护。它是免费的开源框架软件架构明晰一流提供多语言接口支持广泛的库文件实现以机动性、操作控制、感悟为主的机器人功能大量的工具组合用以配置、启动、自检、调试、可视化、登录、测试、终止分布式计算系统ROS为常用的机器人以及传感器提供了硬件驱动接口。从软件架构角度讲它是一种基于消息传递通信的、分布式
34、多进程框架。ROS很早就被机器人行业使用有很多知名的机器人开源库例如基于Quaternion的坐标转换3D点云处理驱动规划方面的MoveItOpenRAVE规划库控制方面的OROCOS实时运动控制库视觉图像处理方面的OpenCV以及PCL开源库定位算法SLAM等这些良好的特性吸引了成千上万的机器人爱好者参加奉献提供了机器人相关的各种算法包各大硬件传感器厂商会缺省提供ROS的驱动Wrapper。ROS的支持与开展依托着一个强大的社区。ros.org尤其关注兼容性以及支持文档提供了一套“一站式的方案使得用户得以搜索并学习来自全球开发者数以千计的ROS程序包。这个生态是无价的正因为这样ROS根本是科
35、研单位以及机器人相关行业的首选更准确的讲法是选择UbuntuROS。如今是技术开放的时代做技术框架选择时不能一味硬着头皮重复造轮子。在选择上除了看技术先进性更要看技术的生态环境介入到一个强大、开放、可扩展的技术生态中从中索取以及奉献是更明智的。选择Linux,是因为生态选择ROS更是因为生态。ROS在自动驾驶上有什么缺陷ROS在机器人运动控制中完全够用但是用于自动驾驶工程理论其实是有很多问题的。1.单点失败问题ROS的框架示意图如下我们可以看到各个节点之所以可以相互认识相互通信是因为它们在启动前把自己的信息告知一个统一的ROSMasterROSMaster是一个名字效劳器。这样就会造成一个问题
36、这样的架构不是一个纯粹的分布式架构有单点失败问题这个单点专指ROSMaster,其它应用节点的损失是互不影响的。这个问题对于自动驾驶这种要求高可靠性甚至会为此设计冗余备份机制的场景来讲是完全不能承受的。ROS节点与节点之间的通信是Socket即使一对多的情况也是分解成N对Socket假如是多对多读者可以想象。2.带宽拥塞自动驾驶有很多传感器如图它对于带宽资源是特别敏感的以摄像头传感器为例因为自动驾驶要高速行驶采样率要高至少每秒30帧以1080P的像素计算大概为180M/S而且传感器的数据不只一个节点感兴趣见下列图这个带宽的占用是很恐惧的这还只是一个摄像头一般汽车配置多个摄像头还有64线雷达数据
37、量可想而知。当这种订阅者诸多的时候在ROS当前机制下带宽资源消耗是宏大的。3.消息不支持向前兼容ROS传递的消息不支持向前兼容也就是讲在后面应用中在已经定义的消息类型中增加一个字段这样新节点以及老节点之间就这个消息进展沟通就会发生错误准确的讲是md5校验失败。接口兼容性问题会对历史数据的使用造成很大的影响尤其是自动驾驶领域海量的历史数据是宝库不能用了或做大量的处理才可以用都是不可承受的。4.平安问题假如一个ROSnode被挟持黑客可以通过这个node将资源耗尽进而将这个系统搞垮。假如ROSnode与node之间的消息被截获或伪造那么自动驾驶汽车可能会被黑客控制。这四个主要问题原生的ROS1.0
38、都是无法解决的ROS2.0固然解决了局部但还在测试阶段自动驾驶玩家是没有时间以及耐心去等待ROS2.0成熟的。怎样解决上述问题1.单点失败问题的解决解决单点失败一般有两个思路一个思路如百度自动驾驶Apollo采用的一种叫RTPS的效劳发现协议通过节点之间的自动发现完成纯粹意义上的p2p分布式拓扑构造见下列图ROS2.0其实也是用一样的思路去解决这个问题它采用工业级别的DDS中间件节点之间可以自动发现。另一个思路是ROSMaster这个关键节点采取备份机制假如ROSMaster宕机了备份节点会顶上可以采用开源的分布式协调框架zookeeper去完成这个功能见下列图2.带宽拥塞问题的解决对于进程通
39、讯使用socket造成带宽的拥塞以及CPU的负担方案很简单进程通信采用分享内存机制还是拿摄像机为例子见下列图使用分享内存的好处相比于套接字越是多对多对带宽利用的优化越明显。ROS2.0采用的DDS中间件方案已经考虑了进程间通信采用分享内存。3.接口兼容问题的解决对于接口兼容问题百度自动驾驶Apollo框架采用的方案是使用谷歌开源的protobuf中间消息构造类比XML,JSON包括消息传递序列化以及反序列化机制封装成ROSmsg来代替原生的ROSmsgprotobuf提供了良好的消息向前兼容性。这样修改不破坏原生ROSmsg机制而且仍然使用这个机制通信的其它ROS节点是一个比拟干净的侵入修改方案。4.平安问题的解决平安方面的问题可以采用LXC(linuxcontainer)这种轻量级虚拟化技术把每个ROSnode放入沙盒限制每个ROSnode权限。节点与节点的通信消息可以进展加密解密处理防止中间有人攻击。结语以上我们讲述了为什么自动驾驶以及机器人运动控制都采用ubuntuROS作为操作系统的背景以及原因总结了目前原生ROS1.0在自动驾驶场景使用的问题及参考修改方案。祈望通过本文的描绘大众会对机器人以及自动驾驶的软件操作系统层面有一个大概的解析。关注博主即可浏览全文
限制150内