Skip to content

Commit f1ca0be

Browse files
committed
events
2 parents d61b4b5 + ba1a422 commit f1ca0be

File tree

7 files changed

+17
-14
lines changed

7 files changed

+17
-14
lines changed

camera.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,9 +225,12 @@ def get_average(self):
225225
return avg
226226

227227
def find_line(self):
228-
avg = self.get_image().get_average()
229-
img = self.get_image().binarize(int((avg[0]+avg[2])/2))
228+
img = self.get_image()
229+
avg = img.get_average()
230+
img = img.binarize(int((avg[0]+avg[2])/2))
230231
img = img.erode().dilate()
232+
if int(img._data.mean()) > 127:
233+
img = img.invert()
231234
slices = [0,0,0]
232235
blobs = [0,0,0]
233236
slices[0] = img.crop(0, int(self._camera.out_rgb_resolution[1]/1.2), self._camera.out_rgb_resolution[0], self._camera.out_rgb_resolution[1])
@@ -238,10 +241,9 @@ def find_line(self):
238241
int(self._camera.out_rgb_resolution[1]/2.0)]
239242
coords = [-1, -1, -1]
240243
for idx, slice in enumerate(slices):
241-
blobs[idx] = slice.find_blobs(minsize=2000/(self._cv_image_factor * self._cv_image_factor), maxsize=8000/(self._cv_image_factor * self._cv_image_factor))
244+
blobs[idx] = slice.find_blobs(minsize=2000/(self._cv_image_factor * self._cv_image_factor), maxsize=16000/(self._cv_image_factor * self._cv_image_factor))
242245
if len(blobs[idx]):
243246
coords[idx] = (blobs[idx][0].center[0] * 100) / self._camera.out_rgb_resolution[0]
244-
#logging.info("line coord: " + str(idx) + " " + str(coords[idx])+ " area: " + str(blobs[idx][0].area()))
245247
blob = blobs[idx][0]
246248
img.draw_rect(blob.left, y_offset[idx] + blob.top, blob.right, y_offset[idx] + blob.bottom, (0,255,0), 5)
247249
self.set_image_cv(img)

coderbot.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"move_tr_speed": "85", "move_fw_elapse": "1", "camera_color_object_size_min": "4000", "camera_jpeg_bitrate": "2000000", "load_at_start": "", "move_tr_elapse":"0.5", "sound_stop": "$shutdown.mp3", "show_control_move_commands": "true", "prog_level": "adv", "prog_scrollbars": "true", "move_fw_speed": "100", "camera_color_object_size_max": "160000", "sound_shutter": "$shutter.mp3", "show_page_prefs": "true", "cv_image_factor": "2", "ctrl_hud_image": "", "button_func": "none", "ctrl_fw_elapse": "-1", "ctrl_tr_elapse": "-1", "move_power_angle_2": "60", "move_power_angle_3": "60", "camera_path_object_size_max": "160000", "move_motor_trim": "1", "camera_path_object_size_min": "4000", "cnn_default_model": "harry_3_50", "show_page_program": "true", "sound_start": "$startup.mp3", "camera_exposure_mode": "auto", "ctrl_tr_speed": "80", "ctrl_fw_speed": "100", "camera_jpeg_quality": "20", "prog_maxblocks": "-1", "camera_framerate": "30", "move_motor_mode": "dc", "move_power_angle_1": "45", "show_page_control": "true"}
1+
{"move_tr_speed": "85", "move_fw_elapse": "1", "camera_color_object_size_min": "4000", "camera_jpeg_bitrate": "1000000", "load_at_start": "", "move_tr_elapse": "0.5", "sound_stop": "$shutdown.mp3", "show_control_move_commands": "true", "prog_level": "adv", "prog_scrollbars": "true", "move_fw_speed": "100", "camera_color_object_size_max": "160000", "sound_shutter": "$shutter.mp3", "show_page_prefs": "true", "cv_image_factor": "2", "ctrl_hud_image": "", "button_func": "none", "ctrl_fw_elapse": "-1", "ctrl_tr_elapse": "-1", "move_power_angle_2": "60", "move_power_angle_3": "60", "camera_path_object_size_max": "160000", "move_motor_trim": "1", "camera_path_object_size_min": "4000", "cnn_default_model": "", "show_page_program": "true", "sound_start": "$startup.mp3", "camera_exposure_mode": "auto", "ctrl_tr_speed": "80", "ctrl_fw_speed": "100", "camera_jpeg_quality": "5", "prog_maxblocks": "-1", "camera_framerate": "30", "move_motor_mode": "dc", "move_power_angle_1": "45", "show_page_control": "true"}

