Ejemplo n.º 1
0
    def test_deserialize_tool_with_empty_model_file(self):
        # Ensure an exception is thrown when loading an AbstractTool (e.g.,
        # ForwardTool) setup file with an empty model_file. In particular, we
        # want to check the case where force_set_files is not empty.
        with self.assertRaises(RuntimeError):
            rra = osim.ForwardTool(
                os.path.join(test_dir,
                             'gait2392_setup_forward_empty_model.xml'))

        # No exception if we pass loadModel=False
        rra = osim.ForwardTool(
            os.path.join(test_dir, 'gait2392_setup_forward_empty_model.xml'),
            True,  # updateFromXMLNode
            False,  # loadModel
        )
Ejemplo n.º 2
0
    def test_index_and_iterator(self):

        if os.path.exists(self.states_sto_fname):
            os.remove(self.states_sto_fname)

        model = osim.Model(
            os.path.join(test_dir, "gait10dof18musc_subject01.osim"))
        model.initSystem()

        forward = osim.ForwardTool()
        forward.setModel(model)
        forward.setName('test_states_trajectory_gait1018')
        forward.setFinalTime(0.1)
        forward.run()

        states = osim.StatesTrajectory.createFromStatesStorage(
            model, self.states_sto_fname)

        # Test indexing into the states container.
        model.getTotalMass(states[0])

        count = 0
        for i in range(states.getSize()):
            model.calcMassCenterVelocity(states.get(i))
            count += 1

        # Test iterator.
        count_iter = 0
        for state in states:
            model.calcMassCenterPosition(state)
            count_iter += 1
        assert count == count_iter
Ejemplo n.º 3
0
def frwd_runner(model):
    model.initSystem()
    reporter = osim.ForceReporter(model)
    model.addAnalysis(reporter)
    fwd_tool = osim.ForwardTool()
    fwd_tool.setModel(model)
    fwd_tool.setFinalTime(3)

    fwd_tool.run()
Ejemplo n.º 4
0
def optimizer_callBack(x):
    #the parameters that the optimizer changes
    ks = x[0] * 10000

    #initializes the system and sets up forward dynamics tool
    copy.initSystem()
    reporter = osim.ForceReporter(copy)
    copy.addAnalysis(reporter)
    fwd_tool = osim.ForwardTool()
    fwd_tool.setModel(copy)
    fwd_tool.setFinalTime(3)

    #gets the geometry path of the right spring
    baseR = frcSet.get(1)
    right = osim.SpringGeneralizedForce.safeDownCast(baseR)

    #sets the stiffness of the right spring
    right.setStiffness(ks)

    #gets the geometry path of the left spring
    baseL = frcSet.get(2)
    left = osim.SpringGeneralizedForce.safeDownCast(baseL)

    #sets the stiffness of the left spring
    left.setStiffness(ks)

    angles = [0, 7.5, 15]
    forces = [(0, 0), (0, 0), (0, 0)]

    for i in range(0, 3):

        coord = model.getCoordinateSet()
        d = coord.get(0)
        d.set_default_value(angles[i] * math.pi / 180)

        fwd_tool.run()

        storage = reporter.getForceStorage()
        stateVec = storage.getLastStateVector()
        dataSet = stateVec.getData()
        force1 = dataSet.get(f1_index)
        force2 = dataSet.get(f2_index)

        forces[i] = (force1, force2)

    print(forces)
    return (math.fabs(forces[0][0]) - math.fabs(forces[0][1]))**2 + (
        math.fabs(forces[1][0]) - math.fabs(forces[1][1]))**2 + (
            math.fabs(forces[2][0]) - math.fabs(forces[2][1]))**2
