Web kontrollerade rover (13 / 14 steg)
Steg 13: Python/kolv koden
Detta bot använder Python och kolven web framework. Du kan läsa mer om kolven här om du är intresserad.
Den stora skillnaden från en kolv app och normal Python skript är klassmetod brukade göra URI hantering. Annat än att det är ganska mycket normal Python för det mesta.
#! / usr/bin/env python
#
# Wifi/Web driven Rover
#
# Skriven av Scott Beasley - 2015
#
# Använder RPIO, pyserial och kolv
#
Importera tid
importera följetong
från RPIO importera PWM
från kolven importera kolv, render_template, begäran
app = kolven (__name__, static_url_path = '')
# Anslut till comm porten att prata med Roboclaw motor controller
försök:
# Ändra baudfrekvens här om annan än 19200
roboclaw = följetong. Följetong ('/ dev/ttyAMA0', 19200)
utom IOError:
skriva ut ("Comm port hittades inte")
sys.Exit (0)
# Hastighet och enheten kontroll variabler
last_direction = -1
speed_offset = 84
turn_tm_offset = 0.166
run_time = 0,750
# Servo neutralläge (hem)
servo_pos = 1250
servo = PWM. Servo)
servo.set_servo (18, servo_pos)
# Lite uppehålla slå sig ner tid
Time.Sleep (3)
#
# URI hanterare - alla bot page åtgärder görs här
#
# Skicka ut sidan robotar kontroll (Startsida)
("/")
def (index):
återgå render_template ("index.html", name = ingen)
("/ framåt")
def (framåt):
Global last_direction, run_time
skriva ut "Framåt"
go_forward)
last_direction = 0
# sömn 100ms + run_time
Time.Sleep (0,100 + run_time)
# Om inte kontinuerlig, sedan stoppa efter fördröjning
om run_time > 0:
last_direction = -1
stoppa)
tillbaka "ok"
("/ bakåt")
def (bakåt):
Global last_direction, run_time
skriva ut "Bakåt"
go_backward)
last_direction = 1
# sömn 100ms + run_time
Time.Sleep (0,100 + run_time)
# Om inte kontinuerlig, sedan stoppa efter fördröjning
om run_time > 0:
last_direction = -1
stoppa)
tillbaka "ok"
("/ vänster")
def (vänster):
Global last_direction, turn_tm_offset
skriva ut "Vänster"
go_left)
last_direction = -1
# sova näst
Time.Sleep (0,500 - turn_tm_offset)
# stop
stoppa)
Time.Sleep (0,100)
tillbaka "ok"
("/ rätt")
def (rätt):
Global last_direction, turn_tm_offset
skriva ut "Rätt"
go_right)
# sova näst
Time.Sleep (0,500 - turn_tm_offset)
last_direction = -1
# stop
stoppa)
Time.Sleep (0,100)
tillbaka "ok"
("/ ltforward")
def ltforward ():
Global last_direction, turn_tm_offset
skriva ut "Vänster fram vända"
go_left)
# sova näst
Time.Sleep (0,250 - (turn_tm_offset / 2))
last_direction = -1
# stop
stoppa)
Time.Sleep (0,100)
tillbaka "ok"
("/ rtforward")
def rtforward ():
Global last_direction, turn_tm_offset
skriva ut "Sväng höger framåt"
go_right)
# sova näst
Time.Sleep (0,250 - (turn_tm_offset / 2))
last_direction = -1
# stop
stoppa)
Time.Sleep (0,100)
tillbaka "ok"
("/ stoppa")
def stop ():
globala last_direction
skriva ut "Stop"
stoppa)
last_direction = -1
# sömn 100ms
Time.Sleep (0,100)
tillbaka "ok"
("/ panlt")
def panlf ():
globala servo_pos
skriva ut "Panlt"
servo_pos-= 100
om servo_pos < 500:
servo_pos = 500
servo.set_servo (18, servo_pos)
# sömn 150ms
Time.Sleep (0.150)
tillbaka "ok"
("/ panrt")
def panrt ():
globala servo_pos
skriva ut "Panrt"
servo_pos + = 100
om servo_pos > 2500:
servo_pos = 2500
servo.set_servo (18, servo_pos)
# sömn 150ms
Time.Sleep (0.150)
tillbaka "ok"
("/ home")
def (hem):
globala servo_pos
skriva ut "Hem"
servo_pos = 1250
servo.set_servo (18, servo_pos)
# sömn 150ms
Time.Sleep (0.150)
tillbaka "ok"
("/ panfull_lt")
def panfull_lt ():
globala servo_pos
skriva ut "Pan full vänster"
servo_pos = 500
servo.set_servo (18, servo_pos)
# sömn 150ms
Time.Sleep (0.150)
tillbaka "ok"
("/ panfull_rt")
def panfull_rt ():
globala servo_pos
skriva ut "Pan full rätt"
servo_pos = 2500
servo.set_servo (18, servo_pos)
# sömn 150ms
Time.Sleep (0.150)
tillbaka "ok"
("/ speed_low")
def speed_low ():
Global speed_offset, last_direction, turn_tm_offset
speed_offset = 42
turn_tm_offset = 0,001
# Uppdatera nuvarande riktning för att få ny fart
om last_direction == 0:
go_forward)
om last_direction == 1:
go_backward)
# sömn 150ms
Time.Sleep (0.150)
tillbaka "ok"
("/ speed_mid")
def speed_mid ():
Global speed_offset, last_direction, turn_tm_offset
speed_offset = 84
turn_tm_offset = 0.166
# Uppdatera nuvarande riktning för att få ny fart
om last_direction == 0:
go_forward)
om last_direction == 1:
go_backward)
# sömn 150ms
Time.Sleep (0.150)
tillbaka "ok"
("/ speed_hi")
def speed_hi ():
Global speed_offset, last_direction, turn_tm_offset
speed_offset = 126
turn_tm_offset = 0.332
# Uppdatera nuvarande riktning för att få ny fart
om last_direction == 0:
go_forward)
om last_direction == 1:
go_backward)
# sömn 150ms
Time.Sleep (0.150)
tillbaka "ok"
("/ kontinuerlig")
def (kontinuerlig):
globala run_time
skriva ut "Kontinuerligt köra"
run_time = 0
# sömn 100ms
Time.Sleep (0,100)
tillbaka "ok"
("/ mid_run")
def mid_run ():
globala run_time
"mitten av upplaga"
run_time = 0,750
stoppa)
# sömn 100ms
Time.Sleep (0,100)
tillbaka "ok"
("/ short_time")
def short_time ():
globala run_time
Print "kort sikt"
run_time = 0,300
stoppa)
# sömn 100ms
Time.Sleep (0,100)
tillbaka "ok"
#
# Motordrift funktioner
#
def go_forward ():
globala speed_offset
om speed_offset! = 42:
roboclaw.write (chr (1 + speed_offset))
roboclaw.write (chr (128 + speed_offset))
annat:
roboclaw.write (chr (127 - speed_offset))
roboclaw.write (chr (255 - speed_offset))
def go_backward ():
globala speed_offset
om speed_offset! = 42:
roboclaw.write (chr (127 - speed_offset))
roboclaw.write (chr (255 - speed_offset))
annat:
roboclaw.write (chr (1 + speed_offset))
roboclaw.write (chr (128 + speed_offset))
def go_left ():
globala speed_offset
om speed_offset! = 42:
roboclaw.write (chr (127 - speed_offset))
roboclaw.write (chr (128 + speed_offset))
annat:
roboclaw.write (chr (1 + speed_offset))
roboclaw.write (chr (255 - speed_offset))
def go_right ():
globala speed_offset
om speed_offset! = 42:
roboclaw.write (chr (1 + speed_offset))
roboclaw.write (chr (255 - speed_offset))
annat:
roboclaw.write (chr (127 - speed_offset))
roboclaw.write (chr (128 + speed_offset))
def (stopp):
roboclaw.write (chr (0))
om __name__ == "__main__":
app.Run (host = "0.0.0.0", port = 80, felsöka = True)
Om du inte vill eller behöver felsöka information från kolven, ställa in debug till 'false' på raden app.run.
om __name__ == "__main__":
app.Run (host = "0.0.0.0", port = 80, felsöka = False)
Du kan också ändra porten som kolven http-servern lyssnar på här också.