data/program_face_find.data

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"dom_code": "<xml xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"controls_whileUntil\" x=\"32\" y=\"26\"><field name=\"MODE\">WHILE</field><value name=\"BOOL\"><block type=\"logic_boolean\"><field name=\"BOOL\">TRUE</field></block></value><statement name=\"DO\"><block type=\"variables_set\"><field name=\"VAR\">face</field><value name=\"VALUE\"><block type=\"coderbot_adv_findFace\"><field name=\"RETVAL\">ALL</field></block></value><next><block type=\"variables_set\"><field name=\"VAR\">face_x</field><value name=\"VALUE\"><block type=\"lists_getIndex\"><mutation statement=\"false\" at=\"true\"></mutation><field name=\"MODE\">GET</field><field name=\"WHERE\">FROM_START</field><value name=\"VALUE\"><block type=\"variables_get\"><field name=\"VAR\">face</field></block></value><value name=\"AT\"><block type=\"math_number\"><field name=\"NUM\">1</field></block></value></block></value><next><block type=\"variables_set\"><field name=\"VAR\">face_size</field><value name=\"VALUE\"><block type=\"lists_getIndex\"><mutation statement=\"false\" at=\"true\"></mutation><field name=\"MODE\">GET</field><field name=\"WHERE\">FROM_START</field><value name=\"VALUE\"><block type=\"variables_get\"><field name=\"VAR\">face</field></block></value><value name=\"AT\"><block type=\"math_number\"><field name=\"NUM\">2</field></block></value></block></value><next><block type=\"text_print\"><value name=\"TEXT\"><block type=\"text_join\"><mutation items=\"2\"></mutation><value name=\"ADD0\"><block type=\"text\"><field name=\"TEXT\">face: </field></block></value><value name=\"ADD1\"><block type=\"variables_get\"><field name=\"VAR\">face_x</field></block></value></block></value><next><block type=\"controls_if\"><value name=\"IF0\"><block type=\"variables_get\"><field name=\"VAR\">face_x</field></block></value><statement name=\"DO0\"><block type=\"controls_if\"><mutation elseif=\"1\" else=\"1\"></mutation><value name=\"IF0\"><block type=\"logic_compare\"><field name=\"OP\">LT</field><value name=\"A\"><block type=\"variables_get\"><field name=\"VAR\">face_x</field></block></value><value name=\"B\"><block type=\"math_number\"><field name=\"NUM\">-10</field></block></value></block></value><statement name=\"DO0\"><block type=\"coderbot_adv_move\"><field name=\"ACTION\">LEFT</field><value name=\"SPEED\"><block type=\"math_number\"><field name=\"NUM\">40</field></block></value><value name=\"ELAPSE\"><block type=\"math_number\"><field name=\"NUM\">0.1</field></block></value></block></statement><value name=\"IF1\"><block type=\"logic_compare\"><field name=\"OP\">GT</field><value name=\"A\"><block type=\"variables_get\"><field name=\"VAR\">face_x</field></block></value><value name=\"B\"><block type=\"math_number\"><field name=\"NUM\">10</field></block></value></block></value><statement name=\"DO1\"><block type=\"coderbot_adv_move\"><field name=\"ACTION\">RIGHT</field><value name=\"SPEED\"><block type=\"math_number\"><field name=\"NUM\">40</field></block></value><value name=\"ELAPSE\"><block type=\"math_number\"><field name=\"NUM\">0.1</field></block></value></block></statement><statement name=\"ELSE\"><block type=\"coderbot_adv_stop\"></block></statement></block></statement></block></next></block></next></block></next></block></next></block></statement></block></xml>", "code": "face = None\nface_x = None\nface_size = None\n\n\nwhile True:\n get_prog_eng().check_end()\n face = get_cam().find_face()\n face_x = face[0]\n face_size = face[1]\n get_cam().set_text(str('face: ') + str(face_x))\n if face_x:\n if face_x < -10:\n get_bot().left(speed=40, elapse=0.1)\n elif face_x > 10:\n get_bot().right(speed=40, elapse=0.1)\n else:\n get_bot().stop()\n", "name": "face_find"}
1+
{"dom_code": "<xml xmlns=\"http://www.w3.org/1999/xhtml\"><variables><variable type=\"\" id=\"G`ooSD^IjFl@q`VRXz`M\">face</variable><variable type=\"\" id=\"JU]w:x,u6R_]KGB{:XP:\">face_x</variable><variable type=\"\" id=\"YdZ|nz8=@UwR53L{5(Te\">face_size</variable></variables><block type=\"controls_whileUntil\" id=\"CoP0+krwBNk-W]8d*90A\" x=\"32\" y=\"26\"><field name=\"MODE\">WHILE</field><value name=\"BOOL\"><block type=\"logic_boolean\" id=\"fi_0^7$bm]/5xQ|Zpg=(\"><field name=\"BOOL\">TRUE</field></block></value><statement name=\"DO\"><block type=\"variables_set\" id=\"f$?dr|af|Ac.xwmgSA%J\"><field name=\"VAR\" id=\"G`ooSD^IjFl@q`VRXz`M\" variabletype=\"\">face</field><value name=\"VALUE\"><block type=\"coderbot_adv_findFace\" id=\"H`#u_,_?;x,73RZ}}gR{\"><field name=\"RETVAL\">ALL</field></block></value><next><block type=\"variables_set\" id=\"{o9)u+=V]D]h(5aygd~M\"><field name=\"VAR\" id=\"JU]w:x,u6R_]KGB{:XP:\" variabletype=\"\">face_x</field><value name=\"VALUE\"><block type=\"lists_getIndex\" id=\"dAqQ+k+Lsv!1N7zj4(4^\"><mutation statement=\"false\" at=\"true\"></mutation><field name=\"MODE\">GET</field><field name=\"WHERE\">FROM_START</field><value name=\"VALUE\"><block type=\"variables_get\" id=\"65Q5x52oC~jam{#uHnFe\"><field name=\"VAR\" id=\"G`ooSD^IjFl@q`VRXz`M\" variabletype=\"\">face</field></block></value><value name=\"AT\"><block type=\"math_number\" id=\"^aod?Rq):AVnd02Or|!L\"><field name=\"NUM\">1</field></block></value></block></value><next><block type=\"variables_set\" id=\"I{^(8GT:UL9{7jdNlg[w\"><field name=\"VAR\" id=\"YdZ|nz8=@UwR53L{5(Te\" variabletype=\"\">face_size</field><value name=\"VALUE\"><block type=\"lists_getIndex\" id=\"2}fQ04Qws48,xb!?z1pW\"><mutation statement=\"false\" at=\"true\"></mutation><field name=\"MODE\">GET</field><field name=\"WHERE\">FROM_START</field><value name=\"VALUE\"><block type=\"variables_get\" id=\"hmZQMGjZ94)AhuZ6JUYa\"><field name=\"VAR\" id=\"G`ooSD^IjFl@q`VRXz`M\" variabletype=\"\">face</field></block></value><value name=\"AT\"><block type=\"math_number\" id=\"=LbR3.00CDs*hnk()Y^-\"><field name=\"NUM\">2</field></block></value></block></value><next><block type=\"text_print\" id=\"O}.LG0(E@nzN,p;l%v2{\"><value name=\"TEXT\"><block type=\"text_join\" id=\"mRJtt8foB.;Gpq0fM,4D\"><mutation items=\"2\"></mutation><value name=\"ADD0\"><block type=\"text\" id=\",=O:[=q5SBb`1$S,-R,:\"><field name=\"TEXT\">face: </field></block></value><value name=\"ADD1\"><block type=\"variables_get\" id=\"UEwJl:.puwUq)R!zo@Z7\"><field name=\"VAR\" id=\"JU]w:x,u6R_]KGB{:XP:\" variabletype=\"\">face_x</field></block></value></block></value><next><block type=\"controls_if\" id=\"9tGk|M6u455Nu1(SI}{K\"><value name=\"IF0\"><block type=\"variables_get\" id=\"9}[hrA3rOFo0n+BAsX-f\"><field name=\"VAR\" id=\"JU]w:x,u6R_]KGB{:XP:\" variabletype=\"\">face_x</field></block></value><statement name=\"DO0\"><block type=\"controls_if\" id=\"1-%~}MODhI#*$?^aB_tS\"><mutation elseif=\"1\" else=\"1\"></mutation><value name=\"IF0\"><block type=\"logic_compare\" id=\"`rz$_58rWb#ufStSd](T\"><field name=\"OP\">LT</field><value name=\"A\"><block type=\"variables_get\" id=\"O}zML^tGL7t3C*mWsEMo\"><field name=\"VAR\" id=\"JU]w:x,u6R_]KGB{:XP:\" variabletype=\"\">face_x</field></block></value><value name=\"B\"><block type=\"math_number\" id=\"gdx{O}:M_*b|FpvgG_~h\"><field name=\"NUM\">-10</field></block></value></block></value><statement name=\"DO0\"><block type=\"coderbot_adv_move\" id=\"@[^uw~TU^Vti#)6HZC?K\"><field name=\"ACTION\">LEFT</field><value name=\"SPEED\"><block type=\"math_number\" id=\"vt6%MV@vkT*tB]%2:7vQ\"><field name=\"NUM\">80</field></block></value><value name=\"ELAPSE\"><block type=\"math_number\" id=\"d3[F3QtIG#jb=1IPOem)\"><field name=\"NUM\">0.1</field></block></value></block></statement><value name=\"IF1\"><block type=\"logic_compare\" id=\"/zef{/F+:n[eI1@+MIKR\"><field name=\"OP\">GT</field><value name=\"A\"><block type=\"variables_get\" id=\"dh8opiswQU13wjT![yV[\"><field name=\"VAR\" id=\"JU]w:x,u6R_]KGB{:XP:\" variabletype=\"\">face_x</field></block></value><value name=\"B\"><block type=\"math_number\" id=\"2RVlzW2}AG#ywuHP6N=+\"><field name=\"NUM\">10</field></block></value></block></value><statement name=\"DO1\"><block type=\"coderbot_adv_move\" id=\"4`Z7%j+MV5(5,BM!RRBA\"><field name=\"ACTION\">RIGHT</field><value name=\"SPEED\"><block type=\"math_number\" id=\"v`ab`#qs7J5]2XaOp]s[\"><field name=\"NUM\">80</field></block></value><value name=\"ELAPSE\"><block type=\"math_number\" id=\"A_y%A@DITmnWACnr0]zK\"><field name=\"NUM\">0.1</field></block></value></block></statement><statement name=\"ELSE\"><block type=\"coderbot_adv_stop\" id=\"B/$XZ_Giuo_h#Q?JM{w}\"></block></statement></block></statement></block></next></block></next></block></next></block></next></block></statement></block></xml>", "code": "face = None\nface_x = None\nface_size = None\n\n\nwhile True:\n get_prog_eng().check_end()\n face = get_cam().find_face()\n face_x = face[0]\n face_size = face[1]\n get_cam().set_text(str('face: ') + str(face_x))\n if face_x:\n if face_x < -10:\n get_bot().left(speed=80, elapse=0.1)\n elif face_x > 10:\n get_bot().right(speed=80, elapse=0.1)\n else:\n get_bot().stop()\n", "name": "face_find"}

