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.

53 lines
1.9 KiB
Python

from agent.Base_Agent import Base_Agent as Agent
from math_ops.Math_Ops import Math_Ops as M
from scripts.commons.Script import Script
import numpy as np
'''
Objective:
----------
Demonstrate kick
'''
class Kick():
def __init__(self, script:Script) -> None:
self.script = script
def execute(self):
a = self.script.args
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
player.path_manager.draw_options(enable_obstacles=True, enable_path=True) # enable drawings of obstacles and path to ball
behavior = player.behavior
w = player.world
r = w.robot
print("\nThe robot will kick towards the center of the field")
print("Try to manually relocate the ball")
print("Press ctrl+c to return\n")
player.scom.unofficial_set_play_mode("PlayOn")
player.scom.unofficial_beam((-3,0,r.beam_height),0)
vec = (1,0)
while True:
player.scom.unofficial_set_game_time(0)
b = w.ball_abs_pos[:2]
if 0 < np.linalg.norm(w.get_ball_abs_vel(6)) < 0.02: # speed of zero is likely to indicate prolongued inability to see the ball
if np.linalg.norm(w.ball_rel_head_cart_pos[:2]) > 0.5: # update kick if ball is further than 0.5 m
if max(abs(b)) < 0.5:
vec = np.array([6,0])
else:
vec = M.normalize_vec((0,0)-b) * 6
w.draw.point(b+vec, 8, w.draw.Color.pink, "target")
behavior.execute("Basic_Kick", M.vector_angle(vec))
player.scom.commit_and_send( r.get_command() )
player.scom.receive()
if behavior.is_ready("Get_Up"):
player.scom.unofficial_beam((*r.loc_head_position[0:2],r.beam_height),0)
behavior.execute_to_completion("Zero_Bent_Knees")