Ejemplo n.º 5
0
def callBack(): 
    try:
        #makes a copy of the original model
        newModel.printToXML("C:/Users/mhmdk/Desktop/Co-op files/co-op semester 1/Python Code/newVersion.osim")
        newVersionModel = osim.Model("C:/Users/mhmdk/Desktop/Co-op files/co-op semester 1/Python Code/newVersion.osim")
        newVersionBase = newVersionModel.getMuscles().get(0)
        newVersionMuscle = osim.Millard2012EquilibriumMuscle.safeDownCast(newVersionBase)
        
        fibLen = float(lo.get())
        slackLen = float(ls.get())
    
        blockLoc = newVersionMuscle.getGeometryPath().getPathPointSet().get(1).getLocation().get(2)
        # Left muscle
        if blockLoc > 0:
            groundLoc = blockLoc + fibLen + slackLen
        #right muscle
        else:
            groundLoc = blockLoc - fibLen - slackLen
        vector = osim.Vec3(0, 0.05, groundLoc)
        newVersionMuscle.updGeometryPath().getPathPointSet().get(0).setLocation(initState, vector)
        
        newVersionModel.initSystem()
        
        #creates a new states file that corresponds to the sliders
        new_states_file = open("corrected_tug_of_war_states.sto", "w")
    
        new_states_file.write("Tug_of_War_Competition\n")
        new_states_file.write("nRows = 1\n")
        new_states_file.write("nColumns = 7\n")
        new_states_file.write("inDegree = no\n")
        new_states_file.write("endheader\n")
        new_states_file.write("time\tblock_tz\tblock_tz_u\tRightMuscle.activation\tRightMuscle.fiber_length\tLeftMuscle.activation\tLeftMuscle.fiber_length\n")
        new_states_file.write("0\t0\t0\t0.01\t" + str(newVersionMuscle.get_optimal_fiber_length()) +"\t0.01\t0.1")
        
        new_states_file.close()
        
        #creates the forward tool and force reporter
        reporter = osim.ForceReporter(newVersionModel)
        newVersionModel.addAnalysis(reporter)
        fwd_tool = osim.ForwardTool()
        fwd_tool.setControlsFileName("C:\OpenSim 3.3\Models\Tug_of_War\Tug_of_War_Millard_controls_corrected.xml")
        fwd_tool.setStatesFileName("C:\Users\mhmdk\Desktop\Co-op files\co-op semester 1\Python Code\corrected_tug_of_war_states.sto")
        fwd_tool.setModel(newVersionModel)
    
        fwd_tool.run()
        updater()
    except osim.OpenSimException:
        messagebox.showwarning("Warning", "The parameter combination is physiologically impossible")
Ejemplo n.º 6
0
def optimizer_callBack(x):
    
    model.printToXML("C:/Users/mhmdk/Desktop/Co-op files/co-op semester 1/optimizers_2/friction/copy_hangingHarnessModel_fric.osim")
    copy = osim.Model("C:/Users/mhmdk/Desktop/Co-op files/co-op semester 1/optimizers_2/friction/copy_hangingHarnessModel_fric.osim")
    frcSet = copy.getForceSet()
    
    opt_changer(7, x[0]*10, frcSet)
    opt_changer(8, x[0]*10, frcSet)
    copy.printToXML("C:/Users/mhmdk/Desktop/Co-op files/co-op semester 1/optimizers_2/friction/copy_hangingHarnessModel_fric.osim")
    
    copy.initSystem()
    reporter = osim.ForceReporter(copy)
    copy.addAnalysis(reporter)
    fwd_tool = osim.ForwardTool()
    fwd_tool.setModel(copy)
    fwd_tool.setControlsFileName(file_name)
    fwd_tool.addControllerSetToModel()
    fwd_tool.setFinalTime(3)
    
    baseR = frcSet.get(1)
    rightLeg = osim.PathSpring.safeDownCast(baseR)
    rightLeg.setStiffness(x[1]*10000)
        
    baseL = frcSet.get(2)
    leftLeg = osim.PathSpring.safeDownCast(baseL)
    leftLeg.setStiffness(x[1]*10000)
    
    fwd_tool.run()
    
    storage = reporter.getForceStorage()
    stateVec = storage.getLastStateVector()
    dataSet = stateVec.getData()
    force1 = dataSet.get(4)
    force2 = dataSet.get(6)
    force3 = dataSet.get(8)
    
    os.remove("copy_hangingHarnessModel_fric.osim")
    
    print("force1: " + str(force1))
    print("force2: " + str(force2))
    print("force3: " + str(force3))
    
    print(force3**2)
    print(x[0])
    
    return  1000*x[0]**2 + (math.floor(float(force1)) - math.floor(float(force2)))**2
Ejemplo n.º 7
0
def optimizer_callBack(x):
    
    model.printToXML("C:/Users/mhmdk/Desktop/Co-op files/co-op semester 1/optimizers_2/friction/copy_hangingHarnessModel_fric_lim.osim")
    copy = osim.Model("C:/Users/mhmdk/Desktop/Co-op files/co-op semester 1/optimizers_2/friction/copy_hangingHarnessModel_fric_lim.osim")
    frcSet = copy.getForceSet()

    copy.initSystem()
    reporter = osim.ForceReporter(copy)
    copy.addAnalysis(reporter)
    fwd_tool = osim.ForwardTool()
    fwd_tool.setModel(copy)
    file_name = "cont1.xml"
    controls_writer(file_name, x[0]*10)
    opt_changer(7, 1, frcSet)
    opt_changer(8, 1, frcSet)
    fwd_tool.setControlsFileName(file_name)
    fwd_tool.addControllerSetToModel()
    fwd_tool.setFinalTime(3)
    
    baseR = frcSet.get(1)
    rightLeg = osim.PathSpring.safeDownCast(baseR)
    rightLeg.setStiffness(x[1]*10000)
        
    baseL = frcSet.get(2)
    leftLeg = osim.PathSpring.safeDownCast(baseL)
    leftLeg.setStiffness(x[1]*10000)
    
    copy.printToXML("C:/Users/mhmdk/Desktop/Co-op files/co-op semester 1/optimizers_2/friction/copy_hangingHarnessModel_fric.osim")
    
    fwd_tool.run()
    
    storage = reporter.getForceStorage()
    lbls = storage.getColumnLabels()
    stateVec = storage.getLastStateVector()
    dataSet = stateVec.getData()
    
    os.remove("copy_hangingHarnessModel_fric_lim.osim")
    
    print("\nLoop: \n")
    for i in range(1, 11):
        arr_ind = i - 1
        lbls_ind = i + 1
        arr[arr_ind] = dataSet.get(i)
        print(lbls.get(lbls_ind) + ": " + str(dataSet.get(i)))
    
    return  1000*x[0]**2 + (math.floor(float(arr[2])) - math.floor(float(arr[4])))**2 + 1000*dataSet.get(9)**2
Ejemplo n.º 8
0
    def test_reporter(self):

        model = osim.Model(
            os.path.join(test_dir, "gait10dof18musc_subject01.osim"))

        rep = osim.StatesTrajectoryReporter()
        rep.setName('reporter')
        rep.set_report_time_interval(0.01)
        model.addComponent(rep)

        model.initSystem()

        forward = osim.ForwardTool()
        forward.setModel(model)
        forward.setName('test_states_trajectory_reporter_gait1018')
        forward.setFinalTime(0.05)
        forward.run()

        states = rep.getStates()
        assert states.getSize() == 6
        for i in range(6):
            assert states[i].getTime() == i * 0.01
