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 )
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
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()
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
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")
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
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
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
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
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()
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)
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
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]