1
$\begingroup$

I am trying to make a two-finger robot gripper. The grippers use soft body physics and my goal is to move them towards an object in the middle of the scene to just grab it by pressing the grippers to it. Note that I don't have to move the object necessarily although it would be great if I can do this as well!. I also want to take the grippers away from the object in the middle in an arbitrary time. This gif (32MBs) shows an advanced version of what I want to make. Basically, I want to have the freedom to control them the way I want while the physics is running so baking the physics is not an option here. Ideally, I want to run the physics simulation frame-by-frame using bpy.context.scene.frame_set(bpy.context.scene.frame_current+1) so that: 1) I do not need to have a fixed path for the way the grippers move and 2) I can get some data about the soft body physics (forces, static and dynamic friction for each vertex/face) for each step of the simulation; I already know how to get that data that I need.

Based on the discussions I've had with people it looks like there is a couple of different ways of doing this, potentially. The most promising ones seems to be: 1) Using armatures and IK bones and 2) Animate what I want to do (maybe something like this?) and 3) Apply forces directly either by using Force Fields or somehow directly apply forces on the vertices, something like this. So I wonder, does anyone know which of these methods best fits my needs and post an answer which includes helps me make a soft body robot gripper in Blender?

I don't know almost anything about setting up armatures and IK bones properly to do this task so I don't know what could be the limitations of method 1 and how well it can satisfy my need. It looks like method 2 can do what I want as long as I know the path/curve on which the objects should move, which is undesirable for me. For 3, it looks like using Force Fields and Effector Groups can enable me to move the grippers closer and further and freely move my objects in the scene. However, it looks like it is a bit unintuitive to control Force Fields to achieve the desirable effect since I might want to quickly stop the grippers and move them.

I might be wrong about the limitations of these methods. However, it looks like to me that being able to directly apply forces (something like this but for soft bodies) to parts of the soft body objects would be the best option. Still, if you think you have a better idea on how I can make the gripper so you may ignore all of the methods that I described above and propose your own solution but make sure you the grippers are soft body objects.

While searching for a method to use to achieve what I described above, I sort of devised my own way of doing this (shown below) which is not ideal. The way my method works is that I have put an empty on top of my "grippers" and used the Transformation constraint to move the grippers. This method works okay but since I am not applying any force to the objects, the behavior of the soft bodies is not accurate as they collide with other objects. The good thing about this method however is that I can pin the vertices of the grippers so that they won't wobble as the grippers are touching the target object. Also, this way of pinning the objects will keep the grippers behave more realistic which is desirable (and needed) for my application. Maybe armatures can help with the pinning thing? Below you can see a .gif that depicts how I control the grippers using my method:

enter image description here

And here's another one with only pinning one vertex from the top and one vertex from the bottom:

enter image description here

And here's the .blend file for what I show in the gifs:

By the way, this question could be seen as an advanced version of the questions asked here and here.

$\endgroup$
3
$\begingroup$

Instead of Softbody physics, consider Rigid Body physics for the robot parts (this will keep them from jiggling when they interact with something; that is, they'll interact, but they won'd deform their own shape, which is what you want). Rigging is actually extremely simple for hard surface models like this, and your best option for what you want to achieve. You don't have to automatically weight the bones, either, which might not give the desired results in this case, since it likes to use falloff (good for organics, not so much for robots).

What you'll want to do first is set up your bones so they lay inside your model, with the joints where you want the bending to happen. Now you'll want to head over to the bone tab, found in the section of the workspace where you usually go for your physics stuff. It should look like a little bone. Click this, and you can change a few things to make your life easier. Mainly, X-ray. It should be on by default, but if it isn't, this is where you'll find it. Also playing with contraints is useful, if you don't want to fool with with exact degrees of rotation while you're manually moving your bones. Adding a contraint limited to the range of motion of your grippers will physically prevent you from moving the bone too far, so you're freer to eyeball it. Just a few more steps, and you'll be on your way! Hide your armature via the outliner window for now, or move it to another layer. We need to work on the robot itself. All you need to do is make vertex groups for each rigid piece. (Each piece should have it's own corresponding bone.) Once you have them named, bring your armature back (your collection of bones) and rename the bones to match the vertex group they're supposed to control. When you finish, select your mesh, then your armature, and parent them.

$\endgroup$
  • $\begingroup$ This is exactly what I don't want as I've clearly stated in in my post. If I needed to use rigid bodies why would I have to make such a complex problem to solve in the first place? I could have easily used one of the methods proposed in one of the links I posted in my question (like this one) and make my grippers with rigid body physics! Please try to read the questions carefully and post an answer that resolves what people ask for ... . $\endgroup$ – Amir Oct 18 '18 at 3:16
  • 2
    $\begingroup$ I did read carefully, and I read through again. I don't see where you said you don't want rigid body. I thought it was baking the physics you didn't want, for any number of reasons, such as exporting information for use in another program. I apologize. If you could point out the section for me, I will know in the future implications that I obviously missed this time. $\endgroup$ – Lee Oct 18 '18 at 3:28
  • $\begingroup$ I have mentioned "soft body" more than 10 times in my question and I mentioned "rigid body" exactly 0 times . More specifically I said "So I wonder, does anyone know which of these methods best fits my needs and post an answer which includes helps me make a soft body robot gripper in Blender?" $\endgroup$ – Amir Oct 18 '18 at 4:08
  • 2
    $\begingroup$ @Amir This IMO blurs the clarity: "Still, if you think you have a better idea on how I can make the gripper so you may ignore all of the methods that I described above and propose your own solution." A mixture of soft and rigid body physics could be one possible solution. You neither have to accept nor upvote an answer. Anyone having read your comments above may baulk at attempting an answer to what best fits your needs $\endgroup$ – batFINGER Oct 18 '18 at 13:02
  • $\begingroup$ @batFINGER I agree but anyone who reads my question thoroughly should naturally have a strong tendency to think of a solution for soft body grippers. I should have been super clear about not wanting an answer for rigid bodies. Again, reading the question carefully would make it clear that I already know how to do this for rigid bodies as I had put links to answers which helps me move rigid bodies while the physics is on. So I implicitly wasn't expecting an answer suitable for rigid bodies. $\endgroup$ – Amir Oct 18 '18 at 19:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.