data/program_path_ahead.data

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"dom_code": "<xml xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"controls_whileUntil\" id=\"18\" x=\"-6\" y=\"95\"><field name=\"MODE\">WHILE</field><value name=\"BOOL\"><block type=\"logic_boolean\" id=\"8\"><field name=\"BOOL\">TRUE</field></block></value><statement name=\"DO\"><block type=\"text_print\" id=\"34\"><value name=\"TEXT\"><block type=\"coderbot_adv_pathAhead\" id=\"43\"></block></value></block></statement></block></xml>", "code": "while True:\n get_prog_eng().check_end()\n get_cam().set_text(get_cam().path_ahead())\n", "name": "path_ahead"}
1+
{"dom_code": "<xml xmlns=\"http://www.w3.org/1999/xhtml\"><variables><variable type=\"\" id=\",46fU~j08oojjbw,kof`\">spazio_libero</variable></variables><block type=\"controls_whileUntil\" id=\"18\" x=\"-6\" y=\"95\"><field name=\"MODE\">WHILE</field><value name=\"BOOL\"><block type=\"logic_boolean\" id=\"8\"><field name=\"BOOL\">TRUE</field></block></value><statement name=\"DO\"><block type=\"variables_set\" id=\"+.ndl3CthRQ~=B/JKR^u\"><field name=\"VAR\" id=\",46fU~j08oojjbw,kof`\" variabletype=\"\">spazio_libero</field><value name=\"VALUE\"><block type=\"coderbot_adv_pathAhead\" id=\"43\"></block></value><next><block type=\"text_print\" id=\"34\"><value name=\"TEXT\"><block type=\"variables_get\" id=\"HvuukI#y0|2p~0G!J^1,\"><field name=\"VAR\" id=\",46fU~j08oojjbw,kof`\" variabletype=\"\">spazio_libero</field></block></value><next><block type=\"controls_if\" id=\"j2kyA19rSa;+oDM_|TW1\"><mutation else=\"1\"></mutation><value name=\"IF0\"><block type=\"logic_operation\" id=\".h3ecm+6-QkNKadH^K^x\"><field name=\"OP\">AND</field><value name=\"A\"><block type=\"logic_compare\" id=\"?y*$N(f@|9rhe.mOI}Tw\"><field name=\"OP\">GT</field><value name=\"A\"><block type=\"variables_get\" id=\"j(v,2aQSE^A_2Um!%r%j\"><field name=\"VAR\" id=\",46fU~j08oojjbw,kof`\" variabletype=\"\">spazio_libero</field></block></value><value name=\"B\"><block type=\"math_number\" id=\"]@VPRw![OoT^Q6^@}+W]\"><field name=\"NUM\">30</field></block></value></block></value><value name=\"B\"><block type=\"logic_compare\" id=\"!E.x/E#B,Eqe=[6!!UpQ\"><field name=\"OP\">NEQ</field><value name=\"A\"><block type=\"variables_get\" id=\"1|EJ6P/9-k+=y!xD!n59\"><field name=\"VAR\" id=\",46fU~j08oojjbw,kof`\" variabletype=\"\">spazio_libero</field></block></value><value name=\"B\"><block type=\"math_number\" id=\"!3n*B?S(XK~u$1}#F:~N\"><field name=\"NUM\">60</field></block></value></block></value></block></value><statement name=\"DO0\"><block type=\"coderbot_adv_move\" id=\"#SW!Qq8M:4),17-S5HXx\"><field name=\"ACTION\">FORWARD</field><value name=\"SPEED\"><block type=\"math_number\" id=\"ZIc[_OhSH1e.mz]:tL,?\"><field name=\"NUM\">100</field></block></value><value name=\"ELAPSE\"><block type=\"math_number\" id=\"-j(8o/#PiEQEY5L2zbT:\"><field name=\"NUM\">0.2</field></block></value></block></statement><statement name=\"ELSE\"><block type=\"coderbot_adv_move\" id=\"e#qON.)K9J9!}_W`xlWx\"><field name=\"ACTION\">RIGHT</field><value name=\"SPEED\"><block type=\"math_number\" id=\")C53Vd7c_sC*PsSn0VCM\"><field name=\"NUM\">100</field></block></value><value name=\"ELAPSE\"><block type=\"math_number\" id=\"E3zjXN1SRNL5~IQJ|aRQ\"><field name=\"NUM\">0.2</field></block></value></block></statement></block></next></block></next></block></statement></block></xml>", "code": "spazio_libero = None\n\n\nwhile True:\n get_prog_eng().check_end()\n spazio_libero = get_cam().path_ahead()\n get_cam().set_text(spazio_libero)\n if spazio_libero > 30 and spazio_libero != 60:\n get_bot().forward(speed=100, elapse=0.2)\n else:\n get_bot().right(speed=100, elapse=0.2)\n", "name": "path_ahead"}

