基础相机管理

2024-12-10
4.3 分
3 用户已评分

概述

为方便开发者在 PSDK 的基础上快速开发出控制 DJI 无人机上相机的功能,DJI PSDK 提供了相机管理功能,开发者基于相机管理的接口能够同时设置并获取无人机上多个相机的感光度、光圈、快门和曝光等参数的值,控制相机实现拍照、录像及指点变焦等功能。

相机管理功能

在使用相机管理功能时,开发者需要先初始化 PSDK 中的相机管理功能模块,再根据实际的使用需要设置相机的模式,最后根据用户的使用逻辑实现所需使用的功能,如设置相机的参数或检查功能的状态等。

功能H30H30TH20H20TH20NL1P1PSDKXT2XTSZ30M30M30TM3EM3TL2M3DM3TDM4EM4T
基础信息获取相机类型--
获取固件版本号--
获取相机连接状态--
拍摄功能设置/获取工作模式--
设置/获取拍照模式--
开始/停止拍照--
设置/获取连拍参数-----------------
设置/获取定时拍参数--
开始/停止录像--
相机拍照状态----
多镜头拍照存储设置--------
获取相机的照片格式范围--
设置和获取相机的照片格式--
获取定时拍照的倒计时------
录像状态------
相机当前录制视频的时长------
多镜头录像存储设置----------
获取相机的录像格式范围--
设置和获取相机支持的视频格式--
获取相机视频源范围--
设置相机视频源------
获取相机镜头照片比例范围--
设置相机镜头照片比例--
获取相机镜头视频分辨率和帧率--
设置开启夜景模式-------------
变焦/对焦功能设置/获取对焦模式----
设置/获取对焦目标点-----
开始/停止持续光学变焦-------
设置/获取光学变焦参数-------
设置/获取指点变焦开关------
设置/获取指点变焦系数--------
基于目标点执行指点变焦---------
获取相机手动对焦时所能设置的最小数值----
获取相机手动对焦时所能设置的最大数值----
设置相机的手动对焦值----
相机基础参数设置/获取曝光模式-----
设置/获取 ISO-----
设置/获取光圈-----
设置/获取快门速度-----
设置/获取曝光补偿参数-----
相机镜头的自动曝光锁定-----
重置相机参数--
媒体文件管理下载媒体文件列表--
分片下载媒体文件列表-------
下载媒体文件--
删除媒体文件--
设置和获取自定义文件夹的扩展名------
设置和获取自定义文件的扩展名称-------
获取相机SD卡的存储信息------
格式化存储--
激光测距功能获取激光测距信息------------
红外相机功能设置红外测温坐标点
获取红外测温坐标点的数据
-----------------
设置红外测温区域
获取红外测温区域的数据
-----------------
设置红外变焦参数-----------------
设置和获取增益模式-------------
获取不同增益模式的温度范围-------------
设置 FFC 校准模式-------------
手动触发一次 FFC 校准模式-------------
开启或者关闭联动变焦功能---------------
测光功能设置相机镜头的测光模式-----
相机镜头点测光--

表. 相机支持功能差异概览

使用相机管理功能

1. 相机管理模块初始化

使用 PSDK 开发的负载设备如需控制相机功能,需要先调用DjiCameraManager_Init()接口初始化相机管理模块。

USER_LOG_INFO("--> Step 1: Init camera manager module");
DjiTest_WidgetLogAppend("--> Step 1: Init camera manager module");
returnCode = DjiCameraManager_Init();
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
    USER_LOG_ERROR("Init camera manager failed, error code: 0x%08X\r\n", returnCode);
    goto exitCameraModule;
}

2. 获取相机类型和版本

