导航

    • 登录
    • 搜索
    • 版块
    • 产品
    • 教程
    • 论坛
    • 淘宝
    1. 主页
    2. g4kx
    G
    • 举报资料
    • 资料
    • 关注
    • 粉丝
    • 屏蔽
    • 帖子
    • 楼层
    • 最佳
    • 群组

    g4kx

    @g4kx

    0
    声望
    2
    楼层
    618
    资料浏览
    0
    粉丝
    0
    关注
    注册时间 最后登录

    g4kx 关注

    g4kx 发布的帖子

    • openmv闪两下红灯是什么原因?

      openmv闪两下红灯之后就会断开,请问这是由报错导致的还是什么其他原因?

      发布在 OpenMV Cam
      G
      g4kx
    • 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)
      
      发布在 OpenMV Cam
      G
      g4kx