PSDK 迁移指南
版本迁移目的
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.X | PSDK 2.X | OSDK 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-core
和 sample
部分,其中仅 osdk-core
中 linker
以闭源库方式提供。
主要功能API:
osdk-core/api
对应 PSDK 3.Xpsdk_lib
OSDK
sample
对应 PSDKsamples
,是基于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.hpp | dji_flight_controller.h |
航线任务 | dji_waypoint_v2.hpp | dji_waypoint_v2.h |
遥测订阅 | dji_telemetry.hpp/dji_subscription.hpp | dji_fc_subscription.h |
数据通道(OSDK ⇋ MSDK) | dji_mobile_device.hpp | dji_low_speed_data_channel.h |
数据通道(OSDK ⇋ PSDK) | dji_payload_device.hpp | dji_low_speed_data_channel.h |
相机管理 | dji_camera_manager.hpp | dji_camera_manager.h |
云台管理 | dji_gimbal_manager.hpp | dji_gimbal_manager.h |
健康管理 | dji_hms.hpp | dji_hms |
获取视频流 | dji_liveview.hpp | dji_liveview.h |
获取感知灰度图 | dji_perception.hpp | dji_perception.h |
SDK互联互通 | dji_mop_pipeline.hpp | dji_mop_channel.h |
说明:
- 列表对应主要功能的头文件。
- OSDK数据通道分为OSDK ⇋ MSDK,OSDK ⇋ PSDK,对应的是 PSDK 3.X 中低速数据通道和串口传输,PSDK 3.X 中简化了 API,通过参数区分。
- SDK 互联互通功能,OSDK 对应的代码路径:\Onboard-SDK-master\osdk-core\modules\inc\mop
- 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 的信息可以从链接 中“创建负载应用”处获得。
说明:
LINUX_UART_DEV1:对应 UserConfig.txt 中 device,表示机载计算机上连接无人机 TTL 引脚的串口端口。
LINUX_UART_DEV2:对应 UserConfig.txt 中 acm_port,表示机载计算机连接无人机端 USB 的 USB 端口。仅 M300 RTK OSDK type C 端口使用。
M300 RTK OSDK 开发迁移到 PSDK 3.X,需在 dji_sdk_config.h 设置。
#define CONFIG_HARDWARE_CONNECTION DJI_USE_UART_AND_USB_BULK_DEVICE
M300 RTK PSDK2.x开发迁移到PSDK 3.X,需在dji_sdk_config.h设置。
#define CONFIG_HARDWARE_CONNECTION DJI_USE_UART_AND_NETWORK_DEVICE