【问题标题】:Synchronize accelerometer and Gyroscope / Android同步加速度计和陀螺仪 / Android
【发布时间】:2017-11-10 13:41:25
【问题描述】:

我正在 android 下开发一个移动应用程序,我需要同时从加速度计和陀螺仪中检索数据,即我需要同步两个传感器以同时读取它们的值。我需要使用Service(不是Activity),但是两个event.timestamp的值完全不同。

public void onSensorChanged(SensorEvent event) {


    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        xa =event.values[0] ;
        ya =event.values[1] ;
        za =event.values[2] ;
        ta= event.timestamp;

    }

    if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) {
        xg = event.values[0];
        yg = event.values[1];
        zg = event.values[2];
        tg = event.timestamp;
   }

谢谢。

【问题讨论】:

    标签: android


    【解决方案1】:

    使用 2 个布尔标志,一个用于加速度计,另一个用于陀螺仪,当它们都为真时,这意味着您至少从它们中获得一次,其中一个可能会获得 3 次或更多次。加速度计传感器相当快。当它们都为 true 时,再次将它们设置为 false 以再次从它们那里获取数据。您无法将传感器与 Sensor api 同步。

    boolean isAccelData = false;
    boolean isGyroData = false;
    
    public void onSensorChanged(SensorEvent event) {
    
    
        if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) {
            isAccelData = true;
        }
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            isGyroData = true;
        }
        if (isAccelData & isGyroData) {
            // DO something here
            isAccelData = false;
            isGyroData = false;
        }
    }
    

    【讨论】:

    • 首先感谢您的回复。一开始我使用了测试 if (ta == tg) {save the data in the database} 但即使在 5 分钟后我发现我的表几乎是空的(有时我发现 1 或 2 行)。如果我不能使用 Sensor api 进行同步,你会建议什么工具。
    • 它工作得很好创建一个新项目实现传感器侦听器并检查一个陀螺仪获得多少加速度计输出。使用日志或 System.println 并设置另一个都已将其标志设置为 true。这行得通。如果您检查指南针应用程序,您会发现它用于在从加速度计和磁场传感器获取数据后设置旋转矩阵。
    • 我看到 3 或 4 个加速度计数据,然后是磁场传感器数据,因此它设置了两个标志并为其触发动作,并在执行动作后再次将两个标志设置为 false。
    猜你喜欢
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多