Ejemplo n.º 1
0
def main():
    arg_fmt = argparse.RawDescriptionHelpFormatter
    parser = argparse.ArgumentParser(formatter_class=arg_fmt,
                                     description=main.__doc__)
    required = parser.add_argument_group('required arguments')

    required.add_argument('-c',
                          '--config',
                          dest='config',
                          required=True,
                          help='the file path of the demonstration ')

    required.add_argument(
        '-i',
        '--input_directory',
        dest='input_directory',
        required=False,
        help='the directory from which to input prior demonstration .json files'
    )

    required.add_argument(
        '-o',
        '--output_directory',
        dest='output_directory',
        required=False,
        help='the directory to save the given subjects .json files data')

    required.add_argument('-t',
                          '--task',
                          dest='task',
                          required=False,
                          help='the name of the task being demonstrated')

    required.add_argument('-s',
                          '--subject',
                          dest='subject',
                          required=False,
                          help='the ID of the subject')
    args = parser.parse_args(rospy.myargv()[1:])

    ############################
    #  ROS Node Initialization #
    ############################

    print("Initializing node... ")
    rospy.init_node("ar4lfd")
    print("Getting robot state... ")
    robot_state = intera_interface.RobotEnable(CHECK_VERSION)
    print("Enabling robot... ")
    robot_state.enable()

    ########################
    # Import Configuration #
    ########################

    config_filepath = args.config
    configs = load_lfd_configuration(config_filepath)

    #################################
    # Configure the LFD class model #
    #################################

    model_settings = configs["settings"]["modeling_settings"]
    moveit_interface = SawyerMoveitInterface()
    moveit_interface.set_velocity_scaling(.35)
    moveit_interface.set_acceleration_scaling(.25)
    moveit_interface.set_planner(str(model_settings["planner"]))
    acclfd = ACC_LFD(configs, model_settings, moveit_interface)
    acclfd.build_environment()

    #####################################
    # Raw Demonstration Data Processors #
    #####################################

    # Build processors and process demonstrations to generate derivative data e.g. relative position.
    rk_processor = RelativeKinematicsProcessor(
        acclfd.environment.get_item_ids(), acclfd.environment.get_robot_id())
    ic_processor = InContactProcessor(acclfd.environment.get_item_ids(),
                                      acclfd.environment.get_robot_id(), .06,
                                      .5)
    soi_processor = SphereOfInfluenceProcessor(
        acclfd.environment.get_item_ids(), acclfd.environment.get_robot_id())
    rp_processor = RelativePositionProcessor(acclfd.environment.get_item_ids(),
                                             acclfd.environment.get_robot_id())
    wp_processor = WithinPerimeterProcessor(acclfd.environment.get_item_ids(),
                                            acclfd.environment.get_robot_id())
    processing_pipeline = DataProcessingPipeline([
        rk_processor, ic_processor, soi_processor, rp_processor, wp_processor
    ])

    ###############################################
    # Configure the Sawyer Demonstration Recorder #
    ###############################################

    rec_settings = configs["settings"]["recording_settings"]
    recorder = SawyerDemonstrationRecorder(rec_settings,
                                           acclfd.environment,
                                           processing_pipeline,
                                           publish_constraint_validity=True)
    rospy.on_shutdown(recorder.stop)

    ##########################################################
    # Configure the Sawyer Demonstration Aligner and Labeler #
    ##########################################################

    label_settings = configs["settings"]["labeling_settings"]
    # Demonstration vectorizor that converts observations into state vector in desired space for DTW alignment.
    demo_vectorizor = partial(vectorize_demonstration,
                              vectorizors=[get_observation_joint_vector])
    alignment = DemonstrationAlignment(demo_vectorizor)
    demo_labeler = SawyerDemonstrationLabeler(label_settings, alignment)

    #########################
    # Import Initial Demos  #
    #########################

    if args.input_directory is not None:

        prior_poor_demonstrations = load_json_files(args.input_directory +
                                                    "/*.json")
        # Convert imported data into Demonstrations and Observations
        demonstrations = []
        for datum in prior_poor_demonstrations["data"]:
            observations = []
            for entry in datum:
                observations.append(Observation(entry))
            demonstrations.append(Demonstration(observations))
        if len(demonstrations) == 0:
            rospy.logwarn(
                "No prior demonstration data to model!! You sure you're using the right experiment script?"
            )
            return 0
        labeled_initial_demos = demo_labeler.label(demonstrations)
        acclfd.build_keyframe_graph(labeled_initial_demos,
                                    model_settings.get("bandwidth", .025))
        acclfd.generate_autoconstraints(labeled_initial_demos)
        acclfd.sample_keyframes(model_settings.get("number_of_samples", 50),
                                automate_threshold=True)
    else:
        labeled_initial_demos = []
        acclfd.build_keyframe_graph(labeled_initial_demos,
                                    model_settings.get("bandwidth", .025))

    #######################################
    # Set defaults for command line args  #
    #######################################

    if args.task is None:
        output_directory = ""
    else:
        output_directory = args.output_directory

    if args.task is None:
        task_name = "****"
    else:
        task_name = args.task

    if args.subject is None:
        subject = "####"
    else:
        subject = args.subject

    #########################
    # Run Study Controller  #
    #########################

    study = ACCLfDController(acclfd, recorder, demo_labeler,
                             labeled_initial_demos, output_directory,
                             task_name, subject)
    study.run()
def main():
    arg_fmt = argparse.RawDescriptionHelpFormatter
    parser = argparse.ArgumentParser(formatter_class=arg_fmt,
                                     description=main.__doc__)
    required = parser.add_argument_group('required arguments')

    # required.add_argument(
    #     '-c', '--config', dest='config', required=True,
    #     help='the file path of the demonstration '
    # )

    required.add_argument(
        '-i',
        '--input',
        dest='input_directory',
        required=True,
        help='the input directory to pull in raw demonstration .json files')

    # required.add_argument(
    #     '-o', '--output', dest='output_directory', required=True,
    #     help='the output directory for saving relative distance labeled demonstration .json files'
    # )
    args = parser.parse_args(rospy.myargv()[1:])

    print("Initializing node... ")
    # rospy.init_node("intermediate_trajectories")
    # print("Getting robot state... ")
    # rs = intera_interface.RobotEnable(CHECK_VERSION)
    # print("Enabling robot... ")
    # rs.enable()

    # config_filepath = args.config
    # configs = load_lfd_configuration(config_filepath)

    # items = ItemFactory(configs).generate_items()
    # constraints = ConstraintFactory(configs["constraints"]).generate_constraints()
    # # We only have just the one robot...for now.......
    # environment = Environment(items=items['items'], robot=items['robots'][0], constraints=constraints)

    # Import the data
    rospy.loginfo("Importing demonstration .json files...")
    raw_demonstrations = load_json_files(args.input_directory + "/*.json")

    # Convert imported data into Demonstrations and Observations
    demonstrations = []
    for datum in raw_demonstrations["data"]:
        observations = []
        for entry in datum:
            observations.append(Observation(entry))
        demonstrations.append(
            Demonstration(None, labeled_observations=observations))
    args = parser.parse_args(rospy.myargv()[1:])

    inter_trajectories = IntermediateTrajectories().get_trajectories(
        demonstrations)
    it_data = {
        key: [[o.data for o in segment] for segment in group]
        for key, group in inter_trajectories.iteritems()
    }
    with file('./intermediate_trajectories.json', "w") as f:
        json.dump(it_data, f)