更新记录: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的更多相关文章

  1. STM32读取bq33100数据——硬件IIC

    背景:拟采用bq33100超级电容管理芯片,实现自动的超级电容组的均压任务.需监控芯片的工作情况,以及电容组的均压情况. 平台: 硬件:STM32F103C8T6 通信:SMBus(低速IIC) 目标 ...

  2. STM32读取匿名光流数据——与Guidance的光流和超声波做对比测试

    使用两个串口同时读取匿名光流和Guidance数据:用以比较两个光流的效果 Github链接:https://github.com/W-yt/YuTian_Pro/tree/master/Guidan ...

  3. STM32读取HX711(AD)模块数据——压力传感器

    背景:在无人机动力系统的选型时,为了测试无人机的动力系统所能提供的最大拉力,使用压力传感装置测量拉力. 链接: 压力传感器tb链接: HX711模块是一个24位精度的AD模块. (1)https:// ...

  4. STM32读取温湿度传感器DHT11和DHT21(AM2301)系列问题

    1.DHT11和DHT21传感器 这两种传感器都是奥松公司的产品,具体的传感器说明书在其官网上有(www.aosong.com). DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合 ...

  5. java的poi技术读取Excel数据到MySQL

    这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 ...

  6. Hive读取外表数据时跳过文件行首和行尾

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 有时候用hive读取外表数据时,比如csv这种类型的,需要跳过行首或者行尾一些和数据无关的或者自 ...

  7. 读取数据库数据,并将数据整合成3D饼图在jsp中显示

    首先我将生成饼图的方法独立写成一个PieChar.java类,详细代码如下:(数据库需要自己建,如有需要的话) import java.io.IOException; import java.sql. ...

  8. .NET读取Excel数据,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序

    解决.NET读取Excel数据时,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序的操作: 1. 检查本机是否安装Office Access,如果未安装去去h ...

  9. oledbdataadapter 读取excel数据时,有的单元格内容不能读出

    表现:excel中某列中,有的单元格左上角有绿色箭头标志,有的没有,c#编写读取程序,但是只能读取出带绿色箭头的单元格中的内容,其余不带的读取不到内容 原因:excel中单元格因为是文本格式而存储了数 ...

随机推荐

  1. 如何使用Golang实现一个API网关

    你是否也存在过这样的需求,想要公开一个接口到网络上.但是还得加点权限,否则被人乱调用就不好了.这个权限验证的过程,最好越简单越好,可能只是对比两个字符串相等就够了.一般情况下我们遇到这种需要,就是在函 ...

  2. JavaScript 浅析数组对象与类数组对象

    数组(Array对象) 数组的操作 创建数组方法 添加与修改数组元素 删除数组元素 使用数组元素 遍历数组元素 多维数组 数组相关的函数 concat() join() pop() push() sh ...

  3. ABAP 内表与XML转换

    1需求说明 在系统交互中需要将SAP内表转换为XML文件,发送给其他系统,并且将其他系统返回的XML文件转换为SAP内表. 2创建转换编辑器 事务代码:STRANS 选择简单转换 以图形方式编辑 右键 ...

  4. STM32 标准库3.5修改默认外部8M晶振为16M晶振

    ST官方标准库V3.5默认的外部晶振频率为8M,实际使用中外部晶振需要修改为16M: 经过实验,修改有效,具体的patch如下: 修改 HSE_VALUE 值 diff --git "a/L ...

  5. 初探Redis-基础类型Hash

    Redis存在五种基础类型:字符串(String).队列(List).哈希(Hash).集合(Set).有序集合(Sorted Set).本次列举出Hash的常用操作. Redis官网:https:/ ...

  6. select嵌套问题

    关于sql语句: SELECT COUNT(ID) FROM dbo.N_Order_BusinessBatch WHERE Mobile='15210235082' And CreateTime=( ...

  7. java ->IO流_commons类

    commons-IO 导入classpath 加入classpath的第三方jar包内的class文件才能在项目中使用 1.创建lib文件夹 2.将commons-io.jar拷贝到lib文件夹 3. ...

  8. 使用better-scroll在vue中封装自己的Scroll组件

    1. better-scroll 原理 用一张图感受: 绿色部分为 wrapper,也就是父容器,它会有固定的高度.黄色部分为 content,它是父容器的第一个子元素,它的高度会随着内容的大小而撑高 ...

  9. 浅析Block闭包

    浅析Block闭包 简单来说,block就是将函数及其上下文封装起来的对象,从功能上可以把它看作是C++中的匿名函数,也可称之为块. Block类型写法: 返回值+(^块名)+(参数)= ^(参数){ ...

  10. Centos7中磁盘管理及扩展

    前提要求: 虚拟机:centos7 虚拟机软件:VMware Workstation 12 在安装Centos系统时,磁盘选择为LVM逻辑卷.当选择为LVM后才能创建逻辑卷等(必须) 数据格式选择的是 ...