本文记录了参加2019年全国大学生电子竞赛的一些体会。
准备过程
暑假期间,我和我们组的两个人一起在学校集中进行全国大学生电子竞赛的培训,虽然整个过程很苦,但是能取得省级二等奖的成绩(去测试的时候失误了~~在学校打得挺准的),也算是有一点回报吧。
我是负责视觉设计的,也帮写程序的同学想想控制算法,最后会附上我们的视觉程序供大家来学习。
一些体会
比赛过程中,三个人一定要配合好,各自把自己的任务干好,还有就是坚决不要放弃,我们就是比赛的最后一天才把电磁炮做出来,然后赶紧测试,晚上8点之前交作品还是绰绰有余的。
电赛找到一个好的指导老师非常关键,无论是在知识上还是精神上,都能够给你提供帮助。我们的指导老师就很好,整个过程陪着我们,帮我们想方案,帮我们找问题,看到他就觉得安心。
下边是我们的视觉代码,有兴趣的可以参考一下。
import sensor, image, time, pyb
from pyb import UART
from struct import pack
import math
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_brightness(0)
#sensor.skip_frames(10)
sensor.set_auto_whitebal(False)
clock = time.clock() # 追踪帧率
uart = UART(3, 115200)
fx = 279.4808 #.4808
fy = 279.4204 #.4204
cx = 133.6368
cy = 123.6917
K = 5120
buf_d = [0,0,0,0,0]
BLACK = (0, 43, -12, 4, -10, 9)
BALL = (23, 97, 48, 127, -37, 62)
img = sensor.snapshot()
black_blobs = img.find_blobs([BLACK], pixels_threshold=9000)
board_roi = (1,1,500,500)
ball_blobs = img.find_blobs([BALL], roi=board_roi, pixels_threshold=100, merge=True, margin=1)
if ball_blobs:
for ball_blob in ball_blobs:
img.draw_rectangle(ball_blob[0:4])
img.draw_cross(ball_blob[5], ball_blob[6], size=50)
if black_blobs:
for black_blob in black_blobs:
img.draw_rectangle(board_roi[0:4])
def find_max(blobs):
max_size=0
for blob in blobs:
if blob.pixels() > max_size:
max_blob=blob
max_size = blob.pixels()
return max_blob
while(True):
frame_fps =clock.fps()
img = sensor.snapshot()
ball_blobs = img.find_blobs([BALL], roi=board_roi, pixels_threshold=100, merge=True, margin=1)
if ball_blobs:
max_blob = find_max(ball_blobs)
target_x = 135
target_y = 120
img.draw_rectangle(max_blob.rect()) # rect
img.draw_cross(max_blob.cx(), max_blob.cy()) # cx, cy
#print(max_blob.cx(),max_blob.cy())
yaw = math.atan((max_blob.cx() - cx) / fx) - math.atan((target_x - cx) / fx)
pitch = math.atan((max_blob.cy() - cy) / fy) - math.atan((target_y - cy) / fy)
#print(math.atan((last_x - cx) / fx))
#print("yaw: ", yaw)
#print("pitch: ", pitch)
yaw*=180/3.141592
pitch*=180/3.141592
buf_d[0] = K / ((max_blob.w()+max_blob.h())/2)
buf_d[4]=buf_d[3];buf_d[3]=buf_d[2];buf_d[2]=buf_d[1];buf_d[1]=buf_d[0];
D_buf=sorted(buf_d)
D = D_buf[2]
print("yaw: ", yaw)
print("pitch: ", pitch)
print("Dis:", D)
D = K/max_blob.w()
#K = max_blob.w()*128
#print(K)
#print(D)
datap = pack('bbbbfffbb',0x35,0x46,0x57,0x24, float(yaw), float(pitch), float(D), 0xBB, 0xAA)
print('you send:',datap)
uart.write(datap)基本的思路非常简单,找到最大的红色块,然后通过小孔成像原理算出来舵机需要变换的角度。
写在最后
虽然没能取得好的成绩,但是整个过程我觉得自己提升不少,希望自己能再接再厉,争取下一次取得更好的成绩!
对了,补充一点,去测试的过程心态一定要放平,还有就是最后一刻一定不要动结构!!!我们就是吃了这个的亏~~
大家也都应该知道不同的地方的麻将规则是不一样的博彩问答,我给大家具体来讲述一下博彩问答, 首先介绍的是没有将牌的游戏规则。相信大家都知道,一副牌必须要有将牌,在你摸完牌之后,只要你有对牌,那么这副对牌就可以当作将牌来使用。所以,这种麻将游戏的规则是非常简单的,相信很多人最喜欢玩的就是这种游戏。