Advertisement
Aranyalma2

PID_Controller

Jul 6th, 2018
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.71 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. from ev3dev.ev3 import *
  3. import os
  4. import time
  5.  
  6. #FONTOS!
  7. #Kp,Ki,Kd,alzheimer értéke 0-1 között kalibrálandó
  8. #A kalibrációs értékek minden roboton más
  9. #Számít: A tengelyek távolságától, A szenzor és a motorok távolgágától, A robot tömeg/fordulási középpontjától
  10.  
  11.  
  12.  
  13. #alap kalibrációk
  14.  
  15. os.system('setfont Lat15-TerminusBold14')
  16.  
  17. touch = TouchSensor('in1')
  18. assert touch.connected, 'TouchSensor not connected'
  19.  
  20. szin = ColorSensor('in3')
  21. assert szin.connected, 'ColorSensor not connected'
  22. szin.mode = 'COL-REFLECT'
  23.  
  24. mA = LargeMotor('outA')
  25. mB = LargeMotor('outB')
  26.  
  27. mA.stop_action = 'hold'
  28. mB.stop_action = 'hold'
  29.  
  30.  
  31. Kp = 0.9 #Propersional control érték szórzója // A kívánt értéket (target) összehasonlítja mért értékkel majd ezzel ad egy mozási/kilengési értéket a controllernek \\Jelen
  32. Ki = 0.35 #Integral control érték szorzója   // Az egyensúlyi hiba küszöbölés, vonal finom követése, avagy ne ránghatózzon, egyenes számításának a finom hangolása \\Múlt
  33. Kd = 0.56 #Derivative control érték szorzója // A jövőbeli eltérés megjóslsa, ha ugyan így fojtatja a mozást, avagy kanyarok számításának finomítása \\Jövő
  34. alzheimer = 0.25 # egy olyan értk, ami szép lassan felejteti el az integral hibaértékét
  35. target = 35 #A maximális és a minimális szenzor érték számtani közepe
  36. integral = 0 #jelen haladás értéke
  37. last_error=0 #előző eltérési hiba érték
  38. speed=600 #motor alap sebessége
  39.  
  40. '''def sensor_initaialize(Max_value,Min_value):
  41.    target = (Max_value/Min_value)/2'''
  42.  
  43. while touch.value() == 0:
  44.     error = target - szin.value() #eltérés számítása
  45.     integral = (integral + error)*alzheimer #Múlt eredményi
  46.     derivative = error - last_error #Múltról következtetés jövőre
  47.  
  48.     correction = int(((error*Kp)+(integral*Ki)+(derivative*Kd))*6) #controller output PID eredmények összegzése
  49.     last_error = error
  50.  
  51.     motor_speed_a=speed-correction #motorok sebességei
  52.     motor_speed_b=speed+correction
  53.  
  54.     if(speed+correction > 1000): #maximális (1000)sebesség egység átlépés elleni védelem
  55.         motor_speed_b=1000
  56.        
  57.     if(speed-correction < -1000): #minimális (-1000)sebesség egység átlépés elleni védelem
  58.         motor_speed_a=-1000
  59.        
  60.     if(correction > 0): #korrigálés jobbra
  61.         mA.run_forever(speed_sp = motor_speed_b)
  62.         mB.run_forever(speed_sp = motor_speed_a)
  63.        
  64.     elif(correction < 0): #korrigálás balra
  65.         mB.run_forever(speed_sp = motor_speed_a)
  66.         mA.run_forever(speed_sp = motor_speed_b)
  67.        
  68.     else: #teljesen egyenes haladás
  69.         mA.run_forever(speed_sp = speed)
  70.         mB.run_forever(speed_sp = speed)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement