Increasing the degrees of freedom in a model by changing boundaries

I have been working on expanding a wheelchair model and I have
successfully added a left side to the model (I was currently only
looking at the right side). However, I am having a tough time trying
to further expand on the upper body movement. Currently, the back is
assumed to be rigid against the back of the wheelchair, however I am
looking to add a more realistic trunk movement (as seen via motion
capture data).

1.) I want to be able to have the shoulders protract/retract,
elevate/depress, and rotate
a. To do this I took out the right and left SC Drivers
b. I now am driving a marker placed on the lateral border of the AC
(R- and LSHO) joint which I am moving with motion capture data
i. Is this correct marker placement for the model, meaning will this
give the desired effect of protraction/retraction, etc.? It is the
marker placement that we use in upper-limb clinical analysis but it
may not be appropriate for the modeling.
ii. I am moving this marker in the x-, y-, and z- directions – is this
an ineffective/redundant way to move the shoulders?

This appears to be working fine as I can get the model to compile with
these changes (currently commented out in the JointsAndDrivers file),
although I exceed the kinematic tolerance when I try to
SetInitialConditions, run the KinematicAnalysis, or run the
InverseDynamicsAnalysis. I assumed that was because I still had the
back rigid to the wheelchair. So I went about trying to model upper
body movement which I thought would help the problem.

2.) To attack the problem of trunk flexion/extension
a. I need to take out the reaction force between the seat back and
spine to allow for flexion and extension
b. At this point I can drive the flexion/extension with the sternum marker

Again, I can get the model to compile, however there are still
kinematic tolerance issues. Any suggestions as to how to fix this? I
think the pelvis positioning relative to the ground and the associated
seat height is fine, however I’m not sure how to deal with the following:

AnyKinEqSimpleDriver SeatBack = {
AnyKinLinear &Right = .ThoraxRight;
AnyKinLinear &Left = .ThoraxLeft;
AnyKinLinear &Center = .ThoraxCenter;
MeasureOrganizer = {0,3,8};
DriverPos = {0,0,0};
DriverVel = {0,0,0};
Reaction.Type = {0,0,1};
//Reaction.Type = {1,1,1};
};

// Rotation of the Thorax w.r.t. ground
AnyKinRotational ThoraxRot = {
AnySeg &Thorax= .Thorax;
AnyFixedRefFrame &Ground = …EnvironmentModel.GlobalRef;
Type = RotAxesAngles;
};

AnyFolder &RefHM = Main.MyArm.HumanModel;

AnyFolder &ref=Main.MyArm.HumanModel.Trunk;

 AnyKinEqSimpleDriver PostureDriver ={
 AnyKinMeasureOrg &Ref2 =

…HumanModel.Interface.Trunk.PelvisThoraxLateralBending;
AnyKinMeasureOrg &Ref3 =
…HumanModel.Interface.Trunk.PelvisThoraxRotation;
AnyKinMeasureOrg &Ref1 =
…HumanModel.Interface.Trunk.PelvisThoraxExtension;

 DriverPos = pi/180*{
   .JntPos.PelvisThoraxLateralBending,
   .JntPos.PelvisThoraxRotation,
   .JntPos.PelvisThoraxExtension
 };

 DriverVel = pi/180*{
   0.0,
   0.0,
   0.0
 };

 Reaction.Type = {//1,1,1
   0,
   0,
   0
 };

};

/*AnyKinEqSimpleDriver STNDriver = {
AnyKinLinear STN = {
Ref = 0;
AnyRefNode &Sternum =
Main.MyArm.HumanModel.Right.ShoulderArm.Seg.Clavicula.STN_Mkr;
AnyRefFrame &ref1 = Main.MyArm.Markers.p1.Seg;
AnyDrawPLine drw={Thickness=0.0015;RGB={0,0,1};};
Sternum ={AnyDrawRefFrame drw={RGB={0,1,0};};};
};

 MeasureOrganizer = {0,1,2};
 DriverPos = {0.0,0.0,0.0};
 DriverVel = {0.0,0.0,0.0};
 Reaction.Type={0,0,0};

};*/

How can I drive the STN to accurately reflect upper body
flexion/extension?

Hi Sarah

