开放传感器数据包,在安卓应用程序层集成传感器框架
Waylon Brunette, Rita Sodt, Rohit Chaudhri, Mayank Goel,
Michael Falcone, Jaylen VanOrden, Gaetano Borriello
华盛顿大学 计算机科学与工程系 西雅图 博克斯 WA 98195-2350
摘要
智能手机现在可以连接到各种外部传感器覆盖到有线和无线频道,然而,当一个单一的应用程序需要在不同的通信信道和数据格式与多传感器集成时,确保设备适当的交互有时确是沉重的负担。本文提出了一种框架来简化各种外部传感器和消费者的Android设备之间的接口。该框架简化了抽象的应用程序和驱动程序的开发,使用户应用,传感器框架和设备驱动程序三者的责任独立开。这些抽象方便的模块化框架,允许开发人员集中精力编写最小化的特定的传感器代码,实现一个可重复使用的传感器驱动程序的生态系统。本文探讨了三种可供选择的应用程序级驱动程序的框架,比较它们之间性能的权衡行,设备便携性,简单和易于部署性。我们权衡这四种传感器应用的目的是为了支持我们在发展中国家的工作。强调在我们的应用程序级驱动程序框架使用一系列传感器使用模式在不同的数据类型、配置方法、沟通渠道和采样率来证明该框架的有效性。
分类和主题描述
软件体系结构
整体框架
设计,实验,性能
关键词
移动计算,驱动,智能手机,信息和通信技术发展,传感,蓝牙,USB,数据包开放
1简介
智能手机作为计算和通信平台其市场占有率率在最近几年已经显著增加。在发展中国家,基本功能机已经逐步由相对廉价的智能手机所取代。例如,在肯尼亚,基于Android的华为Ideos手机销售价约80美元[27]。在信息和通信技术发展社区的研究人员和从业人员正越来越多地利用智能手机在资源匮乏的环境中提高信息化管理。我们的工作是出于从传统的个人电脑和独立的传感设备的移动设备平台的转变(例如,智能手机,平板电脑)加上云服务来创建移动信息系统。这是一个前所未有的机会将收集到的数据直接整合到消费者的移动设备和外部传感器设备中。然而,不同于传统的个人计算设备,新的消费设备是由服务供应商或制造锁定,大多数用户不具有管理权限,技术能力,或者修改或定制操作系统的组织能力。因此,依靠传统的内核设备驱动框架和外部传感器与消费者的智能手机整合是不切实际的。我们的项目通过软件包的方法使非技术用户可以在一个上锁的运行的Android操作系统的移动设备访问外部传感器。该框架假定消费者装置“锁定”和最终用户只需要从标准的应用市场,如Google play(谷歌的Android应用商店)来安装应用程序。
信息和通信技术促进发展团体已经开始调查利用基于手机的遥感进行现场和远程监控[3,5,9]。即使捕捉传感器数据直接消除了许多传统的数据采集技术导致的错误,如手工填写表格等,要不是高水平的专业技术推动了移动传感应用的发展,移动传感器也不会有如此广泛的应用。技术挑战包括:管理不同的物理通信信道的细节,处理传感器特定的数据,开发一个用户界面和应用程序的控制逻辑设计。不幸的是,这样级别的专业知识水平,通常是在发展中地区,甚至在发达国家确是在资源有限的公司组织(如非营利组织和社会团体)开展项目。因为这些并发症,我们推测,包括移动数据采集传感器出现的一些技术障碍,如果减少,将使更多的应用通过数据采集传感器在不同的领域得到利用。开放数据工具包(ODK)传感器框架旨在通过智能手机应用程序使用外部传感器降低这些障碍,更确切的说,这些工作包括以下四点:
1. 创建一个模块化的框架,通过抽象的管理发现添加新的传感器、沟通渠道和数据缓冲区。集成新的传感器应只增加它需要的数据处理和配置原语。
2. 提供应用程序和传感器特定代码之间的高程度的隔离。应用程序应该继续正常工作,即使传感器特定的代码有错误或传感器并没有工作。
3. 了解一些制造方法的权衡,尤其是模块化和性能(的权衡)。
4. 促进新传感器的集成到应用程序,使其能够从应用市场下载新的传感器功能而不需要修改操作系统配置。
该ODK传感器框架提供了一个单一的为内置和外置传感器使用的传感接口。有一个单一的接口适用于训练有素的技术工人,因为它隐藏了大量的开发遥感应用程序所涉及的细节。
该框架还提供了一个简单的,极富观赏性,和灵活的抽象化概念,在Android用户级的设备驱动程序得到开发和部署。当一个设备驱动程序的抽象化是一个标准的概念,该框架包括特性使开发设备驱动程序得到更容易的处理(如传感器状态、连接、缓冲数据线程),只需要驱动程序开发人员实现传感器的特定命令和数据处理。为了评估和演示框架的有效性,我们收集了四个不同类型应用程序的传感器的数据,这些应用程序中的三事先被部署和移植在发展中地区导致代码显著简化。在我们之前的工作中,曾讨论这些应用程序以及它们如何在细节上利用ODK传感器框架[4]。在这里,我们使用的应用程序来展示ODK传感器框架的好处和比较它们的最低性能要求的框架的吞吐量。本文探讨了三种框架的架构,利用不同的跨进程通信机制制造的所产生的影响。通过比较3种不同框架版本,通信信道和应用的峰值吞吐量,我们发现框架架构吞吐量并不是限制传感系统的主要因素。因此,我们的设计的选择是偏向使它更容易通过集中编程和部署减少障碍,而不是在相对小的性能差异上创建移动传感应用。2. ODK和ODK传感器
开放数据包(ODK)[11]是一个成功的套件,利用智能手机丰富的互动和高性能的计算能力,以提高信息的收集,分发和决策。ODK侧重于部署上下文中的常规计算解决方案(即由发达国家的关注告知)由于制约因素,如经济承受能力,基础设施,体制能力和技术支持等往往是不恰当的。ODK传感器通过创建一个框架来缓解移动消费电子设备的感应功能来扩展ODK。ODK的传感器框架通过收集不同类型的数据支持一系列的外部传感器,而与智能手机的互动速度能与生成数据速率相一致。在Android传感设备上它通过整合这两个内置和外部传感器组合成一个单一的接口。虽然这种设计通过一个统一的接口最大化实现传感的有效性,虽然这个设计可以通过一个统一的界面实现各种传感器效用最大化,这些外部传感器需要更多的接口使其易于开发和编程,一般来说,尤其关注是否合适我们的目标环境。构建基于传感器的移动应用程序的框架降低了复杂性,提供了抽象的封装沟通渠为了描述用户——从传感器通信应用程序而获得需要的功能。该框架有三个组别: 应用程序用户、 应用程序开发人员和传感器驱动程序开发人员。一个典型的应用程序用户至少被认为是最精通这三个技术,且被认为在Android设备上可以使用这些应用程序。应用程序开发人员预计将知道如何创建新的Android应用程序(设计用户界面,并实现应用程序域逻辑),但并不期望在细节上知道传感器控制的具体情况以及在传感器之间传递和通信的数据。传感器驱动程序开发人员是唯一的一个期望通过特定的传感器配置和数据的封装了解底层协议的人,但不期望处理通信信道的设定或多路复用。应用程序从逻辑框架上划分导致与开发商的角色完全分离,并允许应用程序开发人员专注于更高级别的应用程序,而驱动程序开发人员则专注于创建传感器特定的驱动。
ODK的传感器项目的目标是把尽可能多的责任转移到框架开发商从而简化创建传感器应用,同时保持高级别的灵活性去集成新的传感器类型。通过创建一个框架隔离这三个开发角色,通过隔离可以轻松地创建遥感应用使适当的技术技能水平的人能独立完成开发任务。为了鼓励新的驱动程序开发, 框架承担尽可能多的责任,尽可能为常见的许多传感器,包括连接状态和线程管理等方面。另外,分解系统进入模块能够更有效地检测代码的重用,从而提高整个系统的可靠性。ICTD部署设置特别重要(因为一旦系统被部署在远程位置中要更新它的字段在考虑成本,时间和复杂性方面变得极其困难)。要使一个框架成功地实现外部传感器的生态系统必须是:
1易于创建的传感器驱动程序,即,实现最小化的知识和代码的量创建驱动程序。
2易于在各种各样的应用中集成/重复使用各种外部传感器。
3易于部署的框架和设备驱动程序,从传感基础设施的技术细节上屏蔽最终用户,
4易于升级的框架和传感器驱动
5由于传感器驱动程序开发人员可能不是专业的Android开发者,很难使用驱动代码损坏框架。
6易于使用户通过简化的用户接口发现可用的传感器,
7易于管理的通信通道细节,如断开连接的妥善处理。
ODK传感器试图通过创建移动传感应用的可复用构件的开发环境满足所有上述要求。
3.相关工作
随着智能手机的普及和应用程序商店的增加导致移动应用的品种和数量的增多,尽管这样的增殖,但仍然只有有限数量的应用程序利用外部传感器设备。这部分是由于资源的限制导致在推行智能手机和外部传感器之间的应用程序收到编程挑战。这导致了两个主要的研究领域:(1)减少编程的障碍[8,21]和(2)使用更高效的移动传感器[22,23,26,29]。在这两个领域,一些相关工作侧重于设备上的传感器,而其他工作旨在扩大通信到没有内置在手机本身的传感器。在设备驱动程序的设计上一个重要的研究机构就是探讨权衡其可靠性,使用是否方便或者是性能用户级和内核级驱动或者是两者的组合。
用户级别的驱动程序 (或应用程序级别) 的概念并不是全新的 ;L3 系统成立于 1988 年 [20]。莱斯利等人[19] 使用户级别的设备驱动程序内置到 Linux 中并没有导致显著的性能退化,即使对于高带宽设备,例如以太网,通过框架结构实现数据共享,分批工作,并优化了事件通知系统。微型驱动[10]开发了一个程序来分割现有的驱动程序,使其分为内核层和用户层,并分离关键路径的内核代码(例如,数据处理,I/O),和讲剩余的驱动通过代码的形式编进用户模式进程中。同样的,无咖啡因的驱动程序[24]在用户模式下将Linux内核驱动程序转换为Java运行程序。这些系统尽管没有采用原生内核驱动程序,但依旧表现出良好的性能。虽然ODK传感器受这些项目的影响,它着重于创建用户级驱动程序锁定运行Android系统的消费电子设备。因此,不同的这些项目,我们不改变通信链路的前提下连接内核操作系统和用户级驱动程序。不同的使,ODK传感器作为用户级线程的通讯管理在运行,并使用机安卓的API来处理和发送从传感器接收到的数据,然后转发到字节到相应的设备驱动程序。
对用户级驱动程序的迁移部分是出于想提高系统故障驱动程序错误的兼容性和可靠性。马弗里克[25],一个基于web的系统,通过使用设备的驱动程序和框架,为运行用户级Web应用程序支持多USB设备的交互提供了安全保证。另外,渗碳剂[16]在检测和兼容中断的相关错误中管理设备故障提高了可靠性。像马弗里克,ODK传感器利用了用户级驱动程序为其提供的可靠性和安全性;但是,ODK传感器为每一个单独的应用程序运行独立的驱动器,这样就导致每个驱动器被孤立在自己的虚拟机中。其他类似ODK传感器框架已经被提出,但他们寻求与内置的传感器接口为主。zhuang等人[ 29 ]介绍了一种自适应定位框架,改进了基于内置的GPS传感器的应用程序请求从而提高了能源效率。它旨在提高系统的能源效率,它不同于我们降低障碍的目标规划。 Dandelion [ 21 ]支持通过Maemo Linux在智能手机和无线人体传感器构建分布式应用程序,从特定的硬件代码中屏蔽应用程序开发者。Dandelion [ 21 ]设想这样一个场景,传感器厂商启用运行时无关的抽象编程平台称为“senselet”, 开发人员写的应用程序在传感器本身运行,该ODK传感器框架还屏蔽了特定的传感器硬件应用开发者。然而,该框架提供的抽象层次上的智能手机执行传感器驱动和杠杆框架的通信信道的抽象和传感器状态管理。在Android设备上传感器数据的初步处理发生在传感器驱动程序(去除的应用程序开发者的范围这一问题)。而Dandelion需要处理传感器“senselet” 的
数据必须由应用程序开发者写在有限的传感器环境中。此外,ODK传感器不需要传感器的厂商包括一个运行时的框架通过通信信道支持任何标准的传感器。Reflex [22]项目 (Dandelion分叉) 是一套运行和编译技术,掩盖异构分布式的系统的性质,可降低功率损耗,到低功耗的协处理器的数据处理。虽然反射的重点是能源效率和移动传感应用中的性能,ODK传感器重点是降低应用程序开发人员的编程的障碍,并支持不同的数据和应用程序类型。在ODK传感器驱动程序执行的框架内并不是一个单独的协处理器。LittleRock[23]和Turducken[26] 作为Reflex 的一部分有相似的目标,和现在其他的架构,将在专用的低功耗处理器处理连续的传感器数据。Gadgeteer[28]是一个快速原型平台,通过使用模块化的硬件组件和在C#面向对象编程简化了开发所具有嵌入式硬件设备。虽然Gadgeteer和ODK传感器都专注于让用户更容易与不同的外部传感器集成,Gadgeteer通过简化实现这一小五金件多么不同互相交谈,而ODK传感器的目的是让移动应用开发者更容易利用各种应用传感器无需他们对特定的传感器的编程知识。
IOIO[15]是一个被设计通过USB连接与Android手连接的开发板。它抽象上地沟通了智能手机的外部硬件和软件,从而使Android的应用程序附加到IOIO板上直接控制硬件。这和ODK传感器不同,因为IOIO 在IOIO板的I / O引脚的电平上提供了一种抽象的Android应用程序概念。
4.框架
ODK的传感器框架通过创建一个通用抽象点,其能够通过一个统一的接口来访问所有的传感器,简化了基于传感器的移动应用程序的开发。通信介质的暴露,使所有的外部传感器以及Android的内置传感器通过一个公共接口降低了复杂性,该接口封装了通信和用户应用程序在特定传感器的驱动程序代码,使应用程序开发人员理解Android设备和外部传感器之间的底层通信细节。从用户的角度对ODK传感器的整体架构观察由三个应用程序组成:用户应用程序, ODK传感器框架应用程序和传感器驱动程序。在本文中提到的Android应用(软件从市场下载)被称为“应用”,而单词“应用程序”通常被认为是使用/部署的实例。ODK传感器框架应用程序负责管理低水平的、特定的通信信道并抽象化的隔离传感器驱动代码。
5.结论
该平台从传统PC向配有云服务的移动设备转变,从而创建一个需求和机会来整合这些设备(如智能手机,平板电脑)与外部传感器,并在新的设置上部署这些应用。为了解决这个问题,我们创建了一个应用级驱动器框架,使底层传感器驱动的高级别应用程序代码逻辑地分开,并方便利用这些特定的传感器代码。ODK传感器的焦点是整合从各种通过有线和无线通信信道的传感器数据。它通过创建一个单一的接口控制几乎任何种类的传感器(外部和内置),简化了应用程序的开发,并减少必要访问的传感器的代码量。此外,传感器框架自动复用通信信道允许不同类型的传感器同时使用同一个应用程序。例如,应用程序可以轻松地使用两个USB接口和三个蓝牙传感器同时记录发生的几种现象。,无论应用的数据类型,数据采集的速度和规模,传感器的配置要求,或通信信道如何,ODK的传感器框架的设计都能灵活地满足任何应用的需要。
测试三个框架后,很明显它们的变现并不是选择最终设计的最重要因素,因为大多数传感器应用样本数据率明显低于框架的最大吞吐量。性能分析表明,该系统的瓶颈是蓝牙吞吐量和USB的通信信道数,而不是框架的吞吐量。由于三个框架表现相当,在其他因素尚未被测试前并不能决定哪一个是最佳的框架。V2框架在编程方便性,易于部署和性能方面提供了最好的折衷方案。分隔开的驱动程序的设计使得最终用户更容易动态地添加新的驱动程序,这使V2比V3表现出更好的性能。性能可能会在未来兼容使用高带宽的传感器应用如医疗设备外接摄像头上变得越来越重要。
这项工作作为更大的数据工具开放项目的一部分,旨在通过适当的技术开发一套模块化的工具来充分利用人力资源。ODK的优势之一是通过收集各种各样的数据类型(如位置、图像、音频、视频和条形码等难以记录在纸张上的的内容)建立信息系统。通过添加外部传感组件降低门槛,我们希望扩大包括更丰富的一组数据类型采集更多的应用数据,ODK传感器通过一个单一接口增加输入的数据类型可以通过简化访问敏感资源的程序,更容易整合外部传感器和内置传感器。通过创建一个遵循ODK的模块化组件理念的框架,我们的目标是扩展工具套件,使最终用户能够轻松地增加Android设备与外部传感器选择能力。该组件的理念是重复可使用的传感器驱动程序,希望能引导进一步推动建立新型的移动传感应用的生态系统。使用标准的Android应用程序的分销渠道(如谷歌play商店)将方便用户下载的增强功能的(应用程序级别的设备驱动程序)到未修改的原生Android操作系统。这个简单的部署方法将有望建立一个基于传感为主的移动数据采集应用,在资源和技术缺乏(无论是身体上还是在专业知识方面的)的背景下提高技术服务。
校园礼物助手
校园礼物助手利用安卓平台的开放性,针对在校学生提供各种礼物攻略,让各位同学在人际交往上更加得心应手,更好向他(她)展现你的诚心诚意。
包含的基本功能有:
1) 动态展示,如热门礼物,精彩留言等。
2) 节日场合选择,情人节,圣诞节,生日等
3) 礼物选择,贺卡,精致礼品,自制礼品等
4) 扫描条形码,二维码送语音、文字、图片、视频祝福等。
5) 记事本功能,记载身边已做或即将的做的事