Skip to main content

数据传输

1. 概述

负载设备和无人机使用数据传输模块,在控制命令传输通道上以透传的方式在PSDK和MSDK间传输控制指令。在数据传输通道上以透传的方式在PSDK和MSDK间传输数据信息以及用户自定义的数据。使用数据传输功能,不仅可以设置不同类型的数据占用数据传输通道带宽的比例,还能够查看不同数据传输通道的状态。

说明:

  • PSDK 的数据传输模块以透传的方式在负载设备、机载计算机和无人机间传输数据,支持用户根据实际的使用需求设计数据传输协议,使基于 PSDK 开发的负载设备能够与移动端 App 或机载计算机间实现复杂通信。

2. 基础概念

通道分类

根据实际传输的数据类型和数据的作用,PSDK 的数据传输通道可分为命令信号传输通道和高速数据传输通道:

  • 命令信号传输通道:可靠性强,专用于传输对可靠性要求较高的信号,如控制指令和状态信息等。
  • 数据传输通道:带宽较大,主要用于传输数据量较大且对实时性要求较高的数据,如雷达信号和点云数据等。

通道带宽

  • 通道带宽:数据通道在理论状态下可传输的数据量。
  • 实时带宽:数据通道在工作状态下理论上可传输的数据量。
  • 实际带宽:数据通道实际传输的数据量。

通道带宽限制

数据传输通道的带宽限制,是指在单位时间内,通道最大能够传输的数据量(byte/s)。 受制于接口部件的物理特性和实际的使用环境,命令信号传输通道和数据传输通道的带宽可分为静态带宽限制和动态带宽限制。

静态带宽限制

静态带宽限制是指命令信号传输通道固定的带宽大小,受制于材料的物理特性和固有的电气特性而无法被改变,有关数据传输通道静态带宽的详细参数,请参见下表。

通道类型传输方向静态带宽
命令信号传输通道移动端 App -> 负载设备
负载设备 -> 移动端 App
道通天穹平台 -> 负载设备
负载设备 -> 道通天穹平台
2048 B/s
数据传输通道负载设备 -> 移动端 App8192Kbps

动态带宽限制

动态带宽限制是指数据传输通道受链路状态和电磁环境等因素的影响,通道最大能够传输的数据量会动态变化,因此,数据传输通道的实际带宽应低于实时带宽。

流量控制

PSDK 的数据传输模块通过使用流量阈值和缓冲区,限制负载设备向移动端 App 或机载计算机发送的数据量,实现流量控制功能,如下图所示。PSDK 的流量控制过程如下所示:

  1. 负载设备通过数据通道向机载计算机或移动端 App 传输数据信息。
  2. 当负载设备发送的数据大于流量控制功能的阈值时,流量控制功能将超出流量阈值的数据暂存入缓冲区中。
  3. 当缓冲区已存满数据时,负载设备发送的超出流量阈值的数据将被丢弃。
  4. 当数据通道空闲时,流量控制模块将发送暂存在缓冲区的数据。

image

说明:

  • 数据传输模块的流量控制周期为 1s,在每个控制周期内,负载设备传输的数据量应小于用户设置的流量阈值。
  • 流量阈值决定当前数据传输通道最大可传输的数据,该阈值由静态带宽限制、动态带宽限制及数据传输通道的带宽占用比例等因素共同决定。

3. 使用数据传输功能

使用 PSDK 的数据传输功能,需要在创建工程文件并完成 PSDK 的初始化后,初始化数据传输模块,再实现数据传输功能和监控数据通道状态的功能。

初始化数据传输模块

使用数据传输功能前,需要使用如下代码初始化数据传输功能模块,确保负载设备能够正常传输数据。

if(0 != UAV_LowSpeedDataChannel_Init()) {
printf("UAV_LowSpeedDataChannel_Init failed\n");
return -1;
}

实现数据发送功能

使用 PSDK 开发的负载设备通过命令信号传输通道和数据传输通道向移动端 App 或机载计算机发送测试数据。

  • 向移动端 App 发送控制命令 使用 PSDK 开发的负载设备在命令信号传输通道上向移动端 App 发送控制命令。
if(0 != UAV_LowSpeedDataChannel_SendData(UAV_CHANNEL_ADDRESS_MASTER_RC_APP, data_type, data, len)) {
printf("UAV_LowSpeedDataChannel_SendData failed\n");
return -1;
}

说明:

  • data_type 为数据类型,也可标识业务类型;data 为数据内容;len 为数据长度。移动端 App 接收负载设备通过命令信号传输通道发送的控制命令。
  • 向道通天穹平台发送数据信息 使用 PSDK 开发的负载设备在命令信号传输通道上向道通天穹平台发送命令。
if(0 != UAV_LowSpeedDataChannel_SendData(UAV_CHANNEL_ADDRESS_CLOUD_API, data_type, data, len)) {
printf("UAV_LowSpeedDataChannel_SendData failed\n");
return -1;
}
  • 向移动端 App 发送批量数据信息 使用 PSDK 开发的负载设备在数据传输通道上向移动端 App 发送数据信息。
if(0 != UAV_HighSpeedDataChannel_SendDataStreamData(data_type, data, len)) {
printf("UAV_HighSpeedDataChannel_SendDataStreamData failed\n");
return -1;
}

实现数据接收功能

构造并注册数据接收函数后,使用 PSDK 开发的负载设备能够通过命令信号传输通道接收从移动端设备和道通天穹平台发送的控制命令。

构造回调函数

static void UAV_LowSpeedDataChannel_RecvDataCallback(E_UAVChannelID channel, uint8_t data_type, uint8_t *data, uint32_t len)
{
if(UAV_CHANNEL_ADDRESS_MASTER_RC_APP == channel) {
switch(data_type) {
case UAV_DATA_TYPE_CONTROL_CMD:
// 处理控制命令
break;
default:
break;
}
} else if(UAV_CHANNEL_ADDRESS_CLOUD_API == channel) {
switch(data_type) {
case UAV_DATA_TYPE_COMMAND:
// 处理命令
break;
default:
break;
}
}
}

注册回调函数

if(0 != UAV_LowSpeedDataChannel_RegRecvDataCallback(UAV_CHANNEL_ADDRESS_MASTER_RC_APP, UAV_LowSpeedDataChannel_RecvDataCallback)) {
printf("UAVLowSpeedDataChannel_RegisterRecvDataCallback failed\n");
return -1;
}
if(0 != UAV_LowSpeedDataChannel_RegRecvDataCallback(UAV_CHANNEL_ADDRESS_CLOUD_API, UAV_LowSpeedDataChannel_RecvDataCallback)) {
printf("UAVLowSpeedDataChannel_RegisterRecvDataCallback failed\n");
return -1;
}
// 也可以一次注册所有
if(0 != UAV_LowSpeedDataChannel_RegRecvDataCallback(UAV_CHANNEL_ADDRESS_EVERY, UAV_LowSpeedDataChannel_RecvDataCallback)) {
printf("UAVLowSpeedDataChannel_RegisterRecvDataCallback failed\n");
return -1;
}