def do_GET(self): try: self.send_response(200) op = self.path[1:] if op == "index.html" or op == "": self.send_header("Content-type", "text/html") self.end_headers() self.wfile.write( "<html><head>" + "<meta http-equiv='Content-Type'" + "content='text/html; charset=utf-8' />" + "<script type='text/javascript' src='//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js'></script>" + "<script type='text/javascript'>" + "function runCommand(name){ $.get(name, '' , " + "function(data){ /*alert(data);*/ }); } " + "</script>" + "</head><body>" + "<h1>Available commands</h1>" ) for moveName in moves: self.wfile.write( "<a style='min-width:20em;margin:1em;font-size:120%;' href='javascript:" + 'runCommand("' + moveName + '")' + "'>" + moveName + "</a><br>" ) self.wfile.write("</body></html>") else: self.send_header("Content-type", "text/plain") self.end_headers() moveName = op.replace("%20", " ") if moveName in moves: self.wfile.write(json.dumps({"operation": op})) runMovement(move, moveName) else: self.wfile.write(json.dumps({"operation": "not found"})) return except IOError: self.send_error(404, "File Not Found: %s" % self.path)
def replantFoot(self,endHipAngle,stepTime=1): runMovement(self.replantFoot_function,endHipAngle,stepTime)
def setFootY(self,footY,stepTime=1): runMovement(self.setFootY_function,footY,stepTime)
def setHipDeg(self,endHipAngle,stepTime=1): runMovement(self.setHipDeg_function,endHipAngle,stepTime)
def __init__(self, master, controller): self.con = controller self.master = master self.frame = Frame(self.master) self.frame.pack() #setup menu system menu = Menu(root) root.config(menu=menu) filemenu = Menu(menu) menu.add_cascade(label="File", menu=filemenu) filemenu.add_command(label="New") filemenu.add_command(label="Save Offsets", command=self.saveOffsets) # TODO: bring these over from servitorGui #filemenu.add_command(label="Open Offsets", command=self.openOffsets) #filemenu.add_command(label="Save Positions", command=self.savePositions) #filemenu.add_command(label="Open Positions", command=self.openPositions) filemenu.add_separator() filemenu.add_command(label="Exit", command=self.quitApp) master.createcommand('exit', self.quitApp) #setup kill button self.killButton = Button(self.frame, text="Kill All Servos",fg="red", font=("Helvetica", 20),command=self.estop) self.killButton.grid(row=0,column=14) self.loadOffsets() self.servos = [] #setup left side, 4 groups of 4 servo controls for i in xrange(4): self.newServo(0+i*4,[1,8+i*5]) self.newServo(1+i*4,[1,9+i*5]) self.newServo(2+i*4,[1,10+i*5]) self.newServo(3+i*4,[1,11+i*5]) self.addSpace([0,12+i*5]) #setup right side, 4 groups of 4 servo controls for i in xrange(4): self.newServo(16+i*4,[11,8+i*5]) self.newServo(17+i*4,[11,9+i*5]) self.newServo(18+i*4,[11,10+i*5]) self.newServo(19+i*4,[11,11+i*5]) self.addSpace([11,12+i*5]) #add some spaces for asthetics self.addSpace([10,1]) # generate buttons for all move functions counter = 0 for move_name in moves: b = Button(self.frame, text=move_name) b.move_name = move_name b.sel = lambda b = b: runMovement(move,b.move_name) b.config(command = b.sel) b.grid(row=counter+8, column=0) #b.pack() counter += 1 self.poll() self.estop()
def pointCircle(self, centerHipAngle = 0, radius = 15, orientation = 1, stepTime = 0.5): runMovement(self.pointCircle_function, centerHipAngle, radius, orientation, stepTime)
def setFootY(self, footY = 1000, footRx = 0, stepTime = 1): runMovement(self.setFootY_function, footY, footRx, stepTime)
def __init__(self, master, controller): self.con = controller self.master = master self.frame = Frame(self.master) self.frame.pack() #setup menu system menu = Menu(root) root.config(menu=menu) filemenu = Menu(menu) menu.add_cascade(label="File", menu=filemenu) #filemenu.add_command(label="New") #filemenu.add_command(label="Save Offsets", command=self.saveOffsets) # TODO: bring these over from servitorGui #filemenu.add_command(label="Open Offsets", command=self.openOffsets) #filemenu.add_command(label="Save Positions", command=self.savePositions) #filemenu.add_command(label="Open Positions", command=self.openPositions) #filemenu.add_separator() filemenu.add_command(label="Exit", command=self.quitApp) #setup kill button #self.killButton = Button(self.frame, text="Kill All Servos",fg="red", # font=("Helvetica", 12),command=self.estop) #self.killButton.grid(row=0,column=4) #arrays for icons, commands iconList = ["move_fwdleft.gif", "move_left.gif", "move_backleft.gif", "move_fwds.gif", "stop.gif", "move_back.gif", "move_fwdright.gif", "move_right.gif", "move_backright.gif", "rotate_ccw.gif", "rotate_cw.gif", "dance.gif", "sign_x.gif", "sign_hexy.gif", "sign_name.gif"] commandList = ["crab_fwdleft", "crab_left", "crab_backleft", "crab_fwd", "", "crab_back", "crab_fwdright", "crab_right", "crab_backright", "RotateLeft", "RotateRight", "dance_random", "sign_x", "sign_hexy", "sign_name"] #draw all the buttons and add icons/ commands counter = 0 for icons in iconList: b = Button(self.frame) b.icon = PhotoImage(file="./Icons/" + icons) b.config(image=b.icon, width="150", height="150") b.move_name = commandList[counter] # modified command if the command is Stop if b.move_name=="": b.config(command = self.estop) elif b.move_name=="sign_name": b.sel = lambda b = b: move(b.move_name) b.config(command = b.sel) else: b.sel = lambda b = b: runMovement(move,b.move_name) b.config(command = b.sel) b.grid(row=(counter%3)*2+2, column=(counter/3)*2) #b.pack() counter += 1 """ for icons in iconList: b = Button(self.frame) b.icon = PhotoImage(file="./Icons/" + icons) b.config(image=b.icon, width="150", height="150") b.move_name = commandList[counter] b.sel = lambda b = b: runMovement(move,b.move_name) # exception if the command is Stop if b.move_name=="": b.config(command = self.estop) #elif b.move_name=="sign_name": #b.config(command = execfile("./DemoMoves/sign_name.py")) else: b.config(command = b.sel) b.grid(row=(counter%3)*2+2, column=(counter/3)*2) #b.pack() counter += 1 """ """ #fwd left self.fwdLeftPhoto = PhotoImage(file="./Icons/move_fwdleft.gif") self.fwdLeftButton = Button(self.frame) #self.fwdLeftButton.move_name = "crab_fwdleft" #self.fwdLeftButton.sel = lambda self.fwdLeftButton = self.fwdLeftButton: runMovement(move, self.fwdLeftButton.move_name) #self.fwdLeftButton.config(image=self.fwdLeftPhoto, width="150", height="150", command = self.fwdLeftButton.sel) self.fwdLeftButton.func = lambda func = func: runMovement(move,"crab_fwdleft") self.fwdLeftButton.config(image=self.fwdLeftPhoto, width="150", height="150", command=self.fwdLeftButton.func) self.fwdLeftButton.grid(row=2, column=0) #fwd self.fwdPhoto = PhotoImage(file="./Icons/move_fwds.gif") self.fwdButton = Button(self.frame) self.fwdButton.config(image=self.fwdPhoto, width="150", height="150") self.fwdButton.grid(row=2, column=2) #fwd right self.fwdRightPhoto = PhotoImage(file="./Icons/move_fwdright.gif") self.fwdRightButton = Button(self.frame) self.fwdRightButton.config(image=self.fwdRightPhoto, width="150", height="150") self.fwdRightButton.grid(row=2, column=4) #left self.leftPhoto = PhotoImage(file="./Icons/move_left.gif") self.leftButton = Button(self.frame) self.leftButton.config(image=self.leftPhoto, width="150", height="150") self.leftButton.grid(row=4, column=0) #stop self.stopPhoto = PhotoImage(file="./Icons/stop.gif") self.stopButton = Button(self.frame, command=self.estop) self.stopButton.config(image=self.stopPhoto, width="150", height="150") self.stopButton.grid(row=4, column=2) #right self.rightPhoto = PhotoImage(file="./Icons/move_right.gif") self.rightButton = Button(self.frame) self.rightButton.config(image=self.rightPhoto, width="150", height="150") self.rightButton.grid(row=4, column=4) #back left self.backLeftPhoto = PhotoImage(file="./Icons/move_backleft.gif") self.backLeftButton = Button(self.frame) self.backLeftButton.config(image=self.backLeftPhoto, width="150", height="150") self.backLeftButton.grid(row=6, column=0) #back self.backPhoto = PhotoImage(file="./Icons/move_back.gif") self.backButton = Button(self.frame) self.backButton.config(image=self.backPhoto, width="150", height="150") self.backButton.grid(row=6, column=2) #back right self.backRightPhoto = PhotoImage(file="./Icons/move_backright.gif") self.backRightButton = Button(self.frame) self.backRightButton.config(image=self.backRightPhoto, width="150", height="150") self.backRightButton.grid(row=6, column=4) #rotate left self.rotLeftPhoto = PhotoImage(file="./Icons/rotate_ccw.gif") self.rotLeftButton = Button(self.frame) self.rotLeftButton.config(image=self.rotLeftPhoto, width="150", height="150") self.rotLeftButton.grid(row=2, column=6) #rotate right self.rotRightPhoto = PhotoImage(file="./Icons/rotate_cw.gif") self.rotRightButton = Button(self.frame) self.rotRightButton.config(image=self.rotRightPhoto, width="150", height="150") self.rotRightButton.grid(row=4, column=6) #dance self.dancePhoto = PhotoImage(file="./Icons/dance.gif") self.danceButton = Button(self.frame) self.danceButton.config(image=self.dancePhoto, width="150", height="150") self.danceButton.grid(row=6, column=6) #sign stylised "X" self.signxPhoto = PhotoImage(file="./Icons/sign_x.gif") self.signxButton = Button(self.frame) self.signxButton.config(image=self.signxPhoto, width="150", height="150") self.signxButton.grid(row=2, column=8) #sign Hexy self.signHexyPhoto = PhotoImage(file="./Icons/sign_hexy.gif") self.signHexyButton = Button(self.frame) self.signHexyButton.config(image=self.signHexyPhoto, width="150", height="150") self.signHexyButton.grid(row=4, column=8) #write name self.writeNamePhoto = PhotoImage(file="./Icons/sign_name.gif") self.writeNameButton = Button(self.frame) self.writeNameButton.config(image=self.writeNamePhoto, width="150", height="150") self.writeNameButton.grid(row=6, column=8) """ self.addSpace([1, 1]) self.addSpace([3, 3]) self.addSpace([5, 5]) self.addSpace([7, 5]) self.loadOffsets() # TODO add code to make sensible looking GUI # required buttons: fwds, bkwds, left, right, (diagonals?), turn_cw, turn_ccw # special buttons: sign Hexy (X?), sign custom message (requires dialog box) # stretch commands: modulate height, modulate body angles self.servos = [] # remove code for slider generation """ #setup left side, 4 groups of 4 servo controls for i in xrange(4): self.newServo(0+i*4,[1,8+i*5]) self.newServo(1+i*4,[1,9+i*5]) self.newServo(2+i*4,[1,10+i*5]) self.newServo(3+i*4,[1,11+i*5]) #self.addSpace([0,12+i*5]) #setup right side, 4 groups of 4 servo controls for i in xrange(4): self.newServo(16+i*4,[11,8+i*5]) self.newServo(17+i*4,[11,9+i*5]) self.newServo(18+i*4,[11,10+i*5]) self.newServo(19+i*4,[11,11+i*5]) #self.addSpace([11,12+i*5]) """ #add some spaces for asthetics #self.addSpace([10,10]) # generate buttons for all move functions """ counter = 0 for move_name in moves: b = Button(self.frame, text=move_name, font=("Helvetica", 7)) b.move_name = move_name b.sel = lambda b = b: runMovement(move,b.move_name) b.config(command = b.sel) b.grid(row=counter+8, column=0) #b.pack() counter += 1 """ # don't need the following line as there are no sliders to update #self.poll() self.estop()
def replantFoot(self, endHipAngle, stepTime=1): runMovement(self.replantFoot_function, endHipAngle, stepTime)
def setFootY(self, footY, stepTime=1): runMovement(self.setFootY_function, footY, stepTime)
def setHipDeg(self, endHipAngle, stepTime=1): runMovement(self.setHipDeg_function, endHipAngle, stepTime)
def __init__(self, master, controller): self.con = controller self.master = master self.frame = Frame(self.master) self.frame.pack() # Setup menu system menu = Menu(root) root.config(menu=menu) filemenu = Menu(menu) menu.add_cascade(label="File", menu=filemenu) filemenu.add_command(label="New") filemenu.add_command(label="Save Offsets", command=self.saveOffsets) # TODO: Bring these over from servitorGui #filemenu.add_command(label="Open Offsets", command=self.openOffsets) #filemenu.add_command(label="Save Positions", command=self.savePositions) #filemenu.add_command(label="Open Positions", command=self.openPositions) filemenu.add_separator() filemenu.add_command(label="Exit", command=self.quitApp) master.createcommand('exit', self.quitApp) # Setup kill button self.killButton = Button(self.frame, text="Kill All Servos", fg="red", font=("Helvetica", 20), command=self.estop) self.killButton.grid(row=0, column=14) self.loadOffsets() self.servos = [] # Setup left side, 4 groups of 4 servo controls for i in xrange(4): self.newServo(0 + i * 4, [1, 8 + i * 5]) self.newServo(1 + i * 4, [1, 9 + i * 5]) self.newServo(2 + i * 4, [1, 10 + i * 5]) self.newServo(3 + i * 4, [1, 11 + i * 5]) self.addSpace([0, 12 + i * 5]) # Setup right side, 4 groups of 4 servo controls for i in xrange(4): self.newServo(16 + i * 4, [11, 8 + i * 5]) self.newServo(17 + i * 4, [11, 9 + i * 5]) self.newServo(18 + i * 4, [11, 10 + i * 5]) self.newServo(19 + i * 4, [11, 11 + i * 5]) self.addSpace([11, 12 + i * 5]) # Add some spaces for aesthetics self.addSpace([10, 1]) # Generate buttons for all move functions counter = 0 for move_name in moves: b = Button(self.frame, text=move_name) b.move_name = move_name b.sel = lambda b=b: runMovement(move, b.move_name) b.config(command=b.sel) b.grid(row=counter + 8, column=0) #b.pack() counter += 1 self.poll() self.estop()
def gui_estop(self): servotorComm.runMovement(self.estop)
def __init__(self, master): self.con = servotorComm.Controller() # Servo controller self.hexy = hexapod(self.con) self.master = master self.frame = Frame(self.master) self.frame.pack() #setup menu system menu = Menu(root) root.config(menu=menu) filemenu = Menu(menu) menu.add_cascade(label="File", menu=filemenu) filemenu.add_command(label="New") filemenu.add_command(label="Save Offsets", command=self.saveOffsets) # TODO: bring these over from servitorGui #filemenu.add_command(label="Open Offsets", command=self.openOffsets) #filemenu.add_command(label="Save Positions", command=self.savePositions) #filemenu.add_command(label="Open Positions", command=self.openPositions) filemenu.add_separator() filemenu.add_command(label="Exit", command=self.quitApp) #setup kill button self.killButton = Button(self.frame, text="Kill All Servos", fg="red", font=("Helvetica", 20), command=self.gui_estop) self.killButton.grid(row=0, column=14) self.loadOffsets() self.servos = [] #setup left side, 4 groups of 4 servo controls for i in xrange(4): self.newServo(0 + i * 4, [1, 8 + i * 5]) self.newServo(1 + i * 4, [1, 9 + i * 5]) self.newServo(2 + i * 4, [1, 10 + i * 5]) self.newServo(3 + i * 4, [1, 11 + i * 5]) self.addSpace([0, 12 + i * 5]) #setup right side, 4 groups of 4 servo controls for i in xrange(4): self.newServo(16 + i * 4, [11, 8 + i * 5]) self.newServo(17 + i * 4, [11, 9 + i * 5]) self.newServo(18 + i * 4, [11, 10 + i * 5]) self.newServo(19 + i * 4, [11, 11 + i * 5]) self.addSpace([11, 12 + i * 5]) #add some spaces for asthetics self.addSpace([10, 1]) # generate buttons for all move functions counter = 0 for move_name in dir(self): if "move_" in move_name: b = Button( self.frame, text=move_name[5:], command=lambda func=getattr(self, "move_" + move_name[ 5:]): servotorComm.runMovement(func)) b.grid(row=counter + 8, column=0) #b.pack() counter += 1 #servoBars = [] self.poll() self.estop()
def runCommand(self, op): # Use op as name of Move runMovement(self.move, op)