ros-industrial / abb_libegm

A C++ library for interfacing with ABB robot controllers supporting Externally Guided Motion (689-1)
BSD 3-Clause "New" or "Revised" License
93 stars 53 forks source link

Impossible to use feed_forward velocity control alone - Gofa robot #166

Closed pucciland95 closed 10 months ago

pucciland95 commented 11 months ago

Hi,

I know that this question is not related to the repo since it deals with the previous controller and not the new one (Omnicore controller), however, I think you could provide me with some valuable information.

From what I understood from the EGM doc from ABB, its control loop comprehends a proportional part that gets multiplied by a position error plus a velocity feed forward. Furthermore, I saw that it is possible to just use the velocity input if you set the position_correction_gain parameter in the RAPID StateMachine program to 0.

Now, I am developing an interface based on ros_control that allows me to communicate with the real robot, streaming joint positions and velocities. I managed to load a position_controllers/JointTrajectoryController and provide the controller with a stream of joints that the real robot follows without any problems (clearly, position_correction_gain is set to 1, otherwise the robot would not move).

For some reason, I now need to control the robot with the velocities (therefore, position_correction_gain is set to 0). To do so, I now load a velocity_controllers/JointTrajectoryController that outputs velocities (in rad/s) and sends them to the robot controller (in deg/s). My hardware_interface catches those data and correctly sends them to the controller, however, the robot does not move.

I also tried to load a velocity_controllers/JointGroupVelocityController and write myself a 0.5 rad/s velocity to just the first joint in the topic the ros_controller provides. However, again, the hardware_interface correctly gets them and sends them to the robot controller, which, however, does not move.

What I ask you is, did I forget something? Is there some strange parameter that I am ignoring? I am 99% sure that my interface works as intended, but the real robot is somehow ignoring the velocity data.

I am open to all kinds of suggestions, Let me know.

Niccolo