Init gym
This commit is contained in:
55
scripts/utils/Behaviors.py
Normal file
55
scripts/utils/Behaviors.py
Normal file
@@ -0,0 +1,55 @@
|
||||
from agent.Base_Agent import Base_Agent as Agent
|
||||
from scripts.commons.Script import Script
|
||||
from scripts.commons.UI import UI
|
||||
|
||||
class Behaviors():
|
||||
|
||||
def __init__(self,script:Script) -> None:
|
||||
self.script = script
|
||||
self.player : Agent = None
|
||||
|
||||
def ask_for_behavior(self):
|
||||
names, descriptions = self.player.behavior.get_all_behaviors()
|
||||
|
||||
UI.print_table( [names,descriptions], ["Behavior Name","Description"], numbering=[True,False])
|
||||
choice, is_str_opt = UI.read_particle('Choose behavior ("" to skip 2 time steps, "b" to beam, ctrl+c to return): ',["","b"],int,[0,len(names)])
|
||||
if is_str_opt: return choice #skip 2 time steps or quit
|
||||
return names[choice]
|
||||
|
||||
def sync(self):
|
||||
self.player.scom.commit_and_send( self.player.world.robot.get_command() )
|
||||
self.player.scom.receive()
|
||||
|
||||
def beam(self):
|
||||
self.player.scom.unofficial_beam((-2.5,0,self.player.world.robot.beam_height),0)
|
||||
for _ in range(5):
|
||||
self.sync()
|
||||
|
||||
def execute(self):
|
||||
|
||||
a = self.script.args
|
||||
self.player = Agent(a.i, a.p, a.m, a.u, a.r, a.t) # Args: Server IP, Agent Port, Monitor Port, Uniform No., Robot Type, Team Name
|
||||
behavior = self.player.behavior
|
||||
|
||||
self.beam()
|
||||
self.player.scom.unofficial_set_play_mode("PlayOn")
|
||||
|
||||
# Special behaviors
|
||||
special_behaviors = {"Step":(), "Basic_Kick":(0,), "Walk":((0.5,0),False,0,False,None), "Dribble":(None,None)}
|
||||
|
||||
while True:
|
||||
behavior_name = self.ask_for_behavior()
|
||||
if behavior_name == 0: # skip 2 time steps (user request)
|
||||
self.sync()
|
||||
self.sync()
|
||||
elif behavior_name == 1: # beam
|
||||
self.beam()
|
||||
else:
|
||||
if behavior_name in special_behaviors: # not using execute_to_completion to abort behavior after a timeout
|
||||
duration = UI.read_int("For how many time steps [1,1000]? ", 1, 1001)
|
||||
for _ in range(duration):
|
||||
if behavior.execute(behavior_name, *special_behaviors[behavior_name]):
|
||||
break # break if behavior ends
|
||||
self.sync()
|
||||
else:
|
||||
behavior.execute_to_completion(behavior_name)
|
||||
Reference in New Issue
Block a user