查看: 986|回复: 0

【开源教程11】疯壳·开源编队无人机-串口(光流数据获取)

[复制链接]
发表于 2022-8-16 17:18:09 | 显示全部楼层 |阅读模式
关键词: 开源 , 编队 , 无人机 , 串口 , 光流数据获取
COCOFLY教程
——疯壳·无人机·系列
串口(光流数据获取)




1.png    
图1


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

2.png   
    图2
    光流模组上已经把 PMW3901 的数据处理好,并且通过串口周期传输,波特率为 19200,该光流模组的串口传输的协议如下表所示。

表1.png    
    表1
    其中 DATA0、DATA1 是 flow_x 拆分出来的低 8 位数据和高 8 位数据,即flow_x=(int16_t)(DATA1<<8)|(DATA0),DATA2、DATA3 是 flow_y 的低 8 位和高8 位,即 flow_y=(int16_t)(DATA3<<8)|(DATA2),其中和校验为 DATA0~DATA3 的累加值,即 SUM=DATA0+DATA1+DATA2+DATA3;SQUAL 为地面环境质量, 数值越大表示地面环境质量越高;最后一个字节是结束符,有两种:常规模式下固定是 0xAA(Y 引脚接高电平)、偏航模式下是固定的 0xBB(Y 引脚接低电平)。二、串口光流数据获取实验
    串口光流数据获取实验使用 STM32 的串口 2 即 UART2 与光流模组相连, 串口 1 即 UART1 通过 USB 转串口模块连接电脑,把串口 2 获取到的光流数据通过串口 1 传输到电脑端的串口调试助手显示出来。串口 2 的引脚如下图所示:

3.png    
    图3
    两个串口引脚分别与 PA2 与 PA3 引脚相连,那么我们就对 PA2 与 PA3 引脚进行配置,串口 1 的配置可以参考《串口(基础收发)》,配置代码(通过调用官方库)编写的思路如下:

表2.png    
    表2
    串口 2 初始化代码如下:

4.png    
    图4
    串口 2 接收到光流模组的数据就转发到串口 1,串口 2 的中断函数代码如下。

5.png
    图5
    设置串口 2 的波特率为 19200,代码如下:

6.png    
    图6
    保存、编译、下载代码,确保串口 2 接上了光流模组,然后再把串口 1 接上
    USB 转串口模块,最后接到电脑的 USB 端口,如下图所示:

7.png    
    图7
    然后在把 USB 转串模块插到电脑的 USB 口,打开电脑端的串口调试助手, 找到对应的 COM 口(前提是安装了 USB 转串口驱动),设置波特率为 115200, 打开,可以看到串口在不断打印光流模组发送的数据,如下图所示。

8.png   
    图8




    文件下载请点击: 【4】串口(光流数据获取).pdf (799.34 KB)


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

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表