OPENMV巡线

将openmv图片划分成三个ROI区域

import sensor, image, time,lcd
from pyb import UART
from pyb import LED
ROIS = [
        (0, 0, 160,40, 0.6),
        (0,40, 160, 40, 0.3),
        (0, 80, 160, 40, 0.1)
       ]

寻找每个区域内的阈值范围里的面积最大色块,用矩形框中,读取最大色块的角度偏移与位置,并累加

 for i in range(len(ROIS)):
        blobs = img.find_blobs([(255,255)],roi=ROIS[i][0:4],area_threshold=10,merge=True)
        if blobs:
            j=0
            max_blobs=0
            for j in range(len(blobs)):
                if(blobs[j][4]>blobs[max_blobs][4]):
                    max_blobs=j
            img.draw_rectangle(blobs[max_blobs][0:4],color=(255,0,0))
            img.draw_cross(blobs[max_blobs][5], blobs[max_blobs][6],color=(255,0,0))
            rho_err += blobs[max_blobs].cx() * ROIS[i][4]
            theta_err+=(blobs[max_blobs].rotation_deg())* ROIS[i][4]

这样就可以通过三个区域内最大色块的位置与偏移角度,加权平均计算出赛道位置rho_err 与偏移角度theta_err。

最后将数据通过串口通讯到单片机,单片机通过PID算法控制电机,纠正偏差,可以实现巡线效果

  output_str="%c%c"%(theta_err,rho_err)
  uart.write(output_str)

你可能感兴趣的:(python,开发语言)