class HumanoidFlagrunBulletEnv(HumanoidBulletEnv): random_yaw = True def __init__(self, render=False): self.robot = HumanoidFlagrun() HumanoidBulletEnv.__init__(self, self.robot, render) def create_single_player_scene(self, bullet_client): s = HumanoidBulletEnv.create_single_player_scene(self, bullet_client) s.zero_at_running_strip_start_line = False return s def step(self, a): if not self.scene.multiplayer: # if multiplayer, action first applied to all robots, then global step() called, then _step() for all robots with the same actions self.robot.apply_action(a) self.scene.global_step() state = self.robot.calc_state() # also calculates self.joints_at_limit self._alive = float( self.robot.alive_bonus( state[0] + self.robot.initial_z, self.robot.body_rpy[1])) # state[0] is body height above ground, body_rpy[1] is pitch done = self._isDone() if not np.isfinite(state).all(): print("~INF~", state) done = True potential_old = self.potential self.potential = self.robot.calc_potential() progress = float(self.potential - potential_old) feet_collision_cost = 0.0 for i, f in enumerate( self.robot.feet ): # TODO: Maybe calculating feet contacts could be done within the robot code contact_ids = set((x[2], x[4]) for x in f.contact_list()) #print("CONTACT OF '%d' WITH %d" % (contact_ids, ",".join(contact_names)) ) if (self.ground_ids & contact_ids): #see Issue 63: https://github.com/openai/roboschool/issues/63 #feet_collision_cost += self.foot_collision_cost self.robot.feet_contact[i] = 1.0 else: self.robot.feet_contact[i] = 0.0 joints_at_limit_cost = float(-0.1 * self.robot.joints_at_limit) jexcess = 0 for i in range(17): if (abs(state[i*2+8]) > 1.0): jexcess += (abs(state[i*2+8]) - 1.0) joints_excess_cost = jexcess * -10.0 angle_offset_cost = (self.robot.angle_to_target * self.robot.angle_to_target) * -0.1 self.HUD(state, a, done) return state, progress + 0.75 + joints_excess_cost + joints_at_limit_cost + angle_offset_cost , bool(done), {"progress" : progress}
def __init__(self, render=False): self.robot = HumanoidFlagrun() HumanoidBulletEnv.__init__(self, self.robot, render)
def __init__(self): self.robot = HumanoidFlagrun() HumanoidBulletEnv.__init__(self, self.robot)