Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 利用任务控制_Swift_Dji Sdk - Fatal编程技术网

Swift 利用任务控制

Swift 利用任务控制,swift,dji-sdk,Swift,Dji Sdk,最近,我开始尝试利用DJI Mobile SDK作为我的一个小项目。我一直在Swift工作,利用DJI在Github上提供的样本,但我在使用missionControl时遇到了问题,老实说,我甚至不确定missionControl是否是最好的方法 目标:我只是想让无人机飞到一个指定的高度,并拍摄下它下面的视频。我现在甚至不关心水平运动,只关心垂直运动 我所做的:利用他们的样本,我让无人机录制视频片段,但我无法让它真正飞行。我的第一种方法是使用flightController,我已经成功地让它起飞

最近,我开始尝试利用DJI Mobile SDK作为我的一个小项目。我一直在Swift工作,利用DJI在Github上提供的样本,但我在使用missionControl时遇到了问题,老实说,我甚至不确定missionControl是否是最好的方法

目标:我只是想让无人机飞到一个指定的高度,并拍摄下它下面的视频。我现在甚至不关心水平运动,只关心垂直运动

我所做的:利用他们的样本,我让无人机录制视频片段,但我无法让它真正飞行。我的第一种方法是使用flightController,我已经成功地让它起飞和降落,但我不相信他们的方法是goToLocation()之类的方法。这就是起飞和着陆的功能方法

@IBAction func takeOffPressed(_ sender: Any) {
    if let aircraft = DJISDKManager.product() as? DJIAircraft {
        aircraft.flightController?.startTakeoff(completion: nil)
    }else{
        self.showAlertViewWithTitle(title:"Action", withMessage: "Product Connection Not Found")
    }
}

@IBAction func landPressed(_ sender: Any) {
    if let aircraft = DJISDKManager.product() as? DJIAircraft {
        aircraft.flightController?.startLanding(completion: nil)
    }else{
        self.showAlertViewWithTitle(title:"Action", withMessage: "Product Connection Not Found")
    }
}
虽然我让无人机起飞,但这并不是真正的飞行,因此我开始研究missionControl类,其中似乎有任务实现我想要的功能,但是我的代码似乎不正确,因为它不会导致无人机执行任何操作。如果这里有人对DJI SDK更有经验,我将非常感谢您提供的任何帮助。下面是我的无效代码

@IBAction func doMission(_ sender: Any) {
    var elements = [DJIMissionControlTimelineElement]()
    elements.append(DJITakeOffAction())
    elements.append(DJIGoToAction(altitude: 1)!)
    elements.append(DJIGoHomeAction())
    DJISDKManager.missionControl()?.scheduleElements(elements)
    DJISDKManager.missionControl()?.startTimeline()
}

时间线任务需要一些调整,包括开始行动的高度,以及增加一个DJIRecordVideoAction以录制所需持续时间的视频。请尝试下面修改的代码:

@IBAction func doMission(_ sender: Any) {
    var elements = [DJIMissionControlTimelineElement]()
    elements.append(DJITakeOffAction())
    elements.append(DJIGoToAction(altitude: 5)!)
    elements.append(DJIRecordVideoAction(duration: 10)!) // this assumes a desired duration of 10 seconds
    elements.append(DJIGoHomeAction())
    DJISDKManager.missionControl()?.scheduleElements(elements)
    DJISDKManager.missionControl()?.startTimeline()
}

您还可以使用
DJIMissionControl
addListener:toTimelineProgressWithBlock:方法向代码中添加额外的诊断,因为每个时间线事件都会调用它,包括所有元素的开始和结束。

很抱歉响应延迟,我无法连续访问无人机,但我今天终于要考试了。不知道为什么,但我似乎有问题。我试着利用你提供的代码,但无人机似乎没有记录动作。它执行takeffAction()和DJIGoHomeAction(),但不执行DJIRecordVideoAction()或DJIGoHomeAction()。来自无人机的实时视频源是否会与这些任务操作冲突?当您调用djiskmanager.missionControl()?.schedulelements(elements)时,是否看到它返回错误?否,它不会返回任何错误。我不明白为什么它执行起飞和回家,但似乎忽略了我希望在两者之间执行的任何操作。通过
DJIMissionControl addListener:toTimelineProgressWithBlock:
向任务控制添加侦听器块,并记录
事件
元素
,和
错误
时间线运行时提供的参数。看看您期望的元素是否返回,以及是否有任何错误。哇,好吧,很显然,我从一开始就有的代码一直在工作。在Mavic pro上,在WIFI模式下禁用goToActions。进入RC模式,一切正常。