|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
COCOFLY教程 ——疯壳·无人机·系列 串口(视觉数据获取) 4 e; Q2 ^' U- d, M
7 d* D8 X9 p6 r9 l- \/ @6 x, u
" `6 s" C' v9 ? | g
+ F8 B4 }2 E$ _' H K
* I& V8 F; B7 c" y9 M: q9 o 图1
- K' m( F3 |) n9 H% H- C
0 m; P" w7 X2 n, K! n) p( P0 _3 _5 K) } D. h6 a: z9 D
8 e3 T* P% v5 `& J2 G8 ^
一、OPENMV 模组简介
/ z2 z, d; R: P
' }, v' V) L" G9 l, k+ v# J6 J7 f0 @ OPENMV 是一个开源、低成本、功能强大的机器视觉模块。以 STM32F767 为核心,集成了 OV7725 摄像头芯片,在小巧的硬件模块上,用 C 语言高效地实现了核心机器视觉算法,提供 Python 编程接口。开发者、电子发烧友以及智能设备开发商都可以用 Python 语言使用 OPENMV 提供的机器视觉功能,为自己的产品和发明增加有特色的竞争力。: u8 b9 P( z9 P
OPENMV 上的机器视觉算法包括寻找色块、眼球跟踪、边缘检测、标志跟踪等。可以用来实现非法入侵检测、产品的残次品筛选、跟踪固定的标记物等。使用者仅需要写一些简单的 Python 代码,即可轻松的完成各种机器视觉相关的任务。小巧的设计,使得 OPENMV 可以用到很多创意的产品上。比如,可以给机器人提供周边环境感知能力;给智能车增加视觉巡线功能;甚至,可以给工厂产品线增加残次品筛选功能等。$ N/ } j, b: F% G, U
COCOFLY 上的无人机视觉模组采用的就是 OPENMV,其实物图如下图所示。, k6 b) q( U5 O' ^4 _
) y2 n0 g% Q4 z( N: J5 D5 Z! Q
; ]( r0 q; z6 g6 L2 |+ x
图2+ G9 ], o; B E ?
其中OPENMV 的Python 代码已经写好提供给用户,如果用户需要修改的话, 也可以修改使用,目前 OPENMV 串口发出的视觉数据的协议框架如下表所示。/ Q' k. T$ M7 x% }- f* ?: W2 n& v
9 T- T' s n7 d- L9 K: |# r
+ F, B7 R* N& H 表1
# p) W& `8 z: H' ^3 [ 其中帧头是固定为两个字节:0xAA、0xAA;功能字为一个字节;长度为数据的长度,也为一个字节;数据位 n 个字节;和校验为一个字节,即帧头开始相加到最后一个字节,保留低 8 位。
. I9 a. T9 D- F# d/ z* q 视觉模组的接收数据,即模式设置的协议框架如下表所示。
8 F |. p- [9 m6 k% F$ Z1 v' G+ M3 |# O) s8 c/ i* o) R- b. [
1 i- _4 @+ ?! f: n. m
表26 r. G j7 e% }: @& A6 O# Y
其中帧头是固定为两个字节:0xAA、0xAF;功能字为 0xF1;长度为数据的长度,也为一个字节;Mode,即 OPENMV 的模式设置,为 1 个字节;和校验为一个字节,即帧头开始相加到最后一个字节,保留低 8 位。
& i7 f4 ~6 p+ a- q& ^3 g1 D 该数据的协议用户均可自定义,详情可以看配套的OPENMV 的Python 源码,, }' x% m4 \7 L7 V5 j
OPENMV 的具体使用方式可以查看 OPENMV 官网。
3 g; N# U, ?6 j, c. h$ t, O5 q 二、串口视觉数据获取实验; }" q+ k( N0 N# |5 ~1 q+ z8 u
$ d" p* F& v1 p+ n
串口视觉数据获取实验使用 STM32 的串口 1 即 UART1 与视觉模组相连, 串口 2 即 UART2,通过 USB 转串口模块连接电脑,把串口 1 获取到的视觉数据通过串口 2 传输到电脑端的串口调试助手显示出来。做该实验的时候需要把视觉模组接到 USART1,把光流模组暂时取下,并且把 USB 转串口的线接到光流接
* f' n( b/ _. @5 \: {3 I 口处。
. q2 [1 a4 I6 t3 i. z! p 串口 1 和串口 2 的配置可以参考《串口(基础收发)》和《串口(光流数据获取)》两节,配置代码(通过调用官方库)的思路,如下表所示:/ X* m4 }+ w. X1 Q* Q9 R& C
代码思路+ r5 Q( s+ O( D, i
& ~. _3 |% u t \: Q* {, d
) W1 h3 i/ ^ S$ q% M9 _ 表3
! H ^$ Y1 z" ?+ f/ g2 q' D8 m. J 串口 2 初始化代码如下:
# A: n5 h, L i. l& D& j0 Q7 c, o O9 q& ^
; G1 s8 A# ]* T 图3
' L7 ^5 A& W4 a$ J" g: c. s6 g
! D$ |0 d/ G0 t 这里注意要把串口的发送也配置好,这样才能把数据发送到电脑。" C) t# N% x$ v
串口 1 接收到视觉模组的数据就转发到串口 2,串口 1 的中断函数代码如下。
1 `! M# Y; v$ t. l# o' |2 R5 `0 A9 f( h+ H* l* a3 k( l* ^! [
; h* [& V& l% _ B+ r 图4
- t* m! N7 e: [, n+ }: m3 E- C2 P
设置串口 1 的波特率为 1115200,串口 2 的波特率也设置为 115200,代码如下:
; Y! L6 c8 L. F4 c' G$ `7 f- `* U/ h7 ^5 f; M3 F
) V* |& a! S. Y) Q 图5
3 x1 M2 j, i5 x+ h I 保存、编译、下载代码,确保串口 1 接上了视觉模组,然后再把串口 2 接上3 _) H/ V+ X$ I! v
USB 转串口模块,最后接到电脑的 USB 端口,如下图所示:
4 s4 c. ^0 [- h& ^& i/ o1 t1 D
( l7 ~! H! ?' [ ?
0 @1 R$ _ n6 G, N; w, E 图6
i2 u' b, ?3 @, q5 s) D6 M 然后在把 USB 转串模块插到电脑的 USB 口,打开电脑端的串口调试助手, 找到对应的 COM 口(前提是安装了 USB 转串口驱动),设置波特率为 115200, 打开,可以看到串口在不断打印视觉模组发送的数据,如下图所示。1 T( L( P" `3 c
' K, j6 i' @6 k( T, ~; ~1 _1 ?2 K
5 \ q6 p4 O2 E$ k0 [: ` 图7! {5 ^8 V! r( W y$ q
0 s% _7 r& P, \4 k! m9 C# b
" v2 c0 ~/ R' Z, e+ E$ S8 f
+ M4 K6 }' G: ]* \5 W' A
2 g7 A3 Y8 t) `/ r" a& D3 i; l% i+ o
文件下载请点击:
【5】串口(视觉数据获取).pdf
(610.08 KB, 下载次数: 0)
4 Q# P0 R4 F0 J
) z. P5 K) S3 h$ ?$ k/ N4 Y. l% m- a6 P7 Z( \$ t3 E9 b
. h+ ]4 i! x5 J- i: V
9 F( w1 O7 F7 Y4 U" h3 i* n" j& ]$ I2 f/ z( v
) S d) Z9 S; h* ~. m |
|