def computeMarkersReference(predictedSolution): model = createDoublePendulumModel() model.initSystem() states = predictedSolution.exportToStatesStorage() # Workaround for a bug in Storage::operator=(). columnLabels = model.getStateVariableNames() columnLabels.insert(0, "time") states.setColumnLabels(columnLabels) statesTraj = osim.StatesTrajectory.createFromStatesStorage(model, states) markerTrajectories = osim.TimeSeriesTableVec3() markerTrajectories.setColumnLabels(["/markerset/m0", "/markerset/m1"]) for state in statesTraj: model.realizePosition(state) m0 = model.getComponent("markerset/m0") m1 = model.getComponent("markerset/m1") markerTrajectories.appendRow( state.getTime(), osim.RowVectorVec3( [m0.getLocationInGround(state), m1.getLocationInGround(state)])) # Assign a weight to each marker. markerWeights = osim.SetMarkerWeights() markerWeights.cloneAndAppend(osim.MarkerWeight("/markerset/m0", 1)) markerWeights.cloneAndAppend(osim.MarkerWeight("/markerset/m1", 5)) return osim.MarkersReference(markerTrajectories, markerWeights)
def __init__(self, setup_file=None): # type: (Optional[str]) -> None # Define properties, set default values. self.accuracy = 1e-10 self.constraint_weight = float("inf") self.coordinate_file = "" self.coordinate_references = opensim.SimTKArrayCoordinateReference() self.ik_task_set = None self.marker_file = "" self.markers_reference = opensim.MarkersReference() self.model = None self.model_file = "" self.time_final = float("inf") self.time_start = float("-inf") # Initialize from OpenSim's IK setup file. if setup_file: self._load_from_setup_file(setup_file)
def __init__(self, setup_file=None, property_list=None): # Define properties, set default values. self.accuracy = 1e-10 self.constraint_weight = float("inf") self.sensor_to_opensim_rotations = opensim.Vec3() self.model = None self.model_file = "" self.coordinate_references = opensim.SimTKArrayCoordinateReference() self.orientation_file = "" self.orientation_references = opensim.OrientationsReference() self.time_final = float("inf") self.time_start = float("-inf") #--------->'marker_file' property doesn't seem to exist in the class self.marker_file = "" self.markers_reference = opensim.MarkersReference() # Initialise from OpenSim's IK setup file. if setup_file: self._load_from_setup_file(setup_file) elif property_list: self._load_from_property_list(property_list)
coordinates = model.getCoordinateSet() ikReporter = osim.TableReporter() ikReporter.setName('ik_reporter') for coord in coordinates: if log_data: ikReporter.addToReport(coord.getOutput('value'), coord.getName()) model.addComponent(ikReporter) model.finalizeConnections # Initialize simulation quatTable = osim.TimeSeriesTableQuaternion(sto_filename) orientationsData = osim.OpenSenseUtilities.convertQuaternionsToRotations( quatTable) oRefs = osim.OrientationsReference(orientationsData) init_state = model.initSystem() mRefs = osim.MarkersReference() coordinateReferences = osim.SimTKArrayCoordinateReference() if visualize: model.setUseVisualizer(True) model.initSystem() s0 = init_state ikSolver = osim.InverseKinematicsSolver(model, mRefs, oRefs, coordinateReferences, constraint_var) ikSolver.setAccuracy = accuracy s0.setTime(0.) ikSolver.assemble(s0) if visualize: # initialize visualization model.getVisualizer().show(s0) model.getVisualizer().getSimbodyVisualizer().setShowSimTime(True)