智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 22014|回复: 6
打印 上一主题 下一主题

大疆Onboard SDK移植到STM32 成功控制M100飞行

  [复制链接]

26

主题

441

帖子

0

精华

知名人物

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
41695
QQ
威望
3920
贡献
37275
兑换币
290
注册时间
2011-3-16
在线时间
250 小时
跳转到指定楼层
1#
发表于 2015-8-1 21:03:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   DJI Onboard SDK的发布扩展了无人机的应用领域,通过OnboardSDK,开发者可以将自己的计算设备挂载到飞行器上,通过有线串口直接控制飞机。
  http://dev.dji.com/cn       http://bbs.dji.com/forum.php?mod ... peid&typeid=182
   现在,DJI官方提供了Linux 命定行例程、windowsQT 例程、ROS例程,然而这三个例程都需要操作系统的支持,对于一般开发者而言,门槛还是比较高的,那么有什么办法能降低这个门槛呢?另外,现有的这三个例程,Windows QT估计不能让飞机实飞,难道挂一个Windows电脑到M100上?挂一个应该也可以,但是我相信谁也不愿意这么干。。。另外Linux命定行和ros例程可以在装有Linux系统的嵌入式板子上运行,可以放到飞机上实飞,但是也需要自己写启动脚本,让程序自动执行。看起来都是比较麻烦的。如果开发者没有这么深层次的嵌入式系统开发经验,只希望简单的方法来控制飞机呢?怎么办?办法当然是有的!!!
  DJI提供了标准的通信协议,我们只要按照协议进行数据收发,那么只需要这个机载设备支持串口通信,理论上都可以控制M100飞行。。。。
   基于这样的想法,我开始学习OnboardSDK的代码,熟悉通信协议,然后在Linux 命定行例程的基础上进行移植裁剪,剥离了操作系统和线程的依赖,希望让类似STM32的这种没有MMU的低资源单片机、嵌入式平台也能实现对飞机的控制。目前通过STM32的移植,简化了Onboard SDK的代码,可以通过STM32串口完成飞机激活、获取控制权、起飞、返航、圆形轨迹飞行,正方体轨迹飞行,自动降落等,并能通过串口传回应答包,在STM32液晶上显示飞机激活、获取控制权结果等等。。。。
  
  好了,废话不再多说了,下面上STM32工程代码
  代码链接:
参照官方文档也写了个说明,写得有点乱,求理解。。。。
文档有错误的地方也欢迎指出,3Q!!!
说明文档
必备硬件
1.      MATRICE 100 多轴飞行器
2.      DJI串口连接线(包含在Matrice100附件当中)
3.      带液晶的STM32F103ZET6开发板(正点原子战舰开发板)
我使用的是淘宝购买的开发板:
当然,只要你有STM32 都可以,没有液晶也可以让飞机飞行,有串口就够了。
4.      24V转5V DC-DC电源模块(用来给STM32开发板供电,不要使用官方串口留出的6V电源,可能会造成STM32烧坏)
必备软件
1.      装有MDK472(或者更高版本)、JlinkV8驱动、DJI N1 PC调参软件、DJISimulator的windows电脑
2.      装有 DJI Pilot (最新版本)的可联网的移动设备
3.      DJI_Onboard_API_STM32_keil_SampleV1.0
例程主要文件目录
  
DJIAPI
  
  经过移植后的Onboard SDK 代码目录,去除了线程和部分应答数据接收机制,主要是在官方Linux命定行例程基础上修改的,code.c基本不变,APP.clink.c做少部分修改,test.c重新编写。
