52matlab技术网站,matlab教程,matlab安装教程,matlab下载

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 15062|回复: 4

采集手机内置传感器数据到MATLAB进行实时算法设计的方法

[复制链接]

123

主题

207

帖子

2992

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2992
发表于 2017-12-27 12:50:23 | 显示全部楼层 |阅读模式
本帖最后由 matlab的旋律 于 2017-12-27 16:49 编辑

本文介绍的方法能够实现将手机内置的加速度传感器、磁力计角速度传感器陀螺仪及GPS数据采集到MATLAB。这里也部分参考了http://www.ilovematlab.cn/thread-505864-1-1.html,非常感谢贴主inumo

1、硬件准备:手机(本文示例iphone7plus),电脑,且在同一局域网中;

2、软件准备:安卓/ios手机安装MATLABmobile(以下简称mobile);
                      电脑安装MATLAB(R2014a以上版本,以下简称MATLAB),且需安装MATLAB Support Package for Android Sensors in MATLAB/MATLAB Support Package for Apple iOS  Sensors in MATLAB,直接在MATLAB的help文档可以搜索下载
3、具体步骤:
    ①   在MATLAB中建立与mobile连接,MATLAB命令行输入connector on ,首次建立联系需要输入密码。

MATLAB输入输出如下:
>> connector on 123456
DNS name: SMD-1688
IP address: 192.125.107.68
Use this link to test the MATLAB Connector:
http://SMD-1688:31414/

If the test is successful, but MATLAB Mobile cannot connect,
your computer might have multiple IP addresses.  To determine
the correct one, see Determining the DNS Name or IP Address of a Computer.

DNS name为主机名,IPaddressIP地址,但连接时应使用局域网中地址,如192.168.1.xxx,端口号默认为31415,但是也可能为其他的数字。

  打开Mobile,点击右下侧的More,在点击选择setting,,然后点击Add a computer如图1



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

123

主题

207

帖子

2992

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2992
 楼主| 发表于 2017-12-27 15:18:52 | 显示全部楼层
输入IP地址(电脑的局域网地址)及密码,端口,DNS ,然后点击Connect连接至电脑。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

123

主题

207

帖子

2992

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2992
 楼主| 发表于 2017-12-27 16:15:17 | 显示全部楼层
③   连接成功后,在MATLAB中创建一个mobiledev对象,MATLAB命令行输入m=mobiledev后,命令窗口显示:
>> m=mobiledev

m =

mobiledev with properties:

                   Connected: 1
                     Logging: 0
            InitialTimestamp: ''

   AccelerationSensorEnabled: 1
AngularVelocitySensorEnabled: 0
       MagneticSensorEnabled: 0
    OrientationSensorEnabled: 0
       PositionSensorEnabled: 0

Supported functions

其中 Connectd 只读,表示连接状态,1 连接,0未连接;InitialTimestamp只读,表示采集数据的起始时间信息,为空字符串时候表示采集还没开始。
   AccelerationSensorEnabled: 加速度传感器 1:表示采集 0:表示不采集
AngularVelocitySensorEnabled: 陀螺仪 1:表示采集 0:表示不采集
       MagneticSensorEnabled: 磁力计 1:表示采集 0:表示不采集
    OrientationSensorEnabled: 方向传感器 1:表示采集 0:表示不采集
       PositionSensorEnabled: GPS 1:表示采集 0:表示不采集

还有一个非常重要的参数,就是采集信号的采样率m.SampleRate,默认是10Hz,最高值为100Hz,可以设置的范围为0-100Hz。

④  开始/结束数据采集及传感器数值获取。
     控制采集过程的方法有两种,分布在pc端和mobile端:
      ● pc MATLAB:m.Logging = 1,开始采集,m.Logging = 0 结束采集,这里也为编程实现自动控制提供了便捷;
      ● mobile MATLAB:点击Start Sending开始采集,点击Stop Sending结束采集。

获取当前加速度传感器数值,可在命令行输入m. Acceleration来获得,其他传感器如AngularVelocity、Orientation、MagneticField等类似
      具体可用properties(m)查看mobiledev的所有属性,或查看帮助文档中的介绍
下图中给出连接时mobile 端传感器的选项图,点亮的图标为选中采集传感器数据,否则不采集对应传感器的数据。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

123

主题

207

帖子

2992

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2992
 楼主| 发表于 2017-12-27 16:24:58 | 显示全部楼层
⑤  获取整个采集过程中的所有值(即m.Logging = 1时开始)。在采集结束后,可以通过
[acc,tacc] = accellog(m);%获取整个采集过程中加速度传感器的值,以及从0开始,单位为秒的时间信息tacc
[av, tav] = angvellog(m);%获取整个采集过程中陀螺仪的值,以及从0开始,单位为秒的时间信息tacc
[mg,tmg] = magfieldlog(m);%获取整个采集过程中磁力计的值,以及从0开始,单位为秒的时间信息tacc
[oi, toi] = orientlog(m);%获取整个采集过程中方向传感器的值,以及从0开始,单位为秒的时间信息tacc
[ps,tps] = poslog(m);%获取整个采集过程中GPS的值,以及从0开始,单位为秒的时间信息tacc
然后可以进行数据处理操作。
discardlogs(m);%清楚各对应传感器的历史数据,时间轴设定当前时刻为0.

⑥  采集过程结束后,清除变量并断开连接,在命令行输入:
clear m
connector off

回复 支持 反对

使用道具 举报

123

主题

207

帖子

2992

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2992
 楼主| 发表于 2017-12-27 16:45:40 | 显示全部楼层
本帖最后由 matlab的旋律 于 2017-12-27 17:00 编辑

说了这么多,直接上实时采集加速度传感器数据的gui程序,之前用加速度数据测试了一下计步算法,GUI上面的统计步数的窗口也保留下来了,可以忽略。其中示例程序采用了定时器,采样率为25Hz,不过也有一个比较困惑的问题,数据采集时,数据长度为45和50(25Hz采样率每两秒的长度应为50)交替,理论上来说应该每次都丢失了5组数据,即5/25=0.2秒=200毫秒。有这方面兴趣的朋友可以一起研究这个问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|52matlab技术网站 ( 粤ICP备14005920号-5 )

GMT+8, 2024-3-29 00:03 , Processed in 0.079243 second(s), 28 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表