全景拍照任务教程文档
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的参数定义如下:
参数 | 类型 | 说明 |
---|---|---|
panoramicPhotoStatus | AUTELCameraPanoramicPhotoStatus | 全景拍照当前状态:拍照中,拼接中,暂停,空闲 |
currentStep | NSUInteger | 全景拍照当前步数,即当前已经拍摄了的张数 |
totalStep | NSUInteger | 全景拍照总步数,即当前任务总共需要拍摄的张数 |
proportion | float | 全景拍照合成进度 |
监听相机照片生成文件事件上报
//相机成功生成了新媒体文件
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.配置任务数据模型
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 }
}
})
本教程到此结束,再见。