Advertisement
Guest User

Untitled

a guest
Jan 15th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.69 KB | None | 0 0
  1. FUNCTION_BLOCK driver
  2.  
  3. VAR_INPUT
  4. // angles {-90,-75,-60,-45,-30,-20,-15,-10,-5,0,5,10,15,20,30,45,60,75,90}
  5. track0: REAL;
  6. track1: REAL;
  7. track2: REAL;
  8. track3: REAL;
  9. track4: REAL;
  10. track5: REAL;
  11. track6: REAL;
  12. track7: REAL;
  13. track8: REAL;
  14. // angle 0
  15. track9: REAL;
  16. track10: REAL;
  17. track11: REAL;
  18. track12: REAL;
  19. track13: REAL;
  20. track14: REAL;
  21. track15: REAL;
  22. track16: REAL;
  23. track17: REAL;
  24. track18: REAL;
  25.  
  26. trackPos: REAL;
  27. speed: REAL;
  28.  
  29. opponent0: REAL;
  30. opponent1: REAL;
  31. opponent2: REAL;
  32. opponent3: REAL;
  33. opponent4: REAL;
  34. opponent5: REAL;
  35. opponent6: REAL;
  36. opponent7: REAL;
  37. opponent8: REAL;
  38. opponent9: REAL;
  39. opponent10: REAL;
  40. opponent11: REAL;
  41. opponent12: REAL;
  42. opponent13: REAL;
  43. opponent14: REAL;
  44. opponent15: REAL;
  45. opponent16: REAL;
  46. opponent17: REAL;
  47. opponent18: REAL;
  48. opponent19: REAL;
  49. opponent20: REAL;
  50. opponent21: REAL;
  51. opponent22: REAL;
  52. opponent23: REAL;
  53. opponent24: REAL;
  54. opponent25: REAL;
  55. opponent26: REAL;
  56. opponent27: REAL;
  57. opponent28: REAL;
  58. opponent29: REAL;
  59. opponent30: REAL;
  60. opponent31: REAL;
  61. opponent32: REAL;
  62. opponent33: REAL;
  63. opponent34: REAL;
  64. opponent35: REAL;
  65.  
  66. angle: REAL;
  67. END_VAR
  68.  
  69. VAR_OUTPUT
  70. steering: REAL;
  71. accelerate: REAL;
  72. brake: REAL;
  73. END_VAR
  74.  
  75. FUZZIFY trackPos
  76. TERM left := (0.1, 0) (0.45, 1) (9,1);
  77. TERM center := (-0.75, 0) (-0.4, 1) (0.4, 1) (0.75, 0);
  78. TERM right := (-9, 1) (-0.45, 1) (-0.1, 0);
  79. END_FUZZIFY
  80.  
  81. FUZZIFY angle
  82. TERM left := (-1.875, 1) (-0.63893, 1) (0, 0);
  83. TERM center := (-0.28823, 0) (-0.1, 1) (0.28823, 0);
  84. TERM right := (0, 0) (0.51893, 1) (1.875, 1);
  85. END_FUZZIFY
  86.  
  87.  
  88. FUZZIFY track9
  89. TERM outside := (-1, 1) (-0.001, 1) (0, 0);
  90. TERM near := (-0.001, 0) (0, 1) (20, 1) (25, 0);
  91. TERM mid := (15, 0) (35, 1) (55, 0);
  92. TERM far := (51, 0) (80, 1) (200, 1);
  93. END_FUZZIFY
  94.  
  95. FUZZIFY speed
  96. TERM f_slow := (0, 1) (25, 1) (40, 0);
  97. TERM f_mid := (37, 0) (70, 1) (88, 0);
  98. TERM f_fast := (70, 0) (90, 1) (120, 1) (140, 0);
  99. TERM f_very_fast := (100, 0) (150, 1) (300, 1);
  100. END_FUZZIFY
  101.  
  102. DEFUZZIFY steering
  103. TERM turn_left := (0.005, 0) (0.25, 1) (1, 1);
  104. TERM stay_center := (-0.1, 0) (0, 1) (0.1, 0);
  105. TERM turn_right := (-1, 1) (-0.1, 1) (0, 0);
  106. METHOD : COG;
  107. DEFAULT := 0.000;
  108. END_DEFUZZIFY
  109.  
  110. DEFUZZIFY accelerate
  111. TERM nogas := (0, 1) (0.1, 1) (0.2, 0);
  112. TERM medgas := (0.1, 0) (0.34, 1) (0.4, 0);
  113. TERM fullgas := (0.35, 0) (0.4, 1) (1, 1);
  114. METHOD : COG;
  115. DEFAULT := 1.000;
  116. END_DEFUZZIFY
  117.  
  118. DEFUZZIFY brake
  119. TERM nobrake := (0, 1) (0.035, 0) ;
  120. TERM fullbrake := (0.035, 0) (0.09, 1) (1, 1);
  121. METHOD : COG;
  122. DEFAULT := 0.000;
  123. END_DEFUZZIFY
  124.  
  125. RULEBLOCK No1
  126. AND : MIN;
  127. ACT : MIN;
  128. ACCU : MAX;
  129.  
  130. RULE 1 : IF trackPos IS left THEN steering IS turn_right;
  131. RULE 2 : IF trackPos IS center THEN steering IS stay_center;
  132. RULE 3 : IF trackPos IS right THEN steering IS turn_left;
  133. RULE 4 : IF angle IS left THEN steering IS turn_right;
  134. RULE 5 : IF angle IS center THEN steering IS stay_center;
  135. RULE 6 : IF angle IS right THEN steering IS turn_left;
  136.  
  137. RULE 7 : IF track9 IS near AND speed IS f_fast THEN accelerate IS nogas;
  138. RULE 8 : IF track9 IS far AND speed IS f_slow THEN accelerate IS fullgas, brake IS nobrake;
  139. RULE 9 : IF track9 IS mid AND speed IS f_slow THEN accelerate IS fullgas, brake IS nobrake;
  140. RULE 10 : IF track9 IS outside THEN accelerate is medgas, brake IS nobrake;
  141.  
  142. RULE 11 : IF track9 IS near AND speed IS f_very_fast THEN accelerate IS nogas, brake IS fullbrake;
  143. RULE 12 : IF track9 IS mid AND speed IS f_mid THEN accelerate IS fullgas, brake IS nobrake;
  144. END_RULEBLOCK
  145.  
  146. END_FUNCTION_BLOCK
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement