嵌入式开发 MCU

From: http://www.infoq.com/cn/articles/intelligent-embedded-os-Internet-of-things-and-robotsnode

嵌入式开发是一个低调的领域。相比Web开发和企业级开发,嵌入式开发这一领域彷佛不多在互联网上发出声音。随着智能设备的兴起,智能手环、手表、眼镜、灯泡等产品成为互联网企业的下一个目标,而物联网这一律念再次复苏,嵌入式开发开始引发不少互联网工程师的关注。程序员

那么,如今的嵌入式开发是怎样的?相比十年前、二十年前有什么发展?“物联网”这一大概念下,应用开发者应从何切入?本次访谈,咱们邀请到一位不那么低调的嵌入式开发者,来跟咱们分享他对这些问题的见解。算法

嘉宾简介

罗未(Noel),豌豆机器小组(WRTnode machine team)发起人,致力于整合机械设计、嵌入式Linux开发、计算机视觉、机器学习方向,以开源的理念制造智能交互机器,但愿为开源社区和大众市场带来 各类伴随人类却又独立于人类的机器。我的出身于行业软件领域,3年前转入硬件方向,经历过智能家居和路由器行业,现但愿作一些让将来更近的事情。微信

罗未2014年全球架构师峰会(ArchSummit)的联席主席之一。有关他的更多介绍可参考技术人攻略对他的访谈:开放制造的机器之心机器学习

如下内容根据InfoQ中文站编辑跟罗未的沟通整理而成。分布式

嵌入式操做系统现状

目前嵌入式设备主要分为两大类:MCU设备和带MMU的CPU设备。工具

MCU(Micro Computing Unit),也就是咱们常说的单片机,其特色是Micro:主频大概在几十MHz,内存在几KB,Flash非易失存储也是几十KB,资源小,价格便宜。 单片机这个领域从80年代、90年代开始就一直有人玩,像是玩具、闹钟、计算器、电子表、工业控制等不少领域都有用到,应用普遍。单片机程序的特色是逻辑 简单、实时性强没有等待,不像Linux那样会存在资源被其余程序占用的状况。

早期单片机程序通常都是裸写C代码的方式,用一个大循环把全部事情搞定,全部的底层功能——如资源分配、进程调度、DNS查询、域名转换等,都要手写实现。前几年开始有一些基于MCU的操做系统,好比μC/OSRT-Thread等,单片机有了操做系统就至关于资源分配、进程调度等工做不用手写了,能够交给系统去管理,程序员不用去管任务间协调的问题。这能够看做是第二代单片机开发环境。

近几年有一些新的单片机操做系统,好比Contiki,这套系统的特色是把互联网特征做为基础的构建。这套系统很牛,用10KB之内的内核就提供了对HTTP、TCP/IP等协议的支持,让单片机上来就能够联网,让单片机开发者绕过了每次都要裸写这些基本功能的痛苦。

如今的单片机有些很神奇的应用,好比图像识别、语音识别,能够作到在视频上识别色块的程度。可是,单片机若是又要作图像识别又要上网,就会很是吃力,毕竟资源十分有限,须要有很高的开发能力把它们协调好,这种状况下就不能用操做系统了。

以上是单片机的状况。另一种是更大一些的,就是自带MMU(Memory Management Unit,内存管理单元)的设备。这种设备的主频通常在几百MHz以上,内存在几十MB以上,早些年的智能手机就差很少是这个配置,跟十几年前的PC机配 置差很少,因此安装运行Linux系统是没有问题的。这类设备其实也作了十多年了,如今用的比较多的架构有两个:ARM和MIPS,都是商业的,如今新的 硬件基本上都是这两种架构。

有不少发行版都专门为ARM作过安装包,好比流行的Ubuntu和Debian。不管是ARM仍是MIPS,由于有了系统,开发起来要比在单片机上 舒服多了,但也仍然有一个很麻烦的地方,那就是要作交叉编译。开发者通常都是在本身电脑上——大部分是x86架构——完成开发的,所以要用x86上的 ARM编译器交叉编译出ARM的二进制文件,用MIPS编译器交叉编译出MIPS的二进制文件,才能在设备上运行,这为调试带来了不小的麻烦。为何咱们 这个圈子门槛比较高,就是由于通常都是掌握了交叉编译的开发者才会进来玩。不过好在有一个叫作GDB(GNU Debugger)的工具能够作远程调试,减小一些麻烦。

物联网终端须要完成的工做

如今在有一种M2M(Machine to Machine)的思路,在终端用能够联网的单片机作最简单的事情,好比开关一个灯泡;终端直接跟家庭网络的网关(路由器)链接,或直接跟公网的云端链接,由云端作更复杂的计算和处理。

这种思路能够解决一部分问题,可是我以为还不够。终端须要作更多的事情。

我认为终端须要是智能的,它们须要达到“机器人”的层面。如今咱们说的机器人跟之前你们理解的那种人型机器人不一样,如今所说的机器人是一种复杂控制系统,是软件,能够跑在各类各样不一样姿态的设备上。机器人须要完成三项工做:

  1. 感知:从传感器采集数据
  2. 交互:网络传输(如HTTP、TCP/IP)和物理控制
  3. 智能:如图像识别、语音语义的理解、智能规划,须要抽象成智能的算法

如今的机器还处于太过依附于人类的状态,须要人告诉他要作什么。我以为将来的机器应该本身知道要作什么事情。如今的人工智能、知识图谱的创建就是奔 着这个方向去的,好比Google工程师训练机器,让机器在Youtube的视频里认识猫,这个涉及到一个很大的知识库和训练过程,须要云端的协助。但最 终训练出来以后,其实猫的图像识别特征数据是很小的,能够放在终端的机器人里,他们本身就会认识猫了。这就好像婴儿的学习过程同样。

可是跟婴儿不一样的是,机器天生是执行器。因此结合认知能力,让机器认识猫了以后,加上执行,是否是可让机器自动的去抓猫或者逗猫玩?机器认识电梯 以后,是否是可以本身去按电梯?机器认识无线充电站后,是否是可以本身跑到无线充电站上面蹲着充电?随着知识图谱的建模完善,事物和事物之间的联系可以被 机器理解,机器人会变得愈来愈强大,愈来愈重要。

其实如今语音语义的知识图谱建设已经相对完善了,机器已经可以理解一些上下文之间的关系,好比你说到吃苹果,他就知道你说的是什么意思。咱们如今在语音语义+网络这块直接使用了讯飞的服务,咱们把工具链给他,他们帮咱们生成了一个二进制包给咱们,就很方便了。

技术上的挑战

上述这些工做当中,有些单片机能够完成的很好,有些不能。单片机能够采集一些简单的数据如位置、高度、重力加速度、四轴姿态、温度、湿度等,进来都 是数字,只须要作AD转换。比较复杂的数据如声音、图像,单片机处理起来就比较困难,通常咱们经过Linux的USB驱动来跑,须要MMU的芯片。可是单 片机有一个特征是Linux没法知足的,就是实时性。不少物理控制对实时性的要求很高,好比四轴飞机的控制,严格要求50Hz的控制频率,即一秒进行50 次计算来决定下一帧的动做,若是稍微有点资源抢占形成延迟,飞机就掉下来了。

为了同时达成实时计算+复杂性这两个目的,咱们只好把两个芯片加在一块儿。可是两个芯片在一块儿,就成了一个分布式系统,有芯片级的通讯问题,同时开发 者还须要写两套代码,又要写单片机的交叉编译,又要作Linux开发,各类调试和测试的困难。Arduino如今已经有一套挺完善的思路:首先它的传感 器、控制器的库都很全,而后它作了一个ArduinoYUN的板子,就是一个OpenWRT(一个超级精简的Linux发行版)+单片机的双芯片板子,而后它有一个万用固件——一个支持firmata协议的 库,算是一个翻译,只要符合这个协议就能够从Linux控制Arduino,算是一种思路。可是我以为这个思路有两个问题:第一,ArduinoYUN的 思路是以MCU开发为主,把OpenWRT当作单片机的透传模块,为单片机提供网络服务。放着强大的芯片在一边,用小小的单片机跑主程序,感受未免太浪 费。第二,firmata协议虽然简化了控制,可是又影响了实时性,在实时性要求较高的时候(好比四轴飞机),这种思路又没法知足需求了。

如今一些芯片公司已经开始意识到这个问题,开始考虑如何把二者封装成一个芯片,来知足实时性+复杂性的结合。我认为封装后应该要以Linux为主要的开发平台和软件运行平台,以MCU做为辅助以知足实时性需求。

因此,实时性+复杂性的结合是第一个挑战。第二个挑战是复杂运算的加速,好比H.264/H.265的视频压缩、图像识别的硬件加速,要不要放在机 器人的芯片里?我以为是须要的,可是不须要手机那么强的GPU,有一个视频压缩的芯片放在里面就能够。终端若是能作视频压缩,多半也能作图像识别,那么终 端机器人能够作的事情就更多。

第三个挑战是针对Linux内核自己的,就是在这种级别的计算平台上如何进行更合理的裁剪、作更合理的算法策略、执行策略。OpenWRT的开发版 如今咱们作到64MB的运行时内存占用,而通常的路由器芯片都是16MB、32MB。其实内存的空间占用倒不是大问题,由于如今内存很便宜,就算用到 128MB、256MB也没什么,可是关键在于时间片的占用。所谓省资源其实就是两个意思:少占地儿+少占时间,这样才能低延迟。因此Linux内核如何 解决这个问题,也是一个比较大的挑战。

这三个点多是将来几年这个产业不少人的努力方向。

总结

相比十年前裸写C代码的场景,如今咱们有图形化的界面,有RESTful API,嵌入式开发的难度能够说已经大大下降了。虽然有上面提到的基础设施与开发工具的挑战,但我认为用不了几年时间也都能解决。网络链接如今已经基本不 是问题,3G、4G、Wifi已经足以支撑大部分智能设备的应用场景。

可是,仅仅有这些,到“智能的物联网”有很大的距离。机器须要学习更多、创建更多的知识图谱,才能变得更增强大。如今云端尚未太多现成可用的知识 图谱,但咱们仍然能够先从简单的事情作起,好比让机器人扫地,让机器人把空瓶子扔进垃圾桶,一点一点的改进它们。也但愿有更多的开发者可以加入这一进程, 让咱们的世界变得更加完整。

相关资料

ArchSummit全球架构师峰会即将于7月18-19日在深圳举行,这次会议重点解析九个当前最受关注的领域,包括:SNS、 移动互联网、 金融、 大数据、 智能硬件、 游戏、 云计算、自动化运维、电商等专题。目前正在火热报名中,感兴趣的读者能够访问网站主页了解更多信息。