Skip to content

Commit 998d29c

Browse files
committed
fix #76
1 parent 26373a2 commit 998d29c

File tree

11 files changed

+57
-24
lines changed

11 files changed

+57
-24
lines changed

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": "py", "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_obstacle_avoidance.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=\"38\" y=\"95\"><field name=\"MODE\">WHILE</field><value name=\"BOOL\"><block type=\"logic_boolean\"><field name=\"BOOL\">TRUE</field></block></value><statement name=\"DO\"><block type=\"controls_if\"><mutation else=\"1\"></mutation><value name=\"IF0\"><block type=\"logic_compare\"><field name=\"OP\">LT</field><value name=\"A\"><block type=\"coderbot_sonar_get_distance\"><field name=\"SONAR\"></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\">RIGHT</field><value name=\"SPEED\"><block type=\"math_number\"><field name=\"NUM\">100</field></block></value><value name=\"ELAPSE\"><block type=\"math_number\"><field name=\"NUM\">0.5</field></block></value></block></statement><statement name=\"ELSE\"><block type=\"coderbot_adv_move\"><field name=\"ACTION\">FORWARD</field><value name=\"SPEED\"><block type=\"math_number\"><field name=\"NUM\">100</field></block></value><value name=\"ELAPSE\"><block type=\"math_number\"><field name=\"NUM\">-1</field></block></value></block></statement></block></statement><next><block type=\"coderbot_adv_stop\"></block></next></block></xml>", "code": "while True:\n get_prog_eng().check_end()\n if get_bot().get_sonar_distance() < 10:\n get_bot().right(speed=100, elapse=0.5)\n else:\n get_bot().forward(speed=100, elapse=-1)\nget_bot().stop()\n", "name": "obstacle_avoidance"}
1+
{"dom_code": "", "code": "while True:\n get_prog_eng().check_end()\n if get_bot().get_sonar_distance(0) < 15:\n get_bot().backward(speed=100, elapse=0.5)\n get_bot().right(speed=100, elapse=0.7)\n else:\n get_bot().forward(speed=100, elapse=0.5)\nget_bot().stop()\n", "name": "obstacle_avoidance"}

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"}

event.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,23 @@ def register_event_generator(self, generator_func):
3333
generator = threading.Thread(target=generator_func)
3434
self._event_generators.append(generator)
3535
generator.start()
36+
37+
def unregister_listeners(self):
38+
for subscriber in self._event_listeners:
39+
try:
40+
subscriber.unregister()
41+
except:
42+
logging.error("unable to unregister subscriber")
43+
self._event_listeners = []
44+
45+
def unregister_publishers(self):
46+
for publisher in self._publishers:
47+
try:
48+
publisher.unregister()
49+
except:
50+
logging.error("unable to unregister publisher")
51+
self._event_listeners = []
52+
3653

3754
def start_event_generators(self):
3855
for g in self._event_generators:

main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ def handle_program_status():
312312
prog = Program("")
313313
if app.prog:
314314
prog = app.prog
315-
return json.dumps({'name': prog.name, "running": prog.is_running(), "log": prog.get_log()})
315+
return json.dumps({'name': prog.name, "running": prog.is_running(), "log": app.prog_engine.get_log()})
316316

317317
@app.route("/cnnmodels", methods=["GET"])
318318
def handle_cnn_models_list():

photos/metadata.json

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

0 commit comments

Comments
 (0)