前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dji Onboard SDK(边缘高性能SDK)

Dji Onboard SDK(边缘高性能SDK)

作者头像
云深无际
发布2021-12-20 15:53:07
3K0
发布2021-12-20 15:53:07
举报
文章被收录于专栏:云深之无迹云深之无迹

大疆在行业的机器里面开放了一套特别的SDK,Onboard SDK:

官方的说明是这样的

按照我的理解就是,行业机器本身就性能强劲,完全可以放一个高性能的计算机上去,比如Intel的NPC,英伟达的TX2等,进行空中的实时处理。这个过程中势必要使用一个中间层连接记载计算机和无人机,这个中间层就是我们的重点。

三种连接方式

Linux,众所周知的开源之魂,主要是有视频流的处理任务的时候使用这个。

ROS是目前来讲成熟的机器人开发平台,如果使用ROS开发,将会拥有ROS的海量包,其实TT小飞机也是有ROS包的,如果未来有可能,一个M300装着300个TT在空中释放当武器也不是不可以。

后面是STM32,强实时性的RTOS,重实时性和控制,轻视觉和大带宽的场景。

几乎把所有的接口都开放了,比较好

支持的机型都是行业应用以及单独的飞控

一些相机也是支持ONB SDK

代码语言:javascript
复制
https://developer.dji.com/products/#!/onboard

具体的可以去这里了解,也可以咨询我

还有一个SDK是专门控制云台的SDK,我没有研究明白

我们这次的主角就是它了

代码语言:javascript
复制
https://github.com/dji-sdk/Onboard-SDK/tree/4.1

开源的地址。

解压打开,一会儿使用

可以看一下SDK的支持情况

M300是香饽饽,都支持,而且还在持续更新。

代码语言:javascript
复制
https://developer.dji.com/cn/document/26cd55ae-ef09-4463-b941-d6bb2bb98461

这是OSDK的3.0的版本位置。

DJI 相机媒体文件元数据白皮书正式发布,该文档描述了存储媒体文件元数据的格式和各个字段的含义。 开发者通过使用该白皮书,能够了解媒体文件中各个元数据以及相应字段的信息,在利用媒体文件元数据的基础上实现图像分析或建模等行业应用。

中文翻译导致公式难以辨认

这里截取英文版本

代码语言:javascript
复制
https://docs.opencv.org/4.3.0/d4/d94/tutorial_camera_calibration.html

来源在此,校准图像

结构

代码语言:javascript
复制
DJI 视频定时元数据

目录结构


.
├─dji 大疆定义的元数据proto文件
├─google 定义的google proto文件
└─dvtm_product.proto 产品相关元数据proto文件

时间戳

飞机的姿态信息

云台的信息

OSDK 是一个用于开发无人机应用程序的开发工具包,基于OSDK 开发的应用程序能够运行在机载计算机上,开发者通过调用OSDK 中指定的接口能够获取无人机上的各类数据,经开发者设计的软件逻辑和算法框架,执行相应的计算和处理,生成对应的控制指令控制无人机执行相应的动作,实现如自动化飞行、负载控制和视频图像分析等功能。

各种SDK在交互

OSDK分为以下几种功能:

控制类功能

时间同步
  • 获取NMEA数据:获取无人机使用的定位系统的数据,如GPS、伽利略、北斗及GLONASS
  • 获取PPS数据:获取无人机的硬件触发脉冲信号
  • 获取UTC时间:获取统一的UTC时间
基础控制
  • 设置或获取无人机飞行控制器的参数,如返航高度,避障状态等
  • 执行基本的飞行任务,如起飞、降落及返航等
  • 无人机基础控制功能,如速度控制、姿态控制和位置控制
运动规划
  • 航点任务:控制DJI 的无人机按照预设的多个航点实现自主飞行
  • 热点任务:控制无人机围绕设置的兴趣点环绕飞行

管理类功能

消息管理
  • 广播:使用OSDK 开发的应用程序能够接收无人机主动推送给其他模块的数据,同时将第三方传感器的数据广播给第三方信息接收设备
  • 消息订阅:使用OSDK 开发的应用程序能够记录用户所需订阅的数据
云台管理
  • 云台控制:控制云台转动的角度和角速度
  • 信息获取:获取云台当前的角度和角速度
相机管理
  • 参数设置:设置相机如光圈、曝光时间及分辨率等各项参数
  • 相机控制:控制相机实现拍照、录像及指点变焦等功能
  • 码流获取:获取相机的RGB 码流和H.264 码流

拓展类功能

