Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.68 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.3, 0) (0.6, 1) (9,1);
  77. TERM center := (-0.6, 0) (-0.3, 1) (0.3, 1) (0.6, 0);
  78. TERM right := (-9, 1) (-0.6, 1) (-0.3, 0);
  79. END_FUZZIFY
  80.  
  81. FUZZIFY angle
  82. TERM left := (-3.15, 1) (-0.9, 1) (0, 0);
  83. TERM center := (-0.9, 0) (0, 1) (0.9, 0);
  84. TERM right := (0, 0) (0.9, 1) (3.15, 1);
  85. END_FUZZIFY
  86.  
  87. FUZZIFY track6 //czujnik fury pod katem 30 stopni z lewej strony
  88. TERM outside := (-1, 1) (-0.001, 1) (0, 0);
  89. TERM near := (-0.001, 0) (0, 1) (20, 1) (25, 0);
  90. TERM mid := (25, 0) (45, 1) (65, 0);
  91. TERM far := (61, 0) (80, 1) (200, 1);
  92. END_FUZZIFY
  93.  
  94. FUZZIFY track9 //czujnik fury pod katem 0 czyli przod
  95. TERM outside := (-1, 1) (-0.001, 1) (0, 0);
  96. TERM near := (-0.001, 0) (0, 1) (20, 1) (25, 0);
  97. TERM mid := (15, 0) (35, 1) (55, 0);
  98. TERM far := (61, 0) (80, 1) (200, 1);
  99. END_FUZZIFY
  100.  
  101. FUZZIFY track12 //czujnik fury pod katem 30 stopni z prawej strony
  102. TERM outside := (-1, 1) (-0.001, 1) (0, 0);
  103. TERM near := (-0.001, 0) (0, 1) (20, 1) (25, 0);
  104. TERM mid := (15, 0) (35, 1) (200, 1);
  105. END_FUZZIFY
  106.  
  107. FUZZIFY track18 //czujnik fury pod katem 90 stopni z prawej strony
  108. TERM outside := (-1, 1) (-0.001, 1) (0, 0);
  109. TERM near := (-0.001, 0) (0, 1) (20, 1) (25, 0);
  110. TERM mid := (90, 0) (100, 1) (110, 0);
  111. TERM far := (61, 0) (80, 1) (200, 1);
  112. END_FUZZIFY
  113.  
  114.  
  115. FUZZIFY speed
  116. TERM f_slow := (0, 1) (25, 1) (40, 0);
  117. TERM f_mid := (37, 0) (70, 1) (88, 0);
  118. TERM f_fast := (70, 0) (90, 1) (120, 1) (140, 0);
  119. TERM f_very_fast := (140, 0) (150, 1) (300, 1);
  120. END_FUZZIFY
  121.  
  122. DEFUZZIFY steering
  123. TERM turn_left := (0.005, 0) (0.25, 1) (1, 1);
  124. TERM stay_center := (-0.1, 0) (0, 1) (0.1, 0);
  125. TERM turn_right := (-1, 1) (-0.1, 1) (0, 0);
  126. METHOD : COG;
  127. DEFAULT := 0.000;
  128. END_DEFUZZIFY
  129.  
  130. DEFUZZIFY accelerate
  131. TERM nogas := (0, 1) (0.1, 1) (0.2, 0);
  132. TERM medgas := (0.1, 0) (0.34, 1) (0.4, 0);
  133. TERM fullgas := (0.35, 0) (0.4, 1) (1, 1);
  134. METHOD : COG;
  135. DEFAULT := 1.000;
  136. END_DEFUZZIFY
  137.  
  138. DEFUZZIFY brake
  139. TERM nobrake := (0, 1) (0.035, 0) ;
  140. TERM midbrake := (0.035, 0) (0.185, 1) (0.325, 1) ;
  141. TERM fullbrake := (0.035, 0) (0.045, 1) (1, 1);
  142. METHOD : COG;
  143. DEFAULT := 0.000;
  144. END_DEFUZZIFY
  145.  
  146. RULEBLOCK No1
  147. AND : MIN;
  148. ACT : MIN;
  149. ACCU : MAX;
  150.  
  151. RULE 1 : IF trackPos IS left THEN steering IS turn_right;
  152. RULE 2 : IF trackPos IS center THEN steering IS stay_center;
  153. RULE 3 : IF trackPos IS right THEN steering IS turn_left;
  154. RULE 4 : IF angle IS left THEN steering IS turn_right;
  155. RULE 5 : IF angle IS center THEN steering IS stay_center;
  156. RULE 6 : IF angle IS right THEN steering IS turn_left;
  157.  
  158. RULE 7 : IF track9 IS near AND speed IS f_fast THEN accelerate IS nogas;
  159. RULE 8 : IF track9 IS far AND speed IS f_slow THEN accelerate IS fullgas, brake IS nobrake;
  160. RULE 9 : IF track9 IS mid AND speed IS f_slow THEN accelerate IS fullgas, brake IS nobrake;
  161. RULE 10 : IF track9 IS outside THEN accelerate is medgas, brake IS nobrake;
  162.  
  163. RULE 11 : IF track9 IS near AND speed IS f_very_fast THEN accelerate IS nogas, brake IS fullbrake;
  164. RULE 12 : IF track9 IS mid AND speed IS f_mid THEN accelerate IS fullgas, brake IS nobrake;
  165. RULE 13 : IF track9 IS mid AND speed IS f_very_fast THEN accelerate IS nogas;
  166.  
  167. RULE 14 : IF track12 IS mid AND speed IS f_very_fast THEN accelerate IS nogas, brake IS midbrake;
  168. END_RULEBLOCK
  169.  
  170. END_FUNCTION_BLOCK
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement