$$ A=W*H $$
$W$) Synergy excitations are the time-varying signals used to control the actuators. They form a n x k
matrix, where:
n
is the number of time points in the trajectory (how many time steps or points are considered in the control signal)k
is the number of synergies (distinct control signals or excitations)$H$) Synergy vectors determine how each synergy excitation contributes to each actuator. They form a k x m
matrix, where:
k
is the number of synergiesm
is the number of actuators$A$) Control signals applied to the actuators (or muscles) are computed as the product of the synergy excitations and vectors.
A
will be an n x m
matrix, representing each actuator's control signals over time.SynergyController
This was implemented in OpenSim 4.5.1.
Purpose and functionality**:** SynergyController
is designed to control actuators in a simulation model. It achieves this using "synergy control," which involves blending multiple control signals or excitations to produce the final control outputs.
controller = osim.SynergyController()
controller.setName("synergy_controller")
SynergyController
extends or inherits from InputController
, which means it uses input control signals to determine the synergy excitations.
In OpenSim Moco, the InputController
class automatically integrates control signals into the problem formulation. The optimisation problem will include variables for each input control signal based on the controller’s path and the specific input labels.
This tutorial will solve a muscle-driven inverse problem by grouping muscles into synergies and controlling them with a SynergyController
using non-negative matrix factorisation (NNMF).
We need to have a solution with all muscles activations generating the movement. The solution must contain time-varying control signals (e.g., muscle activations) for the model's muscles. We will use this information to create synergies. Then, we export the control signals (muscle activations) from the loaded solution into a format called TimeSeriesTable
.