Skip to main content

全景拍照任务教程文档

1. 全景拍照任务介绍

全景拍照任务提供一键全景功能,包括无人机自主完成全景照片拍摄,自动合成全景图,通过相册预览全景图。

全景拍照任务支持横拍,竖屏,广角拍,球形拍四种全景类型拍摄。

横拍、竖屏、广角拍支持拍摄后自动合成全景图,而球形拍则只支持拍摄素材照片,不支持自主合成全景图。

你也可以把无人机拍好的全景素材照片导入电脑,使用全景照片合成软件合成全景大图。

本教程将教你怎么使用Mobile SDK智能任务模块的功能接口去控制无人机执行全景拍照任务。

2. 全景拍照任务流程图

全景拍照流程图

3. 全景拍照任务关键类和API介绍

全景拍照拍摄类型枚举定义

/**
* Types of panoramic photography
*
* 全景摄影拍摄类型
*/
typedef NS_ENUM(uint8_t, AUTELPanoramicPhotoType ) {
/**
* @brief horizontal shot
*
* 横拍
*/
AUTELPanoramicPhotoTypeHorizontal,

/**
* @brief vertical shot
*
* 竖拍
*/
AUTELPanoramicPhotoTypeVertical,

/**
* @brief wide angle shot
*
* 广角拍
*/
AUTELPanoramicPhotoTypeWideAngle,

/**
* @brief spherical shot
*
* 球形全景
*/
AUTELPanoramicPhotoTypeSpherical,

};

全景任务拍照当前执行状态枚举定义

/**
* Panorama photo current status
*
* 全景拍照当前状态
*/
typedef NS_ENUM(uint8_t, AUTELCameraPanoramicPhotoStatus ) {
/**
* @brief Stop
*
* 停止状态
*/
AUTELCameraPanoramicPhotoStatusStop = 0,

/**
* @brief Taking Photo
*
* 拍照中
*/
AUTELCameraPanoramicPhotoStatusTakingPhoto = 1,

/**
* @brief Stitching Photo
*
* 拼接中
*/
AUTELCameraPanoramicPhotoStatusStitching = 2,

/**
* @brief Pause
*
* 暂停
*/
AUTELCameraPanoramicPhotoStatusPause = 10,

};

全景拍照任务管理类句柄

/**
* Protocols for Panoramic photo mission are used to start, pause, resume, and exit the mission.
*
* 处理全景摄影任务的任务管理类句柄,用于开始,退出任务。
*
* @see AUTELPanoramicPhotoMissionStatus
*/
@protocol AUTELPanoramicPhotoMissionHandler <AUTELMissionHandler>

/// Set Panoramic photo mission parameters.
/// @param misstion Set the photo type of the panorama photo mission.
/// @param block completion block
- (void)setPanoramicPhotoInfo:(AUTELPanoramicPhotoMission *)misstion withCompletion:(AUTELCompletionBlock)block;

全景拍照任务封装数据模型

/**
* This class includes Panorama photo mission related functions.
*
* 全景拍照任务封装数据模型,用于这种全景拍照拍摄类型和上传任务数据
*/
@interface AUTELPanoramicPhotoMission : AUTELMission<NSCopying>

/**
* @brief Panoramic photo shooting type.
*
* 全景拍照拍摄类型。
*/
@property (nonatomic, assign) AUTELPanoramicPhotoType shotType;

全景拍照任务执行状态类定义

/**
* The real-time status of the Panorama photo mission. When the aircraft is executing the Panorama photo mission, the status is updated in real time by the -onNavigationMissionStatusChanged: method of AUTELNavigationDelegate.
*
* 全景拍照任务实时状态,当飞行器在执行全景拍照任务时,该状态由 AUTELNavigationDelegate 的 -onNavigationMissionStatusChanged: 方法实时更新。
*
*/
@interface AUTELPanoramicPhotoMissionStatus : AUTELMissionProgressStatus

全景拍照状态上报接口

/**
* @brief Enter the panoramic photo mission, the camera reports the panoramic photo status information in real time
*
* 进入全景摄影任务,相机实时上报全景拍照状态信息
*
* @param misstionStauts see AUTELPanoramicPhotoMissionStatus
*
* 全景拍照状态上报
*
* @see AUTELPanoramicPhotoMissionStatus
*/
- (void)onMissionPanoramicPhotoStatusUpdateNote:(AUTELPanoramicPhotoMissionStatus* _Nonnull)misstionStauts;

4. 全景任务功能实现

1. 监听全景任务状态上报

注册监听全景拍照任务状态上报和相机状态上报
AUTELNavigationDelegateConnection.shared.addProtocol(self)
CameraConnection.shared.addProtocol(self)
监听全景拍照任务状态上报
func onMissionPanoramicPhotoStatusUpdateNote(_ misstionStauts: AUTELPanoramicPhotoMissionStatus) {
DispatchQueue.main.async {

}
}

AUTELPanoramicPhotoMissionStatus的参数定义如下:

参数类型说明
panoramicPhotoStatusAUTELCameraPanoramicPhotoStatus全景拍照当前状态:拍照中,拼接中,暂停,空闲
currentStepNSUInteger全景拍照当前步数,即当前已经拍摄了的张数
totalStepNSUInteger全景拍照总步数,即当前任务总共需要拍摄的张数
proportionfloat全景拍照合成进度
监听相机照片生成文件事件上报
//相机成功生成了新媒体文件
func camera(_ camera: AUTELBaseCamera!, didGenerateNewMediaFile newMedia: AUTELMedia!) {

}

2. 设置全景拍摄类型

使用全景拍照任务管理类句柄DroneConnection.shared.drone?.mainController.navigationManager.panoramicPhotoMissionHandle设置你想要的拍摄类型,拍摄类型可选横屏、竖屏、广角拍和球形拍。

var mission: AUTELPanoramicPhotoMission = AUTELPanoramicPhotoMission.init()
mission.shotType = .horizontal

DroneConnection.shared.drone?.mainController.navigationManager.panoramicPhotoMissionHandler.setPanoramicPhotoInfo(mission, withCompletion: { [weak self] (error) in
if let err = error {

} else {

}
})

3. 开始任务

开始任务包括以下操作步骤

  1. 配置任务数据模型
  2. 置全景拍照类型
  3. 上传任务数据
  4. 开始执行任务
//1.配置任务数据模型
let mission: AUTELPanoramicPhotoMission = AUTELPanoramicPhotoMission()
//2.设置全景拍照类型
mission.shotType = .horizontal
//3.上传任务数据
DroneConnection.shared.drone?.mainController.navigationManager.panoramicPhotoMissionHandler.prepare(mission, withProgress: { progress in

}, withCompletion: { [weak self] error in
guard let selfs = self else { return }

if let err = error {

DispatchQueue.main.async {

}

return
}

//4.开始执行任务 DroneConnection.shared.drone?.mainController.navigationManager.panoramicPhotoMissionHandler.startMissionExecution(completion: { [weak self] startMissionErr in

guard let selfs = self else { return }

if let err = startMissionErr {

DispatchQueue.main.async {

}
} else {
DispatchQueue.main.async {


}
}
})
})

4. 停止任务

全景拍照任务正在执行,可调用以下方法停止任务,停止任务后无人机处于悬停状态。

DroneConnection.shared.drone?.mainController.navigationManager.panoramicPhotoMissionHandler.stopMissionExecution(completion: { [weak self] (error) in
DispatchQueue.main.async {
guard let selfs = self else { return }

}
})

本教程到此结束,再见。