PSDK 迁移指南

2023-09-18
4 分
3 用户已评分

版本迁移目的

PSDK 3.X 为开发者提供了集成的开发拓展包,无需再将负载控制和机载控制分为两个模块独立开发,DJI SDK 开发团队已将原 OSDK 4.x 和 PSDK 2.X 功能集合到 PSDK 软件包,不再单独更新 OSDK 和 PSDK。此外,PSDK 3.X 不兼容 OSDK 拓展包内容,但向下兼容了 PSDK 2.X 的内容。

将你的项目迁移到 PSDK 3.X 有诸多好处,包括但不限于:

  • 更完整的技术文档,对开发者更友好的技术细节描述和功能级 Sample 代码
  • 体验持续维护更新的拓展包,更丰富实用的功能和更及时的技术支持
  • 向后兼容至 PSDK 2.X,可以将已开发的功能直接迁移
  • 开发难度更低,针对不同物理接口使用统一的拓展包
  • 更频繁的发布节奏,更稳定的新版本拓展包

简介

PSDK 3.X (DJI Payload SDK 3.X) 旨在让开发者能更轻松地将各类专用负载与无人机飞行平台相结合,拓展无人机的负载能力,便捷地对无人机进行二次开发。PSDK 3.X 不再将负载开发和应用开发的概念单独拆分,意味着开发者无需再将负载控制和机载控制分为两个模块独立开发,能够更便捷地根据行业的应用需求,基于 PSDK 3.X 提供的功能接口,开发出满足不同细分领域的负载设备。

  • 在 M350 RTK 机型上,PSDK 3.X 既可以用来连接至 E-Port 端口开发 OSDK 功能,也可以连接至 PSDK 云台端口集成第三方负载设备,分别继承并拓展了原本 OSDK 4.X 和 PSDK 2.X 上的功能。

  • 在 M300 RTK 机型上,PSDK 3.X 既可以用来连接至 OSDK (Onboard SDK) 端口开发 OSDK 功能,也可以连接至 PSDK 云台端口集成第三方负载设备,分别继承并拓展了原本 OSDK 4.X 和 PSDK 2.X 上的功能。

  • 在 M30/M30T 和 M3E/M3T 机型上,无人机的物理端口不再区分 OSDK 和 PSDK,仅提供一个 E-Port 端口,且仅支持 PSDK 3.X。此端口功能包括控制功能(如飞行控制,相机管理,云台管理,获取相机视频流,下载媒体文件)和集成负载设备功能(如集成第三方相机)。

版本迁移主要涉及 M300 RTK 机型,因其 OSDK 端口和 PSDK 端口独立,且旧版本是独立的开发包。已经在 M300 RTK 上完成 OSDK 和 PSDK 功能或设备的开发者,需要从旧版本 OSDK 4.X 和 PSDK 2.X 迁移到官方维护的 PSDK 3.X 版本,可以与 DJI SDK版本同步,方便适配 SDK 新增的功能以及后续的版本维护。

M30/M30T,M3E/M3T 行业机型仅适配 PSDK 3.X 版本,不涉及版本迁移。开发者开发时,直接使用 PSDK 3.X 开发即可。

功能对比

功能名称PSDK 3.XPSDK 2.XOSDK 4.X
日志管理
信息管理
基础相机功能
基础相机管理
云台功能
云台管理
电源管理
飞行控制
自定义控件
HMS 功能
时间同步
数据传输
媒体文件元数据
视频流传输
回放下载
X-port 功能
获取相机码流
本地升级
精准定位
SDK互联互通
运动规划
喊话器控件

PSDK 代码结构

Payload SDK 3.X 开发包结构延续了原 Payload SDK 2.X 版本代码结构。PSDK 主体部分在 psdk_lib 内,包含 PSDK lib 库的头文件和闭源 lib 库文件。samples 是基于PSDK lib 头文件和 lib 封装的功能级 sample,功能迁移主要关注 sample 以及对应封装的头文件。

Payload-SDK-master
├── CMakeLists.txt
├── doc
│   ├── dji_sdk_code_style
│   └── simple_model
├── EULA.txt
├── LICENSE.txt
├── psdk_lib
│   ├── include
│   └── lib
├── README.md
├── samples
│   ├── sample_c
│   └── sample_c++
└── tools
	└── file2c