It sounds reasonable to use the a marker at the AC joint but i think
you should not drive this marker medial laterally but only in
for/back up/down directions. Driving medial laterally is not a good
idea with this marker. I also think that you should leave the axial
rotation in the SC joint fixed, the AC marker is not a good measure
for this rotation.

I think the reason that you get the kinematic error is that driving
both Ac markers with all dof, will cause the model to be “stretched”
medial laterally. So i tink excluding this direction and locking the
rotation of the SC joint will help.

The best procedure for doing such changes is to start out with a
model that is running and then add the marker drivers one dof at the
time and at the same time removing the according joint drivers which
the marker driver will replace, and in this way always keeping a
running model.

It sounds as good idea to use the sternum maker for driven the
thorax forward backward, this driver should replace the distance
driver to the backrest.

About your question 2b the reaction force should have nothing todo
with these kinematic problems.

Concerning the SeatBackDriver it looks like it could be driving a
point positioned on the rigth side of thorax in the x direction and
similarly a point the left side in the same direction, the last one
i think is the the center of the throax in the z direction.

The posture driver is driving all three rotations between pelvis and
thorax to zero, meanning the spine is rigid.

If you have availble markerdata for the pelvis this might be
usefull for driving the motion of the pelvis and in this way making
it possible to free up the rotations between pelvis and thorax.

About the sternum makrer, this can replace imidiately the z dirction
driver in the SeatBackDriver. It can also be used for driving in the
x direction (i assume this is for/back) and thus replacing one of
the first dof in the SeatBackDriver. It would be good if you had an
additional driver on the thorax that could replace the one remaining
driver in the SeatforBack Driver? You need some way of driving axial
rotaion of the thorax.

Recently the tutorials has been extendend with a tutorial about
driving model using markers, it might be usefull
http://www.anybodytech.com/500.0.html

Please write again if you have further questions

Best regards
Søren, AnyBody Support

— In anyscript@yahoogroups.com, “Sarah R. Sullivan” <sarsulli@…>
wrote:
>
> I have been working on expanding a wheelchair model and I have
> successfully added a left side to the model (I was currently only
> looking at the right side). However, I am having a tough time
trying
> to further expand on the upper body movement. Currently, the back
is
> assumed to be rigid against the back of the wheelchair, however I
am
> looking to add a more realistic trunk movement (as seen via motion
> capture data).
>
> 1.) I want to be able to have the shoulders protract/retract,
> elevate/depress, and rotate
> a. To do this I took out the right and left SC Drivers
> b. I now am driving a marker placed on the lateral border of
the AC
> (R- and LSHO) joint which I am moving with motion capture data
> i. Is this correct marker placement for the model, meaning will
this
> give the desired effect of protraction/retraction, etc.? It is the
> marker placement that we use in upper-limb clinical analysis but it
> may not be appropriate for the modeling.
> ii. I am moving this marker in the x-, y-, and z- directions –
is this
> an ineffective/redundant way to move the shoulders?
>
> This appears to be working fine as I can get the model to compile
with
> these changes (currently commented out in the JointsAndDrivers
file),
> although I exceed the kinematic tolerance when I try to
> SetInitialConditions, run the KinematicAnalysis, or run the
> InverseDynamicsAnalysis. I assumed that was because I still had
the
> back rigid to the wheelchair. So I went about trying to model
upper
> body movement which I thought would help the problem.
>
> 2.) To attack the problem of trunk flexion/extension
> a. I need to take out the reaction force between the seat back
and
> spine to allow for flexion and extension
> b. At this point I can drive the flexion/extension with the
sternum marker
>
> Again, I can get the model to compile, however there are still
> kinematic tolerance issues. Any suggestions as to how to fix
this? I
> think the pelvis positioning relative to the ground and the
associated
> seat height is fine, however I’m not sure how to deal with the
following:
>
> AnyKinEqSimpleDriver SeatBack = {
> AnyKinLinear &Right = .ThoraxRight;
> AnyKinLinear &Left = .ThoraxLeft;
> AnyKinLinear &Center = .ThoraxCenter;
> MeasureOrganizer = {0,3,8};
> DriverPos = {0,0,0};
> DriverVel = {0,0,0};
> Reaction.Type = {0,0,1};
> //Reaction.Type = {1,1,1};
> };
>
> // Rotation of the Thorax w.r.t. ground
> AnyKinRotational ThoraxRot = {
> AnySeg &Thorax= .Thorax;
> AnyFixedRefFrame &Ground = …EnvironmentModel.GlobalRef;
> Type = RotAxesAngles;
> };
>
> AnyFolder &RefHM = Main.MyArm.HumanModel;
>
> AnyFolder &ref=Main.MyArm.HumanModel.Trunk;
>
> AnyKinEqSimpleDriver PostureDriver ={
> AnyKinMeasureOrg &Ref2 =
> …HumanModel.Interface.Trunk.PelvisThoraxLateralBending;
> AnyKinMeasureOrg &Ref3 =
> …HumanModel.Interface.Trunk.PelvisThoraxRotation;
> AnyKinMeasureOrg &Ref1 =
> …HumanModel.Interface.Trunk.PelvisThoraxExtension;
>
> DriverPos = pi/180*{
> .JntPos.PelvisThoraxLateralBending,
> .JntPos.PelvisThoraxRotation,
> .JntPos.PelvisThoraxExtension
> };
>
> DriverVel = pi/180*{
> 0.0,
> 0.0,
> 0.0
> };
>
> Reaction.Type = {//1,1,1
> 0,
> 0,
> 0
> };
> };
>
> /AnyKinEqSimpleDriver STNDriver = {
> AnyKinLinear STN = {
> Ref = 0;
> AnyRefNode &Sternum =
> Main.MyArm.HumanModel.Right.ShoulderArm.Seg.Clavicula.STN_Mkr;
> AnyRefFrame &ref1 = Main.MyArm.Markers.p1.Seg;
> AnyDrawPLine drw={Thickness=0.0015;RGB={0,0,1};};
> Sternum ={AnyDrawRefFrame drw={RGB={0,1,0};};};
> };
>
> MeasureOrganizer = {0,1,2};
> DriverPos = {0.0,0.0,0.0};
> DriverVel = {0.0,0.0,0.0};
> Reaction.Type={0,0,0};
> };
/
>
> How can I drive the STN to accurately reflect upper body
> flexion/extension?
>

