Stable pick and place in Gazebo
In this week, the robot can finally grasp the objects stably. I mentioned in last blog that when using MoveIt move group pick function, the gripper can grasp the object in Rviz, but cannot grasp it in Gazebo. However, if I set the grasping distance properly, larger but not much larger than what the gripper need to go, then when the execution time is out of tolerance, the gripper will stop moving and do next task. Compared with the method I used last week, the new method makes the gripper doesn’t shake even if the given gripping distance is larger than needed, which provides a bigger tolerance range to tune the gripping distance. With this method, though ROS controller takes it as an error, but the gripper can stably grasp the objects. The following example warning and error won’t influence the behavior of grasping.
[ WARN]: Controller failed with error GOAL_TOLERANCE_VIOLATED:
[ WARN]: Controller handle reports status ABORTED
[ERROR]: Controller is taking too long to execute trajectory (the expected upper bound for the trajectory execution was 1.231552 seconds). Stopping trajectory.
[ WARN]: Fail: ABORTED: Timeout reached
This method still has some limitations with planning and control. Each time I call the pick function, MoveIt plans a different trajectory to grasp the object. Sometimes the planned trajectory cannot be execute. An error as below can be seen in terminal. Then the robot will not be able to grasp the object. When I tried to use place function, this probelm also always happens, so I directly move the robot arm to desired position and place it by opening the gripper.
[ WARN]: Fail: ABORTED: Solution found but controller failed during execution
Three different kinds of objects: cube, sphere and cylider, are tested with this picking methods. The result can be seen by clicking the following image. To show that the robot can also grasp from different direction, I made it to grasp the cylinder with the gripper parallel to the ground instead of gripping from above, but it is still more promising to pick objects from above.
Industrial Robot Wrapper
To use GUI to control the robot arm and gripper, I made a Industrial Robot Wrapper which includes necessary functionality to move robot arm and gripper. It is also connected with the template GUI I made last week, so now we can use GUI to do forward kinematic(move robot joints to given joint angle) and inverse kinematic(given desired end effector pose, MoveIt will plan a trajectory for robot arm to go there).
Developing parts
Change current GUI template into rqt plugins
rqt is a software framework of ROS that implements the various GUI tools in the form of plugins. The advantage of using it is that we can customize different GUI that shares similar contents easily by integrating rqt plugins, and don’t need to generate each of them from scratch. I am currently working on this task.
Test grasping irregular mesh-based object
I have modified the hammer model provided by Gazebo to test it. However, since all the physical parameters are manully set, the hammer doesn’t behave as what I expected and will oscillate in Gazebo. When the gripper is trying to grasp it, the grasp_fix plugin can detect a grasp, but it will suddently move out of thr gripper. It would be more reasonable to directly generate the sdf and urdf file with CAD software.
Make a two-finger gripper model based on Schunk KGG gripper
If we only generate models of the gripper in sdf format, it can not be seen in Rviz, but URDF file can be used in both Gazebo and Rviz. I plan to make it after making rqt_plugin.