SDK 互联互通
  • 与基于MSDK 开发的移动端APP 间通信
  • 与基于PSDK 开发的负载设备间通信
高级视觉
  • 对象识别
  • 获取感知灰度图

TX1不是不可以用,主要看接口

STM32 控制 无人机:

  • 内存:支持SRAM,16 Mbit 及以上
  • 接口
    • I2C 总线接口,需兼容 64-Kbit EEPROMs、ST MEMSs 和 I/O 扩展器
    • 支持USB 2.0,具有USB-OTG 功能,支持高速和全速数据传输
    • 电源接口:电源插孔,USB-FS连接器,USB-HS连接器,通过ST-LINK / V2或子板
  • 其他功能
    • 从Flash,系统内存或SRAM 启动
    • 具有控制功能的四向控制选择器
    • 支持JTAG 和SW 支持跟踪调试
    • 支持使用 ST-LINK/V2

平台的编译链,需要注意的地方

整体看起来Linux是最强大的,所有功能都支持,其次是ROS,STM32对获取视频流无望,没有高速接口,但是成本最低。

开发前需要使用调参软件打开API

无人机控制权限的等级由高至低依次为遥控器、基于MSDK 开发的移动端APP 和基于OSDK 开发的应用程序。

代码语言:javascript
复制
https://www.dji.com/cn/downloads/softwares/assistant-dji-2

模拟与调试

为降低基于OSDK 开发的应用程序因内部故障导致无人机损毁或意外事件的发生,DJI 强烈要求开发者使用DJI Assistant 2中的模拟器模拟无人机的飞行状态,并根据模拟器中的数据和日志信息调试应用程序,降低无人机损毁或意外事件发生的风险,避免不必要的损失。

M300 RTK 支持开发者使用DJI Assistant 2 中的模拟器模拟基于OSDK 开发的应用程序。

那我没有机器也就是说可以编写了。试试看

先下载个说明书看看

代码语言:javascript
复制
https://dl.djicdn.com/downloads/matrice-300/20211125UM/M300_RTK_User_Manual_CHS_v3.0.pdf

就是无人机连电脑,模拟飞行

打开的模拟器的虚拟场景

气死我了,没飞机你还用不了,我又把我飞机取出来了

初始化画面

初始化的设置

右键可以控制飞行轨迹是否打开

飞机后面

飞机前面

都2021年了,还能入手Dji Mavic Air吗?对这个无人机感兴趣的可以戳前面看。

DJIFlightController中的DJISimulator

md,昨天后半夜刚把AS卸载,造孽啊。。。

代码语言:javascript
复制
https://developer.dji.com/cn/document/99c67a52-3279-48e6-bf39-85677dfae617

??可以使用3D游戏引擎 Unity3D ,在移动应用程序中显示模拟数据和飞机飞行行为(就像DJI官方应用程序中的“飞行模拟器”一样)。

可惜了,还得要飞机,。。。几万块钱,啧

继续看文档:

连接M300的时候用的是串口

没有实物飞机,不清楚这边的接口

记载的计算机和飞控的连接,USB2.0

前面装负载,就是镜头模组

接口定义

接口功能说明:
  • 供电接口
    • 该接口的额定电压为24V,无人机输出的总功率为96w
    • 该接口的VCC 引脚在同一网络下,开发者可根据实际的使用需求连接VCC 引脚数量。但为保证无人机能够持续稳定地输出电流,请同时连接4 个VCC 引脚。
    • 如需为机载计算机供电,请使用VCC 引脚 说明
    • RSVD1为预留引脚,RSVD1 引脚必须悬空
    • USB_VBUS引脚与用户的OSDK设备VBUS引脚连接时,需要接TVS器件做好ESD防护,电压不能超过5V
    • 请务必使用ON_DET 引脚,且接入ON_DET 引脚的对端必须为GND
  • 数据通信接口
    • UART_RX:该引脚为机载计算机转接板通过连接线接收无人机输出信号的引脚,该引脚对应无人机OSDK 拓展接口的信号输出引脚TX
    • UART_TX:该引脚为机载计算机转接板通过连接线向无人机发送信号的引脚,对应为无人机OSDK 拓展接口的信号接收引脚RX
    • 如需使用USB 2.0 的功能,请使用DP 和DM 引脚
    • 如需使用无人机输出的PWM 信号,请使用PWM 引脚
    • 如需通过无人机上的串口,实现机载计算机和无人机间的通信,请使用UART_RX 和UART_TX 引脚
  • 时间同步:如需使用无人机对外输出的同步信号,实现时间同步功能,请使用SYNC(PPS) 引脚

