STM32读取Guidance数据——Guidance SDK
更新记录:2019/11/14 更新STM32(F407VET6)读取Guidance数据 Github地址。
背景:想要将祖传的Guidance用于DJI A3/新固件的N3飞控。DJI已经停止对于Guidance的更新以及维护工作,Guidance无法和A3、新版固件的N3兼容。拟利用STM32做一块转接板读取Guidance数据发送给A3,并测试Guidance的性能。
DJI 官方开源了Guidance SDK但是目前仅对Windows、Linux、ROS、ARM_Ubuntu有直接的支持(即提供了示例工程,可以直接编译运行读取Guidance数据)。如果所做项目的主处理器是Intel的处理器、树莓派、TX系列处理器等可以直接跑官方例程。但是仅为了在飞控和Guidance之间做一个中转的话,使用32则是性价比较高的选择。
官方文档地址:https://developer.dji.com/cn/guidance-sdk/documentation/quick-start/index.html
官方文件包地址:https://github.com/dji-sdk/Guidance-SDK
Guidance调参软件下载地址:https://www.dji.com/cn/downloads/softwares/other-guidance
官方提供的Guidance通信例程,我只试用了Windows环境下的,遇到几个问题,总结如下:
1、由于Guidance官方例程是VS2010工程文件,我使用的是VS2015,无法直接编译。
参考网址:http://www.itkeyword.com/doc/2055553052695740x495
右键工程文件-属性-配置属性-常规
其中平台工具集显示的是 Visual Studio 2010(v100)(未安装),修改,选为:Visual Studio 2015 (v140),应用。
2、无法打开文件opencv_world341d.lib,官方提供的SDK允许通过USB读取图像信息,进而调用Opencv做图像相关工作,但是我的Windows中没有配置Opencv,而我只需要读取Guidance的光流的速度数据和超声波数据,因此不需要使用Opencv,
参考网址:https://blog.csdn.net/Rhoda617/article/details/94358984
通用属性-链接器-输入-附加依赖项
直接删除如下依赖项(如果没有对该例程做其他配置,此处应该只有这一条,全都删掉就好)
3、编译报错:已加载“C:\Windows\System32\ntdll.dll”。无法查找或打开 PDB 文件。
我的编译选项:
参考网址:https://blog.csdn.net/weixin_42586210/article/details/88291438
工具-选项-常规-启用源服务器支持
符号-Microsoft符号服务器
编译时等待加载符号,可能时间会很久,加载完之后就正常了。
4、当使用串口读取数据时,需要根据实际使用的COM口,修改代码中的宏定义(在main.cpp中)。
官方文档修正:
通信协议表格中,LEN与VER字段顺序反了(参照Windows平台的例程代码)
且实际有效数据(即以上表格中DATA字段)的长度 = LEN - 16(减去数据头和数据尾)
此处字长LEN的10位数据,经过推测我认为是字节偏移量为2的字节为高位,偏移量为1的字节中剩下的两个BIT为低位,而在实际读取的数据中,低位两个BIT始终为0。故有:
此处的数据长度困扰了我半天的时间,最终虽能读取我需要的数据,但是也没有搞太懂,收到的数据长度似乎和目标结构的长度不等,如果发现问题欢迎交流。
读取方案问题:本来想要采用串口空闲中断+DMA的通信策略,但是尝试发现无法进入空闲中断,不知道什么原因。猜测可能Guidance会毫无间断的发送数据?
后来只能采用串口接收中断,每次读取一个字节,再采用一个状态机做数据解算。详见代码。
STM32(F407VET6)读取Guidance数据 Github地址:https://github.com/W-yt/YuTian_Pro/tree/master/Guidance_Read
注意:我这里只需要光流的速度信息和超声波信息(且我只是用了Guidance5个传感模块的一个,即对地的模块,只把它当做双目光流和超声波定高模块使用)。其他的数据可能读取是错误的,我没有检查核对,如果发现问题,欢迎提出修改意见。
首先使用调参软件,设置Guidance通信模式为UART,默认波特率115200。注意需要给Guidance上电(3S~6S电池),等待传感器模块和处理器模块都亮绿灯即可继续操作。上电后超声波模块可能会发出声音,属正常情况(可能是因为功率较大)。
使用官方例程验证Guidance发送数据是否正常,直观的可以验证超声波数据,融合后的障碍物距离数据,和光流的速度数据。
连接Guidance到STM32开发板(可能需要自己做线),Guidance的TX接STM32的PD6接口(USART2 Rx),共地。
调试程序观察是否可以进入串口接收中断。
如果可以进入接受中断,则全速运行,观察想要检查的数据,判断是否合理(最好在相同条件下和示例中的数据比对,以确保数据正确),如果有问题欢迎交流。
—— cloud over sky
—— 2019/10/20
STM32读取Guidance数据——Guidance SDK的更多相关文章
- STM32读取bq33100数据——硬件IIC
背景:拟采用bq33100超级电容管理芯片,实现自动的超级电容组的均压任务.需监控芯片的工作情况,以及电容组的均压情况. 平台: 硬件:STM32F103C8T6 通信:SMBus(低速IIC) 目标 ...
- STM32读取匿名光流数据——与Guidance的光流和超声波做对比测试
使用两个串口同时读取匿名光流和Guidance数据:用以比较两个光流的效果 Github链接:https://github.com/W-yt/YuTian_Pro/tree/master/Guidan ...
- STM32读取HX711(AD)模块数据——压力传感器
背景:在无人机动力系统的选型时,为了测试无人机的动力系统所能提供的最大拉力,使用压力传感装置测量拉力. 链接: 压力传感器tb链接: HX711模块是一个24位精度的AD模块. (1)https:// ...
- STM32读取温湿度传感器DHT11和DHT21(AM2301)系列问题
1.DHT11和DHT21传感器 这两种传感器都是奥松公司的产品,具体的传感器说明书在其官网上有(www.aosong.com). DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合 ...
- java的poi技术读取Excel数据到MySQL
这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 ...
- Hive读取外表数据时跳过文件行首和行尾
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 有时候用hive读取外表数据时,比如csv这种类型的,需要跳过行首或者行尾一些和数据无关的或者自 ...
- 读取数据库数据,并将数据整合成3D饼图在jsp中显示
首先我将生成饼图的方法独立写成一个PieChar.java类,详细代码如下:(数据库需要自己建,如有需要的话) import java.io.IOException; import java.sql. ...
- .NET读取Excel数据,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
解决.NET读取Excel数据时,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序的操作: 1. 检查本机是否安装Office Access,如果未安装去去h ...
- oledbdataadapter 读取excel数据时,有的单元格内容不能读出
表现:excel中某列中,有的单元格左上角有绿色箭头标志,有的没有,c#编写读取程序,但是只能读取出带绿色箭头的单元格中的内容,其余不带的读取不到内容 原因:excel中单元格因为是文本格式而存储了数 ...
随机推荐
- MySQL命令2
索引与外键 // 添加索引 ALTER TABLE orders ADD KEY order_ix_custid(cust_id); // 删除索引 ALTER TABLE orders DROP K ...
- [Abp vNext 入坑分享] - 5.全局异常替换
一.简要说明 [项目源码] [章节目录] 前面我们已经初步完成了框架的功能了,jwt的也已经接入完成了. 现在需要进行全局异常的接入了,abpvnext官方本来就有了全局异常的模块了,介绍链接 ...
- 关于MySQL数据库的卸载
首先对于MySQL这款数据库来讲,不能简单的卸载就草草了事,我们首先在mysql的文件下面找到my.ini这个文件, 在其中找到mysql数据库所产生的data文件,这个文件一般在c盘的一个隐藏目录下 ...
- E - Tunnel Warfare HDU - 1540 F - Hotel G - 约会安排 HDU - 4553 区间合并
E - Tunnel Warfare HDU - 1540 对这个题目的思考:首先我们已经意识到这个是一个线段树,要利用线段树来解决问题,但是怎么解决呢,这个摧毁和重建的操作都很简单,但是这个查询怎么 ...
- vim基础快捷键
vim快捷键 1. 移动光标 快捷键 作用 h 光标向左移动一个字符 j 光标向下移动一个字符 k 光标向上移动一个字符 l 光标向右移动一个字符 6j 向下移动6个字符 Ctrl+f 屏幕向下移动一 ...
- spring mvc从前台往后台传递参数的三种方式
jsp页面: 第一种:使用控制器方法形参的方式(常用) 第二种:使用模型传参的方式(如果前台往后台传递的参数非常多,如果还使用形参的方式传递,非常复杂.我们可以使用模型传参的方式,把多 个请求的参数 ...
- bootstrap4中bootstrap_treeview不显示图标原因以及解决办法
1.bootstrap4中bootstrap_treeview不显示图标原因 查看过大神的博客,经过自己试验,插件依赖: bootstrap/3.3.7 jquery/3.3.1 <link h ...
- Spring 框架介绍 [Spring 优点][Spring 应用领域][体系结构][目录结构][基础 jar 包]
您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 目录 ...
- 【FPGA篇章四】FPGA状态机:三段式以及书写方法
欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章 状态机是fpga设计中极其重要的一种技巧,状态机通过不同的状态迁移来完成特定的逻辑操作,掌握状态机的写法可以使fpga的开发事半功倍. 状态 ...
- [csu/coj 1080]划分树求区间前k大数和
题意:从某个区间内最多选择k个数,使得和最大 思路:首先题目给定的数有负数,如果区间前k大出现负数,那么负数不选和更大,于是对于所有最优选择,负数不会出现,所以用0取代负数,问题便转化为区间的前k大数 ...