《飞控开发基础教程5开源编队无人机串口视觉数据获取.docx》由会员分享,可在线阅读,更多相关《飞控开发基础教程5开源编队无人机串口视觉数据获取.docx(8页珍藏版)》请在第一文库网上搜索。
1、COCOF1Y教程疯壳无人机系列目录、串口视觉数据获取实验2A1开源编队无人机A1OPENSOURCEFORMATIONDRONE高级功能Q激光,压光波定点有头无头3D型治双定高双模式令公QfH4)W1F1aB传遥控控制视觉追踪初觉追踪视觉追除控制飞行图码强色形状/扁日七)视觉跟丽图形化多机支持图形化自主巡线A1语音控制3动小车编队飞行编程飞行官网地址:httpwww.fengke.c1ub串口(视觉数据获取)一、OPENMV模组简介OPENMV是一个开源、低成本、功能强大的机器视觉模块。以STM32F767为核心,集成了OV7725摄像头芯片,在小巧的硬件模块上,用C语言高效地实现了核心机器
2、视觉算法,提供Python编程接口。开发者、电子发烧友以及智能设备开发商都可以用Python语言使用OPENMV提供的机器视觉功能,为自己的产品和发明增加有特色的竞争力。OPENMV上的机器视觉算法包括寻找色块、眼球跟踪、边缘检测、标志跟踪等。可以用来实现非法入侵检测、产品的残次品筛选、跟踪固定的标记物等。使用者仅需要写一些简单的Python代码,即可轻松的完成各种机器视觉相关的任务。小巧的设计,使得OPENMV可以用到很多创意的产品上。比如,可以给机器人提供周边环境感知能力;给智能车增加视觉巡线功能;甚至,可以给工厂产品线增加残次品筛选功能等。COCe)F1Y上的无人机视觉模组采用的就是OP
3、ENMV,其实物图如下图所示。其中OPENMV的Python代码已经写好提供给用户,如果用户需要修改的话,也可以修改使用,目前OPENMV串口发出的视觉数据的协议框架如下表所示。帧头(2Bytes)功能字(IByte)长度(IByte)数据(nBytes)和校验(IByte)OxAAOxAAOxXXOxXXOxXX.OxXX其中帧头是固定为两个字节:OxAAOxAA;功能字为一个字节;长度为数据的长度,也为一个字节;数据位n个字节;和校验为一个字节,即帧头开始相加到最后一个字节,保留低8位。视觉模组的接收数据,即模式设置的协议框架如下表所示。帧头(2Bytes)功能字(IByte)长度(IBy
4、te)Mode(1Byte)和校验(IByte)OxAAOxAFOxF1OxXXOxXX.OxXX其中帧头是固定为两个字节:OxAA.OxAF;功能字为OxFh长度为数据的长度,也为一个字节;Mode,即OPENMV的模式设置,为1个字节;和校验为一个字节,即帧头开始相加到最后一个字节,保留低8位。该数据的协议用户均可自定义,详情可以看配套的OPENMV的PythOn源码,OPENMV的具体使用方式可以查看OPENMV官网。二、串口视觉数据获取实验串口视觉数据获取实验使用STM32的串口1即UART1与视觉模组相连,串口2即UART2,通过USB转串口模块连接电脑,把串口1获取到的视觉数据通过
5、串口2传输到电脑端的串口调试助手显示出来。做该实验的时候需要把视觉模组接到USART1,把光流模组暂时取下,并且把USB转串口的线接到光流接口处。串口1和串口2的配置可以参考串口(基础收发)和串口(光流数据获取)两节,配置代码(通过调用官方库)的思路,如下表所示:代码思路1管脚配置1、定义结构体;2、使能时钟;3、填充结构体;4、装载结构体。2串口配置1、定义结构体;2、使能时钟;3、填充结构体;4、装载结构体;5开启中断;6、使能串口。3中断优先级管理1、定义结构体;2、填充结构体;3、装载结构体。4逻辑处理1、等待接收以及发送数据。串口2初始化代码如下:VOiduart2_init(uns
6、ignedintBaudRate)早GPIo端口设置GPIO-InitTypeDefGPIO-InitStructure,USART-InitTypeDefUSART-InitStructure,NVIC_InitTypeDefNVIC-InitStructure,RCC.APB2PeriphC1ockCmd(RCC.APB2Periph.GP10A.ENAB1E),/使USART2,GP1OA时钟RCC-APB1PeriphC1ockCmd(RCC_APB1Pcriph_USART2,ENAB1E),/USART2.TXGPIOA-2GP1c11nitStrUCtUre.GPIC1Pin=G
7、PI0_Pin_2;/PA.2GPIO-InitStructure.GPIO_SpeedGPIO_Speed_50MHz.GPIO.InitStructure.GPIO_Mode=GPIO-ModeAFPP,复用推挽输出GPIO_Init(GPIOA,aGPIO_InitStructure);初始化GPIOA.2/USART2_RXGPIOA3初始化GP1C11nitStrUCtUre.GPQPin=GPI0_Pin_3;/PA3GPIO.InitStructure.GPIO_Mode=GP1ojdOdeN1F1oATING,浮空输入GPIO.Init(GPIOA,&GPIO_InitStru
8、cture),初始化GPIoA.3/Usart2NVIC配置NVIC_InitStructure.NVICeIRQChanne1=USART2.IRQn,NVICJnitStructure.NVIC-IRQChanne1PreemptionPriority=4;/抢占优先级4NVIC_InitStructure.Nvic-IRQChanne1SubPriority=1;子优先级1NVICInitstructure.NVICIRQChanne1Cmd=ENAB1E.IR通道使能NVIC_Init(aNVIC_InitStructure);根据指定的参数初始化VIC寄存器/USART初始化设置US
9、ART-InitStructure.USART_BaudRate=BaUdRate;串口波特率USART-InitStructure.USART-Word1ength=USARTJVOrd1ength_8b,字长为8位数据格式USART-InitStructure.USART-StopBits=USARTStopBitsJ;一个停止位USARTJnitStructure.USARJParity=USART_Parity_No,/无奇偶校验位USARJInitStructure.USART.HardwareF1oWCOntrCI=USARTHardwareFIOWCOntrOI_None./无硬
10、件数据流控制USART-InitStructure.USART_Mode=USART_Mode_RX1USARTJdodejrX,发送接收USART-Init(USART2,MSART-InitStructure);初始化串口2USARTITConfig(USART2,USARTITRXNE,ENAB1E);舌启串口接受中断、-USART_Cmd(USART2,ENAB1E);使能串口2)45678910111213141516171819202122232425262728293031323334353637383940414243这里注意要把串口的发送也配置好,这样才能把数据发送到电脑。4
11、6147voidCSART1-IRQHand1er(void)48早49串口1中断服务程序505152535455u8Res;if(USART_Ge11TStatus(USART1,USART_IT_RXNE)!=RESET)接收中断(Res=ISART-ReceiveData(ISART1);读取接收到的数据1SART_SendData(USART2,Res);读取到的OPEXMV数据发送到串口2串口1接收到视觉模组的数据就转发到串口2,串口1的中断函数代码如下。设置串口1的波特率为1115200,串口2的波特率也设置为115200,代码如1011121314151aintmain(void
12、)(中断优先级组别设置WIC_PriorityGroupConfig(NVIC_PriorityGroup_4);uart1_init(115200)/视觉模组uart2_init(115200);/whi1e(1);保存、编译、下载代码,确保串口1接上了视觉模组,然后再把串口2接上USB转串口模块,最后接到电脑的USB端口,如下图所示:然后在把USB转串模块插到电脑的USB口,打开电脑端的串口调试助手,找到对应的COM口(前提是安装了USB转串口驱动),设置波特率为115200,打开,可以看到串口在不断打印视觉模组发送的数据,如下图所示。00005813:47:43.157收-.AAAA00
13、005813:47:43.206收+AAAA00005813:47:43.252收-*AAAA00005813:47:43.307收-+AAAA00005813:47:43.360收=+AAAA00005813:47:43.422收-*AAAA00005813:47:43.458收*AAAA000058F6F6F6OEOEOEOEOEOEOE00000000000000000000000000000000000000000000000000000000II*-Cd.AKIrr-J1gfei1eJEr-W伍0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000