首页 > 解决方案 > DJI sdk 获取 RTK 信息

问题描述

我正在尝试使用 ios 应用程序从 DJI M600 Pro 中的 RTK 获取 gps 信息,我查看了 DJI Mobile SDK API 参考,并找到了一些 RTK API。当无人机启动时,属性“isRTKBeingUsed”应该是“YES”,但我无法得到结果。

任何帮助将不胜感激!这是我的代码:

#import "ViewController.h"
#import <DJISDK/DJISDK.h>
#import "DJIAppActivationManager_InternalTesting.h"
#import<DJISDK/DJIRTK.h>        

#define WeakRef(__obj) __weak typeof(self) __obj = self
#define WeakReturn(__obj) if(__obj ==nil)return;

void ShowResult(NSString *format, ...)
{...
}

@interface ViewController ()<DJIAppActivationManagerDelegate, DJISDKManagerDelegate,DJIRTKDelegate>     
...
...
@property (weak, nonatomic) IBOutlet UILabel *isusing;        
@property(strong, nonatomic) DJIRTK * rtk1;                  
@property(strong, nonatomic) DJIRTKState * rtkstate1;  

@end

@implementation ViewController

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self registerApp];
    [self updateUI];

    self.rtk1 = [[DJIRTK alloc] init];
    self.rtkstate1 = [[DJIRTKState alloc] init];
    [self rtk:_rtk1 didUpdateState:_rtkstate1];  


}

- (void)viewDidLoad {
    [super viewDidLoad];
}


-(void) rtk:(DJIRTK *)rtk didUpdateState:(DJIRTKState *)state      
{
    self.shifoushiyong.text = [NSString stringWithFormat:@"%d",state.isRTKBeingUsed];  

}



- (void)registerApp
{
    [DJISDKManager registerAppWithDelegate:self];
}

-(void)updateUI 
{
  ...   
}

...

@end

标签: iosobjective-cdji-sdk

解决方案


TLDR:您以错误的方式使用 RTK 委托方法。

didUpdateState:是一个委托方法。您需要将委托对象传递给您的 RTK 对象。当数据来自飞行器时,会调用 didUpdateState。您不必手动操作。

此外,您不应初始化自己的 RTK 对象:

1/ 确认 SDK 已注册(DJISDKManager 的委托方法)后,获取产品

- (void)appRegisteredWithError:(NSError *_Nullable)error {
  DJISDKManager.product
  // continue here
}

https://developer.dji.com/api-reference/ios-api/Components/SDKManager/DJISDKManager.html#djisdkmanager_product_inline

2/ 验证它是 DJIAircraft 类

if ([[DJISDKManager.product class] isKindOf:[DJIAircraft class]) {
    // Continue here
}

https://developer.dji.com/api-reference/ios-api/Products/Aircraft/DJIAircraft.html?search=djiaircraft&i=0&

3/ 从那里获取 RTK 对象:

DJIRTK *rtk = aircraft.flightController.RTK;

https://developer.dji.com/api-reference/ios-api/Components/FlightController/DJIFlightController.html#djiflightcontroller

4/ 将委托设置为 RTK(一个实现 DJIRTKDelegate 的类 - 在这里假设 self)

rtk.delegate = 自我;

https://developer.dji.com/api-reference/ios-api/Components/RTK/DJIRTK.html#djirtk_protocol_inline

5/ 像你一样在委托方法中获取数据。

- (void)rtk:(DJIRTK *_Nonnull)rtk didUpdateState:(DJIRTKState *_Nonnull)state {
 // Show me the data
}

https://developer.dji.com/api-reference/ios-api/Components/RTK/DJIRTK.html#djirtk_updatertkstate_inline


推荐阅读