Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fext adressing major enhancement #145

Merged
merged 23 commits into from
Dec 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading