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.
60 lines
2.1 KiB
Python
60 lines
2.1 KiB
Python
|
|
from agent.Base_Agent import Base_Agent as Agent
|
|
from scripts.commons.Script import Script
|
|
from time import sleep
|
|
|
|
|
|
class Beam():
|
|
def __init__(self, script:Script) -> None:
|
|
self.script = script
|
|
|
|
def ask_for_input(self,prompt, default):
|
|
try:
|
|
inp=input(prompt)
|
|
return float(inp)
|
|
except ValueError:
|
|
if inp != '':
|
|
print("Illegal input:", inp, "\n")
|
|
return default
|
|
|
|
def beam_and_update(self,x,y,rot):
|
|
r = self.player.world.robot
|
|
d = self.player.world.draw
|
|
|
|
d.annotation((x,y,0.7), f"x:{x} y:{y} r:{rot}", d.Color.yellow, "pos_label")
|
|
|
|
self.player.scom.unofficial_beam((x,y,r.beam_height),rot)
|
|
for _ in range(10): # run multiple times to beam and then simulate eventual collisions (e.g. goal posts)
|
|
sleep(0.03)
|
|
self.player.behavior.execute("Zero")
|
|
self.player.scom.commit_and_send( r.get_command() )
|
|
self.player.scom.receive()
|
|
|
|
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
|
|
d = self.player.world.draw
|
|
|
|
self.player.scom.unofficial_set_play_mode("PlayOn")
|
|
|
|
# Draw grid
|
|
for x in range(-15,16):
|
|
for y in range(-10,11):
|
|
d.point((x,y), 6, d.Color.red, "grid", False)
|
|
d.flush("grid")
|
|
|
|
for _ in range(10): # Initialize
|
|
self.player.scom.send()
|
|
self.player.scom.receive()
|
|
|
|
print("\nBeam player to coordinates + orientation:")
|
|
|
|
x=y=a=0
|
|
while True: # Beam self.player to given position
|
|
x = self.ask_for_input(f"\nInput x coordinate ('' to send {x:5} again, ctrl+c to return): ",x)
|
|
self.beam_and_update(x,y,a)
|
|
y = self.ask_for_input( f"Input y coordinate ('' to send {y:5} again, ctrl+c to return): ",y)
|
|
self.beam_and_update(x,y,a)
|
|
a = self.ask_for_input( f"Orientation -180 to 180 ('' to send {a:5} again, ctrl+c to return): ",a)
|
|
self.beam_and_update(x,y,a) |