Ejemplo n.º 9
0
def optimizer_callBack(x):
    copy.initSystem()
    reporter = osim.ForceReporter(copy)
    copy.addAnalysis(reporter)
    fwd_tool = osim.ForwardTool()
    fwd_tool.setModel(copy)
    fwd_tool.setFinalTime(3)

    ks = 39810
    angleRad = x[0] * math.pi / 180

    shifted_strap_right = angle_shifter(length=length_calc(shR_strap),
                                        angle=angleRad,
                                        s="r",
                                        tup=shR_strap)
    shifted_strap_left = angle_shifter(length=length_calc(shL_strap),
                                       angle=angleRad,
                                       s="l",
                                       tup=shL_strap)

    len_new = length_calc(shifted_strap_right)

    right_start = shifted_strap_right[0]
    right_end = shifted_strap_right[1]
    rs = refactor(arr=right_start, arrRef=hip_pelvis)
    rE = refactor(arr=right_end, arrRef=shR_pelvis)

    left_start = shifted_strap_left[0]
    left_end = shifted_strap_left[1]
    ls = refactor(arr=left_start, arrRef=hip_pelvis)
    le = refactor(arr=left_end, arrRef=shL_pelvis)

    vecRs = osim.Vec3(rs[0], rs[1], rs[2])
    vecRe = osim.Vec3(rE[0], rE[1], rE[2])
    vecLs = osim.Vec3(ls[0], ls[1], ls[2])
    vecLe = osim.Vec3(le[0], le[1], le[2])

    baseR = frcSet.get(1)
    rightShoulder = osim.PathSpring.safeDownCast(baseR)
    geoR = rightShoulder.upd_GeometryPath()
    ppset_r = geoR.updPathPointSet()

    point_start_r = ppset_r.get(0)
    point_end_r = ppset_r.get(1)

    rightShoulder.setRestingLength(len_new)
    rightShoulder.setStiffness(ks)

    point_start_r.setLocation(copy.initSystem(), vecRs)
    point_end_r.setLocation(copy.initSystem(), vecRe)

    baseL = frcSet.get(2)
    leftShoulder = osim.PathSpring.safeDownCast(baseL)
    geoL = leftShoulder.upd_GeometryPath()
    ppset_l = geoL.updPathPointSet()

    point_start_l = ppset_l.get(0)
    point_end_l = ppset_l.get(1)

    leftShoulder.setRestingLength(len_new)
    leftShoulder.setStiffness(ks)

    point_start_l.setLocation(copy.initSystem(), vecLs)
    point_end_l.setLocation(copy.initSystem(), vecLe)

    copy.printToXML(
        "C:\Users\mhmdk\Desktop\Co-op files\co-op semester 1\optimizers_2\loadingHarnessModel\copy_loadingHarnessModel_limitedHip.osim"
    )

    fwd_tool.run()

    storage = reporter.getForceStorage()
    stateVec = storage.getLastStateVector()
    dataSet = stateVec.getData()
    force1 = dataSet.get(4)
    force2 = dataSet.get(6)
    force3 = dataSet.get(8)

    return (math.floor(float(force1)) -
            math.floor(float(force2)))**2 + force3**2
Ejemplo n.º 10
0
frcSet = copy.getForceSet()


def opt_changer(index, val):
    frcBase = frcSet.get(index)
    frc = osim.PathActuator.safeDownCast(frcBase)
    frc.setOptimalForce(val)


file_name = "control.xml"
controls_writer(file_name, 1)

copy.initSystem()
reporter = osim.ForceReporter(copy)
copy.addAnalysis(reporter)
fwd_tool = osim.ForwardTool()
fwd_tool.setModel(copy)

#change the value of the friction below
friction = 50
opt_changer(7, friction)
opt_changer(8, friction)
fwd_tool.setControlsFileName(file_name)
fwd_tool.addControllerSetToModel()
fwd_tool.setFinalTime(3)

copy.printToXML(
    "C:/Users/mhmdk/Desktop/Co-op files/co-op semester 1/optimizers_2/friction/copy_hangingHarnessModel_fric.osim"
)

