1

iOS DJI UXSDKDemo を介して DJI Drone から IMU 情報をログに記録しています。以下のメソッドを使用して、4 つの望ましい値 (IMU 状態、IMU カウント、ジャイロスコープ、および加速度計) のログを受け取ることができます。ただし、ドローンに接続されたアプリを実行すると、ログが保存され、これらのフライトのログには 4 つの値がそれぞれゼロとしてリストされます。アプリを接続しているドローンは飛行していませんが、ドローンを動かしても値は変わりません。

DefaultLayoutViewController.h 以外のファイルを DefaultLayoutViewController.m にインポートする必要がありますか?

私の方法論は間違っていますか?

- (void)showAlertViewWithMessage:(NSString *)message
{
    dispatch_async(dispatch_get_main_queue(), ^{
        UIAlertController* alertViewController = [UIAlertController alertControllerWithTitle:nil message:message preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction* okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
        [alertViewController addAction:okAction];
        UIViewController *rootViewController = [[UIApplication sharedApplication] keyWindow].rootViewController;
        [rootViewController presentViewController:alertViewController animated:YES completion:nil];



//Printing Keys to Log; download logs from the page for this app on Itunes


        DJIFlightControllerKey *IMUStateForLog = [DJIFlightControllerKey keyWithParam:DJIFlightControllerParamIMUState];

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

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


        DJIFlightControllerKey *IMUsCountForLog = [DJIFlightControllerKey keyWithParam:DJIFlightControllerParamIMUsCount];

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

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


        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(@"%@", IMUStateGyroscopeStateForLog);
                NSLog(@"%@", DJIFlightControllerParamIMUStateGyroscopeState);
            }];


        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(@"%@", IMUStateAccelerometerStateForLog);
                NSLog(@"%@", DJIFlightControllerParamIMUAccelerometerState);

            }];


    });
}

編集/更新: 提案された変更を実装しました。値が表示されるようになりましたが、まれにしか発生せず、加速度センサーとジャイロスコープ センサーの予想される出力とは異なるように見えます。加速度計とジャイロスコープは 3 つの値 (x、y、z) を出力するべきではありませんか? ログのコードとスクリーンショットを以下に示します。助言がありますか?

- (void)viewDidLoad
{

    [super viewDidLoad];

    //Please enter your App Key in the info.plist file.
    [DJISDKManager registerAppWithDelegate:self];



//Printing Keys to Log; download logs from the page for this app on Itunes

    //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: %ld", newValue.integerValue);
        }];




    //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: %ld", newValue.integerValue);
        }];  

}

ログに記録されたデータが予想値と一致しません。

4

1 に答える 1