Home › Forum › SoftRobots › Using SoftRobots › Floating behaviour in soft actuators with BilateralInteractionConstraint
Tagged: Linux_ubuntu, SOFA_2006
- This topic has 1 reply, 2 voices, and was last updated 3 years, 2 months ago by Hugo.
-
AuthorPosts
-
16 August 2021 at 21:19 #20136AudreyModerator
Hello,
Like others here we are attempting to build and simulate a soft robot by adding multiple parts using a BilateralInteractionConstraint. When we do this, however, and add actuate the robot with a SurfacePressureConstraint, the robot rises from the floor that we have put in place.
Screencap of the floating issue:
We have already looked at related topics here and here but the solutions have not worked for us:
1. From the 1st thread, making dt smaller makes the problem worse — it floats earlier, and more. Further, increasing mu does not change the behavior.
2. We don’t use LinearSolverConstraintCorrection and are therefore unable to apply the solution from the 2nd thread.
3. We have also tried refining the meshes and refining tolerances and max iterations for all solvers used.
4. This behaviour is only present when the BilateralInteactionConstraint is implemented. Here is that implementation:
def attach_leg(self, leg): node = self.disk_node.createChild('leg{}ConstraintNode'.format(leg.angle)) self.constraint_nodes.append(node) # these four indices are on the four corners of one end of the leg constraint_indices = [0, 12, 1, 11] x = np.array(leg.node.loader.getData('position').value) constraint_positions = x[constraint_indices].flatten() str_constraint_pos = " ".join([str(pos) for pos in constraint_positions]) node.createObject("MechanicalObject", name="points", template="Vec3d", position=str_constraint_pos, showIndices='0') node.createObject("BarycentricMapping") for i, ind in enumerate(constraint_indices): node.createObject( "BilateralInteractionConstraint", name="leg"+leg.angle+"_"+str(ind), template="Vec3d", object1='@' + leg.node.dofs.getPathName(), object2='@' + node.points.getPathName(), first_point=str(ind), second_point=i, )
17 September 2021 at 11:46 #20370HugoKeymasterHey @asedal !
Thank you for posting your issue. I will summarize the solutions we discussed together directly:
1. It is confirmed (Chip is discussing it with the devs) that the SurfacePressureConstraint is timestep dependent and the pressure set as input has to actually be related to pressure/dt as explained in the associated GitHub issue.
2. I think you are now smoothly working with the LinearSolverCC, right ?
Do not hesitate to also update this discussion thread (and we keep in contact per email as well obviously 😉 )
Best,
Hugo
-
AuthorPosts
- You must be logged in to reply to this topic.