找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2083|回复: 0
收起左侧

飞控开发基础-[4] STM32串口(光流数据获取)

[复制链接]
ID:716213 发表于 2020-3-26 17:34 | 显示全部楼层 |阅读模式
图片1.png
串口(光流获取)

[size=15.0000pt]一、光流模块简介
光流(optical flow)是指的是空间运动物体在观察成像平面上的像素运动的瞬时速度。
光流法是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。
通常将二维图像平面特定坐标点上的灰度瞬时变化率定义为光流矢量。
一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。
当人的眼睛观察运动物体时,物体的景象在人眼的视网膜上形成一系列连续变化的图像,这一系列连续变化的信息不断流过视网膜(即图像平面),好像一种光的,故称之为光流。光流表达了图像的变化,由于它包含了目标运动的信息,因此可被观察者用来确定目标的运动情况。
COCOFLY无人机采用的光流模组是基于PMW3901PMW3901是一款光学运动跟踪传感器,该传感器体积小、功耗低、精度高。如下图所示为该光流模组的实物图如下图所示。
图片1.png
光流模组上已经把PMW3901的数据处理好,并且通过串口周期传输,波特率为19200,该光流模组的串口传输的协议如下表所示。

包头
字节数
光流数据
和校验
环境质量
结束标识符
0xFE
0x04
DATA0
DATA1
DATA2
DATA3
SUM
SQUAL
0xAA0xBB
其中DATA0DATA1flow_x拆分出来的低8位数据和高8位数据,即flow_x=(int16_t)(DATA1<<8)|(DATA0)DATA2DATA3flow_y的低8位和高8位,即flow_y=(int16_t)(DATA3<<8)|(DATA2),其中和校验为DATA0~DATA3的累加值,即SUM=DATA0+DATA1+DATA2+DATA3SQUAL为地面环境质量,数值越大表示地面环境质量越高;最后一个字节是结束符,有两种:常规模式下固定是0xAA(Y引脚接高电平)、偏航模式下是固定的0xBBY引脚接低电平)。
二、串口光流数据获取实验
串口光流数据获取实验使用STM32的串口2UART2与光流模组相连,串口1UART1通过USB转串口模块连接电脑,把串口2获取到的光流数据通过串口1传输到电脑端的串口调试助手显示出来。串口2的引脚如下图所示
图片1-2.png
两个串口引脚分别与PA2PA3引脚相连,那么我们就对PA2PA3引脚进行配置,串口1的配置可以参考《串口(基础收发)》,配置代码(通过调用官方库)编写的思路如下:


代码思路
1
管脚配置
1、定义结构体;
2、使能时钟;
3、填充结构体;
4、装载结构体。
2
串口配置
1、定义结构体;
2、使能时钟;
3、填充结构体;
4、装载结构体;
5、开启中断;
6、使能串口。
3
中断优先级管理
1、定义结构体;
2、填充结构体;
3、装载结构体。
4
逻辑处理
1、等待接收以及发送数据。
串口2初始化代码如下:
图片2.png
串口2接收到光流模组的数据就转发到串口1,串口2中断函数代码如下。
图片3.png
设置串口2的波特率为19200,代码如下:
图片4.png
保存、编译、下载代码,确保串口2接上了光流模组,然后再把串口1接上USB转串口模块,最后接到电脑的USB端口,如下图所示:
图片5.png
然后在把USB转串模块插到电脑的USB口,打开电脑端的串口调试助手,找到对应的COM口(前提是安装了USB转串口驱动),设置波特率为115200,打开,可以看到串口在不断打印光流模组发送的数据,如下图所示。
图片6.png

完整的pdf格式文档51黑下载地址:
2.飞控开发基础-【4】串口(光流数据获取).pdf (1021.87 KB, 下载次数: 31)
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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