COREHARDWARESTM32F10x_FWLibSYSTEM
STM32官方库和正点原子的部分硬件库(包括ledkeydelaylcdsysuart等)
ListobjProject
STM32工程相关目录
User
控制M100的主函数与中断服务程序等
Doc
例程文档
主要功能函数
1.      串口配置   
voiduart_init(u32 bound);//初始化串口,设置STM32串口波特率
voidUSART1_SendBuffer(uint8_t *buf,uint16_t len);//串口发送一个字节
voidUSART1_IRQHandler(void);//串口中断接收函数,用于接收飞控的应答数据
2.      SDK初始化  
DJI_Pro_Test_Setup();//配置DJI SDK序列号密钥 初始化通信链路
3  飞机控制命定
DJI_Onboard_API_Activation();//激活API
DJI_Onboard_API_Control(1);//获取控制权
voidDJI_Onboard_API_UAV_Control(unsigned char arg);//飞机控制 4起飞 6降落 1 返航
步骤
1.      连接飞机到电脑,使用DJI N1-Assistant_3.4.1 调参软件勾选启用API控制,并设置波特率为230400,使飞机与STM32波特率一致。如下图所示,关闭飞控主动推送标准数据包(全开会影响串口中断)。启动API后,将遥控器模式开关置于F档。
file:///C:/Users/LICHAO~1.WAN/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
2.      连接STM32串口。
如下图所示,是一根串口连接线,官方提供的是6P接口,实际上串口只需要接3P即可,我们将其与3根线去掉。如图对准正反面,从上到下依次是GND  PA9(STM32 TXD 飞控的RXD)  PA10(STM32RXD 飞控TXD)。最好不要接6P中的串口电源,因为是从飞控引出的6V。
file:///C:/Users/LICHAO~1.WAN/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
3.      例程配置
开发者在编译使用DJI_Onboard_API_STM32_keil_Sample前,需要根据在DJI网站注册获得的app id,api level ,密钥 key修改配置函数。如下图红色部分需要修改。此函数在DJI_Onboard_API_STM32_keil_Sample V1.0\DJIAPI\目录下的DJI_Pro_Test.c文件中:
void DJI_Pro_Test_Setup(void)
{
         activation_msg.app_id=10086;
         activation_msg.app_api_level= 2;
         activation_msg.app_ver= 1;
         memcpy(activation_msg.app_bundle_id,"1234567890123456789012",32);
         key = "be8631fb6d726cc64510dd9e74febe60400192e0b8608593828e";
         Pro_Config_Comm_Encrypt_Key(key);
         Pro_Link_Setup();
}
开发者需要注意保证STM32程序的波特率配置和飞机波特率一致。
4.      编译下载、执行程序
打开DJI_Onboard_API_STM32_keil_Sample V1.0\Project目录,使用MDK打开M100_STM32_DEMO.uvproj工程文件,编译下载到STM32。
启动模拟器DJISimulator
将STM32通过扩展板固定到M100上,复位启动程序,按PE4键,PE4检测到低电平,开始给飞机发送指定,如果操作正确,STM32液晶屏将按顺序依次打印如图信息:
16进制码是飞控传回的应答数据包,转换成字符串打印在液晶屏上,方便调试。
file:///C:/Users/LICHAO~1.WAN/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
如果飞机连接的是模拟器,将会出现如下飞行轨迹,飞行动作包括起飞、绘制正方体、绘制圆,X轴直线运动、返航。
file:///C:/Users/LICHAO~1.WAN/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg
  如果是实飞,请到开阔空地,注释掉X轴直线运动,并将返航改为降落命定,而且需要修改PE4 按键后的延时,需要延长时间防止飞机起飞人来不及避开被飞机螺旋桨打伤。实飞时请务必注意安全!
file:///C:/Users/LICHAO~1.WAN/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg
例程不足的地方:
   目前接收飞控数据是采用串口中断实现的,基本上是采用发送请求,等待应答方式,这种办法比较简单,也存在问题。如果需要接收飞控发回来的标准数据包就不行了。。。。
飞控的标准数据包是飞控主动推送给机载设备的,通过N1调参软件配置发送频率,如果一旦开启,飞控将已固定频率给机载设备发送数据,这时候串口中断接收必然受影响,这样子可能需要进行进一步处理,我想过通过STM32DMA进行接收,目前还没有考虑好,在进一步调试中,有兴趣的朋友可以一起讨论。。。。。。。。
  这个STM32的例程也可以移植到其他低资源平台,比如arduino,这样控制无人机的门槛将越来越低。。。。。。
   

评分

1

查看全部评分

回复

使用道具 举报

0

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
20
威望
12
贡献
6
兑换币
5
注册时间
2017-4-24
在线时间
1 小时
毕业学校
海南大学
推荐
发表于 2017-4-24 16:12:26 | 只看该作者
老师您好,想问下
         activation_msg.app_api_level= 2;
         activation_msg.app_ver= 1;
         memcpy(activation_msg.app_bundle_id,"1234567890123456789012",32);
这些信息您是从哪里获得的,官网注册App信息没有给这个。恳求回答。
回复 支持 1 反对 0

使用道具 举报

34

主题

452

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
14046

优秀会员奖章活跃会员奖章在线王奖章

威望
6066
贡献
2554
兑换币
4050
注册时间
2013-7-29
在线时间
2713 小时
毕业学校
南京气象学院
3#
发表于 2015-8-2 13:05:16 | 只看该作者
66666
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
39
威望
31
贡献
6
兑换币
8
注册时间
2015-4-18
在线时间
1 小时
毕业学校
西安工业大学
4#
发表于 2015-9-2 10:32:57 | 只看该作者
厉害,!!!!!!!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
26
威望
24
贡献
2
兑换币
3
注册时间
2017-2-15
在线时间
0 小时
毕业学校
武汉理工
5#
发表于 2017-2-15 11:03:17 | 只看该作者
请问用STM32控制大疆M100的例程还有吗,帖子上的链接下载不了了。我刚接触大疆M100,能发一份我研究研究吗,不胜感激。我的邮箱1908154174@qq.com
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

高级会员

Rank: 4

积分
869
威望
455
贡献
298
兑换币
299
注册时间
2016-4-13
在线时间
58 小时
毕业学校
西北工业大学
6#
发表于 2017-10-2 14:31:03 | 只看该作者
1992114 发表于 2017-2-15 11:03
**** 作者被禁止或删除 内容自动屏蔽 ****

你好,最近我也在接触这个,能加qq交流一下嘛?535919948
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
18
威望
12
贡献
6
兑换币
5
注册时间
2018-11-28
在线时间
0 小时
7#
发表于 2018-11-28 10:25:27 | 只看该作者
你好,最近我也在接触这个,能加qq交流一下嘛?774852341
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 15:22 , Processed in 0.078889 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表