facebookresearch / facebookresearch/fairo
[Polymetis] Gripper stuck
- Dominant language
- Jupyter Notebook
- Stars
- 929
- Forks
- 123
- PR merge metrics
- No merged PRs in 30d
Description
## Type of Issue
Select the type of issue:
- [x] Bug report (to report a bug)
- [x] Feature request (to request an additional feature)
- [ ] Tracker (I am just using this as a tracker)
- [ ] Refactor request
- [ ] Documentation Ask
## Description
A while ago, this [issue](https://github.com/facebookresearch/fairo/issues/1398) found an issue when using polymetis to control franka gripper. This is a very critical problem as one cannot control gripper to grasp one object and release it.
[This PR](https://github.com/facebookresearch/fairo/pull/1399) offers a partial fix to the issue, but on real robots this doesn't completely solve the problem.
Instead, one should follow the [official C++ example](https://github.com/frankaemika/franka_ros/blob/develop/franka_example_controllers/src/teleop_gripper_node.cpp) from franka to achieve the desired behavior of getting gripper unstuck from previous commands. This example essentially calls gripper.stop() to terminate a previous command that cannot be achieved, whenever a new command is about to be sent.
This requires us to expose the `GripperInterface.stop` API, so one can call `GripperInterface.stop()` before `GripperInterface.goto` or `GripperInterface.grasp` to get gripper unstuck.
## Current Behavior
```
gripper = GripperInterface()
gripper.grasp(speed=0.5, force=3.0)
# let's say robot grabs a 3cm by 3cm block
gripper.goto(width=0.08, speed=0.5, force=3.0)
# expect the robot to release the object
# the robot actually cannot release the object itself!
# this is because previous grasp command asks it to go to width=0.0, which cannot be achieved due to the block
```
## Expected Behavior
```
gripper = GripperInterface()
gripper.grasp(speed=0.5, force=3.0)
# let's say robot grabs a 3cm by 3cm block
gripper.stop() # this is added by my PR
gripper.goto(width=0.08, speed=0.5, force=3.0)
# expect the robot to release the object
```
## Steps to reproduce
See above
## Links to any relevant pastes or documents
[official C++ example to teleop gripper grasping from libfranka](https://github.com/frankaemika/franka_ros/blob/develop/franka_example_controllers/src/teleop_gripper_node.cpp)
Contributor guide
Assessment
This issue has not been assessed yet.