本申请涉及机器人技术领域,具体涉及一种基于docker的云机器人系统构建方法,还涉及一种采用该方法构建的云机器人系统,以及一种docker主机。
背景技术
现有技术中,云机器人系统整体架构,由云平台和机器人本体两大部分组成。其中云平台包括云存储、云网络和云引擎。云存储主要是对云机器人资源进行存储,如对象模型、算法库、任务库、语义映射等。
rajesharumugam提出了服务机器人云平台davinci,是基于ros(robotoperatesystem)系统采用hadoop分布式系统架构map/reduce机制构建的。davinci服务器为机器人提供代理服务将ros和hadoop集群绑定。机器人上的ros节点向davinci请求服务或从hadoop集群获取信息。但davinci对系统的网络延迟、通信问题还有待进一步解决。
zhihuidu等为了解决机器人资源共享的问题构建了机器人云计算中心rcc(robotcloudcenter),解决了多样性的任务请求问题。
lujiawang等为了解决云机器人资源分配问题,提出基于twistedsocket的云机器人系统异步数据传输架构和基于博弈论的资源分配优化算法,解决了机器人实时任务感知的问题。
欧盟项目roboearth的科学家们提出了机器人万维网,目的是利用互联网来建立一个开源的巨大的网络数据库,让联网的机器人能够接入并更新信息。roboearth可以为机器人提供动作序列、对象模型和运行环境等语义映射信息,机器人根据映射信息完成任务。
d.hunziker等提出了rapyuta云机器人平台。在假设机器人可以与云平台高宽带连接的条件下,rapyuta为云机器人提供了机器人基于语义是别的任务管理、命令数据结构等功能模块。
众所周知的是,云机器人可以访问大数据中心的庞大资源,然而数据的安全性、容错性直接影响到云机器人识别和决策的正确率。目前大多数云机器人的软件架构采用hadoop分布式文件系统,以一种可靠容错的方式并行处理上t级别的数据集,hadoop每个集群(cluster)由一个名字节点(namenode)、多个数据节点(datanode)、多个客户端(client)组成。namenode主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等,将文件系统的元数据(metadata)存储在内存中,这些信息主要包括了文件信息、每个文件对应的文件块信息、每个文件块(block)所在datanode信息等。
针对此,现有技术云机器人网络有两部分:机器人之间的网络称为(r2r)robot-to-robot和机器人与云之间的网络称为r2c(robot-to-cloud)。在r2r层,连接方式通常为无线网络,如wlan,移动ad-hoc网络。在r2c层提供信息、计算和存储的共享中心。资源配置直接影响到整个系统的运行效率和实时性。
资源分配管理是计算系统、存储系统的常见问题,目前云机器人资源配置常用算法有如下几种。
(1)蚁群算法。该算法对任务处理中的资源分配具有较好的性能,merkled等提出的蚁群算法解决了挖掘供应链中受限资源的调度问题。
(2)粒子群算法。基于自然进化的全局化概率优化方法,rodriguez等提出的粒子群算法解决了机器人云系统中的信息流成本最小的问题。
(3)模糊算法。通常在系统中作为决策层,cheng等提出的混沌模糊聚类微分演化算法解决了受限任务调度问题。
(4)流量定价策略法。shuqinli等研究了有约束条件下的流量定价法的网络通信收入最大化问题,并提出了两种激励的定价控制策略并进行融合,提出了最优定价机制。
(5)基于博弈论的优化算法。lujiawang等提出的基于博弈论提出了资源传输线性定价策略,解决资源分配过程中的tcp的incast情况。
(6)基于拍卖的算法。matthewtan等提出了一种基于拍卖的网络点对点的资源配置方法。
(7)基于市场的算法。通过提取自主代理和系统之间的复杂交互对资源进行优化调度。这类算法比较适合于云机器人的资源调度问题。lujiawang等提出的基于市场管理的方法对云机器人在无限制条件。
简而言之,云机器人就是云计算与机器人学的结合。不同于其它网络终端,机器人本身不仅不需要携带完备的传感器、存储所有感知信息,或具备超强的计算能力。只需要上传相关任务需求到云端,云端通过存储的巨大信息库和技能进行相应响应并协助完成。云机器人并不是指某一个机器人,也不是某一类机器人,而是指机器人信息存储和获取方式的一个学术概念。这种信息存取的方式的好处是显而易见的。比如,机器人通过摄像头可以获取一些周围环境信息并上传到服务器端,服务器端可以在数据库内匹配这个环境的地图信息,并规划机器人的行进路径和避开障碍物。同时,所有机器人可以通过共享数据库以减少开发时间并提高机器人的智能。
而在另外的技术领域中,容器技术虚拟化技术已经成为一种被大家广泛认可的容器技术服务器资源共享方式,容器技术可以在按需构建容器技术操作系统实例的过程当中为系统管理员提供极大的灵活性。由于hypervisor虚拟化技术仍然存在一些性能和资源使用效率方面的问题,因此出现了一种称为容器技术(container)的新型虚拟化技术来帮助解决这些问题。
容器技术能够在同一台服务器上创建相比于之前两倍的虚拟机实例数量,因此无疑容器技术将会降低系统总投入。但是必须容器技术认真进行规划,因为双倍的容器技术实例数量同样意味着对于运行这些容器技术实例的服务器带来了双倍的i/o负载。
研究表明容器技术在多个领域当中都比hypervisor拥有更好的性能表现。容器技术的运行速度几乎是hypervisor的两倍,在评分当中非常接近于本地操作系统。在和kvm(kernel-basedvirtualmachine,内核级虚拟化技术)的对比当中,容器技术在硬盘随机读取(84,000vs48,000iops)和写入(110,000vs60,000iops)方面拥有非常优秀的表现,如果使用本地固态硬盘可以实现更好的sql性能表现。
容器技术实验室完成了至今为止大部分权威实验,其研究结果表明容器技术相比于hypervisor,容器技术的许多关键指标都有重大改进。在进行的容器技术所有测试当中,容器技术几乎拥有和本地平台一样的运行速度,尽管网络延迟测试还没有完成。
目前比较先进的是docker技术,docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
docker使用客户端-服务器(c/s)架构模式,使用远程api(applicationprogramminginterface,应用程序编程接口)来管理和创建docker容器。docker容器通过docker镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
docker核心解决的问题是利用lxc(linuxcontainer,linux容器)来实现类似vm(virtualmachine,虚拟机)的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。与vm的方式不同,lxc并不是一套硬件虚拟化方法、无法归属到全虚拟化、部分虚拟化和半虚拟化中的任意一个,而是一个操作系统级虚拟化方法。
现有技术中,从虚拟化到docker要解决的问题出发,是怎么满足用户虚拟化需求的。
用户需要考虑虚拟化方法,尤其是硬件虚拟化方法,需要借助其解决的主要是以下4个问题:
1、隔离性。每个用户实例之间相互隔离,互不影响。硬件虚拟化方法给出的方法是vm,lxc给出的方法是container,更细一点是kernelnamespace。
2、可配额/可度量。每个用户实例可以按需提供其计算资源,所使用的资源可以被计量。硬件虚拟化方法因为虚拟了cpu,memory可以方便实现,lxc则主要是利用cgroups来控制资源。
3、移动性。用户的实例可以很方便地复制、移动和重建。硬件虚拟化方法提供snapshot和image来实现,docker(主要)利用aufs实现。
4、安全。这里强调是host主机的角度尽量保护container。硬件虚拟化的方法因为虚拟化的水平比较高,用户进程都是在kvm等虚拟机容器中翻译运行的,然而对于lxc,用户的进程是lxc-start进程的子进程,只是在kernel的namespace中隔离的,因此需要一些kernel的patch来保证用户的运行环境不会受到来自host主机的恶意入侵,dotcloud(主要是)利用kernelgrsecpatch解决的。
docker的特性,在docker的网站上提到了docker的典型场景:
automatingthepackaginganddeploymentofapplications(使应用的打包与部署自动化);
creationoflightweight,privatepaasenvironments(创建轻量、私密的paas环境);
automatedtestingandcontinuousintegration/deployment(实现自动化测试和持续的集成/部署);
deployingandscalingwebapps,databasesandbackendservices(部署与扩展webapp、数据库和后台服务)。
由于其基于lxc的轻量级虚拟化的特点,docker相比kvm之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的paas(platform-as-a-service,平台即服务),构建自动化测试和持续集成环境,以及一切可以横向扩展的应用,尤其是需要快速启停来应对峰谷的web应用。此外,docker能够只加载每个container变化的部分,这样资源占用小。
因此对于构建隔离的标准化的运行环境,轻量级的paas(如dokku),构建自动化测试和持续集成环境,以及一切可以横向扩展的应用,尤其是需要快速启停来应对峰谷的web应用。
构建标准化的运行环境,现有的方案大多是在一个baseos上运行一套puppet/chef,或者一个image文件,其缺点是前者需要baseos许多前提条件,后者几乎不可以修改,因为copyonwrite的文件格式在运行时rootfs是readonly的;并且后者文件体积大,环境管理和版本控制本身也是一个问题。
paas环境是不言而喻的,其设计之初和dotcloud的案例都是将其作为paas产品的环境基础。因为其标准化构建方法(buildfile)和良好的restapi,自动化测试和持续集成/部署能够很好的集成进来。
因为lxc轻量级的特点,其启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,能够在单机环境下与kvm之类的虚拟化方案相比能够更加快速和占用更少资源。
但是,伴随着docker技术的快速发展,现有技术中并没有将其与云机器人技术相结合,即云机器人目前为止无法享有docker技术所带来的高效性能。
技术实现要素:
基于此,有必要针对上述问题,提供一种docker主机、基于docker的云机器人系统及其构建方法,以使得云机器人可以实现高效可行的架构系统。
一种基于docker的云机器人系统构建方法,所述构建方法包括:
在开源的应用容器引擎docker主机上设置可数据连接并共享的docker容器,并构建成机器人控制系统ros容器集群;
将实体执行端的至少一机器人与所述ros容器集群相连接,以通过所述ros容器集群部分分担或全部分担所述机器人的存储和/或计算功能。
一种基于docker的云机器人系统,其采用任一上述的构建方法进行构建所得。
一种docker主机,其设置有可读存储介质和处理器,所述可读存储介质存储有预设指令,所述处理器在执行所述预设指令时,可实现任一上述的构建方法。
上述docker主机、基于docker的云机器人系统及其构建方法,通过在docker主机上设置可数据连接并共享的docker容器,并构建成ros容器集群,接着将实体执行端的至少一机器人与所述ros容器集群相连接,以通过所述ros容器集群部分分担或全部分担所述机器人的存储和/或计算功能。不难理解的是,通过此种方式,可以使得云机器人充分享有docker技术所带来的高效性能,提高云机器人的存储、计算和智能学习能力,使其发展速度符合现在高速智能化的技术发展时代。
附图说明
图1为一实施例中基于docker的云机器人系统构建方法的流程示意图;
图2为一实施例中基于docker的云机器人系统的系统框图;
图3为图2所示基于docker的云机器人系统中ros容器与机器人之间的网络拓扑简图;
图4为一实施例中docker主机的模块框图。
具体实施方式
请参阅图1,图1为一实施例中基于docker的云机器人系统构建方法的流程示意图。
在本实施例中,一种基于docker的云机器人系统构建方法,所述构建方法包括但不限于如下步骤。
s100,在开源的应用容器引擎docker主机上设置可数据连接并共享的docker容器,并构建成机器人控制系统ros容器集群。
在s100中,所述在开源的应用容器引擎docker主机上设置可数据连接并共享的docker容器,具体可以包括:在所述docker主机上设置虚拟网卡设备,并在所述docker主机上添加docker容器网络设备;在所述docker主机上通过网桥网卡的方式将docker容器网络设备桥接到所述虚拟网卡设备上。
所述在所述docker主机上设置虚拟网卡设备,包括:
删除虚拟网卡设备ip地址,添加桥接网桥br0,添加ip地址、掩码以及默认路由网关。
需要说明的是,所述在所述docker主机上添加docker容器网络设备,具体可以包括如下过程。
s20,启动docker主机服务使用none模。
s21,检查是否存在网桥设备,若不存在,自动创建linuxbridge网桥设备。值得注意的是,通过网络插件的方式检查是否存在网桥设备。
s22,为docker容器创建docker容器网络设备,用于为docker容器提供网卡并连接到网桥br0。
s23,使用dockerinspect命令查找docker容器在宿主机中的进程id,通过进程id将docker容器的网络命名空间链接到docker容器网络设备目录下,宿主机上通过ipnetns命令配置docker容器的网络。
进一步而言,在s100中,所述在开源的应用容器引擎docker主机上设置可数据连接并共享的docker容器,还包括:在所述docker主机上应用数据卷volume机制,使多个docker容器之间能够进行数据共享。
需要指出的是,所述在所述docker主机上应用数据卷volume机制,使多个docker容器之间能够进行数据共享,具体可以包括:利用数据卷dockervolume命令挂载docker容器的数据卷目录到docker主机本地目录;利用--volume-from标签使得多个docker容器之间能够共享数据卷volume。
s101,将实体执行端的至少一机器人与所述ros容器集群相连接,以通过所述ros容器集群部分分担或全部分担所述机器人的存储和/或计算功能。
在本实施例中,s101的所述将实体执行端的至少一机器人与所述ros容器集群相连接,以通过所述ros容器集群部分分担或全部分担所述机器人的存储和/或计算功能,具体可以包括如下过程。
s30,启动docker主机中的ros容器集群,创建供ros容器连接的网桥br0并启动网桥br0为up状态。
s31,将docker主机的eth0网卡桥接到网桥br0上,并把eth0的ip配置到网桥br0上。其中,需要特别说明的是,如果本实施例远程操作,则需要把以上过程放在一条命令中执行,避免上述远程操作导致网络中断所带来的影响。
s32,使用dockerinspect命令找到ros容器的进程pid号,并将ros容器的网络命名空间networknamespace使用软链接命令ln添加到网络设备目录下。
s33,创建用于连接网桥br0和ros容器的网卡设备,用于为ros容器创建网络设备vetha、vethb,将vetha连接到网桥br0上,将vethb放到ros容器的网络命名空间networknamespace中,重命名为eth0,并为其配置ip和默认路由。
s34,启动实体执行端的机器人集群,使之与ros容器集群一一相对应,每个ros容器进行同步配置文件的安装,其中,配置文件中包括bashrc文件中的ros_hostname和ros_master_uri的环境变量的配置。
目前,最好的技术为lujiawang等提出的基于twistedsocket异步通信的云机器人系统,最完整的平台是d.hunziker等提出的rapyuta云机器人平台。
基于twistedsocket异步通信的云机器人系统为本发明提供了云机器人与云端服务器的通信架构、模式以及云端资源优化分配方法以保障机器人实时完成服务任务。
rapyuta云机器人平台,rapyuta设计了较为完善的云机器人平台架构,不仅设计了通信协议,而且优化了机器人任务数据结构和基于语义的任务匹配。
不过,rapyuta云端是基于lxc(linux容器化)技术,而本发明所使用的docker在lxc的基础之上,docker提供了一系列更强的功能,赋予新的基于docker云机器人系统更多优点。结合上述实施例不难看出,本申请的基于docker云机器人系统所带来的有益效果包括但不限于如下几点。
(1)可移植性
本申请docker技术可以将应用和其依赖环境全部打包到一个单一对象中,并可以在任何安装有docker的机器上共享,执行效果相同。而lxc仅仅实现了进程沙盒化,并不能在不同机器上进行移植,因此本申请的ros容器具有可移植性。
(2)以应用为中心
本申请利用docker技术,在api、用户接口、设计原理及文档上面的部署更优化,而lxc仅仅关注容器作为一个轻量级的服务器。
(3)自动化构建
docker中支持dockerfile,将应用的所有依赖项、构建工具和包都以源码的形式写在dockerfile中,然后docker可以根据dockerfile构建镜像,而该镜像在任何机器上面运行的效果都一样。
(4)版本控制
docker对ros容器提供了类github的版本控制功能,支持版本回滚等功能。docker也实现了增量上传和下载的功能,节约了上传和下载时的带宽资源。
(5)组件重用
一个镜像可以作为基础镜像来创建更多特定的镜像,镜像之间支持多层重用。
(6)镜像共享
docker开发了一个dockerhub,里面包含了各种常用的镜像,可以将个人的镜像上传到dockerhub中。用户也可以在私有环境中搭建自己的docker仓库,用来满足镜像的内部共享。
(7)工具生态系统
docker定义了一个api,用于自动化和本地化容器的创建和部署。已经存在大量的集成了docker的工具集,例如deis,mesos,docker-ui,jenkins等等。
本申请的基于docker云机器人系统具备docker的上述优点,并进行大量实验,可行地开启了若干docker容器,实现了docker容器的跨主机通信、对机器人的控制、以及数据的共享,完成过tensorflow的cnn机器学习应用。
通过此种方式,本实施例可以使得云机器人充分享有docker技术所带来的高效性能,提高云机器人的存储、计算和智能学习能力,使其发展速度符合现在高速智能化的技术发展时代。
请接着参阅图2和图3,图2为一实施例中基于docker的云机器人系统的系统框图,图3为图2所示基于docker的云机器人系统中ros容器与机器人之间的网络拓扑简图。
需要说明的是,本实施例基于docker的云机器人系统,其可以采用本申请任一实施例所述的构建方法进行构建所得。
此外,本实施例的云机器人系统在docker主机端还可以包括机器学习容器群、本地数据库服务器和其他容器群,而机器学习容器群里面可以具体包括tenforflow容器群、caffe容器群等。容器群之间可以通过数据卷共享配置。
在ros容器集群中包括n个ros容器,其与线下的机器人集群中的实体机器人群的n个机器人相对应,其中,两者之间的网络配置方式如图3所示,具体可以通过路由器等进行无线连接。此外,与机器人对应设置的可以有各式各样的传感器群,比如kinect(体感设备)和激光等。
在具体的应用例中:
docker主机添加ros容器的网络设备的步骤如下:启动docker服务器服务使用none模式;通过网络插件检查是否存在网桥设备存在,若不存在,自动创建linuxbridge网桥设备;为ros容器创建vethpair设备(虚拟网络设备对),用于为ros容器提供网卡并连接到网桥br0;使用dockerinspect找到ros容器在宿主机中的进程id,然后通过进程id将ros容器的网络命名空间链接到网络设备目录下,宿主机上通过ipnetns命令配置容器的网络。
如图3所示,启动docker主机的ros容器,创建供ros容器连接的网桥br0,并启动网桥br0为up状态;将主机pc的eth0网卡桥接到网桥br0上,并同时把eth0的ip配置到网桥br0上。其中,如果是远程操作,则把以上操作放在一条命令中执行避免网络中断的影响。
接着,使用dockerinspect命令找到ros容器的进程pid号,并将ros容器的网络命名空间(networknamespace)使用软链接命令“ln”添加到网络设备目录下;创建用于连接网桥br0和ros容器的网卡设备,用于为ros容器创建的vethpair设备vetha和vethb,将vetha连接到br0网桥br0上,将vethb放到ros容器的网络命名空间中,重命名为eth0,并为其配置ip和默认路由。
最后,启动线下的机器人集群,每个ros容器对应的机器人进行同步配置文件的安装,具体而言,其配置文件主要包括bashrc文件中的ros_hostname和ros_master_uri的环境变量的配置。
请接着参阅图4,图4为一实施例中docker主机的模块框图,本实施例的docker主机设置有可读存储介质和处理器,所述可读存储介质存储有预设指令,所述处理器在执行所述预设指令时,可实现前面任一实施例所述的构建方法。
通过此种方式,本实施例可以使得云机器人充分享有docker技术所带来的高效性能,提高云机器人的存储、计算、智能学习能力,使其发展速度符合现在高速智能化的技术发展时代。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,其仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本申请的实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。