标题: 一种基于DJI A3飞控的新型光流控制方式 [打印本页]

作者: iTang    时间: 2020-1-15 15:08
标题: 一种基于DJI A3飞控的新型光流控制方式
N3飞控ONBOARDSDK二次开发经验分享
开发流程
步骤一:选择开发方式
先去大疆的开发者网站(https://developer.dji.com/)看资料,我选择的是ONBOARD SDK stm32(图1),还有其他的开发方式,比如QT,ROS,LINUX等。
图一
步骤二:观看官方资料
首先要看下Documentation以及API Reference里面的资料(图二),里面介绍了怎么进行二次开发以及大部分API的用法。
                               图二
步骤三:下载对应软件及代码
根据自己的选择,去Downloads里的ONBOARD SDK下载例程代码以及DJI Assistant2(图三)。
                             图三
步骤四:注册获取开发ID和KEY
下载完代码跟软件后,可以看下Documentation中的Software Setup (图四),需要在开发者网站里面注册一个OSDK application ID and Key pair。
                                图四
步骤五:将ID与KEY写进代码
打开下载的代码,点击Activate.cpp,将自己的注册的ID跟Key填进去(图五),那么,软件部分其实已经准备好了。
                                图五
步骤六:硬件连接,使能API控制,写入订阅信息频率
接下来就是准备好STM32F407的板子(如果没有该型号,请自己移植下代码)。按照Documentation 中的Hardware Setup,连接对应的接口。官方例程中是采用串口三与N3飞控进行通讯,串口二与电脑上位机通讯。串口二与电脑通讯,飞控初始化等出现任何问题可以在电脑端看到。因为我使用的板子串口三的接收用作DBUS(硬件取反了),所以我把串口反过来用了。串口二用于与N3通讯,串口三用于与电脑通讯。飞控与板子连接好以后,打开电脑DJI Assistant2软件,将N3飞控与电脑端连接,在DJI Assistant2软件,选择机型配置参数等,这个就不说了,自己百度,有很多教程。看下Documentation中的Software Setup,,有教程说明怎么配置API模式(图六),使能API控制,并且需要选择你要订阅的信息的频率。
                         图六
可以看下我的代码,我订阅的一些信息是50HZ的,所以我订阅的信息就在这个软件选择了50HZ。
步骤七:连接上位机,跑官方例程,观看现象
官方代码中的main.cpp中,通过switch选择你要试的例程(图七),
                               图七
然后此时可以将下载的代码下载至板子中,打开DJI Assistant2中的模拟器(图八),
                               图八
可以看到飞机按照预设的轨迹进行飞行。例如官方例程(图九),飞机在虚拟器中会自动起飞距地面1.2米,然后往右边方向飞行6米,再向前飞行6米,然后在回到原始位置并且降落。
图九
飞机飞机如果测试到这里都没问题,那么恭喜你,可以开始做室内定位了。做定位之前,一定要把资料看一下,看下例程的代码是怎么写的,自己花点时间写一下自己想实现的功能,然后可以在模拟器中看飞行效果,模拟器的飞行效果跟实际是差不多的,所以每次写了新东西,需要现在模拟器试试,不要直接上飞机试。
步骤八:光流选型
要做室内定位,那就要去买光流模块以及激光模块。光流模块的话建议不熟悉光流算法的同学购买匿名的光流模块。这款光流已经融合了高度以及加速度计陀螺仪,数据比较好,用起来比较方便。光流数据主要用来水平定位,而激光高度数据要用来修正飞机飞行的高度,因为室内纯气压计定高是不稳。具体实现过程代码已经写明了注释。如果想自己融合光流数据的同学可以购买JL3285A、优象或者PMW3901,具体是实现过程就是使用陀螺仪的角速度数据与光流的像素数据进行融合,使得在原地摇晃光流时,可以用陀螺仪的数据去把光流的数据抵消掉,再把高度的信息加进去融合,将最终的像素变化信息转化为实际cm单位,再将该数据与地理坐标系的加速度计进行融合。这样可以使得飞机在飞行的时候,下方有车子经过不会严重干扰到。
定位思路 (代码已注释)
注意不一定要使用光流,也可以试试其他方法例如沈老师的vins
源算法+Realsense+manifold2.
网址https://zhuanlan.zhihu.com/p/59646674
SDK开发注意事项
                                 图十
代码文件:(大疆原先的例程都保留着没有删除)
Driver.cpp
板子初始化,并且判断时间执行对应任务
Led.cpp   buzzer.cpp
主要用来提醒自己进入SDK模式,自己用了蜂鸣器,比赛建议使用灯比较明显,因为四轴噪声太大
Time.cpp
原先大疆例程的系统时钟以及定时器初始化
Control.cpp
主要是定位还有发送位置控制指令
Communication.cpp
初始化串口,用来与N3飞控以及电脑上位机通讯
Sub_information.cpp
用来订阅相关信息
Pid.cpp
pid实现的函数,建议大家有空可以试试自抗干扰(ADRC),不过任何改动可以在模拟器还有小飞机试试
Optical_flow.cpp
光流数据接收分析代码,根据买的光流协议编写





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1