Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

pl:miw:miw08_mindstormsdesign:strona_2 [2017/07/17 10:08]
pl:miw:miw08_mindstormsdesign:strona_2 [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 +====== Poruszanie się wzdłuż linii ======
 +Poniżej znajdują się algorytm sterowania wykorzystujący **sensor natężenia światła**. ​
 +
 +===== Algorytm 1 =====
 +Aby sprawdzić działanie algorytmu należy przygotować makietę z narysowaną czarną linią (najlepiej na białym tle). W algorytmie założono, że robot znajduje się na czarnej linii w chwili startu. Zadaniem robota jest poruszanie się wzdłuż linii.
 +
 +==== Zapis słowny ====
 +
 +      - jedź do przodu jeżeli widzisz czarną linię, inaczej idź do pkt (2)
 +      - obracaj się w prawo o N<​sup>​0</​sup>​ póki obrót < 45<​sup>​0</​sup>​. Jeżeli linia czarna idź do (1). Jeżeli obrót > 45<​sup>​0</​sup>​ idź do (3).
 +      - obróć się w lewo o 45<​sup>​0</​sup>​. Obracaj się o -N<​sup>​0</​sup>​ w lewo póki obrót > -45<​sup>​0</​sup>​. Jeżeli linia czarna idź do (1). Jeżeli obrót < -45<​sup>​0</​sup>​ to STOP
 +
 +
 +
 +==== Zapis regułowy ====
 +Poniżej został zastosowany zupełny zapis reguł. W zapisie w Prologu zapis ten ulegnie zmianie.
 +<code ada>
 +Rule: 1
 +if light_value == '​black'​
 +then go = 1 and trun_mem = 0
 +
 +Rule: 2
 +if light_value != '​black'​ and turn_mem in [0,45)
 +then turn = 1 and turn_mem += turn
 +
 +Rule: 3
 +if light_value != '​black'​ and turn_mem in (-45,0)
 +then turn = 1 and turn_mem += turn
 +
 +Rule: 4
 +if light_value != '​black'​ and turn_mem >= 45
 +then turn = -turn_mem and turn_mem = -1
 +
 +Rule: 5
 +if light_value != '​black'​ and turn_mem not in (-45,0) and not in [0,90)
 +then STOP
 +
 +
 +</​code>​
 +
 +
 +
 +
 +
 +==== Implementacja w Prologu ====
 +
 +<code prolog>
 +start :-
 +      nxt_light_sensor(Port,​Value),​
 +      Value = RGB_black,
 +      assert(turn_mem(0)),​
 +      nxt_go(1).
 +start :-
 +      turn_mem(Value),​
 +      Value >= 0,
 +      Value < 45,
 +      nxt_turn(Speed,​1)
 +      retractall(turn_mem(_)),​
 +      increment(Value,​X),​
 +      assert(turn_mem(X)).
 +start :-
 +      turn_mem(Value),​
 +      Value >= 45,
 +      nxt_turn(Speed,​-Value),​
 +      retractall(turn_mem(_)),​
 +      assert(turn_mem(-1)).
 +start :-
 +      turn_mem(Value),​
 +      Value < 0,
 +      Value > -45,
 +      nxt_turn(Speed,​-1),​
 +      retractall(turn_mem(_)),​
 +      decrement(Value,​X),​
 +      assert(turn_mem(X)).
 +start :-
 +      nxt_go(0).
 +</​code>​
 +
 +
 +
 +
 +==== XTT ====
 +{{:​pl:​miw:​miw08_mindstormsdesign:​alg5.png|XTT}}
 +
 +
 +{{:​pl:​miw:​miw08_mindstormsdesign:​alg6.png|XTT2}}
 +
 +UWAGI!!! FIXME
 +  * Problem z wpisaniem wartości z ujemną wartością
 +
  
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0