Hi Soren,

Thank you for your help. I have been trying to slowly add drivers to the
pelvis/thorax/AC joint, but to no avail. Currently, the pelvis of the model is
driven by the seat height, and that is where I have chosen to start. I have
taken out the following:

AnyKinLinear PelvisPos = {
AnyFixedRefFrame &Ground = …EnvironmentModel.GlobalRef;
AnyRefNode &Tuber =
Main.MyArm.HumanModel.Trunk.SegmentsLumbar.PelvisSeg.TuberIschiadicumCenter;
};

AnyKinRotational PelvisRot = {
AnyFixedRefFrame &Ground = …EnvironmentModel.GlobalRef;
AnySeg &Pelvis = Main.MyArm.HumanModel.Trunk.SegmentsLumbar.PelvisSeg;
Type = RotAxesAngles;
};

AnyReacForce PelvisReac = {
AnyKinRotational &ref = .PelvisRot;
};

AnyKinEqSimpleDriver SeatHeight = {
AnyKinLinear &PelvisRot = .PelvisPos;
DriverPos = {
0.0,0.4448,0
};
DriverVel = {0,0,0};
Reaction.Type = {1,1,1};
};

And replaced those 3 degrees of freedom with (I indeed do have some trochanter
markers with which to drive the motion of the pelvis):

AnyKinEqSimpleDriver RTROCDriver={
AnyKinLinear RTROC = {
Ref=0;
AnyRefNode &Hip =
Main.MyArm.HumanModel.Trunk.SegmentsLumbar.PelvisSeg.HipJointRight.RTRO;
AnyRefFrame &ref1 = Main.MyArm.Markers.p6.Seg;
AnyDrawPLine drw={Thickness=0.0015;RGB={0,0,1};};
Hip ={AnyDrawRefFrame drw_1={RGB={0,1,0};};};
};

 MeasureOrganizer = {0,1};
 DriverPos = {0.0,0};//,0.0};
 DriverVel = {0.0,0};//,0.0};
 Reaction.Type={0,0};//,0};

};

