记录的数据值保持不变 - DJI UXSDKDemo

Posted

技术标签:

【中文标题】记录的数据值保持不变 - DJI UXSDKDemo【英文标题】:Data Values Logged Remain Unchanged - DJI UXSDKDemo 【发布时间】:2018-11-21 00:15:56 【问题描述】:

我正在通过 ios DJI UXSDKDemo 从 DJI 无人机记录 IMU 信息。使用下面的方法,我能够接收到四个所需值(IMU 状态、IMU 计数、陀螺仪和加速度计)的日志。但是,当我运行连接到无人机的应用程序时,会存储日志,这些航班的日志将四个值中的每一个都列为零。我连接应用程序的无人机没有飞行,但即使我移动无人机,值也不会改变。

除了 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);

            ];


    );

编辑/更新: 我实施了建议的更改。现在正在打印值,但它们很少出现,并且看起来与加速度计和陀螺仪传感器的预期输出不同。加速度计和陀螺仪不应该输出三个值(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);
        ];  


【问题讨论】:

另外,当我从 DJIIMUState.h 记录加速度计状态时,加速度计返回“null”。 【参考方案1】:

您正在尝试记录密钥,而不是在完成块中传回的实际数据。例:

[[DJISDKManager keyManager] startListeningForChangesOnKey:IMUStateForLog withListener:self andUpdateBlock:^(DJIKeyedValue * _Nullable oldValue, DJIKeyedValue * _Nullable newValue) 
            NSLog(@"%@", IMUStateForLog);
            NSLog(@"%@", DJIFlightControllerParamIMUState);
        ];

应该是这样的:

[[DJISDKManager keyManager] startListeningForChangesOnKey:IMUStateForLog withListener:self andUpdateBlock:^(DJIKeyedValue * _Nullable oldValue, DJIKeyedValue * _Nullable newValue) 
                NSLog(@"%d", newValue.integerValue);
            ];

与您开始侦听的键关联的值将在 DJIKeyedValue 类中返回。

【讨论】:

谢谢你,我做了你建议的改变。我仍然遇到问题。请参阅上面的更新帖子。如果您有任何建议,请告诉我。 DJIFlightControllerParamIMUStateAccelerationX、DJIFlightControllerParamIMUStateAccelerationY 等似乎不是 DJIFlightControllerKey 或 DJI Key 列表中的键。当我用您建议的键之一替换 DJIFlightControllerParamIMUAccelerometerState 时,当我尝试通过这些键记录时出现错误:“使用未声明的标识符 'DJIFlightControllerParamIMUStateAccelerationX';您的意思是 'DJIFlightControllerParamIMUStateCalibrationState'?”我在这里做错了吗?

以上是关于记录的数据值保持不变 - DJI UXSDKDemo的主要内容,如果未能解决你的问题,请参考以下文章

如果存在则更新列数据,否则在 mysql 查询中保持不变

刷新页面时 select值保持不变

JAVA中MAP值保持顺序不变

微信小程序 setData 只修改对象中的一个值,其他值保持不变

在 ReactJS 的 useEffect 中定义后 useEffect 值保持不变

Python 具名元组——我不只是可不变列表