-
Notifications
You must be signed in to change notification settings - Fork 343
Description
Sorry to raise this here. I have asked this a number of times in some form on the forum, but no result.
So I am trying is here one final last time.
For context: I am trying to use OpenSim with CMC to create a simulation of a human in a rowing boat.
The boat with its oars could be seen as a complicated exoskeletal.
The water is simulated using friction.

The model, trajectories etc. can be found here
The humanoid is simple for now, but is later to be replaced by a musculoskeletal body.
The model is generated from bootbaan.py and the trajectories are created from trajectory.py
There are 2 situations about which I have some questions.
-
Using trajectory.mot_0.05
It is generated with blheight = 0.05 (see line 38 in trajectory.py)
Here the blades are always "above the water", so no friction involved with the groundplane.
The boat is not moving very much. -
Using trajectory.mot_0.00
blheight = 0.00. Now the blades are "in the water" during the stroke. We now hope to see the boat move.
(If this works, the contact forces of the blade have to be changed, using a custom component BladeForce
that better simulates the rowing situation. But this is for later)
Concerning 1:
Copy trajectory.mot_0.05 to trajectory.mot
CMC fails after 0.9 seconds: Maximum iterations exceeded.
Looking at the forces up to that point, there is a large spike just before it fails.
Have been playing around with a number of things, but nothing really helps.
-
optimal_force from 1 to 10000.
(query-replace in bootbaan.py)
This postpones the problem a little bit, to until 0.93.
The log suggest that this determines a maximum force (optimal_force(1) gives Max forces: 10000 in the log)
But forces are often larger than that, so what is it actually? -
Because of the kinematic loops not all joints can be in the taskset.
Changing to a different set does not help much.
The question is, how to determine with ones to choose. -
The controller values kp and kv in each task.
Doesn't seem to have much effect. Is there a strategy here? I am just played around with it. -
Parameters in the Setup_CMC file. Cannot improve anything.
-
The important question is, what is so special about the motion around 0.9 seconds.
It is the point where the elbows are coming into play the first time.
There are 8 actuators in each arm, is there a problem there?
Concerning 2:
With trajectory.mot_0.00 you can see that there is contact of the blades with the ground plane during the stroke.
The simulation now fails after 2.75 seconds, and the boat glides through the water!
The error is: Infeasible problem detected.
The problem at 0.9 seconds seems to be gone.
The question of course is, why? The strange thing is that this piece of the trajectory has already
occurred at 0.77 seconds during the first stroke. There are minor difference because the first stroke
is a little bit different because the boat has to get up to speed. But that has almost been done.
So what is different now?
A plot of the forces and of the boat speed (from state) shows that the trajectory isn't perfect.
There is a, temporary, significant drop in boat speed after the first catch, but that's for later.
When, in bb_CMC_Tasks.xml, I switched "plocangle" en "poarinout" between "in" or "out" of the list,
the simulation now fails already at 1.15 seconds.
With the setup_CMC parameter cmc_time_window I can also change when it fails:
- with 0.001 it fails after 2.811 sec.
- with 0.002 it fails after 2.75 sec.
- with 0.010 it fails after 0.93 sec.
A final question is, how can I determine what the forces are in contacts, say between a blade and the groundplane?
Also is there another approach to this problem? I could create a controller as I have seen in other examples, but
wouldn't I then just be building my own version of CMC?
Hopefully somebody can make some sense out of it.
Thanks in advance, Sietse