mirror of
https://github.com/undera/pylgbst.git
synced 2020-11-18 19:37:26 -08:00
VErnie executing commands from plain text file
This commit is contained in:
parent
53256af329
commit
79ba083abc
19
vernie.commands
Normal file
19
vernie.commands
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
FORWARD
|
||||||
|
FORWARD
|
||||||
|
TURN RIGHT
|
||||||
|
FORWARD
|
||||||
|
TURN LEFT
|
||||||
|
FORWARD
|
||||||
|
TURN RIGHT
|
||||||
|
BACKWARD
|
||||||
|
BACKWARD
|
||||||
|
TURN LEFT
|
||||||
|
FORWARD
|
||||||
|
FORWARD
|
||||||
|
TURN RIGHT
|
||||||
|
FORWARD
|
||||||
|
TURN RIGHT
|
||||||
|
FORWARD 3
|
||||||
|
TURN LEFT
|
||||||
|
TURN LEFT
|
||||||
|
BACKWARD 2
|
93
vernie.py
93
vernie.py
@ -32,7 +32,27 @@ def say(text):
|
|||||||
|
|
||||||
|
|
||||||
class Vernie(MoveHub):
|
class Vernie(MoveHub):
|
||||||
def __init__(self):
|
SPEECH_LANG_MAP = {
|
||||||
|
'en': {
|
||||||
|
'ready': "Vernie the Robot is ready.",
|
||||||
|
"commands help": "Available commands are: "
|
||||||
|
"forward, backward, turn left, turn right, "
|
||||||
|
"head left, head right, head straight and say",
|
||||||
|
"finished": "Thank you! Robot is now turning off"
|
||||||
|
},
|
||||||
|
"ru": {
|
||||||
|
"ready": "Робот Веернии 01 готов к работе",
|
||||||
|
"type commands": "печатайте команды",
|
||||||
|
"ok": "хорошо",
|
||||||
|
"commands help": "Доступные команды это: вперёд, назад, поворот влево, поворот вправо, "
|
||||||
|
"голову влево, голову вправо, голову прямо, скажи",
|
||||||
|
"Finished": "Робот завершает работу. Спасибо!",
|
||||||
|
"commands from file": "Исполняю команды из файла",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, language='en'):
|
||||||
|
self.language = language
|
||||||
try:
|
try:
|
||||||
conn = DebugServerConnection()
|
conn = DebugServerConnection()
|
||||||
except BaseException:
|
except BaseException:
|
||||||
@ -58,7 +78,12 @@ class Vernie(MoveHub):
|
|||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
self._reset_head()
|
self._reset_head()
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
log.info("Vernie is ready.")
|
self.say("ready")
|
||||||
|
|
||||||
|
def say(self, phrase):
|
||||||
|
if phrase in self.SPEECH_LANG_MAP[self.language]:
|
||||||
|
phrase = self.SPEECH_LANG_MAP[self.language][phrase]
|
||||||
|
say(phrase)
|
||||||
|
|
||||||
def _external_motor_data(self, data):
|
def _external_motor_data(self, data):
|
||||||
log.debug("External motor position: %s", data)
|
log.debug("External motor position: %s", data)
|
||||||
@ -112,51 +137,71 @@ class Vernie(MoveHub):
|
|||||||
self.move(BACKWARD, 2)
|
self.move(BACKWARD, 2)
|
||||||
|
|
||||||
def read_typed_commands(self):
|
def read_typed_commands(self):
|
||||||
say("Печатайте команды")
|
self.say('type commands')
|
||||||
|
|
||||||
|
def confirmation(cmd):
|
||||||
|
self.say("ok")
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
cmd = six.moves.input("COMMAND >")
|
cmd = six.moves.input("COMMAND >")
|
||||||
cmd = cmd.split(' ')
|
self._interpret_written_command(cmd, confirmation)
|
||||||
if cmd[0].lower() in ("head", "голова", "голова"):
|
|
||||||
|
def run_commands_file(self, filename):
|
||||||
|
self.say("commands from file")
|
||||||
|
|
||||||
|
def confirmation(cmd):
|
||||||
|
self.say(cmd[0])
|
||||||
|
|
||||||
|
with open(filename) as fhd:
|
||||||
|
for cmd in fhd.readlines():
|
||||||
|
sys.stdout.write("%s" % cmd)
|
||||||
|
self._interpret_written_command(cmd, confirmation)
|
||||||
|
|
||||||
|
def _interpret_written_command(self, cmd, confirm):
|
||||||
|
cmd = cmd.strip().lower().split(' ')
|
||||||
|
if cmd[0] in ("head", "голова", "голова"):
|
||||||
if cmd[-1] in ("right", "вправо", "направо"):
|
if cmd[-1] in ("right", "вправо", "направо"):
|
||||||
say("ok")
|
confirm(cmd)
|
||||||
self.head(RIGHT)
|
self.head(RIGHT)
|
||||||
elif cmd[-1] in ("left", "влево", "налево"):
|
elif cmd[-1] in ("left", "влево", "налево"):
|
||||||
say("ok")
|
confirm(cmd)
|
||||||
self.head(LEFT)
|
self.head(LEFT)
|
||||||
else:
|
else:
|
||||||
say("ok")
|
confirm(cmd)
|
||||||
self.head(STRAIGHT)
|
self.head(STRAIGHT)
|
||||||
elif cmd[0].lower() in ("say", "скажи", "сказать"):
|
elif cmd[0] in ("say", "скажи", "сказать"):
|
||||||
say(' '.join(cmd[1:]))
|
say(' '.join(cmd[1:]))
|
||||||
elif cmd[0].lower() in ("forward", "вперёд", "вперед"):
|
elif cmd[0] in ("end", "конец"):
|
||||||
|
self.say("finished")
|
||||||
|
raise KeyboardInterrupt()
|
||||||
|
elif cmd[0] in ("forward", "вперёд", "вперед"):
|
||||||
try:
|
try:
|
||||||
dist = int(cmd[-1])
|
dist = int(cmd[-1])
|
||||||
except:
|
except:
|
||||||
dist = 1
|
dist = 1
|
||||||
say("ok")
|
confirm(cmd)
|
||||||
self.move(FORWARD, distance=dist)
|
self.move(FORWARD, distance=dist)
|
||||||
elif cmd[0].lower() in ("backward", "назад"):
|
elif cmd[0] in ("backward", "назад"):
|
||||||
try:
|
try:
|
||||||
dist = int(cmd[-1])
|
dist = int(cmd[-1])
|
||||||
except:
|
except:
|
||||||
dist = 1
|
dist = 1
|
||||||
say("ok")
|
confirm(cmd)
|
||||||
self.move(BACKWARD, distance=dist)
|
self.move(BACKWARD, distance=dist)
|
||||||
elif cmd[0].lower() in ("turn", "поворот", 'повернуть'):
|
elif cmd[0] in ("turn", "поворот", 'повернуть'):
|
||||||
if cmd[-1] in ("right", "вправо", "направо"):
|
if cmd[-1] in ("right", "вправо", "направо"):
|
||||||
say("ok")
|
confirm(cmd)
|
||||||
self.turn(RIGHT)
|
self.turn(RIGHT)
|
||||||
elif cmd[-1] in ("left", "влево", "налево"):
|
elif cmd[-1] in ("left", "влево", "налево"):
|
||||||
say("ok")
|
confirm(cmd)
|
||||||
self.turn(LEFT)
|
self.turn(LEFT)
|
||||||
else:
|
else:
|
||||||
say("ok")
|
confirm(cmd)
|
||||||
self.turn(RIGHT, degrees=360)
|
self.turn(RIGHT, degrees=180)
|
||||||
else:
|
else:
|
||||||
say("Неизвестная команда")
|
self.say("Unknown command")
|
||||||
say("Доступные команды это:")
|
self.say("commands help")
|
||||||
say("вперёд, назад, поворот влево, поворот вправо, голову влево, голову вправо, голову прямо, скажи")
|
|
||||||
say("Печатайте команды")
|
|
||||||
|
|
||||||
|
|
||||||
# TODO: distance sensor game
|
# TODO: distance sensor game
|
||||||
@ -166,6 +211,6 @@ if __name__ == '__main__':
|
|||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(level=logging.INFO)
|
||||||
comms.log.setLevel(logging.INFO)
|
comms.log.setLevel(logging.INFO)
|
||||||
|
|
||||||
vernie = Vernie()
|
vernie = Vernie(language="ru")
|
||||||
say("Робот Веернии 01 готов к работе")
|
# vernie.run_commands_file("./vernie.commands")
|
||||||
vernie.read_typed_commands()
|
vernie.read_typed_commands()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user