Skip to content

Commit 4310792

Browse files
authored
Merge pull request #145 from Ipuch/fext
fext adressing major enhancement
2 parents 96ac893 + 4ba841c commit 4310792

40 files changed

+1972
-699
lines changed

bionc/__init__.py

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,5 @@
1-
from .model_creation import (
2-
AxisTemplate,
3-
AxisFunctionTemplate,
4-
MarkerTemplate,
5-
SegmentTemplate,
6-
NaturalSegmentTemplate,
7-
InertiaParametersTemplate,
8-
BiomechanicalModelTemplate,
9-
C3dData,
10-
Data,
11-
GenericDynamicModel,
12-
)
1+
# from bionc import bionc_casadi
2+
# from bionc import bionc_numpy
133
from .bionc_numpy import (
144
Axis,
155
NaturalMarker,
@@ -19,23 +9,29 @@
199
BiomechanicalModel,
2010
JointType,
2111
ExternalForceSet,
22-
ExternalForce,
12+
ExternalForceInGlobalLocalPoint,
2313
NaturalInertialParameters,
2414
compute_transformation_matrix,
15+
InverseKinematics,
2516
)
26-
27-
from .protocols import natural_coordinates
28-
from bionc import bionc_casadi
29-
from bionc import bionc_numpy
30-
17+
from .bionc_numpy.homogenous_transform import HomogeneousTransform
18+
from .bionc_numpy.natural_accelerations import SegmentNaturalAccelerations, NaturalAccelerations
3119
from .bionc_numpy.natural_coordinates import SegmentNaturalCoordinates, NaturalCoordinates
3220
from .bionc_numpy.natural_velocities import SegmentNaturalVelocities, NaturalVelocities
33-
from .bionc_numpy.natural_accelerations import SegmentNaturalAccelerations, NaturalAccelerations
34-
from .bionc_numpy.homogenous_transform import HomogeneousTransform
35-
21+
from .model_creation import (
22+
AxisTemplate,
23+
AxisFunctionTemplate,
24+
MarkerTemplate,
25+
SegmentTemplate,
26+
NaturalSegmentTemplate,
27+
InertiaParametersTemplate,
28+
BiomechanicalModelTemplate,
29+
C3dData,
30+
Data,
31+
GenericDynamicModel,
32+
)
33+
from .protocols import natural_coordinates
3634
from .utils.enums import NaturalAxis, CartesianAxis, EulerSequence, TransformationMatrixType
37-
from .utils.transformation_matrix import TransformationMatrixUtil
3835
from .utils.ode_solver import RK4, forward_integration
39-
36+
from .utils.transformation_matrix import TransformationMatrixUtil
4037
from .vizualization import Viz
41-
from .bionc_numpy import InverseKinematics

bionc/bionc_casadi/__init__.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
1-
from .natural_coordinates import SegmentNaturalCoordinates, NaturalCoordinates
2-
from .natural_velocities import SegmentNaturalVelocities, NaturalVelocities
3-
from .natural_accelerations import SegmentNaturalAccelerations, NaturalAccelerations
4-
from .homogenous_transform import HomogeneousTransform
5-
from .natural_segment import NaturalSegment
6-
71
# The actual model to inherit from
82
from .biomechanical_model import BiomechanicalModel
3+
from .cartesian_vector import vector_projection_in_non_orthogonal_basis
4+
from .external_force import ExternalForceSet
5+
from .external_force_global import ExternalForceInGlobal
6+
from .external_force_global_local_point import ExternalForceInGlobalLocalPoint
7+
from .external_force_global_on_proximal import ExternalForceInGlobalOnProximal
8+
from .external_force_in_local import ExternalForceInLocal
9+
from .homogenous_transform import HomogeneousTransform
10+
from .inertia_parameters import InertiaParameters
11+
from .joints import Joint
12+
from .joints_with_ground import GroundJoint
13+
from .natural_accelerations import SegmentNaturalAccelerations, NaturalAccelerations
914

1015
# Some classes to define the BiomechanicalModel
1116
from .natural_axis import Axis
17+
from .natural_coordinates import SegmentNaturalCoordinates, NaturalCoordinates
1218
from .natural_marker import NaturalMarker, Marker, SegmentNaturalVector
1319
from .natural_segment import NaturalSegment
14-
from .inertia_parameters import InertiaParameters
15-
from .joints import Joint
16-
from .joints_with_ground import GroundJoint
20+
from .natural_segment import NaturalSegment
1721
from .natural_vector import NaturalVector
18-
from .external_force import ExternalForceSet, ExternalForce
19-
from .cartesian_vector import vector_projection_in_non_orthogonal_basis
22+
from .natural_velocities import SegmentNaturalVelocities, NaturalVelocities

bionc/bionc_casadi/biomechanical_model.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
from .biomechanical_model_markers import BiomechanicalModelMarkers
77
from .biomechanical_model_segments import BiomechanicalModelSegments
88
from .cartesian_vector import vector_projection_in_non_orthogonal_basis
9-
from .external_force import ExternalForceSet, ExternalForce
9+
from .external_force import ExternalForceSet
10+
from .external_force_global_on_proximal import ExternalForceInGlobalOnProximal
1011
from .natural_accelerations import NaturalAccelerations
1112
from .natural_coordinates import NaturalCoordinates
1213
from .natural_velocities import NaturalVelocities
@@ -505,7 +506,7 @@ def _inverse_dynamics_recursive_step(
505506

506507
Qi = Q.vector(segment_index)
507508
Qddoti = Qddot.vector(segment_index)
508-
external_forces_i = external_forces.to_segment_natural_external_forces(segment_index=segment_index, Q=Q)
509+
external_forces_i = external_forces.to_segment_natural_external_forces(segment_idx=segment_index, Q=Q)
509510

510511
subtree_intersegmental_generalized_forces = MX.zeros((12, 1))
511512
for child_index in self.children(segment_index):
@@ -521,15 +522,13 @@ def _inverse_dynamics_recursive_step(
521522
lambdas=lambdas,
522523
)
523524
# sum the generalized forces of each subsegment and transport them to the parent proximal point
524-
intersegmental_generalized_forces = ExternalForce.from_components(
525-
application_point_in_local=[0, 0, 0], force=forces[:, child_index], torque=torques[:, child_index]
526-
)
527-
subtree_intersegmental_generalized_forces += intersegmental_generalized_forces.transport_to(
528-
to_segment_index=segment_index,
529-
new_application_point_in_local=[0, 0, 0], # proximal point
530-
from_segment_index=child_index,
531-
Q=Q,
525+
intersegmental_generalized_forces = ExternalForceInGlobalOnProximal.from_components(
526+
force=forces[:, child_index], torque=torques[:, child_index]
532527
)
528+
subtree_intersegmental_generalized_forces += intersegmental_generalized_forces.transport_to_another_segment(
529+
Qfrom=Q.vector(child_index), Qto=Q.vector(segment_index)
530+
).natural_forces()
531+
533532
segment_i = self.segment_from_index(segment_index)
534533

535534
force_i, torque_i, lambda_i = segment_i.inverse_dynamics(

0 commit comments

Comments
 (0)