胡辉翼 韩燕国 荆琳 王威
摘要:如今GPS等导航定位服务已发展相当成熟,但在室内由于信号被遮挡,往往无法得到较准确的定位。同时随着我国老龄人口数量逐年增加,难免有老年人在外意外摔倒,若不能得到及时救治极可能使情况恶化。因此本文提出并设计一款基于Android实现摔倒识别与自主定位的手机APP,通过读取并处理加速度计等传感器的数据,大致判断手机持有者是否摔倒,在地图上确定出运动轨迹和当前位置,并根据情况通知家人以避免危险。
关键词:定位导航;加速度传感器;摔倒辨识
中图分类号:TP311.52 文献标识码:A 文章编号:1007-9416(2018)05-0119-03
1 引言
随着科学技术的不断发展,国民经济水平的不断增加,智能手机的普及率越来越高。由于手机硬件的性能大幅提升,软件功能越来越丰富,当代的智能手机已不只是一个简单的通讯工具,它改变了人们的生活方式,成为了日常生活的必需品。在这样的大背景下,2007年由谷歌公司推出的Android手机系统,凭借自身方便、易用的优势,成为了最受欢迎的手机操作系统。智能手机基于GPS(Global Positioning System)的室外导航功能,是人们最常使用的功能之一,应用广泛。然而,在室内的环境下,由于建筑物或者其他复杂环境的干扰,GPS信号微弱,无法有效导航。与此同时,针对老年人用户群体,新闻中常有报道老年人摔倒,路人不敢上前帮扶,而其家人并不知情,摔倒老人无法得到及时救助,以至于面临危险。该文针对以上问题,本文提出并设计一款能够实现摔倒辨识与室内定位的Android手机APP,通过实时定位,在地图上绘制出运动轨迹,同时读取加速度计等传感器的数据,通过算法判断运动情况,对用户的摔倒进行大致的判断,并根据情况及时通知家人。
2 关键技术
2.1 Android操作系统简介
Android是一种基于Linux的自由及开放源代码的操作系统,主要应用于移动设备,如智能手机和平板电脑。2007年,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。2008年HTC在美国发布了第一部搭载Android的智能手机。据有关数据统计,截止2016年,Android操作系统在中国的市场占有率超过了80%。
2.2 传感器
Android系统提供了对多种传感器的支持,如加速度传感器、重力传感器等。
在Android系统中,用一个标准的三维坐标系来表达数据值,对于大多数传感器来说,当设备放置在默认的方向时,即手机正面竖直放置,坐标系和设备的屏幕相关。在这款APP中,主要用到了加速的传感器。手机加速度传感器的坐标轴如下:
x方向就是手机的水平方向,右为正;
y方向就是手机的水平垂直方向,前为正;
z方向就是手机的空间垂直方向,天空的方向为正,地球的方向为负(图1)。
3 系统设计与功能实现
3.1 用户界面
主界面布局包含兩个按钮控件,使用switch通过不同的id 获取到按钮的信息:
(1)按钮一,btn_sms,设置收信人。输入指定对象的手机号码,在软件识别到用户发生了摔倒动作后,实现自动给指定的手机号码发送求助短信。同时建立缓存来保存手机号码,方便第一次输入手机号码之后,再次使用软件时,上次设定的手机号码为默认的号码,可以跳过设置号码步骤,直接进入地图环节。如果需要更换指定联系人的联系方式,也可以重新按下该按钮,设置新的手机号码。
(2)按钮二,btn_usemap,打开地图。点击按钮打开地图,为了提高精度,此处使用高德地图提供的开放API 接口。高德Web服务API向开发者提供HTTP接口,开发者可通过这些接口使用各类型的地理数据服务,返回结果支持JSON和XML格式。Web服务API对所有用户开放。使用本组服务之前,需要申请应用Key。不同类型用户可获取不同的数据访问能力。
3.2 调用高德地图
使用高德地图提供的开放API接口,将PackgeName导入到API中,添加相应的so库,导入依赖调用高德地图:
android:value="300ba53ad8fb0139a2f19bb14ca42675"> 配置service 标签 获取API 权限,对地图定位进行操作: 3.3 定位与轨迹绘制 (1)建立公共类Util类,获取定位并将定位信息返回:调用AMap Location接口,获取到定位的经纬度和街道地址信息等,将获取的信息放入Buffer缓冲中,提高读取效率。之后使用静态方法public synchronized static LatLng getLatlng(AMapLocation aMapLocation) 来返回需要的信息。 (2) 初始化定位信息,使用手机的高精度定位模式,在条件允许的情况下优先使用高精度定位方式:使用Location 方法获取到定位需要的相关属性的初始化,进行配置。使用时获取手机的GPS定位权限,数据权限以及蓝牙等定位权限,用户在使用中会弹出相应的权限获取窗口,获得同意后APK 才可以进行使用和定位。用户在打开地图后点击定位蓝点,就可以将界面获取到手机所在的位置,手指伸缩来放大地图。 a、设置监听,不断地获取到手机所在的定位信息,并更新定位点
mLocationClient.setLocationListener(this);
b、 配置高精确的定位模式,优先使用最高精度的定位,但是耗电量会有增加。
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving);
c、获取到GPS定位返回的地位地址等定位信息。
mLocationOption.setNeedAddress(true);
mLocationOption.setLocationCacheEnable(false);
d、设置定位刷新时间为3分钟 即使每三分钟定位一次
mLocationOption.setInterval(3*60*1000);
(3)軌迹绘制:
通过Util的getLatlng方法获取到Util类返回的经纬度信息,令第一次定位点为newLog,第二次刷新后的定位点为OldLog, 将两次的经纬度信息分别传入的LatLng中进行坐标的判断:
如果坐标(经纬度)在-180.0D <= var3 && var3 < 180.0D则为正常的维度信息,可以使用,反之若var1 < -90.0D || var1 > 90.0D则为无效坐标,对获取到的坐标信息重新进行Math.max(-90.0D, Math.min(90.0D, var1));运算获取最大的坐标信息并重新赋值后传出作为有效的坐标点,获取前后两次坐标分别进行判断后,通过AMap中的addPolyline方法在两个点之间画出平滑的折线。同时折线的宽度,颜色等属性均可以通过该方法进行设置,此外通过设置定位的刷新时间来使折现更加的流畅舒服。
3.4 摔倒辨识
通过读取手机加速度的数据来判断持有者的状态,但是通过手机的三维加速度坐标系只能做出大致判断。如果需要更加精确的判断还需要通过佩戴相应的数据收集器来采集人体变化如:心跳,呼吸等等。
假设z轴方向为重力加速度的方向,平均重力加速度9.8m/s^2,而人体的摆动会让竖直向下的方向获取一个加速度值,人体在正常的浮动下,取g=10为各地的重力加速度初值,若x||y||z>10则某一轴为重力竖直方向。
由公式a=(v2-v1)/t知:
a=dv/dt(在a-->0)时,人体运动时在水平方向的vx=v0,竖直方向vy=0;当人体突然摔倒,水平方向获取一个加速度,竖直方向也获取到一个加速度。因此在水平方向上加速度a=v-v0/t,因此手机的加速度传感器会获取到水平方向的加速度变化并增大,同理在竖直方向上a也会瞬间增大再减少到10,于是获取到手机加速度传感器的参数变化并打印后,使用MATLAB对数据进行分析,取相对稳定的数值,并取整后作为加速度参数的判断条件。
x,y,z三轴在不同的情况下,加速度所在的轴不一样但是参数变化是相同的,三个轴的参数设置为:
手机横放,屏幕朝向周围:检测到z>4&&y;>3之后,x>18;
水平放置:x>3&&y;>4之后,z>18;
竖直放置:x>3&&z;>4之后,y>18。
4 APP的功能测试
在摔倒识别与自主定位手机APP的测试方面,选择对北京林业大学工学院部分学生进行试用,来检测实用性,技术内容和测试结果见表1。
5 结语
本文首先对目前导航服务技术的背景及约束进行了阐述,简要介绍了Android操作系统,并对相关传感器进行了介绍。在APP的系统设计部分,对各项功能进行了模块的划分,同时对用户界面设计、地图调用、传感器的利用、运动轨迹绘制、摔倒辨识的算法实现做了详细的说明。从本文的介绍的得知,基于Android的摔倒识别与自主定位系统在室内GPS信号受到阻挡而削弱的环境下,能实现定位以及轨迹绘制,并提供服务用户的导航服务;同时在有意外事故发生用户摔倒时,能提供相应的检测与辨识,给出能够发送定位短信这样的的解决方案,具有良好的市场前景。
参考文献
[1]朱建佳.基于Android系统的室内导航系统的设计与实现[D].北京:北京邮电大学,2014.
[2]王立剑.基于Android平台的手机室内定位及导航的设计与实现[D].山东:中国海洋大学,2013.
[3]赵康.基于Android平台的室内三维导航系统的研究与实现[A].山西:山西省地图院,2016.