STM32 Onboard SDK 学习笔记1

    DJI的OSDK可以说是无人机软件developer的一个大门,想起在当年大三的时候某学长们做的视觉跟踪无人机,由于重点在于视觉跟踪算法,不想开发飞控,他们买了DJI naza飞控作为飞机飞控。可是遇到问题了:怎么用程序控制飞机?

    当时DJI仍未有OSDK接口,他们于是发挥充分的想象力,直接把遥控器拆了,是的,用树莓派对遥控器进行改装,改掉杆位和滑轮电位器变成由程序控制,强行把遥控器做成了API接口来控制飞机……

    这种需求在DJI OSDK发布之后已经变成小菜一碟。

    Onboard SDK,顾名思义就是跑在板子上的一套SDK接口,通过串口与飞控进行通信,通过调用这些接口,developer就可以实现对DJI A3/N3/M100飞控进行起飞、降落、悬停、移动、拍照录像、控制云台等等功能。DJI的飞控做得稳如狗,如果仅仅可通过遥控和DJI专用APP操作飞机,这就限制了DJI飞控在各行各业上的拓展。因此DJI的SDK接口可谓为飞控的拓展和发展提供一条很“生态”的发展道路。

    DJI的OSDK有以下几种:

    

    其中Mobile SDK主要为IOS和Android系统提供APP上的SDK调用接口,链路为APP通过手机数据线连接遥控进行数据传输。Mobile SDK能完成比Onboard SDK更多的功能,但是实时性上比直接硬件连飞控的Onboard低,除此之外一旦飞机断开遥控器连接,Mobile SDK对飞机的操作将无能为力。

    Guidance SDK则是Guidance避障系统的一套SDK接口,主要用于提供超声波以及双目的避障信息。

    Payload SDK则是通过云台负载接口为云台挂载设备developer提供一些上位机以及订阅信息接口。

    好的,回来,我所说的主题是Onboard SDK,在下面将简称为OSDK。

    

    OSDK总体上可以分为上图四类,LINUX和ROS接口可以跑在linux板子上,Qt接口则可以跑在x86系统上,STM32接口可以泡在单片机上。其中我的博客都是基于STM32接口进行开发的,其实只要你把源码架构看一遍比较一下就知道,这几个平台调用的核心API源码其实是一样的,这几种平台接口只是在不同平台对核心API接口进行封装和适配。

    所以在哪可以下载源码和说明文档呢?在这里:

    https://developer.dji.com/cn/onboard-sdk/   (DJI Onboard SDK官网)

    https://developer.dji.com/onboard-api-reference/index.html    (DJI Onboard SDK官网API参考文档)

    https://github.com/dji-sdk/Onboard-SDK    (github下载源码)

    STM32 SDK的源码用C++/C混合编写,开发IDE用的Keil5,对于一直使用C语言做单片机开发的developer来说可能会有点不习惯。但是当你真正了解过OSDK源码结构后,你会发现这套源码的水平的确很高,很多地方可以借鉴到自己的程序上,毕竟这些源码都是中国和美国的大神们编写的。OSDK细分成很多类:

    Vehicle类,这是一个代表飞机整体的一个总的类,关于飞机的一切操作你都可以通过Vehicle类找到,里面包含了许多子类:

    

    从子类的名字含义理解非常好理解

    OpenProtocol类提供处理OSDK协议、发包解包、内存管理接口等相关函数(stm32 osdk的内存分配函数比较有意思,后续的博客会提到);

    DataSubscription类与DataBroadcast类类似,都是用于获取飞控数据的接口。通俗来说,前者问啥发啥,不问不发;后者在调参软件指定好发什么后,一上电就会自动发。可以获取的飞行数据包括四元数、位置、高度、GPS信息、加速度、角速度等等等等。而且频率非常高,例如四元数获取的频率就可以达到400Hz;

    Control类顾名思义就是提供控制飞机运动的接口,包括起飞降落动作、控制速度\姿态\位移、控制高度等等;

    Camera类用于控制相机拍照录像;

    Gimbal类用于控制云台pitch/roll/yaw运动,可以通过接口控制角度或者角速度来操作云台;

    MFIO类用于MFIO功能,即可以把飞控上的某些管脚当做developer的GPIO、PWM输出、ADC管口等等(对于硬件板子高度定制的STM32开发者来说,貌似没什么用?);

    MobileCommunication类用于和Mobile SDK进行数据透传,链路大概是:

                                    STM32     <---串口--->    飞控    <---遥控--->    MSDK

    HardwareSync类用于与外部设备硬件同步;

    VirtualRC类顾名思义虚拟一个遥控控制飞机,不过该功能不建议使用,在后面估计也没有了;

    AdvancedSensing类仅支持M200系列,可以获取避障模块的信息;

    接下来的几篇我会和大家讨论一下STM32 Onboard SDK的各种机制,包括协议、协议的发送接收、解包、内存管理等等等。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值