2019全国大学生电赛总结

  2019全国大学生电赛总结

  注册游戏账号点击图片进入游戏五张牌游戏,温州牌九游戏,牌九游戏

  本文记录了参加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)基本的思路非常简单,找到最大的红色块,然后通过小孔成像原理算出来舵机需要变换的角度。


写在最后
虽然没能取得好的成绩,但是整个过程我觉得自己提升不少,希望自己能再接再厉,争取下一次取得更好的成绩!
对了,补充一点,去测试的过程心态一定要放平,还有就是最后一刻一定不要动结构!!!我们就是吃了这个的亏~~

  2019全国大学生电赛总结

Comments

Popular posts from this blog

布隆迪博彩公司,布隆迪博彩网站

帕果帕果博彩公司,帕果帕果博彩网站

MG百搭圣甲虫游戏技巧,MG百搭圣甲虫游戏规则介绍