DJI SDK 代码分析

本文分析了DJI SDK的接口和技术实现,涵盖了硬件拓扑、控制功能、管理功能和扩展功能,包括时间同步、基础控制、运动规划、消息管理、云台和相机管理等。还介绍了SDK的激活流程和分层结构,以及后台的技术分析,如广播和请求应答机制。

type
status
date
slug
summary
tags
category
icon
password

1 概述

分析DJI SDK提供的接口,反推技术实现,帮助我们更好地理解和开发DJI SDK

2 硬件拓扑

notion image

3 功能

3.1 控制类功能

3.1.1 时间同步

获取NMEA数据:获取无人机使用的定位系统的数据,如GPS、伽利略、北斗及GLONASS 等
获取PPS数据:获取无人机的硬件触发脉冲信号
获取UTC时间:获取统一的UTC时间

3.1.2 基础控制

设置或获取无人机飞行控制器的参数,如返航高度,避障状态等
执行基本的飞行任务,如起飞、降落及返航等
无人机基础控制功能,如速度控制、姿态控制和位置控制
起飞降落
自动起飞
自动降落
取消自动降落
降落确认
强制降落
锁定:    解锁|上锁
返航:     返航|取消返航
置无人机使用的坐标系
水平控制的模式
垂直控制的模式
yaw角度控制的模式
悬停模式

3.1.3 运动规划

航点任务:控制DJI 的无人机按照预设的多个航点实现自主飞行
热点任务:控制无人机围绕设置的兴趣点环绕飞行
航点
航点数量(65535)
航点类型
曲率飞行
直线飞行
动作(任务动作)
动作信息
动作数量
动作管理
动作触发
速度控制

3.2 管理类功能

3.2.1 消息管理

广播:使用OSDK 开发的应用程序能够接收无人机主动推送给其他模块的数据,同时将第三方传感器的数据广播给第三方信息接收设备
消息订阅:使用OSDK 开发的应用程序能够记录用户所需订阅的数据

3.2.2 云台管理

云台控制:控制云台转动的角度和角速度
信息获取:获取云台当前的角度和角速度

3.2.3 相机管理

参数设置:设置相机如光圈、曝光时间及分辨率等各项参数
相机控制:控制相机实现拍照、录像及指点变焦等功能
码流获取:获取相机的RGB 码流和H.264 码流

3.3 拓展类功能

3.3.1 SDK 互联互通

与基于MSDK 开发的移动端APP 间通信
与基于PSDK 开发的负载设备间通信

3.3.2 高级视觉

对象识别
获取感知灰度图

4 激活流程

notion image
图 DJ第三方开发权限激活流程
飞机平台通过网络或者串口链接到DJ助手,DJ助手链接到DJ云,把飞机绑定到自己的账号上,买对应的功能,然后获取到应用ID和应用KEY,然后用KEY激活对应的功能。

5 SDK分层

notion image
图 sdk分层框图

5.1 Hal层

Hal(Hardware Abstraction Layer,硬件接口层)是OSDK 硬件接口抽象层,位于操作系统、应用程序和硬件接口间,开发者需要按照指定接口中的函数原型,实现并将适配Hal 层的函数注册到应用程序中,使基于OSDK 开发的应用程序通过Hal 层直接访问不同计算平台硬件的底层资源,并与无人机通信。
串口Demo
notion image
自己实现的函数
notion image
注册回调
notion image
注册到底层

5.2 Osal层

Osal(Operating System Abstraction Layer,操作系统抽象层)是OSDK 的操作系统抽象层,位于应用程序和操作系统间。开发者需要按照PsdkPlatform_RegOsalHandler()接口中的函数原型,实现并将适配Osal 层的函数注册到应用程序中,使基于OSDK 开发的应用程序通过Osal 层直接访问操作系统以及操作系统内核的资源,将应用程序移植到不同的操作系统上。
Demo
notion image
系统函数linux实现
notion image
回调注册
notion image
注册到底层

6 后台技术分析

6.1 广播

用订阅发布模式,把所有飞机自身的数据和传感器产生的数据都广播出来。
订阅规则:
消息订阅功能最多支持订阅0Hz、1Hz、10Hz、50Hz、100Hz,5类频率,每个订阅项只能被订阅一次。
指定订阅频率时,任何参数的订阅频率不能小于或等于0 ,相同订阅频率的主题的数据长度总和须小于或等于242。
函数接口:
notion image
广播初始化接口
notion image
启动广播,第一个是异步接口,第二个是同步接口
notion image
移除订阅消息,取消广播

6.2 请求应答

请求应答用于功能设置和参数查询地方。参考6.1请求应答功能底层也是注册回调函数然后响应,只不过用的同步函数接口。
DEMO 起飞
notion image
起飞函数逻辑
notion image
notion image
notion image
notion image
最底层调用libdji-linker.a库

6.3 libdji-linker.a库分析

notion image
图 libdji-linker.a的部分函数地址
通过用readelf工具分析,库中没有socket相关函数,反而有OsdkMsgq_xxx函数,可以得出结论这里是没有直接用网络通信,或者依赖其他库进行数据传递。

6.4 其数据交互接口函数

notion image

6.5 技术框架

notion image
Loading...