Несколько значений акселерометра и гироскопа — DJI iOS UXSDKDemo

Есть ли способ получить данные датчика акселерометра и гироскопа со всех трех осей (xyz)? Используя приведенный ниже код, я постоянно регистрирую «ЖУРНАЛ: Гироскоп: 5,0000» или «ЖУРНАЛ: Гироскоп: 6,0000». Тот же результат имеет место для акселерометра. Почему он выводит только одно значение вместо трех для каждой из осей? Кроме того, почему значения ровно 5 и 6 постоянно? Разве не должно быть больше вариаций?

//GYROSCOPE
    DJIFlightControllerKey *IMUStateGyroscopeStateForLog = [DJIFlightControllerKey keyWithParam:DJIFlightControllerParamIMUStateGyroscopeState];

// Will get called once to get current value of the key
[[DJISDKManager keyManager] getValueForKey:IMUStateGyroscopeStateForLog withCompletion:^(DJIKeyedValue * _Nullable value, NSError * _Nullable error) {
    }];

// Called only when the value for the key changes
[[DJISDKManager keyManager] startListeningForChangesOnKey:IMUStateGyroscopeStateForLog withListener:self andUpdateBlock:^(DJIKeyedValue * _Nullable oldValue, DJIKeyedValue * _Nullable newValue) {
    NSLog(@"LOG: Gyroscope: %f", newValue.doubleValue);
    }];




//ACCELEROMETER
DJIFlightControllerKey *IMUStateAccelerometerStateForLog = [DJIFlightControllerKey keyWithParam:DJIFlightControllerParamIMUAccelerometerState];

// Will get called once to get current value of the key
[[DJISDKManager keyManager] getValueForKey:IMUStateAccelerometerStateForLog withCompletion:^(DJIKeyedValue * _Nullable value, NSError * _Nullable error) {
    }];

// Called only when the value for the key changes
[[DJISDKManager keyManager] startListeningForChangesOnKey:IMUStateAccelerometerStateForLog withListener:self andUpdateBlock:^(DJIKeyedValue * _Nullable oldValue, DJIKeyedValue * _Nullable newValue) {
    NSLog(@"LOG: Accelerometer: %f", newValue.doubleValue);
    }];

person brayvan    schedule 12.06.2018    source источник


Ответы (1)


Привет, я еще немного изучил этот вопрос. Значения, которые вы регистрируете, являются общими состояниями IMU и гироскопа, которые объявлены в перечислении, поэтому вы не получаете постоянное состояние значений, которые вы ищете. Похоже, это ошибка с нашей стороны, что эти данные недоступны.

person RussFenenga    schedule 13.06.2018
comment
Хорошо, у меня похожая проблема со скоростью (DJIFlightControllerParamVelocity). Для этого значения возвращаются только нули, несмотря на то, что на устройстве iOS отображается горизонтальная скорость. Это тоже проблема со стороны DJI? - person brayvan; 13.06.2018
comment
О, и то же самое для DJIFlightControllerParamAircraftLocation? - person brayvan; 13.06.2018
comment
@brayvan Чтобы получить скорость в каждом направлении, вам нужно получить доступ к вектору, который он возвращает, следующим образом: DJISDKVector3D *speedVector = value.value; Это декартов вектор в 3D-пространстве, который возвращает компонент X, компонент Y и компонент Z. - person RussFenenga; 13.06.2018
comment
@brayvan, чтобы получить значение из DJIFlightControllerParamAircraftLocation, вы должны получить значение, используя CLLocation *location = value.value; Из этого CLLocation есть широта/долгота. - person RussFenenga; 13.06.2018
comment
@brayvan разработчик. dji.com/api-reference/ios-api/Components/KeyManager/ здесь находится наш справочник по API для FlightControllerKeys, где вы можете увидеть возвращаемый тип каждого ключа. - person RussFenenga; 13.06.2018
comment
Спасибо, я попробовал это: DJISDKVector3D *speedVector = [[DJISDKVector3D alloc]init]; NSDate *date = [дата NSDate]; NSString *content = [NSString stringWithFormat:@\n%@, %f, %f, %f, дата, speedVector.x, speedVector.y, speedVector.z]; Но это только напечатанные нули. Я неправильно инициализирую speedVector? Нужно ли ему слушать, как это делали другие клавиши? - person brayvan; 14.06.2018
comment
@brayvan вам нужно прослушать, как и другие клавиши, а затем создать вектор внутри блока завершения, например DJISDKVector3D *speedVector = value.value; - person RussFenenga; 14.06.2018
comment
Большой! Это сработало. Мне просто нужно было изменить DJISDKVector3D *speedVector = value.value; в DJISDKVector3D *speedVector = newValue.value; - person brayvan; 14.06.2018
comment
Давайте продолжим обсуждение в чате. - person brayvan; 14.06.2018