Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

モバイル デバイスからの角速度データと方向データの収集およびプロット

この例では、Android™ または iOS のモバイル デバイス上にある複数のセンサーからのデータを併せて 1 つのタイムラインにプロットする方法を説明します。角速度と方向の測定値がデバイスから収集され、絶対時間に対してプロットされます。これにより、2 個のセンサーからのデータの相関を、実際の測定時間に基づいて可視化できます。

モバイル デバイスの設定

モバイル デバイスからのデータを MATLAB® で受信するには、モバイル デバイスに MATLAB Mobile™ アプリをインストールして設定する必要があります。

MATLAB Mobile の [設定] から MathWorks® Cloud にログインします。

モバイル デバイスへの接続の作成

MATLAB Mobile の [コマンド] 画面で mobiledev コマンドを使用して、モバイル デバイスを表すオブジェクトを作成します。

m = mobiledev;

表示された出力は Connected: 1 になるはずです。これは、mobiledev オブジェクトがアプリへの接続を正常に確立したことを示します。

複数のセンサーからデータを収集するための準備

適切な mobiledev プロパティを使用して、デバイス上のセンサーを有効にします。

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

データ収集の開始

センサーを有効にすると、MATLAB Mobile の [センサー] 画面にはセンサーで測定された現在のデータが表示されます。Logging プロパティを使用して、センサー データの mobiledev への送信を開始できます。

m.Logging = 1;

これで、デバイスはセンサー データの送信中になります。

ログ記録の開始時に、デバイスは画面を上にしてテーブル上に平らに置かれています。角速度センサーの正の Y 軸は、デバイスの上端から外に伸びる方向に定義されます。方向センサーの正のロールは、Y 軸の正方向を向いたときに Y 軸周りの時計回りとして定義されます。

ログの記録中に、デバイスをその Y 軸周りに上向きおよび下向きに回転させます。これにより、Y 軸の角速度とロールの方向が変化します。

データ収集の停止

Logging プロパティを再び使用して、デバイスから mobiledev へのセンサー データの送信を停止します。

m.Logging = 0;

ログ データの取得

各センサーのデータには、mobiledev オブジェクトからアクセスできます。2 つの異なるタイムスタンプ変数が作成されます。これは、デバイスが角速度データと方向データを同時に記録しないことがあるためです。

[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;