Skip to content

Commit 27c1fdd

Browse files
committed
initial commit #65
1 parent ff0d423 commit 27c1fdd

File tree

3 files changed

+50
-13
lines changed

3 files changed

+50
-13
lines changed

event.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import logging
2+
import threading
3+
import rospy
4+
import std_msgs
5+
6+
class EventManager:
7+
_instance = None
8+
@classmethod
9+
def get_instance(cls, node_name=None):
10+
if cls._instance is None and node_name is not None:
11+
cls._instance = EventManager(node_name)
12+
return cls._instance
13+
14+
def __init__(self, node_name):
15+
rospy.init_node(node_name)
16+
self._publishers = {}
17+
self._event_generators = []
18+
19+
def register_publisher(self, topic):
20+
publisher = rospy.Publisher("/" + node_name + "/" + topic, String, queue_size=10)
21+
self._publishers[topic] = publisher
22+
return publisher
23+
24+
def register_listener(self, topic, callback):
25+
rospy.Subscriber("/" + node_name + "/" + topic, std_msgs.msg.String, callback)
26+
27+
def register_event_generator(self, generator_func):
28+
generator = threading.Thread(target=generator_func)
29+
self._event_generators.append(generator)
30+
generator.start()
31+
32+
def start_event_generators(self):
33+
for g in self._event_generators:
34+
g.start()
35+
36+
def wait_event_generators(self):
37+
for g in self._event_generators:
38+
g.join()

main.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from program import ProgramEngine, Program
3333
from config import Config
3434
from cnn_manager import CNNManager
35+
from event import EventManager
3536

3637
from flask import Flask, render_template, request, send_file, redirect, Response, jsonify
3738
from flask_babel import Babel
@@ -49,6 +50,7 @@
4950
motion = None
5051
audio = None
5152
cnn = None
53+
event = None
5254

5355
app = Flask(__name__,static_url_path="")
5456
#app.config.from_pyfile('coderbot.cfg')
@@ -353,20 +355,13 @@ def run_server():
353355
audio.say(app.bot_config.get("sound_start"))
354356
try:
355357
cam = Camera.get_instance()
356-
#motion = Motion.get_instance()
358+
motion = Motion.get_instance()
357359
except picamera.exc.PiCameraError:
358360
logging.error("Camera not present")
359361

360362
cnn = CNNManager.get_instance()
361-
"""
362-
cnn.train_new_model(model_name="test3",
363-
architecture="mobilenet_0.25_128",
364-
image_tags=["apple", "kiwi", "other"],
365-
photos_meta=cam.get_photo_list(),
366-
training_steps=10,
367-
learning_rate=0.1)
368-
logging.info("trained")
369-
"""
363+
event = EventManager.get_instance("coderbot")
364+
370365
if app.bot_config.get('load_at_start') and len(app.bot_config.get('load_at_start')):
371366
app.prog = app.prog_engine.load(app.bot_config.get('load_at_start'))
372367
app.prog.execute()

program.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import motion
2929
import config
3030
import audio
31+
import event
3132

3233
PROGRAM_PATH = "./data/"
3334
PROGRAM_PREFIX = "program_"
@@ -48,6 +49,9 @@ def get_audio():
4849
def get_prog_eng():
4950
return ProgramEngine.get_instance()
5051

52+
def get_event():
53+
return event.EventManager.get_instance()
54+
5155
class ProgramEngine:
5256

5357
_instance = None
@@ -139,7 +143,6 @@ def is_running(self):
139143

140144
def run(self):
141145
try:
142-
#print "run.1"
143146
bot = coderbot.CoderBot.get_instance()
144147
program = self
145148
try:
@@ -149,9 +152,8 @@ def run(self):
149152
logging.debug("starting video")
150153
except:
151154
logging.error("Camera not available")
152-
155+
153156
exec(self._code)
154-
#print "run.2"
155157
except RuntimeError as re:
156158
logging.info("quit: " + str(re))
157159
finally:
@@ -162,6 +164,8 @@ def run(self):
162164
logging.error("Camera not available")
163165
self._running = False
164166

167+
get_event_manager().wait_event_generators()
168+
165169
def as_json(self):
166170
return {'name': self.name,
167171
'dom_code': self._dom_code,

0 commit comments

Comments
 (0)