The objective I am solving is the position control of a nut screwing station. The pipeline is loosely based on that notebook.
Function make_gripper_frames
was changed accordingly to command screwing motion of a gripper. PseudoInverseController
of iiwa
remains same as the one in a notebook.
The gripper is controlled by schunk_wsg_position_controller
in the same way: starts opened, closed on pick_end
, reopened on place_end
.
The bolt is welded to world frame, the nut is connected by a screw_joint.
My expectation is to see the controller driving a nut in meshcat visualizer.
Instead, I see the nut remaining unmoved, while the gripper rotates around it.
The effect is shown on the gif below:
Next, I provide a counterexample, where the screw_joint behaves (somewhat) correctly:
The controller trajectory were purposefully changed, such that the gripper collides with the nut on the downward motion of gripper. This contact creates the expected change in screw_joint
configuration:
Question: What change is needed in the controller to enable it to influence the nut rotationaly, i.e. to screw it. That is, countrary to only pushing it downward, as it were demonstated above. :D
Approaches already tested:
- had a hypothesis that the physics of interaction isn't right, so I've grid-search through ineria, mass, damping, screw_pitch params of the nut. (to no avail)
- had a hypothesis that the issue is due to poor contact modeling, so tried to replace the complex nut collision geomentry in sdf with a basic one (the box). Also, have tried to change
schunk_wsg
collision model from box tokBoxPlusFingertipSpheres
(to no avail) - had a hypothesis that the issue has to do with
schunk_wsg
controller. Looks, like it barely contacts, but does not "grip". Have tried to logwsg_force_measured
output port of themanipulation_station
. I have seen little correlation betweenwsg_force_measured
values and the timestamp of experiment, whenever the gripper is opened, closed, in contact or not.
My last step, that was not tried yet, is to replace schunk_wsg_position_controller
with schunk_wsg_plain_controller
in the force mode, and to command a high grip force on the end-effector.
Any suggestions will be appreciated!