• OpenMV VSCode 扩展发布了,在插件市场直接搜索OpenMV就可以安装
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 串口卡死?



    • import sensor, image, time, math
      from pyb import UART
      
      uart = UART(3,4800, timeout_char=1000)                         # i使用给定波特率初始化
      uart.init(4800, bits=8, parity=None, stop=1, timeout_char=1000) # 使用给定参数初始化
      GRAYSCALE_THRESHOLD = [(0, 64)]
      ROIS = [ # [ROI, weight]
              (0, 0, 1, 1, 1), # You'll need to tweak the weights for your app
              (0, 50, 320, 30, 1), # depending on how your robot is setup.
              (0, 0, 1, 1, 1)
             ]
      
      weight_sum = 0
      for r in ROIS: weight_sum += r[4]
      
      
      sensor.reset() # Initialize the camera sensor.
      sensor.set_contrast(3)
      sensor.set_gainceiling(16)
      sensor.set_pixformat(sensor.GRAYSCALE) # use grayscale.
      sensor.set_framesize(sensor.VGA) # use QQVGA for speed.
      sensor.set_windowing((320, 240))
      sensor.skip_frames(time = 2000) # Let new settings take affect.
      sensor.set_auto_gain(False,value=100) # must be turned off for color tracking
      sensor.set_auto_whitebal(False) # must be turned off for color tracking
      clock = time.clock() # Tracks FPS.
      
      a=0
      def draw_keypoints(img, kpts):
          if kpts:
              print(kpts)
              img.draw_keypoints(kpts)
              img = sensor.snapshot()
              time.sleep(1000)
      kpts1 = image.load_descriptor("/desc.orb")
      img = sensor.snapshot()
      
      def high(x):
          x=x>>8
          return x
      
      def low(x):
          x=x&0xff
          return x
      
      while(True):
          clock.tick() # Track elapsed milliseconds between snapshots().
          img = sensor.snapshot() # Take a picture and return the image.
          print(0)
          if uart.any():
              a=int(uart.readchar())
              print(a)
          if a==1:
                   print(1)
                   if (kpts1 == None):
                       kpts1 = img.find_keypoints(max_keypoints=150, threshold=2, scale_factor=1.2)
                       draw_keypoints(img, kpts1)
                       uart.writechar(0)
                       uart.writechar(0)
                       uart.writechar(0)
                       uart.writechar(0)
                       uart.writechar(0)
                       uart.writechar(0)
                       uart.writechar(0x10)
                       uart.writechar(0x0d)
                       uart.writechar(0x0a)
                   else:
                       kpts2 = img.find_keypoints(max_keypoints=150, threshold=2, normalized=True)
                       if (kpts2):
                           match = image.match_descriptor(kpts1, kpts2, threshold=85)
                           if (match.count()>10):
                               img.draw_rectangle(match.rect())
                               img.draw_cross(match.cx(), match.cy(), size=10)
                               print(kpts2, "x:%d y:%d"%(match.cx(), match.cy()))
                               mv_x=(int)(match.cx()-160)
                               mv_y=(int)(120-match.cy())
                               Sum=mv_x+mv_y
                               uart.writechar(high(mv_x))
                               uart.writechar(low(mv_x))
                               uart.writechar(high(mv_y))
                               uart.writechar(low(mv_y))
                               uart.writechar(high(Sum))
                               uart.writechar(low(Sum))
                               uart.writechar(0x30)
                               uart.writechar(0x0d)
                               uart.writechar(0x0a)
                           else:
                               uart.writechar(0)
                               uart.writechar(0)
                               uart.writechar(0)
                               uart.writechar(0)
                               uart.writechar(0)
                               uart.writechar(0)
                               uart.writechar(0x10)
                               uart.writechar(0x0d)
                               uart.writechar(0x0a)
                       else:
                           uart.writechar(0)
                           uart.writechar(0)
                           uart.writechar(0)
                           uart.writechar(0)
                           uart.writechar(0)
                           uart.writechar(0)
                           uart.writechar(0x10)
                           uart.writechar(0x0d)
                           uart.writechar(0x0a)
          if a==2:
                   centroid_sum = 0
                   for r in ROIS:
                       blobs = img.find_blobs(GRAYSCALE_THRESHOLD, roi=r[0:4], merge=True) # r[0:4] is roi tuple.
      
                       if blobs:
                           # Find the blob with the most pixels.
                           largest_blob = max(blobs, key=lambda b: b.pixels())
      
                           # Draw a rect around the blob.
                           img.draw_rectangle(largest_blob.rect())
                           img.draw_cross(largest_blob.cx(),
                                          largest_blob.cy())
                           centroid_sum += largest_blob.cx() * r[4] # r[4] is the roi weight.
                   Mv_x=centroid_sum-160
                   Sum=Mv_x
                   uart.writechar(high(Mv_x))
                   uart.writechar(low(Mv_x))
                   uart.writechar(0)
                   uart.writechar(0)
                   uart.writechar(high(Sum))
                   uart.writechar(low(Sum))
                   uart.writechar(0x20)
                   uart.writechar(0x0d)
                   uart.writechar(0x0a)
                   print(2)
      
                   print("Turn Angle: %f" % Mv_x)
      
                   #print(clock.fps()) # Note: Your OpenMV Cam runs about half as fast while
      


    • 具体什么现象?什么叫做串口卡死?



    • 我也出现了同样的问题,就是openmv接收了几次STM32的数据后,卡在上面不动了,然后自动就弹出来了,需要拔掉USB线重新跑程序,但是也只能接收一会



    • @igxs 一会过后 ,直接就又不行了,这个有没有串口中断



    • @igxs 新的问题单独发帖子