23 April 2020 at 13 h 26 min #15932
I’d like to simulate a pneumatic actuator with applying surface pressure on cavity surface. My plan is to do the simulation in SOFA, and use the same material and boundary conditions in Abaqus for validation to convience others SOFA is a reliable tool for this kind of simulation. Here is the demonstration model I built.
The unit system I use is:
tonne, m, s -> MPa, N
Please allow me to explain the problem in detail. I understand this function is included in the SoftRobot plugin, and actually this model borrowed many ideas from the SoftRobot plugin tutorial. However, as this plugin is no longer included in the release version, I would like to try some other ways to implement it. Here is how the implementation goes:
1) Use a separate node “cavity” to represent the surface where pressure is applied
2) Apply pressure using “SurfacePressureForceField” on the cavity surface
3) Use BarycentricMapping to map the force between “cavity” and “finger”.
My question is: Is this a valid (correct) method to apply this kind of pressure? Will the mismatch of meshes cause significant errors in the simulation results? I understand the best way is to identity the boundary triangles by indices. However, for a very complex internal cavity, this is almost impossible. Is there a better way to do this?
After running the simulation for this model, we can see clearly that the 2nd and 4th gap of this actuator did not open enough, maybe because not enough pressure applied?
Alternatively, is there a more practical way to extract the indices of desired cavity surface number? So I don’t need to do the mapping, which could introduce huge error.
I’ve careflly read through related topic as: https://www.sofa-framework.org/community/forum/topic/pneumatic-actuator-using-surfacepressureconstraint/, but it seems the problem is a bit different as what I met here.
If you look into the controller python script, you may find I commented line 23. This line is intended to apply moving on the finger by change the rest position with a prescribed velocity. However, this method ONLY works with release version:
1) “SOFA_v19.06.99_custom_Linux_v5.1” (I remember this is the version from SoftRobot plugin developer group, if I’m not wrong. This version contains the SoftRobot plugin)
While for other versions I’ve tested as:
3) Compiled latest master branch
All these versions can not correctly apply pressure on the surface when the finger is moving. If I did not move the finger, then everthing is fine. If this is an implementation problem, is there any way for me to apply pressure while moving the finger?
Sorry for this long question. I’ve carefully read through related topic as: https://www.sofa-framework.org/community/forum/topic/pneumatic-actuator-using-surfacepressureconstraint/, but it seems the problem is a bit different as what I met here.
Thank a lot.23 April 2020 at 20 h 45 min #15937HugoKeymaster
- SOFA Consortium
I will try to answer most of your questions, but I did not develop this soft-robot tutorial nor conduct any research on it.
Your approach with the mapping is perfectly correct. Well done. Forces on the submesh will be properly propagated on the 3D volumetric mesh. No error here.
An alternative would be to use a Tetra2TopologicalMapping (instead of Barycentric) in order to extract the surface of the mesh.
Indeed, 2nd and 4th gap of this actuator are less open. Is this normal or not, this I can not tell. Fore sure, it would be normal that 1st is more open than 2nd, more open than 3rd etc. Since the more aligned along the z axis, the more it faces gravity field.
About a more practical way to get a set of indices (points, triangles) to apply a force or else, is usually done externally of SOFA. But we are working on the SofaQtQuick project, a GUI allowing a modern design of the simulation. Stay tuned.
BTW what did you mean by: However, as this plugin is no longer included in the release version ?
By release version, do you mean the master branch of SOFA (development version)?
API must have obviously changed. But with the information you give, I am not able to point you out the exact change causing this.
Indeed, a nice-long topic! Carry one the good work!
Hugo24 April 2020 at 1 h 53 min #15938
Thanks a lot for prompt reply. Really helped a lot. Sorry for the confusion. Please just ignore the release/version questions I mentioned previously.
Here is my main concern.
Thanks a lot for your confirmation. Do you mean Tetra2TriangleTopologicalMapping? Actually I’ve searched this in the examples folder, and found that it seems this component can only extract all the external surface from the input body (Please correct me if I’m wrong). What I need is to apply the pressure only on some prescribed surface. Is it possible to use Tetra2TriangleTopologicalMapping for this?
Sorry for the confusion. Please just forget the version things I previously mentioned.
What I want to implement here is: I want to move the finger while applying pressure at the same time. I think this is a quite common scenario. However it seems not work in my model (I tried the versions downloaded from https://github.com/sofa-framework/sofa/releases, as well as compiled from github master branch). Is there any ways to implement this in SOFA by using some other ways?
Thanks a lot.24 April 2020 at 9 h 24 min #15939HugoKeymaster
- SOFA Consortium
Yes I did mean Tetra2TriangleTopologicalMapping. If you then specify the triangle indices on which you apply a pressure, it would work. But it is just an alternative. Your way is good as well.
This should help.
Hugo28 April 2020 at 8 h 11 min #15965
Thanks a lot for your kind guidance. Works well if I specify the triangle indices directly. Anyway there is a way work. Thanks a lot.
- You must be logged in to reply to this topic.