data/program_test_sonar.data

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"dom_code": "<xml xmlns=\"http://www.w3.org/1999/xhtml\"><block type=\"controls_whileUntil\" x=\"9\" y=\"103\"><field name=\"MODE\">WHILE</field><value name=\"BOOL\"><block type=\"logic_boolean\"><field name=\"BOOL\">TRUE</field></block></value><statement name=\"DO\"><block type=\"text_print\"><value name=\"TEXT\"><block type=\"coderbot_sonar_get_distance\"><field name=\"SONAR\">0</field></block></value></block></statement></block></xml>", "code": "while True:\n get_prog_eng().check_end()\n get_cam().set_text(get_bot().get_sonar_distance(0))\n", "name": "test_sonar"}
1+
{"dom_code": "", "code": "while True:\n get_prog_eng().check_end()\n get_cam().set_text(get_bot().get_sonar_distance(0))\n", "name": "test_sonar"}

photos/metadata.json

Lines changed: 2 additions & 1 deletion
Large diffs are not rendered by default.

program.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@
2323
import json
2424
import logging
2525

26-
import math #keep it for blockly math functions!
27-
26+
import math
2827
import coderbot
2928
import camera
3029
import motion
@@ -174,13 +173,14 @@ def run(self):
174173

175174
imports = "import json\n"
176175
code = imports + self._code
177-
exec(code)
176+
env = globals()
177+
exec(code, env, env)
178178
except RuntimeError as re:
179179
logging.info("quit: " + str(re))
180-
self.log(str(re))
180+
get_prog_eng().log(str(re))
181181
except Exception as e:
182182
logging.info("quit: " + str(e))
183-
self.log(str(e))
183+
get_prog_eng().log(str(e))
184184
finally:
185185
try:
186186
get_event().wait_event_generators()

0 commit comments

Comments
 (0)