AnyKinEqSimpleDriver LTROCDriver={
AnyKinLinear LTROC = {
Ref=0;
AnyRefNode &Hip =
Main.MyArm.HumanModel.Trunk.SegmentsLumbar.PelvisSeg.HipJointLeft.LTRO;
AnyRefFrame &ref1 = Main.MyArm.Markers.p8.Seg;
AnyDrawPLine drw={Thickness=0.0015;RGB={0,0,1};};
Hip ={AnyDrawRefFrame drw_1={RGB={0,1,0};};};
};

 MeasureOrganizer = {0};
 DriverPos = {0.0};
 DriverVel = {0.0};
 Reaction.Type={0};

};

I have tried to change around the measure organizers, but I keep getting
enormous constraint error tolerances. I have even tried to drive the pelvis in
the z-direction (as defined by the midpoint between the axles, and shown below),
and the R&L Troc markers by the x-direction only (mimicking the thorax driver),
but I am getting tolerances on the order of the thousands in some cases. I have
looked into the tutorial, however I am not finding it to be of any additional
help at this point.

AnyKinEqSimpleDriver PelvisAxleZDriver = {
AnyKinLinear ZDir = {
Ref = 0;
AnyRefFrame &Ground = Main.MyArm.EnvironmentModel.GlobalRef;
AnySeg &Pelvis = Main.MyArm.HumanModel.Trunk.SegmentsLumbar.PelvisSeg;
};

MeasureOrganizer = {2};
DriverPos = {0};
DriverVel = {0};
Reaction.Type = {0};
};

Should I leave the pelvis alone and start trying to drive another area of the
body? This is becoming more complicated than it would initially seem to be.
Any suggestions would greatly help. Thank you!

Cheers,
Sarah

-----Original Message-----

