ROI_height = 90 ROI = [0, int(120 - ROI_height), 160, ROI_height] blobs = img.find_blobs([white_thre],roi=ROI) #for blob in blobs: #img.draw_cross(blob.cx(), blob.cy(),(0,0,0)) #img.draw_rectangle(blob.rect()) if blobs: # max_blob不一定是赛道,但是如果如果硬件动作组不偏离中线,应可以直接这么写。 # 应设计多个不同条件下的转弯和移动动作组,使用手掰编程或者改变原有动作的转角即可。 max_blob = find_max(blobs) img.draw_cross(max_blob.cx(), max_blob.cy(),(0,0,0)) img.draw_rectangle(max_blob.rect()) #print(max_blob.cx(), max_blob.cy(), max_blob.rect()[2], max_blob.rect()[3], max_blob.pixels()) #print(max_blob.density(), max_blob.w(), max_blob.h()) blob_white_height_prob = 0.4 # TODO 可调 height_prob = max_blob.h()/ROI_height print('height_prob: '+ str(height_prob) + ' ' + 'density:' + str(max_blob.density())) if flag == 1 and sent_count <= 3: if max_blob.cx()<ROI_height: # TODO 重点改的对象。使用height_prob, max_blob.density(), max_blob.cx()进行赛道的识别 uart.write('8''\r\n') # print('turn left!') led.on() sent_count = sent_count + 1 elif action_cx >=130 : uart.write('3''\r\n') # print('turn right!' led.on() sent_count = sent_count + 1 continue你帮我在代码里修改判断机器狗左转的条件,给我一个更好的代码
时间: 2023-06-24 18:09:02 浏览: 155
iPhone_4-6.1.3_(10B329)-blobs.ifaith
根据代码注释和实际情况,我建议你修改以下代码:
```
if flag == 1 and sent_count <= 3:
if max_blob.cx()<ROI_height: # TODO 重点改的对象。使用height_prob, max_blob.density(), max_blob.cx()进行赛道的识别
uart.write('8''\r\n')
# print('turn left!')
led.on()
sent_count = sent_count + 1
elif action_cx >=130 :
uart.write('3''\r\n')
# print('turn right!'
led.on()
sent_count = sent_count + 1
continue
```
修改建议如下:
```
if flag == 1 and sent_count <= 3:
if max_blob.cx() < ROI[0] + ROI[2] / 2 - max_blob.w() / 2:
uart.write('8''\r\n')
# print('turn left!')
led.on()
sent_count += 1
elif max_blob.cx() > ROI[0] + ROI[2] / 2 + max_blob.w() / 2:
uart.write('3''\r\n')
# print('turn right!'
led.on()
sent_count += 1
continue
```
这个修改后的代码使用了max_blob的宽度和ROI来计算赛道的中心线,从而判断机器狗是否需要左转或右转。
阅读全文