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;