> Date: Mon Jun 04 03:50:54 EDT 2007
> From: “AnyBody Support” <support@anybodytech.com>
> Subject: [anyscript] Re: Increasing the degrees of freedom in a model by
changing boundaries
> To: anyscript@yahoogroups.com
>
> Hi Sarah
>
> It sounds reasonable to use the a marker at the AC joint but i think
> you should not drive this marker medial laterally but only in
> for/back up/down directions. Driving medial laterally is not a good
> idea with this marker. I also think that you should leave the axial
> rotation in the SC joint fixed, the AC marker is not a good measure
> for this rotation.
>
>
> I think the reason that you get the kinematic error is that driving
> both Ac markers with all dof, will cause the model to be “stretched”
> medial laterally. So i tink excluding this direction and locking the
> rotation of the SC joint will help.
>
> The best procedure for doing such changes is to start out with a
> model that is running and then add the marker drivers one dof at the
> time and at the same time removing the according joint drivers which
> the marker driver will replace, and in this way always keeping a
> running model.
>
> It sounds as good idea to use the sternum maker for driven the
> thorax forward backward, this driver should replace the distance
> driver to the backrest.
>
> About your question 2b the reaction force should have nothing todo
> with these kinematic problems.
>
> Concerning the SeatBackDriver it looks like it could be driving a
> point positioned on the rigth side of thorax in the x direction and
> similarly a point the left side in the same direction, the last one
> i think is the the center of the throax in the z direction.
>
> The posture driver is driving all three rotations between pelvis and
> thorax to zero, meanning the spine is rigid.
>
>
> If you have availble markerdata for the pelvis this might be
> usefull for driving the motion of the pelvis and in this way making
> it possible to free up the rotations between pelvis and thorax.
>
>
> About the sternum makrer, this can replace imidiately the z dirction
> driver in the SeatBackDriver. It can also be used for driving in the
> x direction (i assume this is for/back) and thus replacing one of
> the first dof in the SeatBackDriver. It would be good if you had an
> additional driver on the thorax that could replace the one remaining
> driver in the SeatforBack Driver? You need some way of driving axial
> rotaion of the thorax.
>
>
> Recently the tutorials has been extendend with a tutorial about
> driving model using markers, it might be usefull
> http://www.anybodytech.com/500.0.html
>
> Please write again if you have further questions
>
> Best regards
> Søren, AnyBody Support
>
>
> — In anyscript@yahoogroups.com, “Sarah R. Sullivan” <sarsulli@…>
> wrote:
> >
> > I have been working on expanding a wheelchair model and I have
> > successfully added a left side to the model (I was currently only
> > looking at the right side). However, I am having a tough time
> trying
> > to further expand on the upper body movement. Currently, the back
> is
> > assumed to be rigid against the back of the wheelchair, however I
> am
> > looking to add a more realistic trunk movement (as seen via motion
> > capture data).
> >
> > 1.) I want to be able to have the shoulders protract/retract,
> > elevate/depress, and rotate
> > a. To do this I took out the right and left SC Drivers
> > b. I now am driving a marker placed on the lateral border of
> the AC
> > (R- and LSHO) joint which I am moving with motion capture data
> > i. Is this correct marker placement for the model, meaning will
> this
> > give the desired effect of protraction/retraction, etc.? It is the
> > marker placement that we use in upper-limb clinical analysis but it
> > may not be appropriate for the modeling.
> > ii. I am moving this marker in the x-, y-, and z- directions –
> is this
> > an ineffective/redundant way to move the shoulders?
> >
> > This appears to be working fine as I can get the model to compile
> with
> > these changes (currently commented out in the JointsAndDrivers
> file),
> > although I exceed the kinematic tolerance when I try to
> > SetInitialConditions, run the KinematicAnalysis, or run the
> > InverseDynamicsAnalysis. I assumed that was because I still had
> the
> > back rigid to the wheelchair. So I went about trying to model
> upper
> > body movement which I thought would help the problem.
> >
> > 2.) To attack the problem of trunk flexion/extension
> > a. I need to take out the reaction force between the seat back
> and
> > spine to allow for flexion and extension
> > b. At this point I can drive the flexion/extension with the
> sternum marker
> >
> > Again, I can get the model to compile, however there are still
> > kinematic tolerance issues. Any suggestions as to how to fix
> this? I
> > think the pelvis positioning relative to the ground and the
> associated
> > seat height is fine, however I’m not sure how to deal with the
> following:
> >
> > AnyKinEqSimpleDriver SeatBack = {
> > AnyKinLinear &Right = .ThoraxRight;
> > AnyKinLinear &Left = .ThoraxLeft;
> > AnyKinLinear &Center = .ThoraxCenter;
> > MeasureOrganizer = {0,3,8};
> > DriverPos = {0,0,0};
> > DriverVel = {0,0,0};
> > Reaction.Type = {0,0,1};
> > //Reaction.Type = {1,1,1};
> > };
> >
> > // Rotation of the Thorax w.r.t. ground
> > AnyKinRotational ThoraxRot = {
> > AnySeg &Thorax= .Thorax;
> > AnyFixedRefFrame &Ground = …EnvironmentModel.GlobalRef;
> > Type = RotAxesAngles;
> > };
> >
> > AnyFolder &RefHM = Main.MyArm.HumanModel;
> >
> > AnyFolder &ref=Main.MyArm.HumanModel.Trunk;
> >
> > AnyKinEqSimpleDriver PostureDriver ={
> > AnyKinMeasureOrg &Ref2 =
> > …HumanModel.Interface.Trunk.PelvisThoraxLateralBending;
> > AnyKinMeasureOrg &Ref3 =
> > …HumanModel.Interface.Trunk.PelvisThoraxRotation;
> > AnyKinMeasureOrg &Ref1 =
> > …HumanModel.Interface.Trunk.PelvisThoraxExtension;
> >
> > DriverPos = pi/180*{
> > .JntPos.PelvisThoraxLateralBending,
> > .JntPos.PelvisThoraxRotation,
> > .JntPos.PelvisThoraxExtension
> > };
> >
> > DriverVel = pi/180*{
> > 0.0,
> > 0.0,
> > 0.0
> > };
> >
> > Reaction.Type = {//1,1,1
> > 0,
> > 0,
> > 0
> > };
> > };
> >
> > /AnyKinEqSimpleDriver STNDriver = {
> > AnyKinLinear STN = {
> > Ref = 0;
> > AnyRefNode &Sternum =
> > Main.MyArm.HumanModel.Right.ShoulderArm.Seg.Clavicula.STN_Mkr;
> > AnyRefFrame &ref1 = Main.MyArm.Markers.p1.Seg;
> > AnyDrawPLine drw={Thickness=0.0015;RGB={0,0,1};};
> > Sternum ={AnyDrawRefFrame drw={RGB={0,1,0};};};
> > };
> >
> > MeasureOrganizer = {0,1,2};
> > DriverPos = {0.0,0.0,0.0};
> > DriverVel = {0.0,0.0,0.0};
> > Reaction.Type={0,0,0};
> > };
/
> >
> > How can I drive the STN to accurately reflect upper body
> > flexion/extension?
> >
>
>

