You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
2.9 KiB
Python
122 lines
2.9 KiB
Python
#!/usr/bin/python
|
|
# -*- coding:utf-8 -*-
|
|
from bottle import get,post,run,route,request,template,static_file
|
|
from AlphaBot import AlphaBot
|
|
from PCA9685 import PCA9685
|
|
import threading
|
|
import socket #ip
|
|
import os
|
|
|
|
Ab = AlphaBot()
|
|
pwm = PCA9685(0x40)
|
|
pwm.setPWMFreq(50)
|
|
|
|
#Set servo parameters
|
|
HPulse = 1500 #Sets the initial Pulse
|
|
HStep = 0 #Sets the initial step length
|
|
VPulse = 1500 #Sets the initial Pulse
|
|
VStep = 0 #Sets the initial step length
|
|
pwm.setServoPulse(1,VPulse)
|
|
pwm.setServoPulse(0,HPulse)
|
|
|
|
@get("/")
|
|
def index():
|
|
return template("index")
|
|
|
|
@route('/<filename>')
|
|
def server_static(filename):
|
|
return static_file(filename, root='./')
|
|
|
|
@route('/fonts/<filename>')
|
|
def server_fonts(filename):
|
|
return static_file(filename, root='./fonts/')
|
|
|
|
@post("/cmd")
|
|
def cmd():
|
|
global HStep,VStep
|
|
code = request.body.read().decode()
|
|
speed = request.POST.get('speed')
|
|
print(code)
|
|
if(speed != None):
|
|
Ab.setPWMA(float(speed))
|
|
Ab.setPWMB(float(speed))
|
|
print(speed)
|
|
if code == "stop":
|
|
HStep = 0
|
|
VStep = 0
|
|
Ab.stop()
|
|
print("stop")
|
|
elif code == "forward":
|
|
Ab.forward()
|
|
print("forward")
|
|
elif code == "backward":
|
|
Ab.backward()
|
|
print("backward")
|
|
elif code == "turnleft":
|
|
Ab.left()
|
|
print("turnleft")
|
|
elif code == "turnright":
|
|
Ab.right()
|
|
print("turnright")
|
|
elif code == "up":
|
|
VStep = -5
|
|
print("up")
|
|
elif code == "down":
|
|
VStep = 5
|
|
print("down")
|
|
elif code == "left":
|
|
HStep = 5
|
|
print("left")
|
|
elif code == "right":
|
|
HStep = -5
|
|
print("right")
|
|
return "OK"
|
|
|
|
def timerfunc():
|
|
global HPulse,VPulse,HStep,VStep,pwm
|
|
|
|
if(HStep != 0):
|
|
HPulse += HStep
|
|
if(HPulse >= 2500):
|
|
HPulse = 2500
|
|
if(HPulse <= 500):
|
|
HPulse = 500
|
|
#set channel 2, the Horizontal servo
|
|
pwm.setServoPulse(0,HPulse)
|
|
|
|
if(VStep != 0):
|
|
VPulse += VStep
|
|
if(VPulse >= 2500):
|
|
VPulse = 2500
|
|
if(VPulse <= 500):
|
|
VPulse = 500
|
|
#set channel 3, the vertical servo
|
|
pwm.setServoPulse(1,VPulse)
|
|
|
|
global t #Notice: use global variable!
|
|
t = threading.Timer(0.02, timerfunc)
|
|
t.start()
|
|
|
|
def camera():
|
|
lastpath = os.path.abspath(os.path.join(os.getcwd(), "../"))
|
|
print("lastpath = %s" %lastpath)
|
|
campath = lastpath + '/mjpg-streamer/mjpg-streamer-experimental/'
|
|
print("campath = %s" %campath)
|
|
os.system(campath + './mjpg_streamer -i "' + campath + './input_uvc.so" -o "' + campath + './output_http.so -w ' + campath + './www"')
|
|
|
|
tcamera = threading.Thread(target = camera)
|
|
tcamera.setDaemon(True)
|
|
tcamera.start()
|
|
tcamera = threading.Thread(target = camera)
|
|
tcamera.setDaemon(True)
|
|
tcamera.start()
|
|
|
|
t = threading.Timer(0.02, timerfunc)
|
|
t.setDaemon(True)
|
|
t.start()
|
|
|
|
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
|
|
s.connect(('8.8.8.8',80))
|
|
localhost=s.getsockname()[0]
|
|
run(host = localhost, port = 8000)
|