代码结构
从DJI PSDK github上获取PSDK,然后用Linux 工具 tree来查看PSDK包,命令: tree -d Payload-SDK-master(因为包含的文件较多,此处-d打开文件夹结构) 结果输出:
Payload-SDK-master
├── doc
│ ├── dji_sdk_code_style
│ └── simple_model
├── psdk_lib
│ ├── include
│ │ └── legacy_psdk2.x
│ └── lib
│ ├── aarch64-himix100-linux-gcc
│ ├── aarch64-linux-android-gcc
│ ├── aarch64-linux-gnu-gcc
│ ├── armcc_cortex-m4
│ ├── arm-himix100-linux-gcc
│ ├── arm-himix200-linux-gcc
│ ├── arm-hisiv300-linux-gcc
│ ├── arm-hisiv400-linux-gcc
│ ├── arm-hisiv500-linux-gcc
│ ├── arm-hisiv600-linux-gcc
│ ├── arm-linux-androideabi-gcc
│ ├── arm-linux-gnueabi-gcc
│ ├── arm-linux-gnueabihf-gcc
│ ├── arm-none-eabi-gcc
│ └── x86_64-linux-gnu-gcc
├── samples
│ ├── sample_c
│ │ ├── module_sample
│ │ │ ├── camera_emu
│ │ │ │ ├── dji_media_file_manage
│ │ │ │ └── media_file
│ │ │ ├── camera_manager
│ │ │ ├── data_transmission
│ │ │ ├── fc_subscription
│ │ │ ├── flight_control
│ │ │ ├── gimbal_emu
│ │ │ ├── gimbal_manager
│ │ │ ├── hms
│ │ │ ├── liveview
│ │ │ ├── mop_channel
│ │ │ │ └── mop_channel_test_file
│ │ │ ├── payload_collaboration
│ │ │ ├── perception
│ │ │ ├── positioning
│ │ │ ├── power_management
│ │ │ ├── time_sync
│ │ │ ├── upgrade
│ │ │ ├── utils
│ │ │ ├── waypoint_v2
│ │ │ ├── widget
│ │ │ │ ├── widget_file
│ │ │ │ │ ├── cn_big_screen
│ │ │ │ │ └── en_big_screen
│ │ │ │ └── widget_file_c
│ │ │ │ └── en_big_screen
│ │ │ ├── widget_interaction_test
│ │ │ │ ├── widget_file
│ │ │ │ │ ├── cn_big_screen
│ │ │ │ │ └── en_big_screen
│ │ │ │ └── widget_file_c
│ │ │ │ └── en_big_screen
│ │ │ └── xport
│ │ └── platform
│ │ ├── linux
│ │ │ ├── common
│ │ │ │ ├── 3rdparty
│ │ │ │ │ └── ffmpeg
│ │ │ │ ├── monitor
│ │ │ │ ├── osal
│ │ │ │ └── upgrade_platform_opt
│ │ │ └── manifold2
│ │ │ ├── application
│ │ │ ├── build
│ │ │ │ ├── bin
│ │ │ │ └── CMakeFiles
│ │ │ │ ├── 3.16.3
│ │ │ │ │ └── CompilerIdC
│ │ │ │ │ └── tmp
│ │ │ │ ├── CMakeTmp
│ │ │ │ └── dji_sdk_demo_linux.dir
│ │ │ │ ├── application
│ │ │ │ ├── hal
│ │ │ │ └── home
│ │ │ │ └── work
│ │ │ │ └── Payload-SDK-master
│ │ │ │ └── samples
│ │ │ │ └── sample_c
│ │ │ │ ├── module_sample
│ │ │ │ │ ├── camera_emu
│ │ │ │ │ │ └── dji_media_file_manage
│ │ │ │ │ ├── camera_manager
│ │ │ │ │ ├── data_transmission
│ │ │ │ │ ├── fc_subscription
│ │ │ │ │ ├── flight_control
│ │ │ │ │ ├── gimbal_emu
│ │ │ │ │ ├── gimbal_manager
│ │ │ │ │ ├── hms
│ │ │ │ │ ├── liveview
│ │ │ │ │ ├── mop_channel
│ │ │ │ │ ├── payload_collaboration
│ │ │ │ │ ├── perception
│ │ │ │ │ ├── positioning
│ │ │ │ │ ├── power_management
│ │ │ │ │ ├── time_sync
│ │ │ │ │ ├── upgrade
│ │ │ │ │ ├── utils
│ │ │ │ │ ├── waypoint_v2
│ │ │ │ │ ├── widget
│ │ │ │ │ ├── widget_interaction_test
│ │ │ │ │ └── xport
│ │ │ │ └── platform
│ │ │ │ └── linux
│ │ │ │ └── common
│ │ │ │ ├── monitor
│ │ │ │ ├── osal
│ │ │ │ └── upgrade_platform_opt
│ │ │ └── hal
│ │ └── rtos_freertos
│ │ ├── common
│ │ │ └── osal
│ │ └── stm32f4_discovery
│ │ ├── application
│ │ ├── bootloader
│ │ ├── drivers
│ │ │ ├── BSP
│ │ │ ├── CMSIS
│ │ │ │ ├── Device
│ │ │ │ │ └── ST
│ │ │ │ │ └── STM32F4xx
│ │ │ │ │ ├── Include
│ │ │ │ │ └── Source
│ │ │ │ │ └── Templates
│ │ │ │ │ ├── arm
│ │ │ │ │ ├── gcc
│ │ │ │ │ └── iar
│ │ │ │ │ └── linker
│ │ │ │ └── Include
│ │ │ ├── STM32F4xx_HAL_Driver
│ │ │ │ ├── Inc
│ │ │ │ │ └── Legacy
│ │ │ │ └── Src
│ │ │ └── USB_HOST
│ │ │ ├── App
│ │ │ └── Target
│ │ ├── hal
│ │ ├── middlewares
│ │ │ ├── ST
│ │ │ │ └── STM32_USB_Host_Library
│ │ │ │ ├── Class
│ │ │ │ │ └── CDC
│ │ │ │ │ ├── Inc
│ │ │ │ │ └── Src
│ │ │ │ └── Core
│ │ │ │ ├── Inc
│ │ │ │ └── Src
│ │ │ └── Third_Party
│ │ │ └── FreeRTOS
│ │ │ └── Source
│ │ │ ├── CMSIS_RTOS
│ │ │ ├── include
│ │ │ └── portable
│ │ │ ├── GCC
│ │ │ │ └── ARM_CM4F
│ │ │ ├── MemMang
│ │ │ └── RVDS
│ │ │ ├── ARM7_LPC21xx
│ │ │ ├── ARM_CA9
│ │ │ ├── ARM_CM0
│ │ │ ├── ARM_CM3
│ │ │ ├── ARM_CM4F
│ │ │ ├── ARM_CM4_MPU
│ │ │ └── ARM_CM7
│ │ │ └── r0p1
│ │ └── project
│ │ ├── armgcc
│ │ ├── mdk
│ │ └── mdk_bootloader
│ └── sample_c++
│ ├── module_sample
│ │ ├── liveview
│ │ │ └── data
│ │ │ └── tensorflow
│ │ └── perception
│ └── platform
│ └── linux
│ ├── common
│ │ └── osal
│ └── manifold2
│ ├── application
│ └── hal
└── tools
└── file2c
此结构树充分的显示了SDK开发包的内容,后续的代码阅读和介绍基本都会围绕此结构来进行说明。
看看二级level
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构建工程。
-
doc dji_sdk_code_style:SDK代码相关文档,大致介绍了下DJI PSDK代码风格,没什么实际用途。 simple_model:其中simple_model中包含了无人机、PSDK开发组件、OSDK转接板的3D模型图,在完成开发后定型产品结构时可能会用到。
-
EULA.txt 最终用户许可协议,end-user license agreements,英文缩写:EULA
-
LICENSE.txt LICENSE说明。里面也包含了一个完整tree结构图,可以打开看看。
-
psdk_lib PSDK的核心库文件,PSDK3.0是闭源库方式提供,在此文件夹下提供了各个平台的库(lib)以及头文件(include)。
-
README.md 说明文件,包括一些版本更新、功能更新的信息。
-
samples PSDK官方sample代码示例,此部分sample代码均以开源代码呈现,我们可以通过sample来学习API是怎么调用的,以及功能实现的参考逻辑。
-
tools 第三方工具,提供了一个file2c的工具。PSDK中FreeRTOS平台使用widget功能会需要将文件进行转换。
PSDK lib
tree ./psdk_lib/
./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
说明:
-
include是PSDK lib的头文件,每个文件对应着相关功能的API,API均有详细的解释说明。此系列头文件可以当做官方代码文档阅读,API的使用均需要按照解释说明来调用。
-
legacy_psdk2.x是用于与PSDK 2.2.1兼容的头文件,新使用PSDK 3.0开发,无需关注此部分,直接使用新的接口API即可。
-
lib下是不同平台的闭源库文件,API通过include头文件提供。文件夹名对应着交叉编译链接名,开发时需要根据实际运行平台来选择对应的.a文件。
比如:
x86_64-linux-gnu-gcc是妙算2C(X86_64) 的Linux平台,使用X86安装的虚拟机也是此平台
aarch64-linux-gnu-gcc是妙算2G(ARMv8)的Linux平台
-
原则上将上述库文件和头文件整合到开发工程中就可以开发PSDK功能应用。
-
使用的平台没有上述提供的库对应,需要给DJI SDK官方提需求,开发者无法自行移植lib库。
其中dji_error是错误码定义文件,开发或开发完成使用中,错误码都是比较重要的提示,可以帮助问题自查和SDK问题的反馈。建议开发过程中要熟悉错误码定义,以及常见错误码的问题解决。
sample
tree -d samples/,也因为文件较多,通过-d打开结构树
samples/
├── sample_c
│ ├── module_sample
│ │ ├── camera_emu
│ │ │ ├── dji_media_file_manage
│ │ │ └── media_file
│ │ ├── camera_manager
│ │ ├── data_transmission
│ │ ├── fc_subscription
│ │ ├── flight_control
│ │ ├── gimbal_emu
│ │ ├── gimbal_manager
│ │ ├── hms
│ │ ├── liveview
│ │ ├── mop_channel
│ │ │ └── mop_channel_test_file
│ │ ├── payload_collaboration
│ │ ├── perception
│ │ ├── positioning
│ │ ├── power_management
│ │ ├── time_sync
│ │ ├── upgrade
│ │ ├── utils
│ │ ├── waypoint_v2
│ │ ├── widget
│ │ │ ├── widget_file
│ │ │ │ ├── cn_big_screen
│ │ │ │ └── en_big_screen
│ │ │ └── widget_file_c
│ │ │ └── en_big_screen
│ │ ├── widget_interaction_test
│ │ │ ├── widget_file
│ │ │ │ ├── cn_big_screen
│ │ │ │ └── en_big_screen
│ │ │ └── widget_file_c
│ │ │ └── en_big_screen
│ │ └── xport
│ └── platform
│ ├── linux
│ │ ├── common
│ │ │ ├── 3rdparty
│ │ │ │ └── ffmpeg
│ │ │ ├── monitor
│ │ │ ├── osal
│ │ │ └── upgrade_platform_opt
│ │ └── manifold2
│ │ ├── application
│ │ └── hal
│ └── rtos_freertos
│ ├── common
│ │ └── osal
│ └── stm32f4_discovery
│ ├── application
│ ├── bootloader
│ ├── drivers
│ │ ├── BSP
│ │ ├── CMSIS
│ │ │ ├── Device
│ │ │ │ └── ST
│ │ │ │ └── STM32F4xx
│ │ │ │ ├── Include
│ │ │ │ └── Source
│ │ │ │ └── Templates
│ │ │ │ ├── arm
│ │ │ │ ├── gcc
│ │ │ │ └── iar
│ │ │ │ └── linker
│ │ │ └── Include
│ │ ├── STM32F4xx_HAL_Driver
│ │ │ ├── Inc
│ │ │ │ └── Legacy
│ │ │ └── Src
│ │ └── USB_HOST
│ │ ├── App
│ │ └── Target
│ ├── hal
│ ├── middlewares
│ │ ├── ST
│ │ │ └── STM32_USB_Host_Library
│ │ │ ├── Class
│ │ │ │ └── CDC
│ │ │ │ ├── Inc
│ │ │ │ └── Src
│ │ │ └── Core
│ │ │ ├── Inc
│ │ │ └── Src
│ │ └── Third_Party
│ │ └── FreeRTOS
│ │ └── Source
│ │ ├── CMSIS_RTOS
│ │ ├── include
│ │ └── portable
│ │ ├── GCC
│ │ │ └── ARM_CM4F
│ │ ├── MemMang
│ │ └── RVDS
│ │ ├── ARM7_LPC21xx
│ │ ├── ARM_CA9
│ │ ├── ARM_CM0
│ │ ├── ARM_CM3
│ │ ├── ARM_CM4F
│ │ ├── ARM_CM4_MPU
│ │ └── ARM_CM7
│ │ └── r0p1
│ └── project
│ ├── armgcc
│ ├── mdk
│ └── mdk_bootloader
└── sample_c++
├── module_sample
│ ├── liveview
│ │ └── data
│ │ └── tensorflow
│ └── perception
└── platform
└── linux
├── common
│ └── osal
└── manifold2
├── application
└── hal
根据以上结构,我们展开解释或者说明:
-
sample提供了linux C和C++ 实现方式。两者差异在sample应用的功能以及应用功能的实现方式,C++调用库API(psdk_lib)与Linux C完全一致,应用及环境配置也一致。
-
sample C++提供的sample并没有完全覆盖到所有的功能sample,即C++ sample没有C sample完整。C++示例主要是使用到opencv等第三方库,用于图像处理,用C++兼容性会更好。
-
sample C中提供了rtos_freertos,用作STM32平台。psdk_lib库及API与Linux基本一致,部分功能不支持STM32平台。比如MOP,高速数据通道,视频流等。差异主要是STM32平台的性能,通信方式的差异(USB或网络socket)等。
-
STM32平台仅提供FreeRTOS平台支持,不支持裸板开发PSDK 3.0。
-
sample部分是可以根据开发者需求自己更改或编写,所以sample C++也可以自行补全各功能的实现。
-
评论
0 条评论
请登录写评论。