[无人机sdk] Open Protocol | 协议包构造&验证

第八章:开放协议(Open Protocol)

第七章:链路器中,我们了解到链路器是连接应用与DJI无人机的关键信使

但信使需要一种特定的"语言"来沟通------这就是开放协议(Open Protocol) ,它是链路器与无人机飞控通信的标准化语言。

什么是开放协议?(无人机的母语)

将DJI无人机视为使用独特语言的智能机器

开放协议就是这种飞控系统的原生语言,定义了信息打包与交换的精确规则:

为什么需要开放协议?

可靠的通信协议至关重要:

  • 准确性:确保无人机正确解析每条指令
  • 可靠性:提供错误检测与重传机制
  • 安全性:支持加密防止未授权访问
  • 模块化:标准化通信层使各模块无需了解彼此实现细节

协议数据包核心结构

每个开放协议数据包都遵循严格格式:

组件 描述
帧头(SOF) 固定字节0xAA标记数据包起始
包头(Header) 包含数据包长度、协议版本、会话ID、ACK标志、加密标志和序列号等元数据
CRC16校验 包头校验码,用于验证传输完整性
指令ID 由指令集(如飞行控制)和具体指令(如起飞)组成的双字节编码
数据载荷 指令相关参数,如起飞高度或航点坐标
加密/填充 加密后的数据可能添加填充字节以满足加密块大小要求
CRC32校验 完整数据载荷的校验码

相关设计-前文传送:Linux网络实验_lvy-的博客 这部分专栏下有讲到过许多协议的设计

& ProtoBuf | Json_lvy-的博客 这部分专栏 对于数据流协议的使用

如何使用开放协议(间接调用)

开发者通常无需直接操作协议层,SDK已封装所有底层细节。例如:

cpp 复制代码
// 来自第二章:飞行控制
vehicle->flightController->startTakeoffSync(functionTimeout);

// 来自第六章:数据订阅
auto gpsData = subscribe->getValue<DJI::OSDK::Telemetry::TOPIC_GPS_FUSED>();

高层API调用会被自动转换为开放协议数据包,经由链路器发送至无人机,响应数据也会被自动解析。

底层原理:协议工作流程

通信流程示例(起飞指令)

核心代码

协议包构造(简化自dji_open_protocol.cpp
cpp 复制代码
uint16_t OpenProtocol::encrypt(uint8_t* pdest, const uint8_t* psrc, uint16_t w_len) {
    OpenHeader* p_head = (OpenHeader*)pdest;
    p_head->sof = OpenProtocol::SOF; // 设置帧头
    p_head->length = data_len;       // 设置包长度
    p_head->enc = is_enc ? 1 : 0;    // 设置加密标志
    
    memcpy(pdest + sizeof(OpenHeader), psrc, w_len); // 填充数据载荷
    encodeData(p_head, aes256_encrypt_ecb);         // 加密数据
    calculateCRC(pdest);                            // 计算校验码
    return data_len;
}
数据包验证(简化自dji_open_protocol.cpp
cpp 复制代码
bool OpenProtocol::verifyData() {
    OpenHeader* p_head = (OpenHeader*)(p_filter->recvBuf);
    if (crcTailCheck((uint8_t*)p_head, p_head->length) == 0) {
        encodeData(p_head, aes256_decrypt_ecb); // 解密数据
        return callApp(); // 调用应用层处理
    } else {
        reuseDataStream(); // 数据损坏时尝试恢复
    }
    return false;
}

结论

开放协议是Onboard-SDK与无人机通信的基石,虽然开发者无需直接操作协议层,但理解其帧结构、加密机制和校验流程有助于深入掌握SDK工作原理。

这种标准化协议确保了指令传输的可靠性与安全性。

接下来我们将探索SDK如何高效管理协议数据包的内存使用


下一章:内存管理单元(MMU)

相关推荐
极智视界1 天前
无人机场景 - 目标检测数据集 - 停车场停车位检测数据集下载
yolo·目标检测·数据集·无人机·voc·coco·算法训练
极智视界1 天前
目标检测数据集 - 空中固定翼无人机检测数据集下载
yolo·目标检测·数据集·无人机·voc·coco·算法训练
Q_21932764552 天前
车灯控制与报警系统设计
人工智能·嵌入式硬件·无人机
Deepoch2 天前
Deepoc具身模型外拓板:重塑无人机作业逻辑,开启行业智能新范式
科技·机器人·无人机·开发板·黑科技·具身模型·deepoc
Yuroo zhou2 天前
IMU如何成为机器人自主移动的核心传感器
人工智能·机器人·无人机·导航·传感器·飞行器
淡海水2 天前
【节点】[Houndstooth节点]原理解析与实际应用
unity·游戏引擎·shadergraph·图形·houndstooth
xqqxqxxq2 天前
《智能仿真无人机平台(多线程 V4.0)技术笔记》(集群进阶:多无人机任务分配与碰撞规避)
笔记·无人机·cocos2d
GIS数据转换器3 天前
基于GIS的康养旅游适宜性分析决策系统
大数据·网络·人工智能·安全·无人机·旅游
DoomGT3 天前
Physics Simulation - Hit Event的触发机制
ue5·游戏引擎·虚幻·虚幻引擎·unreal engine
EriccoShaanxi3 天前
从千米油井到万米高空:MEMS陀螺仪如何成为精准世界的“方向之锚”?
机器人·无人机