Simulink Torque Not Changing with Changing Acceleration

6 views (last 30 days)
I have created an inverse dynamic model for the human hand and am currently tyring to calculate the finger joint torques given a specific motion input (as a sine wave). I have tried this with multiple methods including the simulink-ps converter with the first and second dervatives provided as well as providing only the input and having simulink calculate the first and second derivative uisng a filtering constant. I change the angular velocity of the sine wave to act as a speed control for the fingers, but not matter what I change it to the output acceleration changes, but the torque always remains the same. I have found the most successful results come from providing the derivatives myself; however, I cannot get the torque to change only if I change the weight of the object that the hand is holding. I did not mess with any of the internal mechanics such as the spring/damper stuff only have the joint angle as the motion input and a sensor for the torque and acceleration. If you have any questions about anything that is unclear feel free to ask or if you have any tips/suggestions that i didn't think of that would be great! Thank you!
  3 Comments
Olivia Santee
Olivia Santee on 16 Feb 2021
Edited: Olivia Santee on 16 Feb 2021
Thank you very much for the response. I actually do have a simple model I have been using to help find out what the problem could be. I have attached a few pictures showing the model, the settings for everything, and the results I have gotten. Also the code is below, but all it does is create the motion inputs including position, velocity, and acceleration. I had originally used the position and then the PS simulink converter to calculate the first and second derivitve with a filtering constant of 0.001; however, the accelerations were 150 rad/s up to 2000 rad/s which was unrealistic. Instead I manually had the derivatives become inputs, but the the torque does not change with changing conditions. The first picture is the model setup calculating the derivatives myself as the inputs. The next two pictures show the results of the model using a 6kg spherical weight moving at a speed of 120 rad/s (the weight remains the same for all trials) first the torque plot then the acceleration. The next two pictures show the same thing at a speed of 10 rad/s. The fifth picture is of the second model setup where simulink calculates the derivatives. The following outputs show the results first at 120 rad/s then 10 rad/s. I can't quite figure out why they are different and how to fix it, but both seem to be incorrect as the static torque is calculated to be just under 5Nm and thus the dynamic torque with a 6kg weight moving at 120rad/s I would expect to be higher than that. The first set of images 1-5 pertain to the first model (calculated derivatives) and the second set pertain to the model where simulink calculates the derivatives 6-10.
Yannick
Yannick on 22 Feb 2021
Edited: Yannick on 22 Feb 2021
Hi Olivia,
I hope I am not misreading things, but the results for the example using second-order filtering seem more reasonable to me than when explicit derivatives are provided.
With second-order filtering, the results seem sensible enough at first glance, without all the details. At omega = 120 rad/s, the acceleration amplitude is roughly 2000 rad/s^2, and at omega = 10 rad/s, it is roughly 170 rad/s^2, so at least the acceleration amplitude increases when omega increases. As far as the torque is concerned, it seems to oscillate around the same static torque of roughly 5 N.m for both values of omega, and the amplitude is larger in the omega = 120 rad/s case.
With explicit derivatives, the results seem nonsensical. The torques are the same for both values of omega, and the acceleration amplitudes vary inversely to omega. This makes me think that the position, velocity and acceleration signals being fed into the joint are probably not consistent with each other. I don't have your code for them and it is not clear what blocks you are using to generate these signals, so it's hard to tell the exact problem, but here is an example of the equations you'd want (please double-check in case I messed up!):
q = A * sin(omega*t) = A * sin(omega*t + 0)
w = A * omega * cos(omega*t) = A * omega * sin(omega*t + pi/2)
b = - A * omega^2 * sin(omega*t) = A * omega^2 * sin(omega*t + pi)
I would suggest trying the Sine Wave block to generate these signals. Just be careful to enter the correct parameters (frequency, amplitude, phase) for all three. I hope this will help improve the results!

Sign in to comment.

Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!