Sliding end-effector on a table

Typically: "How do I... ", "How can I... " questions
Post Reply
andre_barbosa
Posts: 2
Joined: 17 Nov 2025, 12:49

Sliding end-effector on a table

Post by andre_barbosa »

Hello,

Currently I am facing an issue when the end-effector is in contact with a long surface, for example, a table, the end-effector 'jumps' suddenly and oscillates quite drastically. I also noted, that when the arm is more or less close to singularity, the shoulder elbow and wrist almost align, the end-effector starts also to oscillate

Scenario:
The robotic arm is on a table and has 7 joints. The end-effector is basically a long thin plate, with length of 0.90m, width of 0.40 and height of 0.01m. The end-effector is in contact with the surface of the table. I am using Mujoco physics engine.

I suppose the problem comes from the many contact points between end-effector surface with the table. Is it possible to solve this problem and continue to use position control, or do I have to implement force control where the controller receives as input position and velocity and transform to force input? If so, do you think the scenario "inverseDynamics" is a good starting point for this case?

Any recommendations to solve this problem I would be grateful.
coppelia
Site Admin
Posts: 10802
Joined: 14 Dec 2012, 00:25

Re: Sliding end-effector on a table

Post by coppelia »

Hello,

being close to a singularity while using the IK functionality is never a good idea, since this will indeed result in an instable behaviour. You can somehow mitigate this by "pre-tensioning" the incriminated joint in the desired direction. Also adding damping and increasing the maximum number of iterations (simIK.setGroupCalculation) or reducing the max. step size (simIK.setJointMaxStepSize) can help.

Regarding the jumps/oscillations due to the end-effector contact with the table: this could be for various reasons: are your shapes primitive shapes? Or convex shapes at least? If they are very thin, try to make them thicker and play with the various Mujoco parameters available for both shapes.

Cheers
andre_barbosa
Posts: 2
Joined: 17 Nov 2025, 12:49

Re: Sliding end-effector on a table

Post by andre_barbosa »

Hello,

Sorry for the amount of time it took to respond.

I was able to minimize considerably the issue by setting the base link of the robot that is placed on the table as dynamic, which normally is only respondable, and setting the armature value for all joints to 10, although at the cost of slight vibrations along the link chain. I doubt this is the optimal solution.

I was able to verify if I set joints armature to a value of 0.1 and base link only respondable, the end-effector is able to slide until a distance from the base is reached, after that point it becomes completely unstable. I also realized that distance is close to the workspace boundary of the robot, and the instability increases a lot when closer to a singularity. However the situation of close proximity to workspace boundaries is something I can't void since the task depends on it, and singularity is also quite difficult to avoid due to the necessary relative positioning of the elbow, shoulder and wrist joints. This singularity happens when the mentioned joints align. It is also worth noting that joints 3, responsible for redundancy, and 5 are to 0.

I know one solution would be to optimize manipulability, but this can break the constraint where the plane (not really a plane since there are offsets between the joints frames) formed by the elbow, shoulder and wrist joints is perpendicular with table plane to generate more force against the end-effector. Note between the end-effector parts is a piece of cloth, and this force is used to compress and consequently to taut the fabric.

Do you think an impedance controller might be necessary for this case?

Edit: I was able to minize the sudden jumps by:
1. Setting sliding friction to the table or end-effector to a value larger than 0.9:
"friction": [
0.95,
0.001,
0.0001
],
2. Increasing the second parameter of solref
3. And setting solimp to:
"solimp": [
0.9,
0.95,
0.001,
0.02,
2
]

However I still think I shouldn't avoid the underlying problem of generating forces against the table when near singularity.
Post Reply