Skip to content

Commit ca928d2

Browse files
committed
-
1 parent 583b864 commit ca928d2

File tree

6 files changed

+56
-41
lines changed

6 files changed

+56
-41
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@
3434
# Pictures taken
3535
photos/
3636

37+
# Logs
38+
logs/
39+
3740
# Tutorial
3841
static/blockly-tutorial
3942

camera.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from PIL import Image as PILImage
66
from StringIO import StringIO
77
from threading import Thread, Lock
8+
import logging
89

910
from viz import camera, streamer, image, blob
1011
import config
@@ -35,7 +36,7 @@ def get_instance(cls):
3536
return cls._instance
3637

3738
def __init__(self):
38-
print "starting camera"
39+
logging.info("starting camera")
3940
cam_props = {"width":640, "height":480, "exposure_mode": config.Config.get().get("camera_exposure_mode")}
4041
self._camera = camera.Camera(props=cam_props)
4142
self._streamer = streamer.JpegStreamer("0.0.0.0:"+str(self.stream_port), st=0.1)
@@ -153,7 +154,7 @@ def get_photo_thumb_file(self, filename):
153154
return open(PHOTO_PATH + "/" + filename[:-len(PHOTO_FILE_EXT)] + PHOTO_THUMB_SUFFIX + PHOTO_FILE_EXT)
154155

155156
def delete_photo(self, filename):
156-
print filename
157+
logging.info("delete photo: " + filename)
157158
os.remove(PHOTO_PATH + "/" + filename)
158159
os.remove(PHOTO_PATH + "/" + filename[:filename.rfind(".")] + PHOTO_THUMB_SUFFIX + self._camera.PHOTO_FILE_EXT)
159160
self._photos.remove(filename)
@@ -179,7 +180,7 @@ def find_line(self):
179180
blobs[idx] = slice.find_blobs(minsize=30, maxsize=160)
180181
if len(blobs[idx]):
181182
coords[idx] = (blobs[idx][0].center[0] * 100) / 160
182-
print "line coord: " + str(idx) + " " + str(coords[idx])+ " area: " + str(blobs[idx][0].area())
183+
logging.info("line coord: " + str(idx) + " " + str(coords[idx])+ " area: " + str(blobs[idx][0].area()))
183184

184185
self._image_lock.release()
185186
return coords[0]
@@ -192,7 +193,7 @@ def find_signal(self):
192193
img = self.get_image(0)
193194
signals = img.find_template(self._img_template)
194195

195-
print "signal: " + str(time.time() - ts)
196+
logging.info("signal: " + str(time.time() - ts))
196197
if len(signals):
197198
angle = signals[0].angle
198199

@@ -246,14 +247,14 @@ def path_ahead(self):
246247
#for b in blobs:
247248
# print "blobs.bottom: " + str(b.bottom) + " area: " + str(b.area())
248249

249-
print "obstacle:" + str(obstacle.bottom)
250+
logging.info("obstacle:" + str(obstacle.bottom))
250251
#print "path_ahead.sortdistnace: " + str(time.time() - ts)
251252
#dw_x = 260 + obstacle.coordinates()[0] - (obstacle.width()/2)
252253
#dw_y = 160 + obstacle.coordinates()[1] - (obstacle.height()/2)
253254
#img.drawRectangle(dw_x, dw_y, obstacle.width(), obstacle.height(), color=(255,0,0))
254255
x, y = img.transform((obstacle.center[0], obstacle.bottom))
255256
coordY = 60 - ((y * 48) / 100)
256-
print "coordY: " + str(coordY)
257+
logging.info("coordY: " + str(coordY))
257258
#print obstacle.coordinates()[1]+(obstacle.height()/2)
258259
#ar_layer.centeredRectangle(obstacle.coordinates(), (obstacle.width(), obstacle.height()))
259260
#warped.addDrawingLayer(ar_layer)
@@ -281,22 +282,22 @@ def find_color(self, s_color):
281282
#objects = warped.findBlobs(minsize=200, maxsize=4000)
282283
bw = img.filter_color(color)
283284
objects = bw.find_blobs(minsize=50, maxsize=1000)
284-
print objects
285+
logging.debug("objects: " + str(objects))
285286
dist = -1
286287
angle = 180
287288

