大家好,欢迎来到我们的主题演讲我们今天演讲的题目是使用Kubernetes云元生技术加速机型应用的开发由我和我的合作研发者胡春旭共同完成首先来做一个自我介绍我叫俱正,来自华为开源能力中心是一名开源软件共同师和开源部导师也比较早的开始关注和探索容器技术在2014年,我和几个朋友合作翻译了全球第一本关于Docker的技术书记我本人比较关注容器DAWAPS也正在关注容器、云元生技术和机型人技术的结合下面请胡春旭做自我介绍Hello 大家好,我是机神社区,谷月剧创始人也是ROSS机神开发实践证本书的作者胡春旭我个人一直专注于机神操继统以及人工智能相关技术的推广应用也认较于多个高校以及人工智能机型人相关的教育平台曾经得到过2019年ROSS全球十大影响力人物也得到过ROSS步道师的荣誉称号那接下来我们就一起来看一下机神的发展历史第一台机神正式应用是在1961年此后以斯大家族为首的工业机神厂家大大提高了工厂中的自动化生产效率解放到劳动力在很长一段时间里工业机神就会代表了机神战友概念那随着技术的进步跟需求的日益旺盛机神逐渐走出了工厂走向了我们的生活脱离了原有结构化的这样一个工作场景安全性的成了机神所有功能的前提由此诞生了协作机神的这样的概念主打人机鞋铜为一些人与机神必须要近距离接触场景提供解决方案比如说医疗、物流等等近十年来随着人工智能技术的筷子发展机神应用场景进一步扩展不再局限于原有的多自由度接壁的形态而是以伦世、祖世、人形、复合等等多种形态的展现各大互联网跟科学巨头也纷纷下场机神进入到了全新的局面实际今日除了对速度、精度、负责等有更高的要求之外智能化也逐渐成为了机神的重要一个指标在这样一个横跨众多学科包含多种多样软硬件的领域如何设计并且实现一款智能机型使得机神扩展者提出巨大的挑战为了解决这些问题一个重要的机神软件框架音韵而生那就是机神操系统2007年为了实现一款个人服务机型斯坦福大学的一群年轻人设计了一个可以联合所有人共同开发的软件框架取名为Robot Operating System 简称为ROSS在未来该位置公司的推动下2010年ROSS将所有元代码都开源了此后被越来越多的开发者所使用还产生了针对农业、工业、军事等多个领域的分支系统2014年之后ROSS逐渐稳定每两年会跟随物帮徒去发布一个五年的长期制板随着ROSS快速的普及之前设计支出的很多记录问题逐渐爆出来比如说稳定性、实际性、安全性等所以在2017年ROSS官方重新设计了一套更适合所有机型的ROSS框架 取名为ROSS II此后也一直在积极推进 已经发布了七个正式版目前ROSS已经广泛用于机型开发领域设计到服务机型、搬运机型、空中或水下机型美国NASA甚至基于ROSS开发了一款与航机型负责航空飞船外部天线给了一达的维修工作可以说ROSS已经成为了机型领域的普遍标准大大提高了机型领域的软件复用率图中是ROSS II的最新框架左侧使用于X86为核心的处理器平台右侧使用于MCU为核心的微控器平台ROSS II在架构中的重点是中间的Client Library跟Middleware Interface其中的Middleware Interface指的重点是通讯ROSS II选用了DDS作为其通讯的核心为了兼容多个厂家的DDS专门设计了通用接口ROSS Middleware Interface上层应用库都以此接口为平台来展开Client Library提供了多种语言可调用的机型基础功能库比如说数据传输、运动控制、日日管理、作为变换等等用户在使用ROSS II的过程中就可以把更多精力集中在最上层应用开发了通知到框架ROSS II的需要可以支持以下五个核心特性总之都是为了更高效的开发跟管理机型软件在传感器、人工智能、运计算、ROSS等众多技术的发展中机型作为一个重要的技术载体也得到了致的飞跃在传统机型技术的开发中我们更关注对机型运动学跟东学的控制以及传感器的信号的采集跟处理通过一系列的动作编程让机型重复完成工作随着底层硬件跟技术的成熟我们的关注点也逐渐上移更多研究围绕着智能机型中的关键技术展开比如利用多传感器融合的定位建图基于深度学习的物体识别等等相比动作编程正逐渐演化成任务级编程也就是说我们只要发送给机型它的任务标机型自主就可以完成任务的理解、分解跟执行除了自身机型也可以通过各种传感器跟外部环境产生互动随着越来越多智能机型应用场景的落地在行业应用当中也不断有新的挑战出现比如说第一点智能化需要大量数据的积累跟算法的优化目前机型智能化程度还普遍偏低比如让服务机型完成无需物体的分解如何理解跟判断每一个物体的位置并不简单机型跟机型之间尤其不同形态之间还很难自主的协论沟通第二点机型应用开发的效率偏低机型系统当中的软件众多虽然ROS社区里面有众多资源但对于商业产品来讲还需要更多成熟跟稳定的系统框架以及应用模块进一步的来减少重复造轮的过程第三点在互联网领域软件测试体系是比较成熟的但是在快速发展的机型领域软件测试就并不完善包括单元测试稳定性测试老化测试国家或者企业标准测试等等还需要更加系统化的测试标准跟平台第四点机型软件功能多版本迭代快一个好的全生命周期管理系统是非常必要的但是目前并没有太多专门针对机型软件的设计跟版本管理工具第五点大量机身应用功能落地对未来运萎也是巨大的挑战比如说工厂上千台物流机身应用的下载更新升级或者未来部署到马路上面上百万级别送驾驶汽车的运萎跟管理如此大规模化运用是遗忘机身领域从未面对过的场景基于这样些挑战我们就更加需要一个完整的针对机身系统的开发体系目前云计算云原生技术在飞速发展深刻的变革着软件的开发运萎的形态也对机身行业产生了新的启发现在就请有我的合作研扬者为大家来讲述我们对云原生技术在机身行业应用的一些思考好的谢谢春旭那接下来由我给大家分享我们在云原生和机身技术方面的一些思考我们知道软件的生命周期可以简单的划分为开发运萎以及运萎运萎云原生机器人主要是利用云原生的理念来使能机身的开发运萎和运萎等生命周期来提高机身应用的开发效率提高机身的智能化程度并降低成本具体说来云原生机器人可以通过如下途径来实现首先在开发阶段开发人员可以在云上基于标准ROS环境快速完成代码的开发和测试工作而不必自行搭建开发环境这样就解决了开发和部署环境碎片化的问题同时开发者也可以在云上完成AI模型的评估训练工作通过自动化的流水线把开发好的机器人应用发布到访真环境中进行验证在访真环境中可以指定模型库访真环境进行机器人应用的访真验证还可以利用云原生弹性声色的优势自动生成仿真环境并同时开启多个仿真作业聘行的完成仿真验证从而大幅度的提高仿真的效率当结束了应用的开发和仿真之后我们可以通过容器化的方式在云上一键将机型应用部署到机型实体上无缝对接各种硬件从而大大的减少了软件包依赖失配的工作在应用运行的过程之中我们可以无缝对接云上的AI服务使用云上的语音语意制止图谱等服务同时云上也可以对机型进行编队管理完成多机型的全局控制和调度在机型人应用的运行过程之中机型的运行日质运行状态电量等数据都可以通过IoT技术扇包的云上云上对数据进行分析预测性维护还可以对数据进行持续的学习和知识共享持续发掘数据的价值这样一来云原生技术就会给机型人带来很多优势首先是低成本通过云边端协通的架构云端提供高性能计算低成本存储等资源边测提供实时处理及算力而端测得通过算力携带将计算携带到边缘测或者云测减化了机型人的系统设计减轻了重量并降低了机型人的硬件成本其次是智能化基于知识共享持续学习等方式通过IoT技术打通边云协通的数据通道机型人数据可以快速接入云上为机型人提供了强大的AI能力实现数据分析共享 诊断以及远程运维再在机型人测实现推理应用第三是提要了开发效率基于云上的海量算力和存储空间云可以为机型人开发者提供开发访真部署一战士的开发环境有效地讲话了开发流程那么我们前面讲述了云原生机型人的理念下面我们来看一下目前有哪些技术可以用来支撑我们实现云原生机型人首先从云原生机型人参考架构上来看从下网上整个系统分为四层第一个是机型人的本体层本体可以分为物理机型人或者通过访真环境训练出来的访真机型人这一层的能力通过Ross接口统一暴露给上层也就是机型人的软件层机型人上会跑很多软件比如定位件图 路径规划还有辩认测AI的应用机型人可以直接通过DDS进行通信软件全方照Ross包管理规范进行打包机型人应用的容器化可以解决目前行业面临的许多问题通过容器化来大大减化应用的包依赖以及与硬件的配合工作解决新旧系统兼容性新旧系统迁移的难题此外容器化也可以很好的解决OTA需要各个机型人厂商重复造轮子的问题这里面可能会存在资源占用对云原生化可行性的问题约束目前大家都处在探索阶段容器化后的机型人应用在大规模部署时容器的管理、编排、运为等生命周期的管理工作如何来解决呢这时候就需要Kubernetes这个容器编排系统来解决Kubernetes基于Kubernetes实现针对边缘计算场景在跨边缘网络边缘资源占用等管理方面进行了优化可以很好的从云上集中管理边缘节点也就是机型人上的应用在应用层次需要将计算卸得到云上机型人经常工作在网络不好的环境下机型人边缘系统应用对实质性的要求比较高对边缘系统AI来说比较困难所以需要全分布式的P2P网络将端边缘之间的网络打通同时在弱网络条件下依然能表现出测这时候Zeno是一个比较合适的选择云上还可以为机型人提供强大的AI训练IoT数据分析诊断Gazbo等大规模访真验证、访证训练等能力还有边缘系统的能力比如在大场景中地图分区的问题目前机型人资源有限地图缓存到云上很有必要当机型人需要时再从云上拉取相应的地图接下来我们结合Crube Edge和ROS这两个流行的开源技术看一下基于Crube Edge实现的边缘协同机艺人架构首先Crube Edge本身利用Crube Natives对容器强大的调度和管理能力在云侧和边缘侧都针对边缘计算业务进行了真正性的优化在云侧除了常规的Crube Natives管理面还增加了Cloud Core用来与边缘侧的节点进行通信并调用Crube Natives API而边缘侧则是实现了Edge Core可以把Edge Core简单的理解为一个针对边缘场景优化的Crube Natives除了优化Edge Core也针对边缘侧的业务拓展了能力例如增加了Device Twin用于设备状态在云端和边缘侧的同步以及Event Bus用来支持MQTT等额外的协议对于ROS的机艺人场景我们有一些新的考量例如在云侧我们可以利用海量的云资源灵活快速的调度计算存储AI等能力进行云上的机艺人访真AI模型训练以及定位建图而在边缘侧的机艺人上则可以借助高性能的签入式设备将机艺人应用全部容器化来解决令人头疼的ROS软件环境依赖的问题借助Crube Edge可以让Crube Natives管理面方便的对边缘侧的机艺人应用进行调度同时这样的设计架构也带来了一些新的挑战和需要解决的技术问题例如在ROS2中增加了针对计算力角落的签入式设备的支持专门设计了MicroROS框架使用专门的通信协议Micro XRCE DDS我们可以利用Crube Edge的EventBus接口对这样特定的协议进行支持此外机艺人上还有很多传感器ROS只解决了这些传感器数据传输的统一规范但是这些传感器的连接方式各有不同有的是通过硬件卡槽插入有的是USB设备还有的是网线至于要求我们在进行容器化时要确保容器内的应用可以有效的访问这些资源这就需要我们在设备挂载网络通信的方面做出一些额外的配置总体上这样做的好处就是能够利用运源声技术使用强大的运计算增强机艺人的能力快速灵活的对机艺人应用进行部署管理和运维来解决我们之前提到的各种问题下面我们使用一个实际案例来展示如何使用Crube Edge部署一个机艺人应用在这个势力中我们先在云上部署一套常规的Cubernetes集循包括管理面和数据面然后在云端部署Crube Edge的Cloud Core再在机艺人上部署Edge Core并耐用远端的Cloud Core这样我们就有了一套边云协同的机艺人环境当机艺人作为一个边云侧的工作节点耐入Cubernetes集群后我们将机艺人注册为Crube Edge的Device包括Device Model和Device Instance这两种Cubernetes CRD然后我们利用Crube CTL将机艺人的基础控制应用和消息发送应用部署到机艺人上实现对机艺人的基本控制机艺人的基础控制应用要访用机艺人的各种硬件和传感器而消息发布应用则是告诉前者我需要怎么控制机艺人在这个案例里面我们是通过Ross的消息机制向基础控制应用发送一个斜杠CMD Velocity的一个topic来实现对机艺人的简单控制在这个势力里面我们使用TurboBot 3机艺人这是一款在Ross社区非常流行的机艺人配置了一个数名派开发版具备一定的计算能力可以运行Debian Linux系统以及容器在具体的部署过程中我们还要解决一些具体的在具体的部署过程中我们还要解决一些具体的技术问题在Ross2的技术架构中使用DDS通信标准DDS使用RDPS协议也就是实时的POPSub协议这个协议为了高效的发现值往内的设备需要UDP Multicast的多波技术在常用的Cubernetes网络插件中如Catico暂时是无法支持UDP多波的目前可以用Mountus或者VivNetwork来作为网络插件其中Mountus需要做一些额外的配置而VivNetwork的直接支持UDP多波在机器人测我们也需要确保容器应用能够正常访问机器人的设备和传感器在TurboBot3上有一个专用的OpenCR硬件控制器以及一个2D雷达这些设备通过USB或者串口连接到树莓派上值得要求我们在部署应用时针对需要访问的设备进行挂载接下来我们通过一段录制好的视频来展示这个demo下面我们来看一下demo首先我们在云上已经部署好了一个基础的CrubNetworks集群ZENI网络插件使用了Viv现在我们有一个Master节点和两个Working节点云上的Cloud Core也已经完成了部署接下来我们看一下边缘色的环境我们已经下载好KEADM程序在部署之前我们要修改一下树莓派的启动参数开启CGroup的支持否则EdgeCore将无法启动在这里需要注意首先我们要打开bootfirmwareconfig.txt这个文件在里面找到cmdline这个参数我们看到该参数的值是nobtcmd.txt因此我们要打开同目录下的这个文件打开这个文件之后我们在第一行的最后加入这两个参数cgroupenable等于memorycgroupmemory等于1这里需要注意这两个参数必须添加在第一行不能换行否则启动之后参数无效OK,配置完参数后我们就可以重启树莓派了接下来我们还要更新一下APT园因为CrewBage在初始化时会尝试安装一些软件依赖如果是全新的环境或者APT园长期不更新可能会导致这些依赖在安装的时候失败好的,APT园已经更新完毕我们在云上使用KEADM来获取token然后在边缘测使用刚生成的token加入集群可以看到KEADM在尝试安装Mosquite等软件这也是我们刚才要更新APT园的原因好,KEADM已经把边缘测的环境配置好了我们反回云上的环境可以看到边缘测的节点已经纳入到集群之中并且配置了一些默认的角色Agent和Edge在Version这一列可以看到不同于其他节点的标准CrewBage边缘测的节点是CrewBage和版本号说明,边缘测执行的是EdgeCore而不是标准的CrewBage下面,我们还要在集群人的数枚派上配置OpenCR硬件这个是驱动集群人所必须的我们首先配置好OpenCR所需的环境辨量包括设备的路径以及端口然后使用官方的配置脚本进行配置即可现在我们给边缘测的节点配置一个标签稍后用于部署应用时的节点清合性下面,我们来注册CrewBage的Device包括DeviceModel和DeviceInstanceDeviceModel可以认为是边缘测设备的定义而DeviceInstance都是边缘设备的一个具体实力两者都是CrewBanetedCRD我们用CrewCityLApply命令来创建这两个自定义资源查看Device可以看到我们注册的TurtleBot3-1这个实力已经创建好了下面,我们来看第一个要部署的应用也就是机器人的基础控制程序这里我们看到需要把DevTTYACM0这个设备挂载让容器应用可以访问OpenCR硬件控制器我们再来看一下Launcher程序的DockerFile其实非常简单就是在基础Ross经向的基础上安装TB3相关的RossBall然后在启动的时候通过Ross2的Launch机制把基础控制所需要的所有资源都调度起来现在我们部署Launch应用OK,我们已经把Launch调度起来了下面我们再看一下Tocker这个应用Tocker相对简单只需要向Launch发送RossTopic即可因此我们只需要一个基础Ross经向以及Tocker的代码就可以我们来看一下Tocker的代码这个代码的核心是启动了一个司定义的RossPublisherPublisher在初始化时设定了一个计时器和相应的回调函数每隔0.5秒执行一次在回调函数中判断基础器前44创建一个Twist给定一个向前的线速度0.04之后线速度为0因此最终的表现就是机器人向前移动一下段时间然后停止下面我们来部署一下TockerOK,可以看到Tocker已经启动我们来跟踪一下日治发现Tocker每隔0.5秒就发送一次速度之后速度降为0可以看到机器人也随之停下来了OK,我们完成了简单demo展示了如何配置云和变云色的Cube Edge变云色机器人配置了一些注意事项并且使用Cubernetes部署了两个简单的应用实现了机器人的基础控制在具体的场景中我们还可以部署导航定位建图等复杂应用这里我们就不一一展示了另外我们所有对云原生技术在机器人上的探索都会发到Cube Edge的Robotics Seag中也欢迎大家加入这个兴趣小组一起探讨云原生技术在机器人领域中的应用谢谢大家