说明:

  • CMakeLists.txt:编译文件,用 Cmake 构建工程。
  • dji_sdk_code_style:SDK 代码相关文档,大致介绍了 PSDK 代码风格。
  • simple_model:其中 simple_model 中包含了无人机、PSDK 开发组件、OSDK 转接板的 3D 模型图,便于完成开发后定型产品结构。
  • EULA.txt:最终用户许可协议(end-user license agreements)。
  • LICENSE.txt:LICENSE 说明,内部包含了一个完整 tree 结构图。
  • psdk_lib: PSDK 的核心库文件,PSDK 3.X 以闭源库方式提供,在此文件夹下提供了各个平台的库(lib)以及头文件(include)。
  • README.md:说明文件,包括版本更新和功能更新的信息。
  • samples:PSDK 官方 sample 代码示例,此部分 sample 代码均以开源代码呈现,可以通过 sample 来学习 API 的调用方法,以及功能实现的参考逻辑。
  • tools:第三方工具,提供了一个 file2c 的工具。PSDK 中 FreeRTOS 平台使用 widget 功能会需要使用此工具将文件进行转换。

PSDK 2.X 迁移至PSDK 3.X

PSDK 3.X PSDK lib 向后兼容了 PSDK 2.X 的头文件。迁移后的文件结构见下表,主要体现在如下两个部分:

  • 原 PSDK 2.X 中的 lib 库文件需替换为 PSDK 3.X 中的新 lib 库文件
  • 原PSDK 2.X 中头文件被兼容在 PSDK 3.X 拓展包中的 legacy_psdk2.x
./psdk_lib/
├── include
│   ├── dji_aircraft_info.h
│   ├── dji_camera_manager.h
│   ├── dji_core.h
│   ├── dji_error.h
│   ├── dji_fc_subscription.h
│   ├── dji_flight_controller.h
│   ├── dji_gimbal.h
│   ├── dji_gimbal_manager.h
│   ├── dji_high_speed_data_channel.h
│   ├── dji_hms.h
│   ├── dji_hms_info_table.h
│   ├── dji_liveview.h
│   ├── dji_logger.h
│   ├── dji_low_speed_data_channel.h
│   ├── dji_mop_channel.h
│   ├── dji_payload_camera.h
│   ├── dji_perception.h
│   ├── dji_platform.h
│   ├── dji_positioning.h
│   ├── dji_power_management.h
│   ├── dji_time_sync.h
│   ├── dji_typedef.h
│   ├── dji_upgrade.h
│   ├── dji_version.h
│   ├── dji_waypoint_v2.h
│   ├── dji_waypoint_v2_type.h
│   ├── dji_widget.h
│   ├── dji_xport.h
│   └── legacy_psdk2.x
│       ├── psdk_aircraft_info.h
│       ├── psdk_core.h
│       ├── psdk_data_channel.h
│       ├── psdk_data_subscription.h
│       ├── psdk_data_transmission.h
│       ├── psdk_error.h
│       ├── psdk_gimbal.h
│       ├── psdk_logger.h
│       ├── psdk_mop_channel.h
│       ├── psdk_payload_camera.h
│       ├── psdk_payload_collaboration.h
│       ├── psdk_platform.h
│       ├── psdk_positioning.h
│       ├── psdk_power_management.h
│       ├── psdk_product_info.h
│       ├── psdk_time_sync.h
│       ├── psdk_typedef.h
│       ├── psdk_upgrade.h
│       ├── psdk_version.h
│       ├── psdk_widget.h
│       └── psdk_xport.h
└── lib
    ├── aarch64-himix100-linux-gcc
    │   └── libpayloadsdk.a
    ├── aarch64-linux-android-gcc
    │   └── libpayloadsdk.a
    ├── aarch64-linux-gnu-gcc
    │   └── libpayloadsdk.a
    ├── armcc_cortex-m4
    │   └── libpayload.lib
    ├── arm-himix100-linux-gcc
    │   └── libpayloadsdk.a
    ├── arm-himix200-linux-gcc
    │   └── libpayloadsdk.a
    ├── arm-hisiv300-linux-gcc
    │   └── libpayloadsdk.a
    ├── arm-hisiv400-linux-gcc
    │   └── libpayloadsdk.a
    ├── arm-hisiv500-linux-gcc
    │   └── libpayloadsdk.a
    ├── arm-hisiv600-linux-gcc
    │   └── libpayloadsdk.a
    ├── arm-linux-androideabi-gcc
    │   └── libpayloadsdk.a
    ├── arm-linux-gnueabi-gcc
    │   └── libpayloadsdk.a
    ├── arm-linux-gnueabihf-gcc
    │   └── libpayloadsdk.a
    ├── arm-none-eabi-gcc
    │   └── libpayloadsdk.a
    └── x86_64-linux-gnu-gcc
        └── libpayloadsdk.a

