Drive the exoskeleton with markers

Hi

I posted 4 markers on the exoskeleton thigh and commented out the kinematic constraints at the thigh. There are two markers on the outer side of the exoskeleton, one marker on the front side, and one marker on the exoskeleton knee joint, as shown in the figure below.


But this problem occurred when I ran the parameter optimization. The position of the exoskeleton did not match the position of the human. Could you tell me what caused this?
微信图片_20200904215726

Best regards
babaozhou

Hi babaozhou,

It sounds to me like the exo constraints are not part of the kinematic model used by the parameter study, this could explain this.

Please try to check that these constraints are indeed included into a folder which is part of this study, otherwise they will not be considered.

To verify you can double click the study in the model tree and see the list of segment constraints etc... the human exo constraints needs to be listed there otherwise the are not part of the study.

Note that an object can be loaded in the model, but this does not automatically mean that they are also part of a study. They become part of the study in these ways:

  1. Write them directly in the study
  2. Include a file from the study which defines the object
  3. Make a reference from the study to the object

All three ways will create the same model

So below the MyObject are not part of the study, just loaded..

Main ={

AnyFolder MyObjects ={};

AnyBodyStudy MyStudy ={
..

};
};

Best regards
Søren

Hi Søren,

Thank you very much for your detailed reply. I often forget this :sweat_smile:
I created the exoskeleton markers in MarkerProtocol,Then check the ParameterIdentification in the study. Does this mean that the constraints are included in the study?


I also have this problem when I run the kinematics analysis. Is the position of the markers in Anybody wrong? I use the following code to make the markers on the exoskeleton,
AnyFolder &EXO_ROBOT =Main.Model.RightExo.Right_Thigh___2;
EXO_ROBOT={
AnyFunTransform3DIdentity GeomScale = {};
AnyRefNode AnatomicalFrame={};
};
#ifdef _REXO1
// Marker on the Right Thigh
CreateMarkerDriver REXO1 (
MarkerName = REXO1,
OptX=ON,OptY=ON,OptZ=ON,
MarkerPlacement =Main.Model.RightExo.Right_Thigh___2)= {
sRelOpt = {-0.30, -0.310, 0.04};
};
#endif
I don’t know what else can cause this problem, I hope to get your help, thank you in advance.

Best regards
babaozhou

Hi Babaozhou,

If you have created the exo markers in the makerprotocol.any they are for sure part of the study, i can also be seen on the images that the exo follows the markers.

You write that you have made constraints between exo and thigh, i still think these constraints may not be part the study and may cause the this problem. So please try to verify that the constraints between exo and thigh segment are indeed in study, i do not think the markers are the issue here.

It looks to me like the makers drives the exo but that the exo has no constraints to the thigh.

Best regards
Søren

Hi Søren

Thank you very much for your reply. I read other people’s posts and you said "You have to make a choice if the brace is driven by markers or by constraints to the human or a combination. If you keep kinematic constraints in the model between exo and human, the markers on the brace will then change the motion of the leg to some extend". So I commented out the constraints on the thighs of the human and exoskeleton.

Maybe I did not understand the meaning of this correctly. Now I added the constraints of the human and exoskeleton thighs and put them in the study. When I added the exoskeleton shank and ran the kinematics analysis, this problem occurred. Is this caused by the failure to complete the parameter optimization process? Could you tell me how to solve it?

Best regards
babaozhou

Hi Babaozhou,

If you have enough markers to drive both human and exo with markers alone this is perfect, this will allow you to see difference in motion.

I looked again at the marker configuration, are you sure the marker on the front of the exo is indeed inserted on the exo and not on the thigh. Please double check the markerprotocol file that the exo markers are on exo and not thigh.

Another explanation could be that you may have all markers on the exo to be free for optimization, this would not work it would be an indeterminate problem so please try to lock position of some exo makers at a total of six directions of three different markers.

So eg.
ExoMarker1 : lock x,y,z
ExoMaker2: lock x,y
ExoMarker3: lock z

Hope it helps

Best regards
Søren

Hi Søren,

Thanks again for your reply. I still can't use the markers to drive the exoskeleton, maybe the number of markers is not enough. Now I think that the movement of the human and the exoskeleton are synchronized. I use 6 constraints to connect the exoskeleton thigh to the human thigh. Then I used a constraint to synchronize the movement of the exoskeleton knee joint with the human knee joint. But there was a problem.


My code is as follows
AnyKinEqSimpleDriver Exo_Thigh_ConnectionR =
{
AnyKinLinear lin =
{
....
};
AnyKinRotational rot =
{
...
Type = RotAxesAngles;
};
Reaction.Type = {OFF,OFF, OFF, OFF, OFF, OFF};
CType ={Hard,Hard,Hard,Hard,Hard,Hard};
DriverPos ={-0.08,0,0.05,0,0,0};
DriverVel ={0,0,0,0,0,0};
};

AnyKinEqSimpleDriver exo_knee_joint =
{
AnyRevoluteJoint& jnt = Main.Model.RightExo.Mates.Hinge;
DriverPos = {.JntPos.Right.KneeFlexion};
DriverVel = {.JntVel.Right.KneeFlexion};
Reaction.Type = {Off};
};
My code should be wrong, could you tell me how to modify it? Thank you in advance.

Best regards
babaozhou

Hi Babaozhou,

I will try to explain the code you have listed.

This code

AnyKinEqSimpleDriver Exo_Thigh_ConnectionR =
{
AnyKinLinear lin =
{
....
};
AnyKinRotational rot =
{
...
Type = RotAxesAngles;
};
Reaction.Type = {OFF,OFF, OFF, OFF, OFF, OFF};
CType ={Hard,Hard,Hard,Hard,Hard,Hard};
DriverPos ={-0.08,0,0.05,0,0,0};
DriverVel ={0,0,0,0,0,0};
};



Will create six kinematic constraints using the linear and rotational measure. In the Linear and rotational measure you need to supply references to the two objects you would like to lock. So. Thigh and exo part. Note that this code will driver the linear postion to {-0.08,0,0.05} and rotations to {0,0,0} so it is important that the reference systems has same orientation (or you will need to apply non-zero rotations)

This code will create a driver on the exo knee joint and drive it to start in value taken from the mannequin.any file and it will have a constant velocity.

AnyKinEqSimpleDriver exo_knee_joint =
{
AnyRevoluteJoint& jnt = Main.Model.RightExo.Mates.Hinge;
DriverPos = {.JntPos.Right.KneeFlexion};
DriverVel = {.JntVel.Right.KneeFlexion};
Reaction.Type = {Off};
};

This driven is meaning full as part of the process to get the model running but eventually you would like this driver not to be present in the model and drive the eco knee angle either by markers or by a connection to the to shank (thigh)

Please see this wiki page relating to this topic (you might have already seen it) https://github.com/AnyBody/support/wiki/Connecting-an-exo-skeleton-to-a-human-model

Best regards
Søren

This topic was automatically closed 125 days after the last reply. New replies are no longer allowed.