288289
if objects and len(objects):
289290
obj = objects[-1]
290291
bottom = obj.bottom
291-
print "bottom: ", obj.center[0], obj.bottom
292+
logging.info("bottom: ", obj.center[0], obj.bottom)
292293
coords = bw.transform([(obj.center[0], obj.bottom)])
293-
print "coordinates: ", coords
294+
logging.info("coordinates: " + coords)
294295
x = coords[0][0]
295296
y = coords[0][1]
296297
#print "height: " + str(object.height())
297298
dist = math.sqrt(math.pow(12 + (68 * (120 - y) / 100),2) + (math.pow((x-80)*60/160,2)))
298299
angle = math.atan2(x - 80, 120 - y) * 180 / math.pi
299-
print "object found, dist: " + str(dist) + " angle: " + str(angle)
300+
logging.info("object found, dist: " + str(dist) + " angle: " + str(angle))
300301
#img.drawText("object found, dist: " + str(dist) + " angle: " + str(angle), 0, 0, fontsize=32 )
301302
#self.save_image(self._camera.get_image_jpeg())
302303
#self.save_image(img.to_jpeg())
@@ -305,6 +306,6 @@ def find_color(self, s_color):
305306
return [dist, angle]
306307

307308
def sleep(self, elapse):
308-
print "sleep"
309+
logging.debug("sleep: " + elapse)
309310
time.sleep(elapse)
310311

main.py

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import os
22
import json
3+
import logging
4+
import logging.handlers
35

46
from coderbot import CoderBot, PIN_PUSHBUTTON
57
from camera import Camera
@@ -11,6 +13,13 @@
1113
from flask.ext.babel import Babel
1214
#from flask_sockets import Sockets
1315

16+
logger = logging.getLogger()
17+
logger.setLevel(logging.INFO)
18+
19+
# add a rotating handler
20+
handler = logging.handlers.RotatingFileHandler('logs/coderbot.log', maxBytes=1000000, backupCount=5)
21+
logger.addHandler(handler)
22+
1423
bot = None
1524
cam = None
1625
motion = None
@@ -48,9 +57,9 @@ def handle_wifi():
4857
mode = request.form.get("wifi_mode")
4958
ssid = request.form.get("wifi_ssid")
5059
psk = request.form.get("wifi_psk")
51-
print "mode ", mode, " ssid: ", ssid, " psk: ", psk
60+
logging.info( "mode ", mode, " ssid: ", ssid, " psk: ", psk)
5261
client_params = " \"" + ssid + "\" \"" + psk + "\"" if ssid != "" and psk != "" else ""
53-
print client_params
62+
logging.info(client_params)
5463
os.system("sudo python wifi.py updatecfg " + mode + client_params)
5564
if mode == "ap":
5665
return "http://coder.bot:8080";
@@ -84,29 +93,29 @@ def handle_bot():
8493
bot.say(app.bot_config.get("sound_shutter"))
8594

8695
elif cmd == "say":
87-
print "say: " + str(param1)
96+
logging.info("say: " + str(param1))
8897
bot.say(param1)
8998

9099
elif cmd == "halt":
91-
print "shutting down"
100+
logging.info("shutting down")
92101
bot.say(app.bot_config.get("sound_stop"))
93102
bot.halt()
94103

95104
return "ok"
96105

97106
@app.route("/bot/status", methods=["GET"])
98107
def handle_bot_status():
99-
print "bot_status"
108+
logging.info( "bot_status" )
100109
return json.dumps({'status': 'ok'})
101110

102111
@app.route("/photos", methods=["GET"])
103112
def handle_photos():
104-
print "photos"
113+
logging.info("photos")
105114
return json.dumps(cam.get_photo_list())
106115

