sprint
Her-darling 3 days ago
parent 09b23b6fbc
commit 0501c4bb46

@ -43,8 +43,8 @@ class sprint(gym.Env):
self.ik = self.player.inv_kinematics self.ik = self.player.inv_kinematics
# Step behavior defaults # Step behavior defaults
self.STEP_DUR = 10 self.STEP_DUR = 8
self.STEP_Z_SPAN = 0.2 self.STEP_Z_SPAN = 0.3
self.STEP_Z_MAX = 0.7 self.STEP_Z_MAX = 0.7
nao_specs = self.ik.NAO_SPECS nao_specs = self.ik.NAO_SPECS
self.leg_length = nao_specs[1] + nao_specs[3] # upper leg height + lower leg height self.leg_length = nao_specs[1] + nao_specs[3] # upper leg height + lower leg height
@ -56,7 +56,6 @@ class sprint(gym.Env):
self.walk_rel_orientation = None self.walk_rel_orientation = None
self.walk_rel_target = None self.walk_rel_target = None
self.walk_target = None
self.walk_distance = None self.walk_distance = None
self.act = np.zeros(16, np.float32) # memory variable self.act = np.zeros(16, np.float32) # memory variable
@ -146,7 +145,7 @@ class sprint(gym.Env):
Create internal target with a smoother variation Create internal target with a smoother variation
''' '''
MAX_LINEAR_DIST = 0.5 MAX_LINEAR_DIST = 1
MAX_LINEAR_DIFF = 0.014 # max difference (meters) per step MAX_LINEAR_DIFF = 0.014 # max difference (meters) per step
MAX_ROTATION_DIFF = 1.6 # max difference (degrees) per step MAX_ROTATION_DIFF = 1.6 # max difference (degrees) per step
MAX_ROTATION_DIST = 45 MAX_ROTATION_DIST = 45
@ -192,7 +191,6 @@ class sprint(gym.Env):
self.obs[62] = internal_target_vel[0] / MAX_LINEAR_DIFF self.obs[62] = internal_target_vel[0] / MAX_LINEAR_DIFF
return self.obs return self.obs
def execute_ik(self, l_pos, l_rot, r_pos, r_rot): def execute_ik(self, l_pos, l_rot, r_pos, r_rot):
r = self.player.world.robot r = self.player.world.robot
# Apply IK to each leg + Set joint targets # Apply IK to each leg + Set joint targets
@ -311,7 +309,7 @@ class sprint(gym.Env):
self.walk_distance = np.linalg.norm(self.walk_target - r.loc_head_position[:2]) self.walk_distance = np.linalg.norm(self.walk_target - r.loc_head_position[:2])
self.walk_rel_orientation = M.vector_angle(self.walk_rel_target) * 0.3 self.walk_rel_orientation = M.vector_angle(self.walk_rel_target) * 0.3
# exponential moving average # exponential moving average
self.act = 0.6 * self.act + 0.4 * action self.act = 0.8 * self.act + 0.2 * action * 0.7
# execute Step behavior to extract the target positions of each leg (we will override these targets) # execute Step behavior to extract the target positions of each leg (we will override these targets)
lfy, lfz, rfy, rfz = self.step_generator.get_target_positions(self.step_counter == 0, self.STEP_DUR, lfy, lfz, rfy, rfz = self.step_generator.get_target_positions(self.step_counter == 0, self.STEP_DUR,
@ -341,16 +339,17 @@ class sprint(gym.Env):
self.sync() self.sync()
self.step_counter += 1 self.step_counter += 1
obs = self.observe() obs = self.observe()
robot_speed = np.linalg.norm(r.loc_torso_velocity[:2]) robot_speed = np.linalg.norm(r.loc_torso_velocity[:2])
direction_error = abs(self.walk_rel_orientation) direction_error = abs(self.walk_rel_orientation)
direction_error = min(direction_error, 10) direction_error = min(direction_error, 10)
reward = robot_speed * (1 - direction_error / 10) * 0.02 reward = robot_speed * (1.5 - direction_error / 10) * 0.03
if self.walk_distance < 0.3: if self.walk_distance < 0.3:
reward += 10 reward += 10
if self.player.behavior.is_ready("Get_Up"): if self.player.behavior.is_ready("Get_Up"):
self.terminal = True self.terminal = True
elif w.time_local_ms - self.reset_time > 15000 * 2: elif w.time_local_ms - self.reset_time > 45000 * 2:
self.terminal = True self.terminal = True
else: else:
self.terminal = False self.terminal = False

@ -45,7 +45,7 @@ class sprint(gym.Env):
# Step behavior defaults # Step behavior defaults
self.STEP_DUR = 8 self.STEP_DUR = 8
self.STEP_Z_SPAN = 0.3 self.STEP_Z_SPAN = 0.3
self.STEP_Z_MAX = 0.8 self.STEP_Z_MAX = 0.7
nao_specs = self.ik.NAO_SPECS nao_specs = self.ik.NAO_SPECS
self.leg_length = nao_specs[1] + nao_specs[3] # upper leg height + lower leg height self.leg_length = nao_specs[1] + nao_specs[3] # upper leg height + lower leg height
feet_y_dev = nao_specs[0] * 2 # wider step feet_y_dev = nao_specs[0] * 2 # wider step
@ -310,7 +310,7 @@ class sprint(gym.Env):
self.walk_rel_orientation = M.vector_angle(self.walk_rel_target) * 0.3 self.walk_rel_orientation = M.vector_angle(self.walk_rel_target) * 0.3
# exponential moving average # exponential moving average
self.act = 0.8 * self.act + 0.2 * 0.7 self.act = 0.8 * self.act + 0.2 * action_mult * 0.7
# execute Step behavior to extract the target positions of each leg (we will override these targets) # execute Step behavior to extract the target positions of each leg (we will override these targets)
lfy, lfz, rfy, rfz = self.step_generator.get_target_positions(self.step_counter == 0, self.STEP_DUR, lfy, lfz, rfy, rfz = self.step_generator.get_target_positions(self.step_counter == 0, self.STEP_DUR,

Loading…
Cancel
Save