nested body and joint type for tensegrity

Discussion in 'Modeling' started by Jianlan, Nov 7, 2017.

  1. Hi Professor,

    We were the one to model tensegrity few days ago.. The model we created was doing very unexpected movement, like flying onto the sky.... XML file is attached..
    1. If I understand correctly, the body should be nested to each other, but not sure how to do in this case since all rods are symmetry

    2. what joint types should we choose for the rod? hinge, ball, slide does not seem to satisfy requirements, since rod should be able to move freely.

    Essentially, we are modeling a tensegrity structure like picture below, with actuator on each rod end.


    Any suggestions and help would be greatly appreciated!! Thank you a lot !!
    T-icosa.jpg
     

    Attached Files:

    • TT.xml
      File size:
      7.2 KB
      Views:
      116
  2. Emo Todorov

    Emo Todorov Administrator Staff Member

    I simulated your model, it is not flying... anyway, to answer your questions. You don't want to nest all the bodies here. If there is an actuator at the end of each rod, that means each rod is a pair of rigid bodies sliding relative to each other. So each rod should be modeled as a free body that has one child body, with a sliding joint between the parent and the child. That joint should be actuated (instead of actuating the tendons as you are currently doing). I would model the bodies as capsules rather than cylinders, to make contacts with the ground better behaved.

    As for the tendons, you should set their length limit to correspond to the length of the physical strings -- which appears to be 0.64 (if you call mj_printModel and look at the resulting text file, it will show you the tendon lengths in the initial model configuration).

    So the bodies are defined as (omitting geoms and other parameters):

    <body name="rod1"...>
    <freejoint\>
    <body name="rod1a" ...>
    <joint type="slide".../>
    </body>
    </body>
     

  3. Hi Professor,

    Thank you very much for the help! I am still a little confused...

    <body name="rod1"...>
    <freejoint\>
    <body name="rod1a" ...>
    <joint type="slide".../>
    </body>
    </body>

    If I understand correctly, you are saying still to model 6 rods as 6 independent bodies, don't nest them; however, put one child body with a sliding joint under each of them.
    1. what are geoms of these bodies? In the example code above, "rod1" should be the true geom of a rod, then what geom should I give to "rod1a", could I just create a dummy "rod1a" without specifying the geom?

    2. What pos should I put those child bodies 'rod1a' ? and the direction of sliding joints? [0 0 1] or [1 0 0] or [0 1 0]?

    Thanks again for your time and help!!

    Best,
     
  4. Emo Todorov

    Emo Todorov Administrator Staff Member

    you can make both of them capsules, with the same long axis, and then let the actuator move the two capsules relative to each other. The sliding joint axis should be the same as the long axis of the two rods. The position of the second body, and depends on where the actuator is, how much of the rod is actually moving when you actuate it etc. The position of the joint can be anywhere along the long axis.
     
  5. Hi Professor,

    I don't quite understand how this setup would give us the behavior we want.

    To reiterate, we want to model each rod as one single rigid component with fixed length (not two rods sliding relative to each other, as parent and child). To roll, the tensegrity contracts the strings which connect two rods (does not contract the rods themselves). Specifically, each strings contracts (its end coils around an actuator) in order to pull two rod-ends of the fixed-length rigid rods closer to each other. Please see the clarification here http://www.mujoco.org/forum/index.php?threads/tensegrity-model-follow-up.3550/.

    Thank you for all your help!
     
  6. Emo Todorov

    Emo Todorov Administrator Staff Member

    Oh, I was confused. Indeed, you should model each rod as a single body, with a capsule geom and <freejoint/> that makes it a free-floating child of the world body.

    As for the contracting string actuators, it depends on the force-length relationship. If it is linear (with controllable slope and equilibrium length) you could model them as position actuators attached to the tendons. If it is something very nonlinear, i.e. the force rapidly increases as the length crosses some controllable threshold, then maybe you should model them as length inequality constraints on the tendons, and programmatically change the value of mjModel.tendon_range. Or maybe you want to combine both mechanisms.