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



    • # robot.py
      
      import time
      from servo import Servos
      from machine import SoftI2C, Pin
      import math
      
      # 控制继电器,继电器控制电磁铁
      pin1 = Pin('P1', Pin.OUT_PP, Pin.PULL_NONE)
      pin1.value(0)
      
      # PCA9685 舵机扩展板
      i2c = SoftI2C(sda=Pin('P5'), scl=Pin('P4'))
      servo = Servos(i2c, address=0x40, freq=50, min_us=650, max_us=2800, degrees=180)
      
      # 三个舵机的初始位置
      servo.position(0, 0)
      servo.position(1, 90)
      servo.position(2, 90)
      
      #全局变量,用于缓慢移动
      servo_positions = [0,90,90]
      
      
      # 控制一个舵机移动
      def move(index, angle):
          servo.position(index, angle)
          servo_positions[index] = angle
      
      
      # 控制三个舵机移动
      def move_list(angle_list):
          print(angle_list)
          move(0, int(angle_list[0]))
          move(1, int(angle_list[1]))
          move(2, int(angle_list[2]))
      
      
      # 控制三个舵机慢速移动
      def slow_move_to(angle_list):
      
          init_positions = servo_positions.copy()
      
          d0 = angle_list[0] - init_positions[0]
          d1 = angle_list[1] - init_positions[1]
          d2 = angle_list[2] - init_positions[2]
      
          dm = int(max(abs(d0), abs(d1), abs(d2)))
          if dm == 0:
              return
      
          for i in range(dm+1):
              move_list([init_positions[0]+i*d0/dm,
              init_positions[1]+i*d1/dm,
              init_positions[2]+i*d2/dm])
      
              time.sleep_ms(40)
      
      
      # 设置棋子拾取区的位置
      PICK = [[74,128,19], [82,128,17], [90,125,14], [98,128,17], [106,128,19]]
      # 拾取区机械臂提起来的位置
      HIGH_PICK = [90,95,55]
      
      # 棋盘的放置位置
      BOARD = [
          [[82,150,55], [82,140,40], [81,133,30]],
          [[90,150,55], [90,140,40], [90,133,30]],
          [[98,150,55], [98,140,40], [99,133,30]]
      ]
      
      # 棋盘落子上方的位置
      HIGH_BOARD = [90,120,70]
      
      
      # 拾取棋子,并放置到 x,y
      def pick_and_place(x,y):
      
          slow_move_to(HIGH_PICK)
          time.sleep_ms(500)
      
          slow_move_to(PICK[2])
          time.sleep_ms(500)
      
          slow_move_to(HIGH_PICK)
          time.sleep_ms(500)
      
          slow_move_to(HIGH_BOARD)
          time.sleep_ms(500)
      
          slow_move_to(BOARD[y][x])
          time.sleep_ms(500)
          pin1.value(1) # 继电器打开
          time.sleep_ms(500)
      
          slow_move_to(HIGH_PICK)
          pin1.value(0) # 继电器关闭
          time.sleep_ms(500)
      
          slow_move_to([0,90,90])
      
      
      if __name__ == "__main__":
      # 校准测试用
      
          time.sleep_ms(1)
      
          for order in [
              BOARD[1][1], BOARD[0][0], BOARD[1][0],
              BOARD[2][0], BOARD[2][1], BOARD[2][2],
              BOARD[1][2], BOARD[0][2], BOARD[0][1],
          ]:
              slow_move_to(HIGH_BOARD)
              time.sleep_ms(500)
              slow_move_to(order)
              time.sleep_ms(500)
      
          #slow_move_to(BOARD[0][2])
      
      
          #for x in PICK:
              #slow_move_to(HIGH_PICK)
              #time.sleep_ms(500)
              #slow_move_to(x)
              #time.sleep_ms(500)
      
          slow_move_to([0,90,90])
      
      

      from servo import Servos报错ImportError: no module named 'servo',请问怎么解决



    • 已经安装了servo库0_1740898634740_1539dedb-c8ec-4930-89ff-339ed4d76d9f-image.png



    • 使用OpenMV IDE连接OpenMV 摄像头运行代码。