ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | Q&A
Ask Your Question

How can I control the grippers in YuMi using the new abb_robot_driver

asked 2021-11-29 06:48:08 -0600

bhomaidan gravatar image

updated 2021-11-29 08:06:51 -0600


I'm using the new abb_robot_driver to control ABB YuMi IRB 14000 using MoveIt, now I can neither read the position of the grippers in order to remap it into the joint states, nor command the grippers.

I have noticed that there are some services to control the grippers such as:

  • /yumi/rws/sm_addin/set_sg_command

    Node: /yumi/rws_service_provider
    Type: abb_rapid_sm_addin_msgs/SetSGCommand
    Args: task command target_position


  • /yumi/rws/sm_addin/run_sg_routine

but I didn't know how to use them, can you please tell me how can I deal with the grippers [Read/Write]? thanks in advance.

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2021-11-29 08:13:07 -0600

bhomaidan gravatar image

updated 2021-11-29 08:15:23 -0600

To command the grippers according to here, I called the service:

  • rosservice call /yumi/rws/sm_addin/set_sg_command 'T_ROB_R' 7 0.0

to open the gripper, but to activate this command I had to call the other service which is:

  • rosservice call /yumi/rws/sm_addin/run_sg_routine.

Here is the list of the grippers command services:

uint8 SG_COMMAND_UNKNOWN      = 1
uint8 SG_COMMAND_NONE         = 2
uint8 SG_COMMAND_MOVE_TO      = 5
uint8 SG_COMMAND_GRIP_IN      = 6
uint8 SG_COMMAND_GRIP_OUT     = 7
uint8 SG_COMMAND_BLOW_ON_1    = 8
uint8 SG_COMMAND_BLOW_ON_2    = 9
uint8 SG_COMMAND_BLOW_OFF_1   = 10
uint8 SG_COMMAND_BLOW_OFF_2   = 11
uint8 SG_COMMAND_VACUUM_ON_1  = 12
uint8 SG_COMMAND_VACUUM_ON_2  = 13

Still, I don't know how to read the position of the grippers, if you know how to do it, please feel free to leave a comment or even another answer, please.

edit flag offensive delete link more


Hi, Did you find the answer on how to read the gripper's position?

Mahdi65 gravatar image Mahdi65  ( 2022-10-10 18:33:03 -0600 )edit

@Mahdi65 not yet, but if you did let me know, please.

bhomaidan gravatar image bhomaidan  ( 2022-10-11 12:46:28 -0600 )edit

@bhomaidan There is a g_GetPos() method exist. But, the question is how to publish that value like joints on a separate topic? I could confirm it by printing the value on the Flex pendant.

Mahdi65 gravatar image Mahdi65  ( 2022-10-12 21:17:30 -0600 )edit

@Mahdi65, g_GetPos() is a RAPID instruction, bridging that to ROS is not straight forward, especially in realtime without delays!

bhomaidan gravatar image bhomaidan  ( 2022-10-13 03:34:41 -0600 )edit

@bhomaidan That is true. It is not really clear how they bridge the joint_states through RWS.

Mahdi65 gravatar image Mahdi65  ( 2022-10-13 11:34:26 -0600 )edit

@Mahdiford State Machine AddIn is the link between the robot and the ROS system, there might be a way to Get things in a similar way to Seting them, for instance GetRAPIDNum, but that might not work perfectly in real time!.

bhomaidan gravatar image bhomaidan  ( 2022-10-13 19:06:59 -0600 )edit

@bhomaidan I tried to dig both sides (RAPID and RWS). I did remove the EGM license to simplify the process. Even when the modules are not running, the robot keeps publishing the joint_states. I use this for the sake of simplicity. I don't understand how they do that. The only part that I understand now is that they are using this function (void RWSStatePublisher::pollingTimerCallback(const ros::TimerEvent& event)) in the rws_state_publisher.cpp to access mechanical unit status, which is not presented in three main RAPID files (I am using just RWS as mentioned before).

Mahdi65 gravatar image Mahdi65  ( 2022-10-13 21:41:53 -0600 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools



Asked: 2021-11-29 06:48:08 -0600

Seen: 88 times

Last updated: Nov 29 '21