|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
COCOFLY教程 ——疯壳·无人机·系列 串口(视觉数据获取) * B) O7 u. u- r4 {6 C K
/ X1 H" R+ u9 ?! y- M6 @4 J$ E& a" l7 L: z; q+ {, Q0 h
; q% v4 w" W5 j; h
, p' M- p5 |' k) {: i. U 图1
: U/ {; F' L1 w1 W7 E. V ]
! {& y7 Q& h$ e6 Y/ A V
: z* W# x1 G. Y4 l
2 j: d M1 K! |- |/ k. ? 一、OPENMV 模组简介+ Z7 j9 s$ z+ Z8 v
5 F$ F8 `7 k B2 @" _4 H
OPENMV 是一个开源、低成本、功能强大的机器视觉模块。以 STM32F767 为核心,集成了 OV7725 摄像头芯片,在小巧的硬件模块上,用 C 语言高效地实现了核心机器视觉算法,提供 Python 编程接口。开发者、电子发烧友以及智能设备开发商都可以用 Python 语言使用 OPENMV 提供的机器视觉功能,为自己的产品和发明增加有特色的竞争力。" L' S$ O: z, i
OPENMV 上的机器视觉算法包括寻找色块、眼球跟踪、边缘检测、标志跟踪等。可以用来实现非法入侵检测、产品的残次品筛选、跟踪固定的标记物等。使用者仅需要写一些简单的 Python 代码,即可轻松的完成各种机器视觉相关的任务。小巧的设计,使得 OPENMV 可以用到很多创意的产品上。比如,可以给机器人提供周边环境感知能力;给智能车增加视觉巡线功能;甚至,可以给工厂产品线增加残次品筛选功能等。9 x+ D7 ?( T7 B a* X/ x$ y: g
COCOFLY 上的无人机视觉模组采用的就是 OPENMV,其实物图如下图所示。
& o O/ Q+ X/ ?& @ H- Y7 Z3 @# R/ k0 p% d2 E& W$ P, l+ O
. k; l- ]( \1 U$ O) N T
图2
( F+ z) x' `5 i 其中OPENMV 的Python 代码已经写好提供给用户,如果用户需要修改的话, 也可以修改使用,目前 OPENMV 串口发出的视觉数据的协议框架如下表所示。
- B, f S: w( u" x! ^- C" @/ J& F/ h: U2 c1 ?/ x, q6 m; B S
6 r. Y+ R M! V$ `3 a- ` 表1
% e* ^- a- Z7 p( x' } 其中帧头是固定为两个字节:0xAA、0xAA;功能字为一个字节;长度为数据的长度,也为一个字节;数据位 n 个字节;和校验为一个字节,即帧头开始相加到最后一个字节,保留低 8 位。
. B. h0 j7 F; S5 Q 视觉模组的接收数据,即模式设置的协议框架如下表所示。5 b1 A& c, {) k+ |! Z4 }0 `6 O' m
# o' Q$ M# o3 o: ?& x ^* U- t
, a7 ~( }# a4 k1 I& K2 Z 表2
6 r* P9 @+ I0 b( M 其中帧头是固定为两个字节:0xAA、0xAF;功能字为 0xF1;长度为数据的长度,也为一个字节;Mode,即 OPENMV 的模式设置,为 1 个字节;和校验为一个字节,即帧头开始相加到最后一个字节,保留低 8 位。4 N7 R: }- T4 x2 I2 S
该数据的协议用户均可自定义,详情可以看配套的OPENMV 的Python 源码,
6 z" S& w* y3 ~. Y5 [ OPENMV 的具体使用方式可以查看 OPENMV 官网。
& ~7 G3 ^9 b" B+ V 二、串口视觉数据获取实验2 ~$ d; Z; n3 N( P! i# ]; i( F
p f% Y* {2 P* @# E- h2 x; z1 l
串口视觉数据获取实验使用 STM32 的串口 1 即 UART1 与视觉模组相连, 串口 2 即 UART2,通过 USB 转串口模块连接电脑,把串口 1 获取到的视觉数据通过串口 2 传输到电脑端的串口调试助手显示出来。做该实验的时候需要把视觉模组接到 USART1,把光流模组暂时取下,并且把 USB 转串口的线接到光流接
$ U r- [1 s' m0 ]8 | 口处。* `, j5 r: b$ {- K
串口 1 和串口 2 的配置可以参考《串口(基础收发)》和《串口(光流数据获取)》两节,配置代码(通过调用官方库)的思路,如下表所示:6 f1 w& M( t: o8 c( ?4 [
代码思路9 z4 b) ^& }8 k, q- h+ y1 |
- ^, P: h5 Z7 `& ~4 g1 x
/ T8 d# W7 Y- A @ 表35 ^7 X& \4 G9 O& G5 `' C& z
串口 2 初始化代码如下:
( E, p, w* ?$ j) g' K6 A; d8 K* D" g/ F( E- k1 P: J
# Z' R: u7 f$ Q* V* X' W1 X
图3( ]! U* v! @5 G* W# [0 E0 k; v0 r
6 U" B8 z5 J6 U+ n 这里注意要把串口的发送也配置好,这样才能把数据发送到电脑。4 R6 [5 J9 ?" G
串口 1 接收到视觉模组的数据就转发到串口 2,串口 1 的中断函数代码如下。/ m3 |$ t# B% Y, v3 u6 s
! A, u6 q: N1 `6 B2 O! C( W
: F6 C$ P' Q2 X, K; ?4 b' q
图4" w V" N" Y B, a7 b( X
1 N L) {/ W( j/ Y
设置串口 1 的波特率为 1115200,串口 2 的波特率也设置为 115200,代码如下:! n( q. o5 V: ?) F8 K
: z1 `) C' E+ A
, `; {& u% F7 t) A
图5
% G3 e' C/ m" q- Z$ d 保存、编译、下载代码,确保串口 1 接上了视觉模组,然后再把串口 2 接上
- |7 ]8 G* B" X USB 转串口模块,最后接到电脑的 USB 端口,如下图所示:
/ {- L* C9 [" j. q
! Z. d4 i9 _. `# o& I4 J" x
; z/ @/ h8 u# H! v 图6
Q! T- h8 }5 g# K7 O 然后在把 USB 转串模块插到电脑的 USB 口,打开电脑端的串口调试助手, 找到对应的 COM 口(前提是安装了 USB 转串口驱动),设置波特率为 115200, 打开,可以看到串口在不断打印视觉模组发送的数据,如下图所示。) t9 E* N$ O8 N+ L0 `+ _
1 F& s% r$ [6 ]9 s9 O7 D9 l+ ?
- W ]; `* o* U$ v B l4 b) h 图7
: F! P% B9 W" r: o3 c+ s
q5 T0 M& Q: ?( m ]* g
/ q5 x9 L/ \& @
( D% N ~0 U( z1 B9 l+ S. B' G+ s" w1 j
% p# a% k+ ]% [% n; h
文件下载请点击:
【5】串口(视觉数据获取).pdf
(610.08 KB, 下载次数: 0)
+ W: G. n# h# U2 ?, m# F3 x k; m W( d$ W5 M
; h: r, g# h6 B
& M+ `+ _/ A/ F) \
$ t! M, ^* r, n3 {3 @ F7 b
$ J4 T5 e+ ^& c O7 W
! o7 W* h3 i: R/ M0 s |
|