Skip to content

Commit

Permalink
Merge pull request #145 from Ipuch/fext
Browse files Browse the repository at this point in the history
fext adressing major enhancement
  • Loading branch information
Ipuch authored Dec 2, 2024
2 parents 96ac893 + 4ba841c commit 4310792
Show file tree
Hide file tree
Showing 40 changed files with 1,972 additions and 699 deletions.
44 changes: 20 additions & 24 deletions bionc/__init__.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,5 @@
from .model_creation import (
AxisTemplate,
AxisFunctionTemplate,
MarkerTemplate,
SegmentTemplate,
NaturalSegmentTemplate,
InertiaParametersTemplate,
BiomechanicalModelTemplate,
C3dData,
Data,
GenericDynamicModel,
)
# from bionc import bionc_casadi
# from bionc import bionc_numpy
from .bionc_numpy import (
Axis,
NaturalMarker,
Expand All @@ -19,23 +9,29 @@
BiomechanicalModel,
JointType,
ExternalForceSet,
ExternalForce,
ExternalForceInGlobalLocalPoint,
NaturalInertialParameters,
compute_transformation_matrix,
InverseKinematics,
)

from .protocols import natural_coordinates
from bionc import bionc_casadi
from bionc import bionc_numpy

from .bionc_numpy.homogenous_transform import HomogeneousTransform
from .bionc_numpy.natural_accelerations import SegmentNaturalAccelerations, NaturalAccelerations
from .bionc_numpy.natural_coordinates import SegmentNaturalCoordinates, NaturalCoordinates
from .bionc_numpy.natural_velocities import SegmentNaturalVelocities, NaturalVelocities
from .bionc_numpy.natural_accelerations import SegmentNaturalAccelerations, NaturalAccelerations
from .bionc_numpy.homogenous_transform import HomogeneousTransform

from .model_creation import (
AxisTemplate,
AxisFunctionTemplate,
MarkerTemplate,
SegmentTemplate,
NaturalSegmentTemplate,
InertiaParametersTemplate,
BiomechanicalModelTemplate,
C3dData,
Data,
GenericDynamicModel,
)
from .protocols import natural_coordinates
from .utils.enums import NaturalAxis, CartesianAxis, EulerSequence, TransformationMatrixType
from .utils.transformation_matrix import TransformationMatrixUtil
from .utils.ode_solver import RK4, forward_integration

from .utils.transformation_matrix import TransformationMatrixUtil
from .vizualization import Viz
from .bionc_numpy import InverseKinematics
25 changes: 14 additions & 11 deletions bionc/bionc_casadi/__init__.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
from .natural_coordinates import SegmentNaturalCoordinates, NaturalCoordinates
from .natural_velocities import SegmentNaturalVelocities, NaturalVelocities
from .natural_accelerations import SegmentNaturalAccelerations, NaturalAccelerations
from .homogenous_transform import HomogeneousTransform
from .natural_segment import NaturalSegment

# The actual model to inherit from
from .biomechanical_model import BiomechanicalModel
from .cartesian_vector import vector_projection_in_non_orthogonal_basis
from .external_force import ExternalForceSet
from .external_force_global import ExternalForceInGlobal
from .external_force_global_local_point import ExternalForceInGlobalLocalPoint
from .external_force_global_on_proximal import ExternalForceInGlobalOnProximal
from .external_force_in_local import ExternalForceInLocal
from .homogenous_transform import HomogeneousTransform
from .inertia_parameters import InertiaParameters
from .joints import Joint
from .joints_with_ground import GroundJoint
from .natural_accelerations import SegmentNaturalAccelerations, NaturalAccelerations

# Some classes to define the BiomechanicalModel
from .natural_axis import Axis
from .natural_coordinates import SegmentNaturalCoordinates, NaturalCoordinates
from .natural_marker import NaturalMarker, Marker, SegmentNaturalVector
from .natural_segment import NaturalSegment
from .inertia_parameters import InertiaParameters
from .joints import Joint
from .joints_with_ground import GroundJoint
from .natural_segment import NaturalSegment
from .natural_vector import NaturalVector
from .external_force import ExternalForceSet, ExternalForce
from .cartesian_vector import vector_projection_in_non_orthogonal_basis
from .natural_velocities import SegmentNaturalVelocities, NaturalVelocities
19 changes: 9 additions & 10 deletions bionc/bionc_casadi/biomechanical_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
from .biomechanical_model_markers import BiomechanicalModelMarkers
from .biomechanical_model_segments import BiomechanicalModelSegments
from .cartesian_vector import vector_projection_in_non_orthogonal_basis
from .external_force import ExternalForceSet, ExternalForce
from .external_force import ExternalForceSet
from .external_force_global_on_proximal import ExternalForceInGlobalOnProximal
from .natural_accelerations import NaturalAccelerations
from .natural_coordinates import NaturalCoordinates
from .natural_velocities import NaturalVelocities
Expand Down Expand Up @@ -505,7 +506,7 @@ def _inverse_dynamics_recursive_step(

Qi = Q.vector(segment_index)
Qddoti = Qddot.vector(segment_index)
external_forces_i = external_forces.to_segment_natural_external_forces(segment_index=segment_index, Q=Q)
external_forces_i = external_forces.to_segment_natural_external_forces(segment_idx=segment_index, Q=Q)

subtree_intersegmental_generalized_forces = MX.zeros((12, 1))
for child_index in self.children(segment_index):
Expand All @@ -521,15 +522,13 @@ def _inverse_dynamics_recursive_step(
lambdas=lambdas,
)
# sum the generalized forces of each subsegment and transport them to the parent proximal point
intersegmental_generalized_forces = ExternalForce.from_components(
application_point_in_local=[0, 0, 0], force=forces[:, child_index], torque=torques[:, child_index]
)
subtree_intersegmental_generalized_forces += intersegmental_generalized_forces.transport_to(
to_segment_index=segment_index,
new_application_point_in_local=[0, 0, 0], # proximal point
from_segment_index=child_index,
Q=Q,
intersegmental_generalized_forces = ExternalForceInGlobalOnProximal.from_components(
force=forces[:, child_index], torque=torques[:, child_index]
)
subtree_intersegmental_generalized_forces += intersegmental_generalized_forces.transport_to_another_segment(
Qfrom=Q.vector(child_index), Qto=Q.vector(segment_index)
).natural_forces()

segment_i = self.segment_from_index(segment_index)

force_i, torque_i, lambda_i = segment_i.inverse_dynamics(
Expand Down
Loading

0 comments on commit 4310792

Please sign in to comment.