Driving a model two ways, cont.

Hi Christian,

Thanks for getting back to me. Let me give you a little background
into what I’ve been working on. I have created two models that do
exactly the same thing – a simple bicep curl – however one is driven
by a constant elbow angular velocity, and the other is driven by 3D
motion tracking. I completed the constant elbow angular velocity
model first, then I stepped through the model copying down the r value
of the PalmJoint, which I then used to drive the second model. So
both models supposedly have the exact same motion. However, the
outputs I get are not the same, as would be expected. Based on John’s
recommendation, I changed my 3D motion tracking model and now instead
of creating a joint between my global reference and my elbow to
connect my body in the environment (or shoulder – in earlier models),
I have fixed the body model to a “seat,” and I drive the upper limb
the exact same way as in the constant elbow angular velocity model.
The only change is that I drive the motion of the hand in the 3D
motion tracking model instead of the elbow angle in the other model.
As far as I can tell, the only differences between the two models are
the following:

In the DrivenByVicon model:
Main file has 2 more include files in it:
MotionTrackerInclude.any
MarkerPosOnBody.any

GlobalRefFrame scale is smaller than DrivenByConstantElbowVelocity
model (0.11 vs. 0.21) (negligible)

The JointsAndDrivers file also has the following driving the motion
of the hand:
AnyKinEqSimpleDriver RHANDDriver = {
AnyKinLinear RHANDMarkerLin = {
Ref=0;
AnyRefNode &ref2 =
Main.MyArmViconDrive.HumanModel.Right.ShoulderArm.Seg.Hand.PalmJoint;
AnyRefFrame &ref1 = Main.MyArmViconDrive.Markers.p1.Seg;
AnyDrawPLine drw={Thickness=0.0015;RGB={0,0,1};};
};
MeasureOrganizer = {0}; //ANYBODYSUP removed the x direction it is
not a good
idea to drive in the
//longitudinal direction of the bone
DriverPos = {0};
DriverVel = {0};
Reaction.Type ={Off};
};

While the DrivenByConstantElbowVelocity has the following:
AnyKinEqSimpleDriver ElbowDriver = {
AnyRevoluteJoint &Elbow =
Main.MyArmCstVel.HumanModel.Right.ShoulderArm.Jnt.FE; //…Jnts.Elbow;
DriverPos =
pi/180*{Main.MyArmCstVel.Mannequin.Posture.Right.ElbowFlexion};//{90pi/180};
DriverVel = -{90
pi/180};
Reaction.Type = {Off};
}; // Elbow driver

Those are the only visible differences between my two models, however
the DrivenByConstantElbowVelocity model runs the
InverseDynamicAnalysis to completion regardless of the
RecruitmentSolver (MinMaxSimplex, MinMaxNRSimplex, MinMaxOOSolQP, or
MinMaxOOSolSimplex), while the DrivenByVicon model only runs to
completion using the MinMaxOOSolQP RecruitmentSolver. In all other
instances, the following error message is produced:

Error – muscle recruitment analysis failed, simplex solver reports
that solution does not satisfy all constraints.

I am uploading two movies that shows the difference in the movement
between the two models (watch the muscles bulging), as well as both
models.

The movies are titled: “DrivenByElbowAngleVelocityTake2.wmp”
“DrivenByViconTake2.wmp”

And the models are titled: “Mannequin – cst arm angles – 1-08-07.zip”
and “Mannequin – vicon drive – adding muscle – 1-08-07.zip”

Any help would be very much appreciated. Thank you so much for all
your help.
Sarah

Hi Sarah

You are very welcome. I have been looking at your models. I see the
big sudden muscle activities which indicates big accelerations in your
kinematic data. If you run the kinematic analysis you will se a few
big accelerations happening around step 5 and 6. Earlier you wrote
that it was around that step that your recruitment analysis failed.
You could try to filter the data to get a more smooth movement.
You could also increase the interpolation order in the
MarkerMover_wrt_RELB.any to make it able to better track the movement.
I tried increasing it to 20 which made the MinMaxSimplex solver to
stop at step 32.
Hope it gave you a couple of ideas, else I will be glad to help again:D

Best regards
Christian, AnyBody Support

— In anyscript@yahoogroups.com, “Sarah R. Sullivan” <sarsulli@…>
wrote:
>
> Hi Christian,
>
> Thanks for getting back to me. Let me give you a little background
> into what I’ve been working on. I have created two models that do
> exactly the same thing � a simple bicep curl � however one is driven
> by a constant elbow angular velocity, and the other is driven by 3D
> motion tracking. I completed the constant elbow angular velocity
> model first, then I stepped through the model copying down the r value
> of the PalmJoint, which I then used to drive the second model. So
> both models supposedly have the exact same motion. However, the
> outputs I get are not the same, as would be expected. Based on John’s
> recommendation, I changed my 3D motion tracking model and now instead
> of creating a joint between my global reference and my elbow to
> connect my body in the environment (or shoulder � in earlier models),
> I have fixed the body model to a “seat,” and I drive the upper limb
> the exact same way as in the constant elbow angular velocity model.
> The only change is that I drive the motion of the hand in the 3D
> motion tracking model instead of the elbow angle in the other model.
> As far as I can tell, the only differences between the two models are
> the following:
>
> In the DrivenByVicon model:
> Main file has 2 more include files in it:
> MotionTrackerInclude.any
> MarkerPosOnBody.any
>
> GlobalRefFrame scale is smaller than DrivenByConstantElbowVelocity
> model (0.11 vs. 0.21) (negligible)
>
> The JointsAndDrivers file also has the following driving the motion
> of the hand:
> AnyKinEqSimpleDriver RHANDDriver = {
> AnyKinLinear RHANDMarkerLin = {
> Ref=0;
> AnyRefNode &ref2 =
> Main.MyArmViconDrive.HumanModel.Right.ShoulderArm.Seg.Hand.PalmJoint;
> AnyRefFrame &ref1 = Main.MyArmViconDrive.Markers.p1.Seg;
> AnyDrawPLine drw={Thickness=0.0015;RGB={0,0,1};};
> };
> MeasureOrganizer = {0}; //ANYBODYSUP removed the x direction it is
> not a good
> idea to drive in the
> //longitudinal direction of the bone
> DriverPos = {0};
> DriverVel = {0};
> Reaction.Type ={Off};
> };
>
> While the DrivenByConstantElbowVelocity has the following:
> AnyKinEqSimpleDriver ElbowDriver = {
> AnyRevoluteJoint &Elbow =
> Main.MyArmCstVel.HumanModel.Right.ShoulderArm.Jnt.FE; //…Jnts.Elbow;
> DriverPos =
>
pi/180*{Main.MyArmCstVel.Mannequin.Posture.Right.ElbowFlexion};//{90pi/180};
> DriverVel = -{90
pi/180};
> Reaction.Type = {Off};
> }; // Elbow driver
>
> Those are the only visible differences between my two models, however
> the DrivenByConstantElbowVelocity model runs the
> InverseDynamicAnalysis to completion regardless of the
> RecruitmentSolver (MinMaxSimplex, MinMaxNRSimplex, MinMaxOOSolQP, or
> MinMaxOOSolSimplex), while the DrivenByVicon model only runs to
> completion using the MinMaxOOSolQP RecruitmentSolver. In all other
> instances, the following error message is produced:
>
> Error � muscle recruitment analysis failed, simplex solver reports
> that solution does not satisfy all constraints.
>
> I am uploading two movies that shows the difference in the movement
> between the two models (watch the muscles bulging), as well as both
> models.
>
> The movies are titled: “DrivenByElbowAngleVelocityTake2.wmp”
> “DrivenByViconTake2.wmp”
>
> And the models are titled: “Mannequin � cst arm angles � 1-08-07.zip”
> and “Mannequin � vicon drive � adding muscle � 1-08-07.zip”
>
> Any help would be very much appreciated. Thank you so much for all
> your help.
> Sarah
>