def execute_mujoco(ball, table, robot, mujoco_id, model_name): # init mujoco config = pam_mujoco.MujocoConfig() config.graphics = True config.extended_graphics = False config.realtime = False pam_mujoco.init_mujoco(config) # adding contact detection between ball and table # note: best to add first (i.e. before mirror robot and # mirror ball), as controllers are called in sequence, # and contact info will change behavior of mirror ball controller pam_mujoco.add_robot1_contact_free_joint( "racket", ball.index_qpos, ball.index_qvel, ball.geom, robot.geom_racket ) # for detecting contact with the table pam_mujoco.add_table_contact_free_joint( "table", ball.index_qpos, ball.index_qvel, ball.geom, table.geom_plate ) # adding the mirror ball controller # (mirroring will be interrupted upon contact with the racket: # the contact controller (added right above) will write contact information # in the shared memory (segment: segment_id_contacts). The ball mirroring # controller will stop mirroring the ball after the data shared in the memory # shows a contact occured). pam_mujoco.add_mirror_until_contact_free_joint( "ball", ball.joint, ball.index_qpos, ball.index_qvel, "racket" ) # adding robot mirroring controller pam_mujoco.add_mirror_robot("robot", robot.joint) # starting the thread pam_mujoco.execute(mujoco_id, model_name) # looping until requested to stop while not pam_mujoco.is_stop_requested(mujoco_id): time.sleep(0.01)
def execute_mujoco(pam_model_config, robot, mujoco_id, model_name): # init mujoco pam_mujoco.init_mujoco() # adding pressure controller pam_mujoco.add_pressure_controller(*pam_model_config) # starting the mujoco thread pam_mujoco.execute(mujoco_id, model_name) # runnign it until requested to stop while not pam_mujoco.is_stop_requested(mujoco_id): time.sleep(0.01)
def execute_mujoco(mujoco_id, model_path, balls, table): # init mujoco config = pam_mujoco.MujocoConfig() config.graphics = True config.extended_graphics = False config.realtime = True pam_mujoco.init_mujoco(config) # for detecting contact with the table pam_mujoco.add_table_contact("table", balls[1], table) # adding the mirror ball controller, full trajectory pam_mujoco.add_o80_ball_control("ball1", balls[0]) # adding the mirror ball controller, until contact with table pam_mujoco.add_o80_ball_control_until_contact("ball2", "table", balls[1]) # starting the thread pam_mujoco.execute(mujoco_id, model_path)
def execute_mujoco(segment_id, mujoco_id, model_name, robot): # init mujoco config = pam_mujoco.MujocoConfig() config.graphics = True config.extended_graphics = False config.realtime = True pam_mujoco.init_mujoco(config) # adding mirroring robot controller pam_mujoco.add_mirror_robot(segment_id, robot.joint) # setting bursting mode pam_mujoco.add_bursting(mujoco_id, segment_id) # starting the mujoco thread (reads pamy.xml in pam_mujoco/models/tmp/) pam_mujoco.execute(mujoco_id, model_name) # runnign it until requested to stop while not pam_mujoco.is_stop_requested(mujoco_id): time.sleep(0.01)
def execute_mujoco(segment_ids, mujoco_id, model_name, balls): # init mujoco config = pam_mujoco.MujocoConfig() config.graphics = True config.extended_graphics = False config.realtime = False pam_mujoco.init_mujoco(config) # adding the mirror ball controllers for segment_id, ball in zip(segment_ids, balls): pam_mujoco.add_mirror_free_joint( segment_id, ball.joint, ball.index_qpos, ball.index_qvel ) # staring the thread pam_mujoco.execute(mujoco_id, model_name) # looping until requested to stop while not pam_mujoco.is_stop_requested(mujoco_id): time.sleep(0.01)
def _execute_mujoco(mujoco_id, segment_id, pam_model_config): model_name = segment_id # init mujoco config = pam_mujoco.MujocoConfig() config.graphics = graphics config.extended_graphics = extended_graphics config.realtime = realtime pam_mujoco.init_mujoco(config) # adding pressure controller pam_mujoco.add_pressure_controller(*pam_model_config) # starting the thread model_path = pam_mujoco.paths.get_model_path(model_name) pam_mujoco.execute(mujoco_id, model_path) # looping until requested to stop while not pam_mujoco.is_stop_requested(mujoco_id): time.sleep(0.01)
def execute_mujoco(mujoco_id, model_name, ball, hit_point, table): # init mujoco config = pam_mujoco.MujocoConfig() config.graphics = True config.extended_graphics = False config.realtime = True pam_mujoco.init_mujoco(config) # adding the mirror ball controller pam_mujoco.add_mirror_until_contact_free_joint("ball", ball.joint, ball.index_qpos, ball.index_qvel, "contact") # adding the hit point controller pam_mujoco.add_mirror_free_joint("hit_point", hit_point.joint, hit_point.index_qpos, hit_point.index_qvel) # adding detection of contact between ball and table pam_mujoco.add_table_contact_free_joint("contact", ball.index_qpos, ball.index_qvel, ball.geom, table.geom_plate) # starting the thread pam_mujoco.execute(mujoco_id, model_name) # looping until requested to stop while not pam_mujoco.is_stop_requested(mujoco_id): time.sleep(0.01)
def _execute_mujoco(mujoco_id, ball, robot, goal, hit_point, segment_ids): model_name = segment_ids["robot"] # init mujoco config = pam_mujoco.MujocoConfig() config.graphics = graphics config.extended_graphics = extended_graphics config.realtime = realtime pam_mujoco.init_mujoco(config) active_only = True not_active_only = False # for detecting contact with the robot if segment_ids["contact_robot"] is not None: pam_mujoco.add_robot1_contact_free_joint( segment_ids["contact_robot"], ball.index_qpos, ball.index_qvel, ball.geom, robot.geom_racket, ) # adding the mirror ball controller, will play # recorded ball trajectories, until contact with robot if segment_ids["contact_robot"] is not None: pam_mujoco.add_mirror_until_contact_free_joint( segment_ids["ball"], ball.joint, ball.index_qpos, ball.index_qvel, segment_ids["contact_robot"], ) else: pam_mujoco.add_mirror_free_joint( segment_ids["ball"], ball.joint, ball.index_qpos, ball.index_qvel, active_only, ) if segment_ids["goal"] is not None: pam_mujoco.add_mirror_free_joint( segment_ids["goal"], goal.joint, goal.index_qpos, goal.index_qvel, not_active_only, ) if segment_ids["hit_point"] is not None: pam_mujoco.add_mirror_free_joint( segment_ids["hit_point"], hit_point.joint, hit_point.index_qpos, hit_point.index_qvel, not_active_only, ) # adding mirroring robot controller pam_mujoco.add_mirror_robot(segment_ids["robot"], robot.joint) # set bursting mode if requested if segment_ids["burst"] is not None: pam_mujoco.add_bursting(mujoco_id, segment_ids["burst"]) # starting the thread model_path = pam_mujoco.paths.get_model_path(model_name) pam_mujoco.execute(mujoco_id, model_path) # looping until requested to stop try: while not pam_mujoco.is_stop_requested(mujoco_id): time.sleep(0.01) except Exception: pass
# adding a "hit point" hit_points = [ pam_mujoco.HitPoint(model_name, "hp", position=[0.7, 1.0, -0.45]) ] # generating the model xml file (/tmp/test/test.xml) path = pam_mujoco.generate_model( model_name, robots=robots, balls=balls, tables=tables, goals=goals, hit_points=hit_points, ) # starting mujoco using the generated model config = pam_mujoco.MujocoConfig() config.graphics = True config.extended_graphics = False config.realtime = True pam_mujoco.init_mujoco(config) pam_mujoco.execute(mujoco_id, path) signal_handler.init() print("ctrl+c for exit") while not signal_handler.has_received_sigint(): time.sleep(0.01) pam_mujoco.request_stop(mujoco_id)