summaryrefslogtreecommitdiff
path: root/robot/problems/introduction/followline
diff options
context:
space:
mode:
Diffstat (limited to 'robot/problems/introduction/followline')
-rw-r--r--robot/problems/introduction/followline/common.py85
-rw-r--r--robot/problems/introduction/followline/en.py14
-rw-r--r--robot/problems/introduction/followline/naloga12_followLine.py31
-rw-r--r--robot/problems/introduction/followline/sl.py34
4 files changed, 164 insertions, 0 deletions
diff --git a/robot/problems/introduction/followline/common.py b/robot/problems/introduction/followline/common.py
new file mode 100644
index 0000000..d61d4c1
--- /dev/null
+++ b/robot/problems/introduction/followline/common.py
@@ -0,0 +1,85 @@
+# coding=utf-8
+
+from python.util import has_token_sequence, string_almost_equal, \
+ string_contains_number, get_tokens, get_numbers, get_exception_desc
+from server.hints import Hint, HintSequence
+
+id = 207
+group = 'introduction'
+number = 12
+visible = True
+
+solution = '''\
+import time
+from ev3dev import *
+from mindstorms_widgets import mindstorms_widgets
+
+robot = mindstorms_widgets()
+robot.connect_motor( 'left' )
+robot.connect_motor( 'right' )
+robot.connect_sensor( 'color' )
+
+start = time.time()
+while time.time()-start < 10:
+ if robot.color_sensor_measure('reflected_light_intensity') < 30:
+ L, R = 0, 20
+ else:
+ L, R = 20, 0
+ robot.move_tank( 'on', lr_power=[L,R])
+robot.move_tank( 'off' )
+'''
+
+hint_type = {
+ 'mW_init': Hint('mW_init'),
+ 'connectMotorLeft': Hint('connectMotorLeft'),
+ 'connectMotorRight': Hint('connectMotorRight'),
+ 'moveTankOn': Hint('moveTankOn'),
+ 'lrPower': Hint('lr_power'),
+ 'moveTankOff': Hint('moveTankOff'),
+ 'connectColorSensor': Hint('connectColorSensor'),
+ 'colorSensorMeasureRLI': Hint('colorSensorMeasureRLI'),
+ 'while': Hint('while'),
+ 'time': Hint('time'),
+ 'if': Hint('if')
+}
+
+def hint( code):
+ tokens = get_tokens(code)
+
+ # if code does not include mindstorms_widgets(), a student gets a hint that the robot should be somehow represented in the program
+ if not has_token_sequence(tokens, ['mindstorms_widgets', '(',')']):
+ return [{'id': 'mW_init'}]
+
+ # if code does not include connect_motor statement, a student needs to learn about how to connect the motors
+ if not has_token_sequence(tokens, ['connect_motor']) and not has_token_sequence(tokens, ['left']):
+ return [{'id': 'connectMotorLeft'}]
+
+ # if code does not include connect_motor statement, a student needs to learn about how to connect the motors
+ if not has_token_sequence(tokens, ['connect_motor']) and not has_token_sequence(tokens, ['right']):
+ return [{'id': 'connectMotorRight'}]
+
+ if not (has_token_sequence(tokens, ['connect_sensor', '(' ]) and 'color' in code):
+ return [{'id': 'connectColorSensor'}]
+
+ if not (has_token_sequence(tokens, ['move_steering', '(']) and 'on' in code):
+ return [{'id': 'moveTankOn'}]
+
+ if not 'lr_power' in code:
+ return [{'id': 'lrPower'}]
+
+ if not (has_token_sequence(tokens, ['move_steering', '(']) and 'off' in code):
+ return [{'id': 'moveTankOff'}]
+
+ if not (has_token_sequence(tokens, ['color_sensor_measure', '(']) and 'reflected_light_intensity' in code):
+ return [{'id': 'colorSensorMeasureRLI'}]
+
+ if not has_token_sequence(tokens, ['while']):
+ return [{'id': 'while'}]
+
+ if not has_token_sequence(tokens, ['time']):
+ return [{'id': 'time'}]
+
+ if not has_token_sequence(tokens, ['if']):
+ return [{'id': 'if'}]
+
+ return None
diff --git a/robot/problems/introduction/followline/en.py b/robot/problems/introduction/followline/en.py
new file mode 100644
index 0000000..3f816fe
--- /dev/null
+++ b/robot/problems/introduction/followline/en.py
@@ -0,0 +1,14 @@
+# coding=utf-8
+import server
+mod = server.problems.load_language('python', 'en')
+
+id = 207
+name = 'Line following'
+slug = 'Line following'
+
+description = '''\
+'''
+
+hint = {
+
+}
diff --git a/robot/problems/introduction/followline/naloga12_followLine.py b/robot/problems/introduction/followline/naloga12_followLine.py
new file mode 100644
index 0000000..347e89e
--- /dev/null
+++ b/robot/problems/introduction/followline/naloga12_followLine.py
@@ -0,0 +1,31 @@
+#!/usr/bin/python
+# coding=utf-8
+
+print( """
+Naloga 12:
+ Robot naj 10 sekund sledi crni crti na beli podlagi; pri tem naj si pomaga z barvnim senzorjem.
+""")
+import sys
+sys.path.append('/home/user/codeq')
+import time
+from ev3dev import *
+from mindstorms_widgets import mindstorms_widgets
+
+robot = mindstorms_widgets()
+robot.connect_motor( 'left' )
+robot.connect_motor( 'right' )
+robot.connect_sensor( 'color' )
+
+start = time.time()
+# CALIBRATION
+# print 'black', robot.color_sensor_measure('reflected_light_intensity')
+# print "move to white"
+# time.sleep(5)
+# print 'white', robot.color_sensor_measure('reflected_light_intensity')
+while time.time()-start < 10:
+ if robot.color_sensor_measure('reflected_light_intensity') < 30:
+ L, R = 0, 20
+ else:
+ L, R = 20, 0
+ robot.move_tank( 'on', lr_power=[L,R])
+robot.move_tank( 'off' )
diff --git a/robot/problems/introduction/followline/sl.py b/robot/problems/introduction/followline/sl.py
new file mode 100644
index 0000000..848fe2b
--- /dev/null
+++ b/robot/problems/introduction/followline/sl.py
@@ -0,0 +1,34 @@
+# coding=utf-8
+
+name = 'Sledenje črti'
+slug = 'Sledenje črti'
+
+description = '''\
+<p>Robot naj 10 sekund sledi črni črti na beli podlagi; pri tem naj si pomaga z barvnim senzorjem.</p>'''
+
+hint = {
+ 'mW_init':['''<p>Robota v programu predstavimo z mindstorms_widgets(): <code>robot = mindstorms_widgets()</code>.</p>'''],
+ 'connectMotorLeft':['''<p>Robotu priključi levi motor</p>''',
+ '''<p><code>robot.connect_motor( 'left' )</code>.</p>'''],
+ 'connectMotorRight':['''<p>Robotu priključi desni motor</p>''',
+ '''<p><code>robot.connect_motor( 'right' )</code>.</p>'''],
+
+ 'moveTankOn':['''<p>Uporabi metodo za ločen nadzor motorjev, s katero vsakemu od motorjev nastavljaš drugačno moč.</p>''',
+ '''<p>Za to je najbolj primerna metoda <code>robot.move_tank( ... )</code>.</p>''',
+ '''<p><code>robot.move_tank( 'on', ...)</code></p>'''],
+ 'lrPower': ['''<p>Nastavi parameter s katerim nastaviš moči levega in desnega motorja.</p>''',
+ '''<p><code>robot.move_tank( 'on', lr_power=[ ... ])</code></p>'''],
+ 'moveTankOff': ['''Ustavi robota.''',
+ '''<p><code>robot.move_tank( 'off' )</code></p>'''],
+ 'connectColorSensor':['''<p>Robotu moramo priključiti barvni senzor.</p>''',
+ '''<p><code>robot.connect_sensor( 'color' )</code>.</p>'''],
+ 'colorSensorMeasureRLI':['''<p>Medtem ko se robot pomika naprej, naj uporabi barvni senzor v načinu 'reflected_light_intensity', za zaznavanje jakosti odbite svetlobe.</p>''',
+ '''<p><code>robot.color_sensor_measure( 'reflected_light_intensity' )</code>.</p>'''],
+ 'while':['''<p>Uporabi zanko, znotraj katere robot sledi črti.</p>''',
+ '''<p>Zanka naj bo časovno omejena, npr. z uporabo metode <code>time.time()</code>.</p>''',
+ '''<p><code>start = time.time()\nwhile time.time()-start < 10:</code>.</p>'''],
+ 'time': ['''Uporabi metodo time() za merjenje časa.''',
+ '''<p><code>start = time.time()\nwhile time.time()-start < 10:</code></p>'''],
+ 'if': ['''<p>V zanki uporabi pogojni stavek...</p>''',
+ '''<p>Če robot vidi črto, naj zavije z nje; če vidi podlago, naj zavije proti črti.</p>''']
+}