Applying a Time-Varying Force at a Variable Location


I am using AnyBody 8.0 and AMMR v3.0.1. I need to apply a force to a frame that is attached to the body, but the location of this force varies over time. Specifically, I have measured the interaction force between an exoskeleton and the body. I need to apply this force to the body, but the location where the force is applied changes relative to a defined frame on the body.

To be more specific, I have defined a frame on the exoskeleton and a frame on the body. The force should be applied to the frame on the body, but its actual application point varies and corresponds to the frame attached to the exoskeleton. To address this, I measured the distance between these two frames and attempted to apply the force at this variable distance. However, I discovered that AnyForce3D does not allow specifying a variable location for the force application.

Do you have any suggestions on how to solve this issue?


Hi Mohamad,

AnyForce3D can apply force to a reference frame. A reference node is a fixed point relative to its parent segment.

You can apply a force to a kinematic measure using AnyForce. So, instead of AnyForce3D, please use AnyForce and specify the kinematic measure. Then, the force will be applied to the kinematic measure measuring the distance between the two reference frames.

Another way to do a time-varying location would be to create a dummy segment (mass-less) and apply the force using AnyForce3D to this dummy segment. This dummy segment must be driven (with reactions off) to wherever your application point is and should change its position. To ensure that the human model feels the force, please use AnyReacForce to define 6 degrees of freedom reactions between the human and the dummy segments.

I hope this helps!

Best regards,

1 Like

Hi Dave,

1- Thank you very much for your help. I have tried both methods you mentioned. However, the force applies to the origin of the frame I have defined on the body since both methods (defining reaction force for a driver or applying AnyForce as an internal force) apply forces to the origin of two frames defined in the AnyKinMeasureOrg. I need to vary the location of the force relative to the frame on the body since the exoskeleton has relative movement to the body, and the force will apply to different parts of the body, which can cause considerable change of moment arm for back support exoskeletons.

2- Moreover, I observed that the reaction force when I applied the force to the dummy segment of the exoskeleton was greater than the AnyForce I defined. Do you know the possible reason for this? Before applying the external force, I tried to apply torque using the AnyForce class to the exoskeleton joint, but I observed the same outcome (greater reaction force for the constraint I defined between the chest and exoskeleton compared to the force I expected to be transferred based on the exoskeleton's torque profile by dividing the torque by the moment arm). My initial guess is that the constraint between the hip and exoskeleton can cause this.

3- Additionally, in this wiki page, it is mentioned that I should "1. Remove hip drivers from EXO model and replace them by connection to the human. Ensure the model is running." However, I cannot fully understand what it means to replace the driver by connection here. What is a connection?

4- Our exoskeleton consists of three dummy segments (two thigh pads and one chest pad). I created two revolute joints between the chest pad and each thigh pad (10 constraints). Then, I used AnyKinEqSimpleDriver to constrain the exoskeleton to the body. Five constraints are used between the exoskeleton and pelvis (two drivers, each constraining the Y-Z coronal and horizontal translations of each left and right hip, and one driver constraining sagittal translation between the exoskeleton and pelvis), and three constraints are used between the thigh pads and thighs (two in total) and chest pad thorax. After changing the reaction type to off for drivers, I created AnyReacForce to apply torque to the exoskeleton joint.

Best regards,

Hi Mohammad,

I understand better now.

I think you should use the conditional contact class to simulate the contact force. You can find the class template in the Tools/ModelUtilities/FrictionContactFolder. This is similar to the ground reaction force prediction class template. With this class template, you can create multiple instances of contact force between many contact points on the human and a single point on the exoskeleton. The class template will simulate recruited forces based on whether there is contact between the points on the human and exoskeleton or not. It's cumbersome to set up, but this will solve the issues you are facing.

Your understanding with the reaction force is correct. So when you have a dummy segment, you expect to see some force based on the moment arm of the exoskeleton. But this dummy segment is also some distance away from the reference node on the body. The body feels a higher force and torque to keep the dummy segment (with the exo force) in equilibrium. Essentially, you can think of it as an exo with an extended moment arm consisting of the exo lever arm and the dummy segment lever arm.

The point on the wiki page refers to driving a combined human-exo model. The idea being that you should first have the human and exo models running individually with their independent drivers. Then, you try to make some kinematic connections (using some joints/drivers/constraints) between human and the exoskeleton, and you remove a corresponding number of exo drivers.

Best regards,