fwd_tool.run()
Ejemplo n.º 11
0
def optimizer_callBack(x):

    #the parameters that the optimizer changes
    ks = x[0] * 1000
    angleRad = x[1] * math.pi / 180

    #initializes the system and sets up forward dynamics tool
    copy.initSystem()
    reporter = osim.ForceReporter(copy)
    copy.addAnalysis(reporter)
    fwd_tool = osim.ForwardTool()
    fwd_tool.setModel(copy)
    fwd_tool.setFinalTime(3)

    if flag_model == UNLOADING_FLAG:
        shifted_strap_right = angle_shifter(length=length_calc(legR_strap),
                                            angle=angleRad,
                                            s="r",
                                            tup=legR_strap)
        shifted_strap_left = angle_shifter(length=length_calc(legL_strap),
                                           angle=angleRad,
                                           s="l",
                                           tup=legL_strap)
    elif flag_model == LOADING_FLAG:
        shifted_strap_right = angle_shifter(length=length_calc(shR_strap),
                                            angle=angleRad,
                                            s="r",
                                            tup=shR_strap)
        shifted_strap_left = angle_shifter(length=length_calc(shL_strap),
                                           angle=angleRad,
                                           s="l",
                                           tup=shL_strap)

    len_new = length_calc(shifted_strap_right)

    right_start = shifted_strap_right[0]
    right_end = shifted_strap_right[1]
    left_start = shifted_strap_left[0]
    left_end = shifted_strap_left[1]

    rs = refactor(arr=right_start, arrRef=hip_pelvis)
    ls = refactor(arr=left_start, arrRef=hip_pelvis)

    if flag_model == UNLOADING_FLAG:
        rE = refactor(arr=right_end, arrRef=legR_pelvis)
        le = refactor(arr=left_end, arrRef=legL_pelvis)

    elif flag_model == LOADING_FLAG:
        rE = refactor(arr=right_end, arrRef=shR_pelvis)
        le = refactor(arr=left_end, arrRef=shL_pelvis)

    #creates 3-D vectors
    vecRs = osim.Vec3(rs[0], rs[1], rs[2])
    vecRe = osim.Vec3(rE[0], rE[1], rE[2])
    vecLs = osim.Vec3(ls[0], ls[1], ls[2])
    vecLe = osim.Vec3(le[0], le[1], le[2])

    #gets the geometry path of the right spring
    baseR = frcSet.get(1)
    right = osim.PathSpring.safeDownCast(baseR)
    geoR = right.upd_GeometryPath()
    ppset_r = geoR.updPathPointSet()

    #changes the start and end of the right spring
    point_start_r = ppset_r.get(0)
    point_end_r = ppset_r.get(1)

    #sets the stiffness and the resting length of the right spring
    right.setRestingLength(len_new)
    right.setStiffness(ks)

    #sets location of the start and end of the right spring
    point_start_r.setLocation(copy.initSystem(), vecRs)
    point_end_r.setLocation(copy.initSystem(), vecRe)

    #gets the geometry path of the left spring
    baseL = frcSet.get(2)
    left = osim.PathSpring.safeDownCast(baseL)
    geoL = left.upd_GeometryPath()
    ppset_l = geoL.updPathPointSet()

    #changes the start and end of the left spring
    point_start_l = ppset_l.get(0)
    point_end_l = ppset_l.get(1)

    #sets the stiffness and the resting length of the left spring
    left.setRestingLength(len_new)
    left.setStiffness(ks)

    #sets location of the start and end of the left spring
    point_start_l.setLocation(copy.initSystem(), vecLs)
    point_end_l.setLocation(copy.initSystem(), vecLe)

    if flag_model == UNLOADING_FLAG:
        copy.printToXML(unloading_copy_path)
    elif flag_model == LOADING_FLAG:
        copy.printToXML(loading_copy_path)

    fwd_tool.run()

    storage = reporter.getForceStorage()
    stateVec = storage.getLastStateVector()
    dataSet = stateVec.getData()
    force1 = dataSet.get(3)
    force2 = dataSet.get(5)

    return ((math.floor(float(force1)) - math.floor(float(force2)))**2)