说明: 接入机载计算机后,请使用DJI Assistant 2 的Onboard SDK 配置界面设置M300 RTK 上OSDK 接口的波特率。

96w,。。。。我的天,确实牛

开发前需要这个应用

代码语言:javascript
复制
https://libusb.info/

关于视频流这些就是要用USB,安装这个库

代码语言:javascript
复制
http://www.ffmpeg.org/

这个是对视频流的一些处理

算法处理,官方应该是推荐的OpenCV,跟着就对了。

上面分别是第三方的Linux系统的一些说明,ROS也有,因为我没有机器就不做演示了,就是配置环境而已。

使用STM32板子连接的时候,引脚的定义,我这里分为了三组

串口协议,假期一定要研究明白。

官方推荐了一个野火的板子,具体的修改的地方

按照流程,现在就可以开发了。but,没机器,继续看:

在SDK的位置处,有一个配置的文件

代码语言:javascript
复制
app_id :                  //开发者的ID
app_key :                 //App Key
device:                   //串口端口号
bauderate :               //串口波特率
acm_port :                //ACM 端口号

写这些东西

编译也简单:

代码语言:javascript
复制
mkdir build && cd build
cmake .. 或 cmake .. -DADVANCED_SENSING=ON(使用视觉功能)
make

搜索这个视觉两个位置

Cmake不是很熟悉,可以看懂(假期学)

如果上面高级视觉这个定义有,就把括号里面的编译参数加上

ROS开发也是简单,基本流程:

代码语言:javascript
复制
  mkdir catkin_ws 
  cd catkin_ws 
  mkdir src 
  cd src 
  catkin_init_workspace
  1. 创建目录
  2. 转到目录
  3. 创建源码文件夹
  4. 再进去
  5. 用ROS命令初始化一下
  6. 记得把OSDK复制进来

我看看我2022年会不会有钱,有就买个A3的飞控,也可以开发。预算2k???不知道够不够。。。我这个PX4和APM有点像小玩具,PX4寄出去修了,做的老哥手艺咋样。。。

STM32 的 ID和key的配置位置

我们可以看看源码实现

这是这个关于密码的结构体定义

在这里定义

最后把字符串的信息给这个activate函数

上面的函数都来自于这里。。。我怎么看起来了源码(假期看C++)

回调函数这个是个重点,下去预习下,一次搞会,每次都出现。

应用程序通过DJI Onboard SDK 中的Vehicle 类调用DJI OSDK 的功能,因此使用OSDK 开发应用程序时,请先引入OSDK 开发包。

有点像一个头文件的管理器

两个名字空间

Vechile对象牛,不懂不搞个drone?搞个卡车。。。我不理解

我们看看它的实现怎么样?我像这个类的实例化应该是一堆初始化线程?

上面是类

下面是Linux的定义,抛真,收!

这个关闭也是很有看头,关了很多东西

好了,就当看完了,有机会我们细研究

引入OSDK 帮助文件

使用如下语句在程序中引入OSDK 帮助文件后,在Linux 平台上开发的应用程序即可读取用户的配置文件,激活DJI 的无人机。 #include <dji_linux_helpers.hpp>

OSDK 为开发者提供了同步和异步调用的接口。

  • 1.同步接口调用,开发者在调用接口时,该接口会根据应用程序实际的情况获得对应的返回值,调用者需要等待调用的接口发送返回值,因此该调用方式也成为阻塞式调用。TT无人机就是这种策略
  • 2.异步接口调用,开发者在调用接口时,该接口会根据应用程序实际的情况获得对应的返回值,但开发者可能无法立刻得到对应的结果,当调用的接口获得结果后,该接口会通过状态或通知向开发者告知该结果,开发这可通过回调函数处理该调用结果,因此该调用方式也成为非阻塞式调用。这种方法更加优雅,但是编码难度增加

步骤

  • 1.构造回调函数
  • 2.注册回调函数函数 开发者调用OSDK 中的异步接口后,将会接收到相应的数据,开发者需要注册回调函数处理所接收的数据。

关键是这个回调函数的设计。

经纬300,4w大概

经纬200好像性价比高些,就是OSDK,MSDK,PSDK好像不可以在一起使用,除了这个都挺好的。

看着不错

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-19,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 控制类功能
    • 时间同步
      • 基础控制
        • 运动规划
        • 管理类功能
          • 消息管理
            • 云台管理
              • 相机管理
              • 拓展类功能
                • SDK 互联互通
                  • 高级视觉
                  • 模拟与调试
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                  http://www.vxiaotou.com