3

ウェアラブルからのリアルタイム センサー データ ストリーミングを必要とするアプリを開発しています。LG G ウォッチと加速度計とジャイロスコープ センサーを使用しています。

センサー データとシステムの現在の時刻は、各センサー X 32 サンプルの各軸の 4 バイトの配列としてパッケージ化されます (したがって、4 X 3 X COUNT.

このデータは、メッセージ API を介して送信されます。

主な質問: 最速の更新レート (SENSOR_DELAY_FASTEST) でセンサーを登録しました。モバイル デバイスでキャプチャしたデータ サンプルを分析すると、タイム ステップはサンプルあたり約 200 ミリ秒 (約 5 HZ) です。

私ははるかに速く期待しています。

私は次のように制限されていますか?

DataApi を使用すると、データをモバイル デバイスにもっと高速にストリーミングできますか?

ここに私のコードのセクションがあります:

static final int COUNT = 32;
static ByteBuffer AcceleratorBuffer = ByteBuffer.allocate((4 * 3 * COUNT) + (8 * 1 * COUNT));
static ByteBuffer GyroBuffer = ByteBuffer.allocate((4 * 3 * COUNT) + (8 * 1 * COUNT));

static int accelerator_cycle = 0;
static int gyro_cycle = 0;


static AcceleratorWearSensorListener mAcceleratorSensorEventListener = null;
static GyroWearSensorListener mGyroSensorEventListener = null;

static class GyroWearSensorListener implements SensorEventListener {
    GoogleApiClient mGoogleApiClient;

    public GyroWearSensorListener(GoogleApiClient mGoogleApiClient) {
        this.mGoogleApiClient = mGoogleApiClient;
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (On) {

            Float x = event.values[0];
            Float y = event.values[1];
            Float z = event.values[2];
            Log.i(TAG, "Gyro x: " + x + " y: " + y + " z: " + z);

            GyroBuffer.putFloat(x).putFloat(y).putFloat(z).putLong(System.currentTimeMillis()).array();
            ++gyro_cycle;
            if (gyro_cycle % COUNT == 0) {
                Wearable.NodeApi.getConnectedNodes(mGoogleApiClient)
                        .setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() {
                            @Override
                            public void onResult(NodeApi.GetConnectedNodesResult nodes) {
                                Log.i(TAG, "Nodes size : " + nodes.getNodes().size());
                                for (Node node : nodes.getNodes()) {
                                    if (node != null && mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
                                        Wearable.MessageApi.sendMessage(
                                                mGoogleApiClient, node.getId(), GYROSCOPE_DATA_PACKET, GyroBuffer.array())
                                                .setResultCallback(

                                                        new ResultCallback<MessageApi.SendMessageResult>() {
                                                            @Override
                                                            public void onResult(MessageApi.SendMessageResult sendMessageResult) {

                                                                if (!sendMessageResult.getStatus().isSuccess()) {
                                                                    Log.e(TAG, "Failed to send message with status code: "
                                                                            + sendMessageResult.getStatus().getStatusCode());
                                                                } else {
                                                                    Log.e(TAG, "send gyro data successfully ");
                                                                }
                                                            }
                                                        }
                                                );
                                    } else {
                                        Log.e(TAG, "node null or client null or not connected. ");
                                    }
                                }
                            }
                        });


                GyroBuffer.clear();
                gyro_cycle = 0;
            }

        }
    }
4

0 に答える 0