Ejemplo n.º 12
0
def optimizer_callBack(x):

    model.printToXML(
        "C:/Users/mhmdk/Desktop/Co-op files/co-op semester 1/optimizers_2/friction/copy_loadingHarnessModel_fric_lim.osim"
    )
    copy = osim.Model(
        "C:/Users/mhmdk/Desktop/Co-op files/co-op semester 1/optimizers_2/friction/copy_loadingHarnessModel_fric_lim.osim"
    )
    frcSet = copy.getForceSet()

    ks = 39810
    angleRad = x[0] * math.pi / 180

    copy.initSystem()
    reporter = osim.ForceReporter(copy)
    copy.addAnalysis(reporter)
    fwd_tool = osim.ForwardTool()
    fwd_tool.setModel(copy)
    file_name = "cont1.xml"
    controls_writer(file_name, x[1] * 10)
    opt_changer(7, 1, frcSet)
    opt_changer(8, 1, frcSet)
    fwd_tool.setControlsFileName(file_name)
    fwd_tool.addControllerSetToModel()
    fwd_tool.setFinalTime(3)

    shifted_strap_right = angle_shifter(length=length_calc(shR_strap),
                                        angle=angleRad,
                                        s="r",
                                        tup=shR_strap)
    shifted_strap_left = angle_shifter(length=length_calc(shL_strap),
                                       angle=angleRad,
                                       s="l",
                                       tup=shL_strap)

    len_new = length_calc(shifted_strap_right)

    right_start = shifted_strap_right[0]
    right_end = shifted_strap_right[1]
    rs = refactor(arr=right_start, arrRef=hip_pelvis)
    rE = refactor(arr=right_end, arrRef=shR_pelvis)

    left_start = shifted_strap_left[0]
    left_end = shifted_strap_left[1]
    ls = refactor(arr=left_start, arrRef=hip_pelvis)
    le = refactor(arr=left_end, arrRef=shL_pelvis)

    vecRs = osim.Vec3(rs[0], rs[1], rs[2])
    vecRe = osim.Vec3(rE[0], rE[1], rE[2])
    vecLs = osim.Vec3(ls[0], ls[1], ls[2])
    vecLe = osim.Vec3(le[0], le[1], le[2])

    baseR = frcSet.get(1)
    rightLeg = osim.PathSpring.safeDownCast(baseR)
    geoR = rightLeg.upd_GeometryPath()
    ppset_r = geoR.updPathPointSet()

    point_start_r = ppset_r.get(0)
    point_end_r = ppset_r.get(1)

    rightLeg.setRestingLength(len_new)
    rightLeg.setStiffness(ks)

    point_start_r.setLocation(copy.initSystem(), vecRs)
    point_end_r.setLocation(copy.initSystem(), vecRe)

    baseL = frcSet.get(2)
    leftLeg = osim.PathSpring.safeDownCast(baseL)
    geoL = leftLeg.upd_GeometryPath()
    ppset_l = geoL.updPathPointSet()

    point_start_l = ppset_l.get(0)
    point_end_l = ppset_l.get(1)

    leftLeg.setRestingLength(len_new)
    leftLeg.setStiffness(ks)

    point_start_l.setLocation(copy.initSystem(), vecLs)
    point_end_l.setLocation(copy.initSystem(), vecLe)

    copy.printToXML(
        "C:/Users/mhmdk/Desktop/Co-op files/co-op semester 1/optimizers_2/friction/copy_loadingHarnessModel_fric_lim.osim"
    )

    fwd_tool.run()

    storage = reporter.getForceStorage()
    lbls = storage.getColumnLabels()
    stateVec = storage.getLastStateVector()
    dataSet = stateVec.getData()

    os.remove("copy_loadingHarnessModel_fric_lim.osim")

    print("\nLoop: \n")
    for i in range(1, 11):
        arr_ind = i - 1
        lbls_ind = i + 1
        arr[arr_ind] = dataSet.get(i)
        print(lbls.get(lbls_ind) + ": " + str(dataSet.get(i)))

    return x[1]**2 + (math.floor(float(arr[2])) -
                      math.floor(float(arr[4])))**2 + dataSet.get(9)**2