107116
@app.route("/photos/<filename>", methods=["GET"])
108117
def handle_photo(filename):
109-
print "photo"
118+
logging.info("photo")
110119
mimetype = {'jpeg': 'image/jpeg', 'h264': 'video/mp4'}
111120
video = None
112121
try:
@@ -118,30 +127,30 @@ def handle_photo(filename):
118127

119128
@app.route("/photos/<filename>", methods=["POST"])
120129
def handle_photo_cmd(filename):
121-
print "photo delete"
130+
logging.debug("photo delete")
122131
cam.delete_photo(filename)
123132
return "ok"
124133

125134
@app.route("/photos/<filename>/thumb", methods=["GET"])
126135
def handle_photo_thumb(filename):
127-
print "photo_thumb"
136+
logging.debug("photo_thumb")
128137
return send_file(cam.get_photo_thumb_file(filename))
129138

130139
@app.route("/program/list", methods=["GET"])
131140
def handle_program_list():
132-
print "program_list"
141+
logging.debug("program_list")
133142
return json.dumps(app.prog_engine.list())
134143

135144
@app.route("/program/load", methods=["GET"])
136145
def handle_program_load():
137-
print "program_load"
146+
logging.debug("program_load")
138147
name = request.args.get('name')
139148
app.prog = app.prog_engine.load(name)
140149
return app.prog.dom_code
141150

142151
@app.route("/program/save", methods=["POST"])
143152
def handle_program_save():
144-
print "program_save"
153+
logging.debug("program_save")
145154
name = request.form.get('name')
146155
dom_code = request.form.get('dom_code')
147156
code = request.form.get('code')
@@ -151,30 +160,30 @@ def handle_program_save():
151160

152161
@app.route("/program/delete", methods=["POST"])
153162
def handle_program_delete():
154-
print "program_delete"
163+
logging.debug("program_delete")
155164
name = request.form.get('name')
156165
app.prog_engine.delete(name)
157166
return "ok"
158167

159168
@app.route("/program/exec", methods=["POST"])
160169
def handle_program_exec():
161-
print "program_exec"
170+
logging.debug("program_exec")
162171
name = request.form.get('name')
163172
code = request.form.get('code')
164173
app.prog = app.prog_engine.create(name, code)
165174
return json.dumps(app.prog.execute())
166175

167176
@app.route("/program/end", methods=["POST"])
168177
def handle_program_end():
169-
print "program_end"
178+
logging.debug("program_end")
170179
if app.prog:
171180
app.prog.end()
172181
app.prog = None
173182
return "ok"
174183

175184
@app.route("/program/status", methods=["GET"])
176185
def handle_program_status():
177-
print "program_status"
186+
logging.debug("program_status")
178187
prog = Program("")
179188
if app.prog:
180189
prog = app.prog
@@ -202,7 +211,7 @@ def run_server():
202211
motion = Motion.get_instance()
203212
except ValueError as e:
204213
app.bot_config = {}
205-
print e
214+
logging.error(e)
206215
if app.bot_config.get('load_at_start') and len(app.bot_config.get('load_at_start')):
207216
app.prog = app.prog_engine.load(app.bot_config.get('load_at_start'))
208217

motion.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import cv2
22
import math
33
import numpy as np
4+
import logging
45
from time import clock, time, sleep
56
from viz import image, streamer
67

@@ -146,7 +147,7 @@ def track_keypoints(self, prev_image, cur_image, tracks):
146147
#print len(new_tracks), len(tracks)
147148
tracks[:] = new_tracks[:]
148149
if len(tracks) == 0:
149-
print "lost ALL tp!"
150+
logging.warn("lost ALL tp!")
150151
self.bot.stop()
151152
#exit(0)
152153
#cv2.polylines(self.vis, [np.int32(tr) for tr in self.tracks], False, (0, 255, 0))
@@ -194,7 +195,7 @@ def bot_turn(self, target_angle, delta_angle):
194195
power_angles = [[15, (40, -1)], [4, (80, 0.05)], [1, (80,0.02)], [0, (0, 0)]]
195196
done = False
196197
sign = (target_angle - delta_angle) / abs(target_angle - delta_angle)
197-
print( "abs delta: ", abs(target_angle - delta_angle), " sign delta: ", sign )
198+
logging.info( "abs delta: " + abs(target_angle - delta_angle) + " sign delta: " + sign )
198199
for p_a in power_angles:
199200
if abs(target_angle - delta_angle) > p_a[0]:
200201
print "pow: ", p_a[1][0], " duration: ", p_a[1][1]
@@ -206,9 +207,9 @@ def bot_turn(self, target_angle, delta_angle):
206207

