Main Content

从您的移动设备获取并绘制角速度和方向数据

此示例说明如何在一条时间线上统一绘制 Android™ 或 iOS 移动设备上多个传感器的数据。系统将从设备中采集角速度和方向的测量值,并基于绝对时间进行绘制。这样可以基于实际测量时间对来自两个传感器的数据之间的相关性进行可视化。

设置您的移动设备

为了在 MATLAB® 中接收来自移动设备的数据,您需要在您的移动设备上安装和设置 MATLAB Mobile™ App。

从 MATLAB Mobile 的“设置”登录到 MathWorks® Cloud。

创建与移动设备的连接

在 MATLAB Mobile 的命令屏幕上,使用 mobiledev 命令创建一个表示您的移动设备的对象。

m = mobiledev;

输出应显示 Connected: 1,表明 mobiledev 对象已成功建立与该 App 的连接。

准备从多个传感器获取数据

使用适当的 mobiledev 属性在设备上启用传感器。

m.AngularVelocitySensorEnabled = 1;
m.OrientationSensorEnabled = 1;

开始获取数据

启用传感器后,MATLAB Mobile 的传感器屏幕将显示传感器测量的当前数据。Logging 属性允许您开始向 mobiledev 发送传感器数据。

m.Logging = 1;

该设备现在正在传输传感器数据。

开始记录时,设备平放在桌子上,屏幕朝上。角速度传感器的正 Y 轴定义为从设备的顶部向外延伸。方向传感器的正向滚转定义为在面对轴的正向时围绕 Y 轴顺时针旋转。

在记录过程中,设备会绕其 Y 轴朝上和朝下翻转几次。由此产生 Y 轴的角速度变化和方向上的滚转变化。

停止获取数据

再次使用 Logging 属性使设备停止向 mobiledev 发送传感器数据。

m.Logging = 0;

检索记录的数据

可以从 mobiledev 对象访问每个传感器的数据。系统会创建两个不同时间戳变量,因为设备可能不会同时记录角速度和方向数据。

[av,tav] = angvellog(m);
[o,to] = orientlog(m);

绘制原始传感器数据

系统会将来自传感器的数据放在单独的变量中并进行绘制。

yAngVel = av(:,2);
roll = o(:,3);
plot(tav,yAngVel,to,roll);
legend('Y Angular Velocity','Roll');
xlabel('Relative time (s)');

系统会相对于 mobiledevInitialTimestamp 属性以秒为单位绘制数据。该属性提供由传感器记录并发送到 MATLAB 的第一个数据点的绝对时间。它充当使用 angvellogorientlog 等函数访问的所有传感器数据的时间戳的参考点,这些函数是相对于 InitialTimestamp 而提供的,以秒为单位。

转换为绝对时间戳

为了将所有传感器时间戳转换为绝对时间戳,系统会将 InitialTimestamp 值转换为 datetime 对象。以秒为单位的各传感器时间戳将转换为 seconds。这会简化将相对时间戳转换为绝对时间戳的日期算术。

tInit = datetime(m.InitialTimestamp,'InputFormat','dd-MM-yyyy HH:mm:ss.SSS');
tAngVel = tInit + seconds(tav);
tOrient = tInit + seconds(to);

以绝对时间绘制多个传感器的数据

现在,两个传感器都有使用 datetime 表示的绝对时间戳。这使得对传感器读数中发生重大事件时的实际时间进行可视化变得容易。

方向传感器使用度作为单位,而角速度传感器使用弧度/秒作为单位。在再次绘图前,yAngVel 将转换为度/秒。

yAngVelDeg = yAngVel * 180/pi;

plot(tAngVel,yAngVelDeg,tOrient,roll);
legend('Y Angular Velocity','Roll');
xlabel('Absolute time (s)');

清理

关闭启用的传感器并清理 mobiledev

m.AngularVelocitySensorEnabled = 0;
m.OrientationSensorEnabled = 0;

clear m;