Skip to content

Commit 14ed36a

Browse files
committed
Code modified from RAM
1 parent 1067cb9 commit 14ed36a

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

manager/manager/manager.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import signal
55
import subprocess
66
import sys
7+
import re
78
import psutil
89
import time
910
if ("noetic" in str(subprocess.check_output(['bash', '-c', 'echo $ROS_DISTRO']))):
@@ -163,6 +164,29 @@ def on_prepare_visualization(self, event):
163164
self.gui_server.start()
164165
LogManager.logger.info("Visualization transition finished")
165166

167+
def add_frequency_control(self, code):
168+
frequency_control_code_imports = """
169+
from datetime import datetime
170+
ideal_cycle = 20
171+
"""
172+
code = frequency_control_code_imports + code
173+
infinite_loop = re.search(
174+
r'[^ ]while\s*\(\s*True\s*\)\s*:|[^ ]while\s*True\s*:|[^ ]while\s*1\s*:|[^ ]while\s*\(\s*1\s*\)\s*:', code)
175+
frequency_control_code_pre = """
176+
start_time = datetime.now()
177+
"""
178+
code = code[:infinite_loop.end()] + frequency_control_code_pre + code[infinite_loop.end():]
179+
frequency_control_code_post = """
180+
finish_time = datetime.now()
181+
dt = finish_time - start_time
182+
ms = (dt.days * 24 * 60 * 60 + dt.seconds) * 1000 + dt.microseconds / 1000.0
183+
184+
if (ms < ideal_cycle):
185+
time.sleep((ideal_cycle - ms) / 1000.0)
186+
"""
187+
code = code + frequency_control_code_post
188+
return code
189+
166190
def on_run_application(self, event):
167191
application_configuration = event.kwargs.get('data', {})
168192
application_file = application_configuration['template']
@@ -171,13 +195,14 @@ def on_run_application(self, event):
171195

172196
errors = self.linter.evaluate_code(code, exercise_id)
173197
if errors == "":
198+
code = self.add_frequency_control(code)
174199
f = open("/workspace/code/academy.py", "w")
175200
f.write(code)
176201
f.close()
177202

203+
self.unpause_sim()
178204
self.application_process = subprocess.Popen(["python3", application_file], stdout=sys.stdout, stderr=subprocess.STDOUT,
179205
bufsize=1024, universal_newlines=True)
180-
self.unpause_sim()
181206
else:
182207
print('errors')
183208
raise Exception(errors)

0 commit comments

Comments
 (0)