Ejemplo n.º 13
0
def optimizer_callBack(x):

    ks = 39810
    angleRad = x[0] * math.pi / 180

    copy.initSystem()
    reporter = osim.ForceReporter(copy)
    copy.addAnalysis(reporter)
    fwd_tool = osim.ForwardTool()
    fwd_tool.setModel(copy)
    fwd_tool.setFinalTime(3)

    shifted_strap_right = angle_shifter(length=length_calc(legR_strap),
                                        angle=angleRad,
                                        s="r",
                                        tup=legR_strap)
    shifted_strap_left = angle_shifter(length=length_calc(legL_strap),
                                       angle=angleRad,
                                       s="l",
                                       tup=legL_strap)

    len_new = length_calc(shifted_strap_right)

    right_start = shifted_strap_right[0]
    right_end = shifted_strap_right[1]
    rs = refactor(arr=right_start, arrRef=hip_pelvis)
    rE = refactor(arr=right_end, arrRef=legR_pelvis)

    left_start = shifted_strap_left[0]
    left_end = shifted_strap_left[1]
    ls = refactor(arr=left_start, arrRef=hip_pelvis)
    le = refactor(arr=left_end, arrRef=legL_pelvis)

    vecRs = osim.Vec3(rs[0], rs[1], rs[2])
    vecRe = osim.Vec3(rE[0], rE[1], rE[2])
    vecLs = osim.Vec3(ls[0], ls[1], ls[2])
    vecLe = osim.Vec3(le[0], le[1], le[2])

    baseR = frcSet.get(1)
    rightLeg = osim.PathSpring.safeDownCast(baseR)
    geoR = rightLeg.upd_GeometryPath()
    ppset_r = geoR.updPathPointSet()

    point_start_r = ppset_r.get(0)
    point_end_r = ppset_r.get(1)

    rightLeg.setRestingLength(len_new)
    rightLeg.setStiffness(ks)

    point_start_r.setLocation(copy.initSystem(), vecRs)
    point_end_r.setLocation(copy.initSystem(), vecRe)

    baseL = frcSet.get(2)
    leftLeg = osim.PathSpring.safeDownCast(baseL)
    geoL = leftLeg.upd_GeometryPath()
    ppset_l = geoL.updPathPointSet()

    point_start_l = ppset_l.get(0)
    point_end_l = ppset_l.get(1)

    leftLeg.setRestingLength(len_new)
    leftLeg.setStiffness(ks)

    point_start_l.setLocation(copy.initSystem(), vecLs)
    point_end_l.setLocation(copy.initSystem(), vecLe)

    copy.printToXML(
        "C:/Users/mhmdk/Desktop/Co-op files/co-op semester 1/optimizers_2/all_opt/copy_hangingHarnessModel_lim_hip.osim"
    )

    angles = [0, 7.5, 15]
    forces = [(0, 0), (0, 0), (0, 0)]
    force_lim = [0, 0, 0]

    for i in range(0, 3):

        coord = model.getCoordinateSet()
        d = coord.get(0)
        d.set_default_value(angles[i] * math.pi / 180)

        fwd_tool.run()

        storage = reporter.getForceStorage()
        stateVec = storage.getLastStateVector()
        dataSet = stateVec.getData()
        force1 = dataSet.get(4)
        force2 = dataSet.get(6)
        force3 = dataSet.get(8)

        forces[i] = (force1, force2)
        force_lim[i] = force3
    print(forces)
    return (forces[0][0] -
            forces[0][1])**2 + (forces[1][0] - forces[1][1])**2 + (
                forces[2][0] -
                forces[2][1])**2 + force_lim[0] + force_lim[1] + force_lim[2]