Background
I am using this library and lower_leg_2_parts
branch for modeling my robot solo12.
My robot model is loading in Drake from URDF file using AddModelFromFile
and after that is connecting the controller to the simulated plant.
What is a deformable body ?
- Material: PETG RELAX with the appropriate characteristics.
- Dimensions of the bounding box: x:y:z 10:10:14 mm
- Shape: I’ll provide you with appropriate links:
- Flexure Joints for Large Range of Motion video from University of Twente (UT).
- The book: Design and optimization of large stroke flexure mechanisms by Mark Naves.
- LARGE-STROKE FLEXURE HINGES.
I want modeling something like that, for example:
Parameter optimization with modeling the nonlinearities all-together I’m performing in the flexible multibody dynamics software SPACAR.
Question
I came to several possible ways to solve this problem: the question is which way is a best ?
- I can create rigid part of the robot and 4 flexible leg’s parts and then connect their together. We can add rigid bodies via
AddModelFromFile
and deformable body withRegisterDeformableBody
separately and put them in a single plant. The deformable body can be prepared in two ways:
1.1. Deformable body can be simulated with FEM by DeformableModel
PyDrake
class.
1.2. Deformable body can be modeled using C++ ForceElement
as mentioned jwnimmer-tri here.
- I can model leg as amount of joints, connected like snake’s spine with small angle constraints. The problem here is that when I modeled lower leg consisted of 3 links and 2 joints (they are fixed), my leg fell into resonant undamped oscillations.
Drake Version
the latest from master branch of drake’s repository
What operating system are you using?
Ubuntu 20.04
What installation option are you using?
compiled from source code using CMake
P.S.
I am already studied the example deformable_torus.ipynb
and learned how to simulate deformable bodies, but there wasn’t answer on my question. I went through all the documentation, code, drake’s issues, questions here related to Drake and did not find an answer. I say this so that you don’t give me cons,then I was banned anyway.
If you required I will provide you instructions for reproducing my program.
2
Answers
As of today in Drake, the support for deformable models is still incomplete and under development. So, the process will not be easy (yet).
It does not seem possible currently to specify a deformable geometry via a URDF file. As in the
deformable_torus.cc
example, you will need to callRegisterDeformableBody
manually, after making aGeometryInstance
with your tetrahedral mesh*.vtk
file.To remove the non-deformable model, easiest would be to edit (a copy of) your URDF file to remove the proximity geometries you are about to replace.
You may want to investigate using Drake with a linear bushing to model extensional, bending, and torsional stiffness and damping. You may be able to estimate stiffness constants from an existing FEA model. The documentation provides details on how to estimate damping.