本发明涉及自动驾驶技术领域,具体涉及一种解决自动驾驶异构平台快速开发环境部署的方法。
背景技术:
随着科学技术的快速进步和计算平台性能的大幅提升,具有前瞻性的技术——自动驾驶技术,正在重塑着我们的世界。
自动驾驶是依靠视觉模块、激光雷达、毫米波雷达、超声波雷达,gps等多传感器,通过数据的采集和融合,围绕着环境感知、高精度定位、决策规划、控制等核心功能,协同合作共同完成。
在自动驾驶异构平台的开发过程中,我们需要完成各种传感器的融合、算法实现、物体检测、pid控制等,这些具体功能的需求不同,对芯片的算力需求有高有低,那么不可避免地需要在不同性能的硬件及平台上,分别部署搭建不同的开发和运行环境,以期达到相应的目的,实现差异化的功能。
目前常用的开发环境和代码部署方法,有使用脚本来实现,有根据复杂的配置文件来实现,或者通过docker镜像来实现等等。
但是软件开发环境有着快速迭代和更新的需求,传统的方法要逐一对设备手动安装或者更新操作,或者制作不同的docker镜像。不仅繁琐,也很容易出错。docker镜像如果过大,也会导致加载和运行时长增加。
也有利用git的webhook和jekins来实现持续集成,但这就需要在代码仓库上对应配置webhook中的payloadurl。playloadurl需要是公网域名,对应多个不同的部署设备,playloadurl需要逐个增加。公网域名是需要按月承租,多个不同设备就需要配置多个公网域名。随着自动驾驶车辆使用的设备增加,这部分都会计入成本。
如何解决自动驾驶异构平台的快速开发环境部署,就成为亟待解决的技术问题。
技术实现要素:
发明目的:为了在自动驾驶异构平台的开发环境部署中避免低效和无意义的同步、安装和编译等工作,本发明提供一种快速部署方法。
技术方案:为解决上述技术问题,本发明提供一种自动驾驶异构平台开发环境的快速部署方法,包括以下步骤:
步骤一,为每块设备设置不同的固定ip
步骤二,配置开机启动和虚拟网络控制台启动文件
步骤三,生成公钥并且配置在代码服务器端
步骤二中的开机启动文件实现如下:
步骤1,通过当前设备ip判断设备功能;
步骤2,判断设备是否联接外网,如果没有联网则直接跳到步骤5;如果外网联接,跳到步骤3;
步骤3,则判断设备上安装模块仓库是否存在:
3.1如果存在,比较安装模块仓库的本地分支和远端服务器对应分支是否有差异:
3.1.1如果有差异,解析差异和提取新增安装软件信息,执行增量安装,从服务器同步安装模块仓库文件;
3.1.2如果没有差异,则跳到步骤4;
3.2如果不存在,则从服务器克隆安装模块仓库,解析安装文件信息执行安装;
步骤4,判断设备上功能模块仓库是否存在:
4.1如果存在,比较功能模块仓库的本地分支和远端服务器对应分支是否有差异:
4.1.1如果有差异,执行从服务器同步较功能模块仓库文件,编译最新镜像;
4.1.2如果没有差异,则跳到步骤5;
步骤5,启动功能模块并运行。
本方法是基于git和脚本完成持续集成。通过两个仓库文件(安装模块和功能模块)简单的部署完成复杂的配置和启动工作。
因为自动驾驶异构平台中,多个设备只有在车身启动过程中才能得到供电,所以服务器端的更新不会及时同步到设备端。对应更新避免了浪费时间的盲目同步,而是先判断网络状态。同步之前,先判断本地和服务器远端是否有差异,才决定同步与否。对应安装软件也避免了全部重装,而是做到差异化的安装。避免了配置人员手动拉去代码,安装软件等重复性工作,实现了快速迭代和持续集成的功能。
自动驾驶异构平台中通过叠加硬件设备模块的方式工作,但是不可能为每个设备都配备显示装置,本方法还引入了虚拟网络控制台。
使用时,将部署的安装模块和功能模块都整合为仓库上传到服务器,开机联网后根据是否存在差异,决定执行具体操作,避免低效和无意义的同步、安装和编译等工作。
有益效果:本发明基于unix环境,利用分布式开发工具git实现了比较简便快捷的部署方法,实现了低成本的持续集成和快速迭代的功能,相比现有技术,具备以下显著的进步:
1.迭代和持续集成只需要开机自动即可执行,无需配置多块设备的公网域名和安装复杂的配置项。
2.部署环境上传到服务器,通过同步操作自动获取差异化安装信息,无需复杂的额外部署信息的存储。
3.直接通过虚拟网络控制平台实现,无需配置额外的显示设备。
除以上所述的本发明解决的技术问题、构成技术方案的技术特征以及由这些技术方案的技术特征所带来的优点外。为使本发明目的、技术方案和有益效果更加清楚,下面将结合本发明实施例中的附图,对本发明所能解决的其他技术问题、技术方案中包含的其他技术特征以及这些技术特征带来的优点做更为清楚、完整的描述。
附图说明
图1是自动驾驶异构平台设备部署分布图;
图2是部署准备工作的流程图;
图3是本发明实施例的部署展开流程示意图。
具体实施方式
实施例
本实施例以gitlab开源代码仓库作为服务器,系统架构如图1所示。
服务器上分别构建安装模块仓库和运行模块仓库。安装模块仓库是在一个仓库内建立多个branch适配不同功能设备;而运行模块仓库针对不同功能,建立多个不同目标仓库。
在部署设备的时候,自动驾驶的局域网内每块设备对应的功能和ip都是唯一固定标识。
各个设备的sshrsakey配置到服务器。
多个设备使用同一个配置脚本文件,在设备启动过程中会被运行。
如图2所示,部署的准备工作只需要如下简单的三步,避免了复杂和冗余的多种操作
1.设置设备固定ip
2.配置开机启动和虚拟网络控制台启动文件
3.在代码服务器配置ssh-key
通过linux定时任务,在设备启动时候,触发部署的开机启动文件。开机启动文件中,会启动虚拟网络控制台。配置人员可以在需要的时候很方便查看。
部署展开的具体流程如图3所示:
虚拟网络控制台启动,会触发运行部署的虚拟网络控制台启动文件。
虚拟网络控制台启动文件完成一系列的安装模块、编译源码、启动设备功能等工作
1.当前设备功能判断:通过当前固定ip来获知设备功能
2.判断和外网联接与否,如果没有则不触发部署流程,直接启动
3.如果外网联接,则判断设备上安装模块仓库是否存在:
1)如果存在,则通过给gitremoteupdate、gitdiff判断本地和远端服务器是否有差异:
i)如果有差异,解析差异和提取新增安装软件信息,执行增量安装,同步仓库。
ii)如果没有差异,则跳过。
2)如果不存在,则从服务器克隆安装模块仓库,解析安装文件信息执行安装。
4.判断设备上功能模块仓库是否存在:
1)如果存在,则通过git、gitdiff判断是否有差异:
i)如果有差异,执行和编译。
ii)如果没有差异,则跳过。
5.最后启动功能模块。
本方法和现有技术相比,避免了配置多块设备的公网域名,和安装复杂的配置项,迭代和持续集成只需要开机自动即可执行。
避免了复杂的额外部署信息的存储,将部署环境上传到服务器,通过同步操作自动获取差异化安装信息。
避免了配置额外的显示设备,通过虚拟网络控制平台实现。
人工方式逐个设备部署、webhook+jenkins部署及本发明的部署方法比较如下:
本发明为自动驾驶异构平台开发环境的快速部署提供了一种新的方法,具体实现该技术方案的方法和途径很多,以上仅是以示例的方式提供的优选实施方式。本领域技术人员可以在不偏离本发明的情况下想到许多更改、改变和替代。应当理解,在实践本发明的过程中可以采用对本文所描述的本发明实施方式的各种替代方案。所附权利要求旨在限定本发明的范围,并因此覆盖这些权利要求及其等效项的范围内的方法和结构。本实施例中未明确的各组成部分均可用现有技术加以实现。