Hi Sarah

I think i would try to shift back to the drivers on pelvis that was
running.

Then i would keep the linear measures like you have done the RTrox
and LTroc but i would not drive them.

Then running kinematic analysis you can read out the position of
these measures and see if they are resonable.

Then try to shift them in one dof at the time and remove
accordingling, so start with rtroc x and remove pelvis x and so on.

I think a solution where you drive rtroc in x and y and the ltroc
in z should work out.

You may need to give a better staring quess on the initial positions.

Best regards
Søren

— In anyscript@yahoogroups.com, “Sarah R. Sullivan” <sarsulli@…>
wrote:
>
> Hi Soren,
>
> Thank you for your help. I have been trying to slowly add drivers
to the pelvis/thorax/AC joint, but to no avail. Currently, the
pelvis of the model is driven by the seat height, and that is where
I have chosen to start. I have taken out the following:
>
> AnyKinLinear PelvisPos = {
> AnyFixedRefFrame &Ground = …EnvironmentModel.GlobalRef;
> AnyRefNode &Tuber =
Main.MyArm.HumanModel.Trunk.SegmentsLumbar.PelvisSeg.TuberIschiadicum
Center;
> };
>
> AnyKinRotational PelvisRot = {
> AnyFixedRefFrame &Ground = …EnvironmentModel.GlobalRef;
> AnySeg &Pelvis =
Main.MyArm.HumanModel.Trunk.SegmentsLumbar.PelvisSeg;
> Type = RotAxesAngles;
> };
>
> AnyReacForce PelvisReac = {
> AnyKinRotational &ref = .PelvisRot;
> };
>
> AnyKinEqSimpleDriver SeatHeight = {
> AnyKinLinear &PelvisRot = .PelvisPos;
> DriverPos = {
> 0.0,0.4448,0
> };
> DriverVel = {0,0,0};
> Reaction.Type = {1,1,1};
> };
>
> And replaced those 3 degrees of freedom with (I indeed do have
some trochanter markers with which to drive the motion of the
pelvis):
>
> AnyKinEqSimpleDriver RTROCDriver={
> AnyKinLinear RTROC = {
> Ref=0;
> AnyRefNode &Hip =
Main.MyArm.HumanModel.Trunk.SegmentsLumbar.PelvisSeg.HipJointRight.RT
RO;
> AnyRefFrame &ref1 = Main.MyArm.Markers.p6.Seg;
> AnyDrawPLine drw={Thickness=0.0015;RGB={0,0,1};};
> Hip ={AnyDrawRefFrame drw_1={RGB={0,1,0};};};
> };
>
> MeasureOrganizer = {0,1};
> DriverPos = {0.0,0};//,0.0};
> DriverVel = {0.0,0};//,0.0};
> Reaction.Type={0,0};//,0};
> };
>
> AnyKinEqSimpleDriver LTROCDriver={
> AnyKinLinear LTROC = {
> Ref=0;
> AnyRefNode &Hip =
Main.MyArm.HumanModel.Trunk.SegmentsLumbar.PelvisSeg.HipJointLeft.LTR
O;
> AnyRefFrame &ref1 = Main.MyArm.Markers.p8.Seg;
> AnyDrawPLine drw={Thickness=0.0015;RGB={0,0,1};};
> Hip ={AnyDrawRefFrame drw_1={RGB={0,1,0};};};
> };
>
> MeasureOrganizer = {0};
> DriverPos = {0.0};
> DriverVel = {0.0};
> Reaction.Type={0};
> };
>
> I have tried to change around the measure organizers, but I keep
getting enormous constraint error tolerances. I have even tried to
drive the pelvis in the z-direction (as defined by the midpoint
between the axles, and shown below), and the R&L Troc markers by the
x-direction only (mimicking the thorax driver), but I am getting
tolerances on the order of the thousands in some cases. I have
looked into the tutorial, however I am not finding it to be of any
additional help at this point.
>
> AnyKinEqSimpleDriver PelvisAxleZDriver = {
> AnyKinLinear ZDir = {
> Ref = 0;
> AnyRefFrame &Ground = Main.MyArm.EnvironmentModel.GlobalRef;
> AnySeg &Pelvis =
Main.MyArm.HumanModel.Trunk.SegmentsLumbar.PelvisSeg;
> };
>
> MeasureOrganizer = {2};
> DriverPos = {0};
> DriverVel = {0};
> Reaction.Type = {0};
> };
>
> Should I leave the pelvis alone and start trying to drive another
area of the body? This is becoming more complicated than it would
initially seem to be. Any suggestions would greatly help. Thank
you!
>
> Cheers,
> Sarah
>
>
> -----Original Message-----
>
> > Date: Mon Jun 04 03:50:54 EDT 2007
> > From: “AnyBody Support” <support@…>
> > Subject: [anyscript] Re: Increasing the degrees of freedom in a
model by changing boundaries
> > To: anyscript@yahoogroups.com
> >
> > Hi Sarah
> >
> > It sounds reasonable to use the a marker at the AC joint but i
think
> > you should not drive this marker medial laterally but only in
> > for/back up/down directions. Driving medial laterally is not a
good
> > idea with this marker. I also think that you should leave the
axial
> > rotation in the SC joint fixed, the AC marker is not a good
measure
> > for this rotation.
> >
> >
> > I think the reason that you get the kinematic error is that
driving
> > both Ac markers with all dof, will cause the model to
be “stretched”
> > medial laterally. So i tink excluding this direction and locking
the
> > rotation of the SC joint will help.
> >
> > The best procedure for doing such changes is to start out with a
> > model that is running and then add the marker drivers one dof at
the
> > time and at the same time removing the according joint drivers
which
> > the marker driver will replace, and in this way always keeping a
> > running model.
> >
> > It sounds as good idea to use the sternum maker for driven the
> > thorax forward backward, this driver should replace the distance
> > driver to the backrest.
> >
> > About your question 2b the reaction force should have nothing
todo
> > with these kinematic problems.
> >
> > Concerning the SeatBackDriver it looks like it could be driving
a
> > point positioned on the rigth side of thorax in the x direction
and
> > similarly a point the left side in the same direction, the last
one
> > i think is the the center of the throax in the z direction.
> >
> > The posture driver is driving all three rotations between pelvis
and
> > thorax to zero, meanning the spine is rigid.
> >
> >
> > If you have availble markerdata for the pelvis this might be
> > usefull for driving the motion of the pelvis and in this way
making
> > it possible to free up the rotations between pelvis and thorax.
> >
> >
> > About the sternum makrer, this can replace imidiately the z
dirction
> > driver in the SeatBackDriver. It can also be used for driving in
the
> > x direction (i assume this is for/back) and thus replacing one
of
> > the first dof in the SeatBackDriver. It would be good if you had
an
> > additional driver on the thorax that could replace the one
remaining
> > driver in the SeatforBack Driver? You need some way of driving
axial
> > rotaion of the thorax.
> >
> >
> > Recently the tutorials has been extendend with a tutorial about
> > driving model using markers, it might be usefull
> > http://www.anybodytech.com/500.0.html
> >
> > Please write again if you have further questions
> >
> > Best regards
> > Søren, AnyBody Support
> >
> >
> > — In anyscript@yahoogroups.com, “Sarah R. Sullivan”
<sarsulli@>
> > wrote:
> > >
> > > I have been working on expanding a wheelchair model and I have
> > > successfully added a left side to the model (I was currently
only
> > > looking at the right side). However, I am having a tough time
> > trying
> > > to further expand on the upper body movement. Currently, the
back
> > is
> > > assumed to be rigid against the back of the wheelchair,
however I
> > am
> > > looking to add a more realistic trunk movement (as seen via
motion
> > > capture data).
> > >
> > > 1.) I want to be able to have the shoulders
protract/retract,
> > > elevate/depress, and rotate
> > > a. To do this I took out the right and left SC Drivers
> > > b. I now am driving a marker placed on the lateral
border of
> > the AC
> > > (R- and LSHO) joint which I am moving with motion capture data
> > > i. Is this correct marker placement for the model,
meaning will
> > this
> > > give the desired effect of protraction/retraction, etc.? It
is the
> > > marker placement that we use in upper-limb clinical analysis
but it
> > > may not be appropriate for the modeling.
> > > ii. I am moving this marker in the x-, y-, and z-
directions –
> > is this
> > > an ineffective/redundant way to move the shoulders?
> > >
> > > This appears to be working fine as I can get the model to
compile
> > with
> > > these changes (currently commented out in the JointsAndDrivers
> > file),
> > > although I exceed the kinematic tolerance when I try to
> > > SetInitialConditions, run the KinematicAnalysis, or run the
> > > InverseDynamicsAnalysis. I assumed that was because I still
had
> > the
> > > back rigid to the wheelchair. So I went about trying to model
> > upper
> > > body movement which I thought would help the problem.
> > >
> > > 2.) To attack the problem of trunk flexion/extension
> > > a. I need to take out the reaction force between the
seat back
> > and
> > > spine to allow for flexion and extension
> > > b. At this point I can drive the flexion/extension with
the
> > sternum marker
> > >
> > > Again, I can get the model to compile, however there are still
> > > kinematic tolerance issues. Any suggestions as to how to fix
> > this? I
> > > think the pelvis positioning relative to the ground and the
> > associated
> > > seat height is fine, however I’m not sure how to deal with the
> > following:
> > >
> > > AnyKinEqSimpleDriver SeatBack = {
> > > AnyKinLinear &Right = .ThoraxRight;
> > > AnyKinLinear &Left = .ThoraxLeft;
> > > AnyKinLinear &Center = .ThoraxCenter;
> > > MeasureOrganizer = {0,3,8};
> > > DriverPos = {0,0,0};
> > > DriverVel = {0,0,0};
> > > Reaction.Type = {0,0,1};
> > > //Reaction.Type = {1,1,1};
> > > };
> > >
> > > // Rotation of the Thorax w.r.t. ground
> > > AnyKinRotational ThoraxRot = {
> > > AnySeg &Thorax= .Thorax;
> > > AnyFixedRefFrame &Ground = …EnvironmentModel.GlobalRef;
> > > Type = RotAxesAngles;
> > > };
> > >
> > > AnyFolder &RefHM = Main.MyArm.HumanModel;
> > >
> > > AnyFolder &ref=Main.MyArm.HumanModel.Trunk;
> > >
> > > AnyKinEqSimpleDriver PostureDriver ={
> > > AnyKinMeasureOrg &Ref2 =
> >
> …HumanModel.Interface.Trunk.PelvisThoraxLateralBending;
> > > AnyKinMeasureOrg &Ref3 =
> > > …HumanModel.Interface.Trunk.PelvisThoraxRotation;
> > > AnyKinMeasureOrg &Ref1 =
> > > …HumanModel.Interface.Trunk.PelvisThoraxExtension;
> > >
> > > DriverPos = pi/180*{
> > > .JntPos.PelvisThoraxLateralBending,
> > > .JntPos.PelvisThoraxRotation,
> > > .JntPos.PelvisThoraxExtension
> > > };
> > >
> > > DriverVel = pi/180*{
> > > 0.0,
> > > 0.0,
> > > 0.0
> > > };
> > >
> > > Reaction.Type = {//1,1,1
> > > 0,
> > > 0,
> > > 0
> > > };
> > > };
> > >
> > > /AnyKinEqSimpleDriver STNDriver = {
> > > AnyKinLinear STN = {
> > > Ref = 0;
> > > AnyRefNode &Sternum =
> > > Main.MyArm.HumanModel.Right.ShoulderArm.Seg.Clavicula.STN_Mkr;
> > > AnyRefFrame &ref1 = Main.MyArm.Markers.p1.Seg;
> > > AnyDrawPLine drw={Thickness=0.0015;RGB={0,0,1};};
> > > Sternum ={AnyDrawRefFrame drw={RGB={0,1,0};};};
> > > };
> > >
> > > MeasureOrganizer = {0,1,2};
> > > DriverPos = {0.0,0.0,0.0};
> > > DriverVel = {0.0,0.0,0.0};
> > > Reaction.Type={0,0,0};
> > > };
/
> > >
> > > How can I drive the STN to accurately reflect upper body
> > > flexion/extension?
> > >
> >
> >
>