OSDK 4.X 迁移至PSDK 3.X

PSDK 3.X 中没有兼容 OSDK 4.X 的内容,进行迁移时主要关注 osdk-coresample 部分,其中仅 osdk-corelinker 以闭源库方式提供。

  • 主要功能API:osdk-core/api 对应 PSDK 3.X psdk_lib

  • OSDK sample 对应 PSDK samples,是基于 osdk-core/api 中功能 API 的封装。

./Onboard-SDK-master
├── CMakeLists.txt
├── doc
│   └── README.txt
├── Doxyfile
├── EULA.txt
├── License.txt
├── osdk-core
│   ├── advanced-sensing
│   ├── api
│   ├── CMakeLists.txt
│   ├── cmake-modules
│   ├── config_example.json
│   ├── contrib
│   ├── linker
│   ├── logger
│   ├── modules
│   ├── platform
│   ├── README.md
│   └── utility
├── README.md
├── sample
│   ├── core
│   └── platform
└── utility
    ├── bin
    └── ReadMe.md

PSDK 3.X 与 OSDK 4.X 的头文件对应关系

功能OSDK 头文件PSDK lib 头文件
飞行控制dji_flight_controller.hpp/dji_control.hppdji_flight_controller.h
航线任务dji_waypoint_v2.hppdji_waypoint_v2.h
遥测订阅dji_telemetry.hpp/dji_subscription.hppdji_fc_subscription.h
数据通道(OSDK ⇋ MSDK)dji_mobile_device.hppdji_low_speed_data_channel.h
数据通道(OSDK ⇋ PSDK)dji_payload_device.hppdji_low_speed_data_channel.h
相机管理dji_camera_manager.hppdji_camera_manager.h
云台管理dji_gimbal_manager.hppdji_gimbal_manager.h
健康管理dji_hms.hppdji_hms
获取视频流dji_liveview.hppdji_liveview.h
获取感知灰度图dji_perception.hppdji_perception.h
SDK互联互通dji_mop_pipeline.hppdji_mop_channel.h

说明:

  1. 列表对应主要功能的头文件。
  2. OSDK数据通道分为OSDK ⇋ MSDK,OSDK ⇋ PSDK,对应的是 PSDK 3.X 中低速数据通道和串口传输,PSDK 3.X 中简化了 API,通过参数区分。
  3. SDK 互联互通功能,OSDK 对应的代码路径:\Onboard-SDK-master\osdk-core\modules\inc\mop
  4. OSDK 获取视频流和感知灰度图的代码路径:\Onboard-SDK-master\osdk-core\advanced-sensing\api

OSDK 和 PSDK 物理端口映射关系

OSDK 端口配置文件:UserConfig.txt

app_id :                      //Onboard SDK APPINFO APPID
app_key :                     //Onboard SDK APPINFO APPKEY
device :                      // 串口设备端口 (TTL)
baudrate :                    // 串口使用波特率
acm_port :                    // 双 A USB 对应的 ACM 端口

PSDK APPINFO 设置代码文件:dji_sdk_app_info.h

PSDK 端口设置文件:hal_uart.h

app_id 与 app_key 的信息可以从链接open in new window 中“创建负载应用”处获得。

说明:

  1. LINUX_UART_DEV1:对应 UserConfig.txt 中 device,表示机载计算机上连接无人机 TTL 引脚的串口端口。

  2. LINUX_UART_DEV2:对应 UserConfig.txt 中 acm_port,表示机载计算机连接无人机端 USB 的 USB 端口。仅 M300 RTK OSDK type C 端口使用。

  3. M300 RTK OSDK 开发迁移到 PSDK 3.X,需在 dji_sdk_config.h 设置。

    #define CONFIG_HARDWARE_CONNECTION         DJI_USE_UART_AND_USB_BULK_DEVICE
    
  4. M300 RTK PSDK2.x开发迁移到PSDK 3.X,需在dji_sdk_config.h设置。

    #define CONFIG_HARDWARE_CONNECTION        DJI_USE_UART_AND_NETWORK_DEVICE
    
若您对文档有意见或疑惑,点击可快速反馈,我们会与您联系。