更新记录: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. 分治思想--快速排序解决TopK问题

    ----前言 ​ 最近一直研究算法,上个星期刷leetcode遇到从两个数组中找TopK问题,因此写下此篇,在一个数组中如何利用快速排序解决TopK问题. 先理清一个逻辑解决TopK问题→快速排序→递 ...

  2. js 如何保存代码段并执行以及动态加载script

    1.模块化开发 通常使用的是 export和import 实现代码的共享和导入 2.特殊情况下需要将代码段作为参数传递 可以使用function 的toString方法将整合函数和里面的代码批量转化为 ...

  3. B. Long Path dp

    https://codeforces.com/problemset/problem/407/B 这个题目是一个dp,有那么一点点的递归的意思,这个应该算一个找规律的dp, dp[i]定义为第一次到第i ...

  4. Java λ表达式

    目录 Java Lambda表达式 1. 函数式编程思想 2. 体验Lambda的更优写法 3. Lambda表达式的标准格式 4. 练习:使用Lambda表达式(无参无返回) 5. 练习:使用Lam ...

  5. 我的第一个UWP程序

    1.为什么喜欢UWP 本人无悔入网易云音乐,各种设备上都少不了这个红色图标的软件 从win10发布,网易做了UWP版本的云音乐 应用轻巧.简洁.功能全,接着又下了许多UWP的应用 都给人不一样的感觉, ...

  6. 写了shell脚本想一键启动三台虚拟机的Zookeeper,却不知道为啥总是启动不了

    首先,一键启动的shell脚本是这样的 #! /bin/bash case $1 in "start"){ for i in node01 node02 node03 do ssh ...

  7. 【FreeRTOS学习04】小白都能懂的 Queue Management 消息队列使用详解

    消息队列作为任务间同步扮演着必不可少的角色: 相关文章 [FreeRTOS实战汇总]小白博主的RTOS学习实战快速进阶之路(持续更新) 文章目录 相关文章 1 前言 2 xQUEUE 3 相关概念 3 ...

  8. Cassandra数据建模

    1.  概述 Apache Cassandra将数据存储在表中,每个表都由行和列组成.CQL(Cassandra查询语言)用于查询存储在表中的数据.Apache Cassandra数据模型基于查询并针 ...

  9. Autojs - 用 JavaScript 实现自己的安卓手机自动化工具脚本

    我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...

  10. Queue-PriorityQueue源码解析

    Queue队列通常是先进先出(FIFO),但也有特殊的非FIFO,如本文也分析的PriorityQueue. Queue接口 Queue接口定义的方法: 添加元素接口: add(E e) -> ...