关键词:PSDK开发,PSDK功能
通俗来讲,DJI Payload SDK 拓展了接入DJI 无人机负载接口,开发者可以灵活的开发自己感兴趣的负载,再接入到DJI 无人机上。接入无人机的负载可以通过无人机来控制联动,并可以通过DJI无线链路将负载数据传送给地面端(APP端)。
既然涉及负载接入,需要有一定的接入标准,标准涉及硬件和软件,硬件即DJI提供的负载转接环,软件可以简单的将PSDK当做协议标准,毕竟负载上软件是通过PSDK实现与飞机的通信的。
跟着官网了解PSDK的功能和使用:
https://developer.dji.com/cn/doc ... b-8d16-713ab6c37c2c
根据开发者官网提供的资料,结合自己的理解先概览一下PSDK的使用,具体问题后续再细研究。以下基于skyport v2开发者套件和PSDK2.2.0来谈
1、设备连接:
a,先放个官网的链接:https://developer.dji.com/cn/doc ... 4-ae2b-2553137a93ae
理解一下,PSDK是基于飞机平台开发三方负载,实现的功能可与飞机以及遥控端进行通信。所以硬件接口要符合官方定义的接口,第三方负载再通过PSDK协议与飞机通信。所以硬件连接中最重要的部分就是skyport引脚接口说明
通过引脚接口,开发者再根据自己的负载设计硬件接入即可使用。开发者套件中的接口拓展板与skyport v1套件中开发板不一样了,仅起接口拓展作用,不能直接运行PSDK及负载应用程序。
skyport v2排线接口的型号貌似在官网上没有找到,但是这个型号与X-PORT是完全一致的,X-PORT用户手册中有说明该型号:S-50420-020HKH0-001
开发过程中使用接口拓展板来连接开发平台就变得相当方便了,因本人采用PC Linux虚拟机玩PSDK,设备连接简单的说明一下。
USB-TTL J10 skyport v2
PC Linux ------------拓展转接板------------------M300
RJ45 J40
初步了解了一下,PSDK中freeRTOS和Linux版本还是有一些功能上的差异,但是基本功能是一致的,且相机视频流通过Linux处理发送的,(freeRTOS通过Linux子系统发送视频流)。 本人闲杂Linux环境上玩了一下PSDK demo,简单记录一下。
先补充一个环境问题:
PSDK中将会获取飞机端IP来设置本端IP,使用虚拟环境NAT模式,可能会导致网络不通,先将虚拟机配置成桥接模式。
2、 绑定与解绑
因为DJI PSDK使用是有权限的,且开发者模式绑定数量是限制的,绑定数量大于10个就需要申请量产了,所以使用DJI skyport绑定是必须的动作,通过DJI Assistant2 Payload SDK绑定或解绑。
有个细节差异,绑定是不需要运行PSDK的,但是解绑是需要运行PSDK程序的。
这个细节可以关联一个问题,未做绑定操作前提下,直接运行PSDK demo会发现一直报通信异常的错误,所以绑定成功与失败与运行程序的关系似乎不大。但是提到这个也许可以提醒一下,当运行程序发现大量报错的异常,可以先检查一下是否有绑定。
关于绑定,将skyport连接至飞机主云台,DJI Assistant2登录自己的开发者账号,在Payload SDK界面操作即可。
M210貌似不在主云台绑定,也会出现绑定失败。M300好像支持,出现绑定有问题,可以先切换云台试试。玩嘛,多试试总是好的。
3、 功能
PSDK功能还是建议查看官网,这里选择主要功能记录一下PSDK的常见问题
相机云台功能
相机及云台控制对应是有外部触发条件的,比如遥控器控制云台转动,遥控器控制拍照,具体的功能实现是由负载实现,所以PSDK提供相机和云台对应功能接口是回调方式,通过将回调函数注册,开发者仅需
在对应的回调接口中实现负载控制功能,比如执行拍照,当遥控器下发拍照指令后,对应的回调将会触发。(这种机制在PSDK中很常用,很多功能都是通过这种方式来触发)
视频传输功能
PSDK使用视频传输功能应该比较常见,通过拍摄符合DJI官方标准的视频流,PSDK接入后可以在APP端查看视频,或者存储回放等。
标准检测可以参考github上提供的视频检测工具:
https://www.github.com/dji-sdk/DJIPSDKVideoStreamCheckTool
大致原理,PSDK初始化时会获取到飞机IP,不同机型IP不一样,PSDK将会根据获取到的IP来设置本地IP(下述负载端IP)
PSDK2.2.0 视频流动态IP,
接M300,负载端IP为:192.168.120.2: 飞机端IP:192.168.110.1
接M210,负载端IP为:192.168.5.3 飞机端IP:192.168.5.10
Linux子系统部分demo,freeRTOS获取到飞机IP后,将对应的信息通过串口传给视频处理端(Linux),再对应送UDP数据即可传输视频流。
如下代码:
...
sprintf(networkInfoCmd, "[network_config] [ip] %s [mask] %s\r\n", s_networkLocalIpAddress,
s_networkConfigMask);
UART_Write(PSDK_COMM_WITH_LINUX_UART_NUM, (uint8_t *) networkInfoCmd, strlen(networkInfoCmd));
returnCode = PsdkPayloadCamera_GetVideoStreamRemoteAddress(ipAddr, &port);
if (returnCode == PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
PsdkLogger_UserLogDebug("get video stream remote address:%s_%d", ipAddr, port);
} else {
PsdkLogger_UserLogError("get video stream remote address error.");
continue;
}
sprintf(networkInfoCmd, "[video_stream] [ip] %s [port] %d\r\n", ipAddr, port);
UART_Write(PSDK_COMM_WITH_LINUX_UART_NUM, (uint8_t *) networkInfoCmd, strlen(networkInfoCmd));
returnCode = PsdkDataTransmission_GetDataStreamRemoteAddress(ipAddr, &port);
if (returnCode == PSDK_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
PsdkLogger_UserLogDebug("get data stream remote address: %s_%d", ipAddr, port);
} else {
PsdkLogger_UserLogError("get data stream remote address error.");
continue;
}
sprintf(networkInfoCmd, "[data_stream] [ip] %s [port] %d\r\n", ipAddr, port);
UART_Write(PSDK_COMM_WITH_LINUX_UART_NUM, (uint8_t *) networkInfoCmd, strlen(networkInfoCmd));
...
其中:
#define PSDK_COMM_WITH_LINUX_UART_NUM UART_NUM_3
#define PSDK_COMM_WITH_LINUX_UART_BAUD 115200
#define PSDK_NETWORK_INFO_CMD_MAX_SIZE 64
就是对应的与Linux通信的STM32上对应的串口:UART_NUM_3。实际这部分也可以根据自己的需求进行修改
自定义控件功能
自定义控件功能主要通过DJI PSDK定义好的功能组件来对应APP端的UI呈现,可以适配DJI 官方APP DJI pilot来实现控件与PSDK的通信和交互。
需要注意的是,当前使用自定义控件功能好像不能脱离相机功能来独立呈现,个人感觉不太合理。所以当前使用自定义控件可能要先初始化camera功能并注册camera common handler。
以上信息仅抽象概述PSDK的基础使用,毕竟是入门帖,仅方便前期对接指引。PSDK在使用功能上理解不太复杂,但是前期对接上可能会有些困扰,仅供参考。
评论
0 条评论
请登录写评论。