Skip to content

Commit 044808d

Browse files
authored
Merge pull request #133 from project-neon/chore/real_life_post_iron_improvements
Chore/real life post iron improvements
2 parents c59a17f + 8c42a86 commit 044808d

File tree

2 files changed

+33
-16
lines changed

2 files changed

+33
-16
lines changed

entities/Ball.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,12 @@ def _update_speeds(self):
5656

5757
self.vx = speed(self._frames['x'], self.game.vision._fps)
5858
self.vy = speed(self._frames['y'], self.game.vision._fps)
59+
60+
def __getitem__(self, item):
61+
if item == 0:
62+
return self.x
63+
64+
if item == 1:
65+
return self.y
66+
67+
raise IndexError("Ball only has 2 coordinates")

entities/Robot.py

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from commons.math import angular_speed, rotate_via_numpy
66
from commons.math import speed as avg_speed
77

8+
89
class Robot(object):
910

1011
def __init__(self, game, robot_id, team_color):
@@ -50,7 +51,7 @@ def __init__(self, game, robot_id, team_color):
5051

5152
def start(self):
5253
self.strategy.start(self)
53-
54+
5455
def get_name(self):
5556
return 'ROBOT_{}_{}'.format(self.robot_id, self.team_color)
5657

@@ -75,14 +76,13 @@ def update(self, frame):
7576
self.update_stuckness()
7677

7778
def get_speed(self):
78-
return (self.vx**2 + self.vy**2)**.5
79+
return (self.vx ** 2 + self.vy ** 2) ** .5
7980

8081
def _update_speeds(self):
8182
self._frames['x'].append(self.current_data['x'])
8283
self._frames['y'].append(self.current_data['y'])
8384
self._frames['theta'].append(self.current_data['orientation'])
8485

85-
8686
self.theta = self.current_data['orientation']
8787

8888
self.x = self.current_data['x']
@@ -92,34 +92,33 @@ def _update_speeds(self):
9292
self.vy = avg_speed(self._frames['y'], self.game.vision._fps)
9393
self.vtheta = angular_speed(self._frames['theta'], self.game.vision._fps)
9494

95-
self.speed = math.sqrt(self.vx**2 + self.vy**2)
95+
self.speed = math.sqrt(self.vx ** 2 + self.vy ** 2)
9696

9797
def update_stuckness(self):
9898
MIN_STUCK_SPEED = 0.005
9999

100100
if self.game.use_referee and not self.game.referee.can_play:
101101
self.stuck_time = 0
102102

103-
if(self.speed <= MIN_STUCK_SPEED):
103+
if (self.speed <= MIN_STUCK_SPEED):
104104
self.stuck_time += 1
105105
else:
106106
self.stuck_time = 0
107-
107+
108108
def is_stuck(self):
109-
MIN_STUCK_TIME = 1 # in seconds
109+
MIN_STUCK_TIME = 1 # in seconds
110110
if self.game.vision._fps > 0:
111-
time_in_seconds = self.stuck_time/self.game.vision._fps
111+
time_in_seconds = self.stuck_time / self.game.vision._fps
112112
if time_in_seconds > MIN_STUCK_TIME:
113113
return True
114114
return False
115115

116-
117116
def _get_desired_differential_robot_speeds(self, vx, vy, theta):
118117
'''
119118
Entradas: velocidades no eixo X, Y
120119
Saidas: velocidades linear, angular
121120
'''
122-
121+
123122
speed_vector = np.array([vx, vy])
124123
speed_norm = np.linalg.norm(speed_vector)
125124
robot_world_speed = list(rotate_via_numpy(speed_vector, theta))
@@ -129,14 +128,13 @@ def _get_desired_differential_robot_speeds(self, vx, vy, theta):
129128
if robot_world_speed[0] > 0.0:
130129
robot_world_speed[1] = -robot_world_speed[1]
131130
robot_world_speed[0] = -robot_world_speed[0]
132-
131+
133132
robot_angle_speed = -math.atan2(robot_world_speed[1], robot_world_speed[0])
134133

135134
# va = signal of robot_angle_speed {-1, 1} * robot_world_speed.y [0, 1] * math.pi (max_speed = PI rad/s )
136-
va = (robot_angle_speed/abs(robot_angle_speed)) * robot_world_speed[1] * math.pi
135+
va = (robot_angle_speed / abs(robot_angle_speed)) * robot_world_speed[1] * math.pi
137136
return vl, va
138137

139-
140138
def _get_differential_robot_speeds(self, vx, vy, theta):
141139
'''
142140
Entradas: velocidades no eixo X, Y
@@ -149,9 +147,8 @@ def _get_differential_robot_speeds(self, vx, vy, theta):
149147
vl = robot_world_speed[0] * speed_norm
150148

151149
va = self.vtheta
152-
150+
153151
return vl, va
154-
155152

156153
def decide(self):
157154
desired = self.strategy.decide()
@@ -160,11 +157,22 @@ def decide(self):
160157

161158
return self._get_command(self.power_left, self.power_right)
162159

163-
164160
def _get_command(self, power_left, power_right):
165161
return {
166162
'robot_id': self.robot_id,
167163
'wheel_left': power_left,
168164
'wheel_right': power_right,
169165
'color': self.team_color
170166
}
167+
168+
def __getitem__(self, item):
169+
if item == 0:
170+
return self.x
171+
172+
if item == 1:
173+
return self.y
174+
175+
if item == 2:
176+
return self.theta
177+
178+
raise IndexError("Robot only has 3 coordinates")

0 commit comments

Comments
 (0)