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



    • 你好,

      我想用通过uart使openmv传数据到stm32, 连接电脑ide的时候是正常运行的,stm32也能接收到数据。但是一旦脱机运行,openmv运行几秒钟之后就会闪两下红灯自动断开。我尝试过注释掉uart代码,再脱机运行又能正常工作了。所以我不知道是不是uart有什么问题使openmv断开。

      下面是我的代码:

      import sensor, image, time, math
      from pid import PID
      from pyb import UART, LED
      sensor.reset()
      sensor.set_pixformat(sensor.GRAYSCALE)
      sensor.set_framesize(sensor.QVGA)
      sensor.skip_frames(time = 2000)
      clock = time.clock()
      rho_weight = 1
      theta_weight = 1
      count = 0
      w = 80
      h = 60
      mid_x = w/2
      mid_y = h/2
      gain = 5
      uart = UART(3, 115200, timeout_char = 1000)
      green_led = LED(2)
      def pooling_filter(img):
          img.midpoint_pool(2, 2,bias=0.5)
          img.binary([(120,130)])
          img.midpoint_pool(2, 2,bias=0.5)
          img.binary([(120,130)])
      def find_middle_line(img):
          try:
              pooling_filter(img)
              line = img.get_regression([(240,255)], robust = True)
              img.draw_line(line.line(), color = 139,thickness=2)
              rho_error, theta_error = line_to_theta_and_rho(line.rho(),line.theta())
              return rho_error, theta_error
          except:
              return 0,0
      def line_to_theta_and_rho(rho,theta):
          if rho < 0:
              trans_rho = -rho
              trans_theta = theta + 180
          else:
              trans_rho = rho
              trans_theta = theta
          cos_trans_theta = math.cos(math.radians(trans_theta))
          sin_trans_theta = math.sin(math.radians(trans_theta))
          distance = abs(mid_x*cos_trans_theta + mid_y*sin_trans_theta - trans_rho)
          if trans_theta == 90 or trans_theta == 270:
              distance_error = theta_error = 0
          elif (trans_rho-mid_y*sin_trans_theta)/cos_trans_theta > mid_x:
              distance_error = distance
              if theta > 90:
                  theta_error = theta - 180
              else:
                  theta_error = theta
          else:
              distance_error = -distance
              if theta > 90:
                  theta_error = theta - 180
              else:
                  theta_error = theta
          return distance_error, theta_error
      while(True):
          clock.tick()
          img = sensor.snapshot()
          img.find_edges(image.EDGE_CANNY, threshold=(150,190))
          rho_error,theta_error = find_middle_line(img)
      
          if count != 10:
              if count == 0:
                  rho_error_sum = theta_error_sum = 0
              rho_error_sum += rho_error
              theta_error_sum += theta_error
              count += 1
              continue
          else:
              rho_error_sum /= 10
              theta_error_sum /= 10
              count = 0
          rho_pid = PID(p=0.40, i=0.1, d=0, imax=10)
          theta_pid = PID(p=0.25, i=0.1, d=0, imax=10)
          rho_output = rho_pid.get_pid(rho_error_sum,1)
          theta_output = theta_pid.get_pid(theta_error_sum,1)
          output = gain*int(rho_weight*rho_output+theta_weight*theta_output)
          if output > 0:
              output = 'A'
          else:
              output = 'B'
          uart.write(str(output)+'\r\n')
          green_led.on()
          print('output=',output)
      


    • @g4kxopenmv打开uart脱机运行为什么会自动断开? 中说:

      但是一旦脱机运行,openmv运行几秒钟之后就会闪两下红灯自动断开

      脱机运行,哪里断开?是说OpenMV会重启?

      我脱机运行这个代码没有出现闪红灯的现象,你脱机运行时通过什么供电的?把全部电路都拔掉,只通过USB供电试试。