Openmv和arduino串口通信的优化,以及根据不同颜色的色块,进行简易判断
最近在搞Robocup中国机器人大赛,我们组的项目是自动分拣机器人。我主要负责我们组电控中视觉识别和主程序书写部分。因为在视觉识别及串口通信这部分,绕了很大的弯路,所以写一篇文章在这里,供大家参考。
目的
通过openmv对小球进行识别,并把识别到的数据转换为0,1,2…通过串口,发送给arduino板,从而实现串口通信。(例如,识别到红色,就发送0给arduino板,这样arduino在判断时更为简单,代码书写更简便,其次,串口通信速度更快,不挤占传输空间,让识别更加准确)
器材
arduino开发板,Mega2560(代码和uno板可以共用)
Openmv
第一部分 接线
接线这部分是很有讲究的,arduino在虚拟软串口的时候,只有部分串口是可以进行调用的,我试过好几种方案,最终发现arduino里面只有10,11,12,13串口是可以使用的,其余串口均不能作数据传输的软串口,官方例程中给的是10,11。如果串口被占用的同学,可以试着用一下12,13来进行数据传输。
arduino Openmv
12-----------------p4
13-----------------p5
GND------------GND
VIN--------------5V
官方给的教程中,openmv驱动需要3.3-7v的电压,VIN口最好接5v,所以在通过arduino板子给openmv供电,脱机运行的时候,可以将VIN口和arduino上的5V接在一起。这样就可以脱机运行了。
第二部分 代码
在代码实现方面,官方例程中,传输的数据属于json格式的数据,传输的数据太多,这里进行优化。这里同样传输jason数据格式的数据,但是,仅传输一个字符过去。
Openmv代码
import sensor, image, time
import json
from pyb import UART
blue_threshold = (22, 67, 9, 127, -128, -54)#蓝色的阈值
red_threshold = (41, 61, 42, 127, -128, 127)#红色的阈值
yellow_threshold = ( 60 ,10,-15,20,30,80)#黄色的阈值
sensor.set_hmirror(True)
sensor.set_vflip(True)
sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.RGB565)