Advertisement
Guest User

fargetracking_med_servo_hjul

a guest
Nov 15th, 2018
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.62 KB | None | 0 0
  1. # This example shows off single color RGB565 tracking using the OpenMV Cam.
  2.  
  3. import sensor, image, time
  4. from pyb import Servo                       # Importerer servokontroll
  5. from pyb import UART                        # Importerer nødvendig bibliotek for å kommunisere serielt
  6. uart = UART(1,9600, timeout_char = 1000)    # Definerer kommunikasjon med Arduino
  7.  
  8. threshold_index = 1 # 0 for red, 1 for green, 2 for blue
  9.  
  10. # Color Tracking Thresholds (L Min, L Max, A Min, A Max, B Min, B Max)
  11. # The below thresholds track in general red/green/blue things. You may wish to tune them...
  12. thresholds = [(30, 100, 15, 127, 15, 127), # generic_red_thresholds
  13.               (27, 100, -74, -25, 13, 62), # generic_green_thresholds DISSE VERDIENE ER FORANDRET
  14.               (0, 30, 0, 64, -128, 0)] # generic_blue_thresholds
  15.  
  16. sensor.reset()
  17. sensor.set_pixformat(sensor.RGB565)
  18. sensor.set_framesize(sensor.QVGA)
  19. sensor.skip_frames(time = 2000)
  20. sensor.set_auto_gain(False) # must be turned off for color tracking
  21. sensor.set_auto_whitebal(False) # must be turned off for color tracking
  22. clock = time.clock()
  23.  
  24. x_pos = 1500    # Definerer verdien til startposisjon - Pan
  25. y_pos = 1500    # Definerer verdien til startposisjon - Tilt
  26.  
  27. x_min = 640     # Laveste pulsbreddesignal ved panorering (-90)
  28. x_max = 2500    # Høyeste pulsbreddesignal ved panorering (90)
  29. y_max = 2500    # Laveste pulsbreddesignal ved tilt (-90)
  30. y_min = 640     # Høyeste pulsbreddesignal ved tilt (90)
  31.  
  32. x_gain = -.75   # Justerer følsomheten til panoreringen, negativ verdi for å følge objektet. (Kanskje justere ned?)
  33. y_gain = -.75   # Justerer følsomheten til tiltingen, negativ verdi for å følge objektet.    (Kanskje justere ned?)
  34.  
  35. xServo = Servo(1)           # Definerer Servo 1 (pan, pin P7 på OpenMV M7)
  36. yServo = Servo(2)           # Definerer Servo 2 (tilt, pin P8 på OpenMV M7)
  37.  
  38. xServo.pulse_width(x_pos)   # Setter Servo 1 til startposisjon (fremover)
  39. yServo.pulse_width(y_pos)   # Setter Servo 2 til startposisjon (rett opp)
  40.  
  41. # Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are
  42. # returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the
  43. # camera resolution. "merge=True" merges all overlapping blobs in the image.
  44.  
  45. while(True):
  46.     clock.tick()
  47.     img = sensor.snapshot()
  48.     for blob in img.find_blobs([thresholds[threshold_index]], pixels_threshold=200, area_threshold=200, merge=True):
  49.         img.draw_rectangle(blob.rect())
  50.         img.draw_cross(blob.cx(), blob.cy())
  51.  
  52.         x = blob.cx()       # Finner x-posisjonen til sentrum av objekt
  53.         y = blob.cy()       # Finner y-posisjonen til sentrum av objekt
  54.         f = blob.rect()     # Inneholder verdiene til rektangelet rundt objektetet (x, y, bredde, høyde)
  55.  
  56.         x_error = x - (img.width()/2)   # Regner ut avstand fra sentrum
  57.         y_error = y - (img.height()/2)  # Regner ut avstand fra sentrum
  58.  
  59.         x_pos += x_error * x_gain       # Justerer og angir ny servoposisjon (x)
  60.         y_pos += y_error * y_gain       # Justerer og angir ny servoposisjon (y)
  61.  
  62.         if (x_pos > x_max):             # Hvis man når ytre venstrekant
  63.             x_pos = x_max               # Sett x_pos til maksimal PWM (90 grader)
  64.             uart.write('venstre')       # Send kommando til Arduino som svinger til venstre (FORANDRE 'venstre' TIL NOE)
  65.         if (x_pos < x_min):             # Hvis man når ytre høyrekant
  66.             x_pos = x_min               # Sett x_pos til laveste PWM (-90 grader)
  67.             uart.write('hoyre')         # Send kommando til Arudino som svinger til høyre (FORANDRE 'hoyre' TIL NOE)
  68.  
  69.         if (y_pos > y_max):             # Hvis man når maksimal tilt (Opp?)
  70.             y_pos = y_max               # Sett y_pos til høyeste PWM (90)
  71.         if (y_pos < y_min):             # Hvis man når laveste tilt (Ned?)
  72.             y_pos = y_min               # sett y_pos til laveste PWM (-90)
  73.  
  74.         if (f[2] < 60):                 # Hvis bredden på objektet (pixler) blir liten (Verdien må testes og justeres)
  75.             uart.write('fremover')      # Sender kommando til Arduino som trigger fremover (FORANDRE 'fremover' TIL NOE)
  76.         if (f[2] > 80:                  # Hvis bredden på objektet (pixler) blir stor (Verdien må testes og justeres)
  77.             uart.write('bakover')       # Sender kommando til Arduino som trigger revers (FORANDRE 'bakover' TIL NOE)
  78.  
  79.         xServo.pulse_width(int(x_pos))  # Beveger servoen (pan) mot objekt
  80.         yServo.pulse_width(int(y_pos))  # Beveger servoen (tilt) mot objekt
  81.  
  82.     # Draw FPS
  83.     img.draw_string(0, 0, "FPS:%.2f"%(clock.fps()))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement