最近,我已经尝试将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")
}
}
虽然我把无人机拿走了,但这不是真正的飞行,所以我开始研究任务实现我想要的功能的任务控制类,但是我的代码似乎不正确,因为它确实不要让无人机执行任何动作。如果这里有更多有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()
}
答案 0 :(得分:2)
时间轴任务需要进行一些调整,包括行动的高度以及添加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:
方法为代码添加其他诊断,因为它将针对每个时间轴事件调用,包括所有元素的开始和结束。