完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
目标 openmv检测小球中心位置 通过串口发送给STM32:
重点在于小球位置数据的打包解包 openmv的python代码: import sensor, image, time from pyb import UART #串口设置 uart = UART(3, 19200) uart.init(115200, bits=8, parity=None, stop=1) #8位数据位,无校验位,1位停止位、 #所需颜色阈值 green_threshold = ( 0, 80, -70, -10, -0, 30) red_threshold =(0,100,33,127,-18,127) white_threshold=(59,100,-128,127,-128,127) pink_threshold={39,67,25,82,-128,127} #骚粉 #设定感兴趣位置(可不设置) area_roi=(5,5,115,115) sensor.reset() # 初始化摄像头 sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565. sensor.set_framesize(sensor.QQVGA) # 使用 QQVGA 速度快一些 sensor.skip_frames(time = 2000) # 跳过2000s,使新设置生效,并自动调节白平衡 sensor.set_auto_gain(False) # 关闭自动自动增益。默认开启的,在颜色识别中,一定要关闭白平衡。 sensor.set_auto_whitebal(False) #关闭白平衡。白平衡是默认开启的,在颜色识别中,一定要关闭白平衡。 #sensor.set_vflip(True) #设置图像垂直翻转 #sensor.set_hmirror(True) #设置图像水平翻转 clock = time.clock() # 追踪帧率 while(True): clock.tick() # Track elapsed milliseconds between snapshots(). img = sensor.snapshot() # 从感光芯片获得一张图像 blobs = img.find_blobs([pink_threshold],roi=area_roi) if(blobs): #目标出现才发送 print(blobs[0].cx(),blobs[0].cy()) data = bytearray([0xb3,0xb4,blobs[0].cx(),blobs[0].cy(),0x5B])#必须以二进制数组的形式发送 uart.write(data) #数据包格式为 帧头(0xb3,0xb4)+小球中心坐标数据(cx,cy)+帧尾部(0x5B) #查询uart.write函数信息如下: #"write the buffer of bytes to the bus.Return value:number of bytes written or none on timeout/" time.sleep(10); #find_blobs(thresholds, invert=False, roi=Auto),thresholds为颜色阈值, #是一个元组,需要用括号[ ]括起来。invert=1,反转颜色阈值,invert=False默认 #不反转。roi设置颜色识别的视野区域,roi是一个元组, roi = (x, y, w, h),代表 #从左上顶点(x,y)开始的宽为w高为h的矩形区域,roi不设置的话默认为整个图像视野。 #这个函数返回一个列表,[0]代表识别到的目标颜色区域左上顶点的x坐标,[1]代表 #左上顶点y坐标,[2]代表目标区域的宽,[3]代表目标区域的高,[4]代表目标 #区域像素点的个数,[5]代表目标区域的中心点x坐标,[6]代表目标区域中心点y坐标, #[7]代表目标颜色区域的旋转角度(是弧度值,浮点型,列表其他元素是整型), #[8]代表与此目标区域交叉的目标个数,[9]代表颜色的编号(它可以用来分辨这个 #区域是用哪个颜色阈值threshold识别出来的)。 #if blobs: ##如果找到了目标颜色 #for b in blobs: ##迭代找到的目标颜色区域 ## Draw a rect around the blob. #img.draw_rectangle(b[0:4]) # rect ##用矩形标记出目标颜色区域 #img.draw_cross(b[5], b[6]) # cx, cy ##在目标颜色区域的中心画十字形标记 #print(b.cx(),b.cy()) #print(clock.fps()) # 注意: 你的OpenMV连到电脑后帧率大概为原来的一半 #如果断开电脑,帧率会增加 STM32端串口初始化以及回调函数 USART2接收来自openmv的数据 USART3发送给电脑上位机 uint8_t my_re_buf1[24]={0x00}; //缓冲区 uint8_t openmvdata[8]={0x00}; //小球位置 只用到前两位 uint8_t pt_w1=0; //缓冲区计数指针 void OpmvDataGet(uint8_t data) { static uint8_t state=0; if(state==0 && data == 0xb3) { state =1 ; } else if (state==1 && data == 0xb4) { state=2; } else if(state == 2 && data!=0xb4) { state=3; openmvdata[0]=data; } else if(state == 3 && data!=0xb4) { state=4; openmvdata[1]=data; } else if(state ==4) { if(data == 0x5B) { HAL_UART_Transmit(&huart3,openmvdata,2,100); state=0; } else { openmvdata[0]=0x00; openmvdata[1]=0x00; state=0; } } } void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) //opmv-receive { if(huart == &huart2) { OpmvDataGet(my_re_buf1[pt_w1]); HAL_UART_AbortReceive_IT(&huart2); HAL_UART_Receive_IT(&huart2,&my_re_buf1[++pt_w1],1); if(pt_w1>20) pt_w1=0; } HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET); } //主函数 int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART2_UART_Init(); MX_USART3_UART_Init(); /* USER CODE BEGIN 2 */ HAL_UART_Receive_IT(&huart2,my_re_buf1,1); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET); /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 22:10 , Processed in 0.991458 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号