207208
def bot_move(self, target_dist, delta_dist, delta_angle):
208209
base_power = 100 * (target_dist/abs(target_dist))
209-
print "base power", base_power
210+
logging.info("base power" + base_power)
210211
self.delta_power += (delta_angle * 0.01)
211-
print( "delta power: ", self.delta_power)
212+
logging.info( "delta power: " + self.delta_power)
212213
if abs(delta_dist) < abs(target_dist):
213214
self.bot.motor_control(min(max(base_power-self.delta_power,-100),100), min(max(base_power+self.delta_power,-100),100), -1)
214215
else:

viz/camera.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import os
55
import time
66
import copy
7-
7+
import logging
88

99
class Camera():
1010

@@ -14,7 +14,7 @@ class Camera():
1414
VIDEO_FILE_EXT_H264 = '.h264'
1515

1616
def __init__(self, props):
17-
print "camera init"
17+
logging.info("camera init")
1818
self.camera = picamera.PiCamera()
1919
self.camera.resolution = (props.get('width', 640), props.get('height', 240))
2020
self.camera.framerate = 30
@@ -34,12 +34,12 @@ def video_rec(self, filename):
3434
with self.camera._encoders_lock:
3535
self.camera._encoders[2] = self.h264_encoder
3636

37-
print self.video_filename + self.VIDEO_FILE_EXT_H264
37+
logging.debug( self.video_filename + self.VIDEO_FILE_EXT_H264 )
3838

3939
self.h264_encoder.start(self.video_filename + self.VIDEO_FILE_EXT_H264)
4040

4141
def video_stop(self):
42-
print "video_stop"
42+
logging.debug("video_stop")
4343
self.h264_encoder.stop()
4444

4545
with self.camera._encoders_lock:
@@ -93,10 +93,10 @@ def grab(self):
9393
self.jpeg_encoder.close()
9494
self.rgb_encoder.close()
9595

96-
print "g.5: " + str(ts - time.time())
96+
#print "g.5: " + str(ts - time.time())
9797

9898
def grab_start(self):
99-
print "grab_start"
99+
logging.debug("grab_start")
100100

101101
#ts = time.time()
102102
camera_port_0, output_port_0 = self.camera._get_ports(True, 0)
@@ -121,7 +121,7 @@ def grab_one(self):
121121
raise picamera.PiCameraError('Timed out')
122122

123123
def grab_stop(self):
124-
print "grab_stop"
124+
logging.debug("grab_stop")
125125

126126
with self.camera._encoders_lock:
127127
del self.camera._encoders[0]

viz/image.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import colorsys
44
import copy
55
import blob
6+
import logging
67

78
r_from = np.float32([[0, 0], [160, 0], [160, 120], [0, 120]])
89
r_dest = np.float32([[0, -30], [160, -30], [95, 120], [65, 120]])
@@ -130,11 +131,11 @@ def find_template(self, img_template):
130131
h,w = img_template.shape
131132
pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2)
132133
dst = cv2.perspectiveTransform(pts,M)
133-
print "found template: ", dst
134+
logging.info("found template: " + dst)
134135
templates[0] = dst
135136

136137
else:
137-
print "Not enough matches are found - %d/%d" % (len(good),MIN_MATCH_COUNT)
138+
logging.info( "Not enough matches are found - %d/%d" % (len(good),MIN_MATCH_COUNT))
138139
matchesMask = None
139140

140141
return templates

0 commit comments

Comments
 (0)