开发者可通过分别调用DjiCameraManager_GetCameraTypeDjiCameraManager_GetFirmwareVersion接口来获取无人机上指定挂载位置的相机类型和版本。

    USER_LOG_INFO("--> Step 2: Get camera type and version");
    DjiTest_WidgetLogAppend("--> Step 2: Get camera type and version");
    returnCode = DjiCameraManager_GetCameraType(mountPosition, &cameraType);
    if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
        USER_LOG_ERROR("Get mounted position %d camera's type failed, error code: 0x%08X\r\n",
                       mountPosition, returnCode);
        goto exitCameraModule;
    }
    USER_LOG_INFO("Mounted position %d camera's type is %s",
                  mountPosition,
                  s_cameraTypeStrList[DjiTest_CameraManagerGetCameraTypeIndex(cameraType)].cameraTypeStr);

    returnCode = DjiCameraManager_GetFirmwareVersion(mountPosition, &firmwareVersion);
    if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
        USER_LOG_ERROR("Get mounted position %d camera's firmware version failed, error code: 0x%08X\r\n",
                       mountPosition, returnCode);
        goto exitCameraModule;
    }
    USER_LOG_INFO("Mounted position %d camera's firmware is V%d.%d.%d.%d\r\n", mountPosition,
                  firmwareVersion.firmware_version[0], firmwareVersion.firmware_version[1],
                  firmwareVersion.firmware_version[2], firmwareVersion.firmware_version[3]);

3. 设置或获取相机参数

相机管理提供一系列的 Set 或者 Get 接口,可以设置或获取指定挂载位置的相机参数,如可以通过分别调用DjiCameraManager_GetISODjiCameraManager_SetISO接口来获取和设置相机的 ISO 参数。

T_DjiReturnCode returnCode;
E_DjiCameraManagerISO isoDataTemp;

returnCode = DjiCameraManager_GetISO(position, &isoDataTemp);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS &&
    returnCode != DJI_ERROR_CAMERA_MANAGER_MODULE_CODE_UNSUPPORTED_COMMAND) {
    USER_LOG_ERROR("Get mounted position %d camera's iso failed, error code: 0x%08X.",
                   position, returnCode);
    return returnCode;
}

if (isoDataTemp == isoData) {
    USER_LOG_INFO("The mounted position %d camera's iso is already what you expected.",
                  position);
    return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

returnCode = DjiCameraManager_SetISO(position, isoData);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS &&
    returnCode != DJI_ERROR_CAMERA_MANAGER_MODULE_CODE_UNSUPPORTED_COMMAND) {
    USER_LOG_ERROR("Set mounted position %d camera's iso %d failed, "
                   "error code: 0x%08X.", position, isoData, returnCode);
}

return returnCode;

4. 控制相机执行指定的动作

开发者可通过调用对应的接口来执行指定的相机动作,如调用DjiCameraManager_StartShootPhoto接口可以控制指定位置的相机进行拍照的操作。

/*!< start to shoot single photo */
USER_LOG_INFO("Mounted position %d camera start to shoot photo", position);
returnCode = DjiCameraManager_StartShootPhoto(position, DJI_CAMERA_MANAGER_SHOOT_PHOTO_MODE_SINGLE);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
    USER_LOG_ERROR("Mounted position %d camera shoot photo failed, "
                   "error code :0x%08X", position, returnCode);
}

5. 订阅相机实时三维点云数据

注意: 仅支持 L2 相机,可搭载在 M300 RTK,M350 RTK 上。

开发者可以通过调用以下 Sample 来订阅 L2 相机的实时三维点云数据,注意在订阅实时三维点云数据时,需要关闭 DJI Pilot 2,否则 PSDK 将无法订阅 L2 相机的三维点云数据。

returnCode = DjiTest_CameraManagerSubscribePointCloud(mountPosition);
if (returnCode != DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
    USER_LOG_ERROR("Fail to download point cloud. position %d, error code 0x%08llX",
               mountPosition, returnCode);
    goto exitCameraModule;
}

6. 下载和删除相机原始媒体文件

开发者可以通过调用以下 Sample 来下载和删除大疆相机拍摄的媒体文件,支持下载的媒体文件格式包括:JPG、DNG、MOV、MP4、LDRT(点云抽稀文件,仅 L2 相机支持),LDR(点云原始文件,仅 L2 相机支持),其中 LDRT 和 LDR 格式的媒体文件不支持删除。

DjiTest_CameraManagerMediaDownloadAndDeleteMediaFile(mountPosition);
若您对文档有意见或疑惑,点击可快速反馈,我们会与您联系。