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?
> >
>
>