Impossible to use feed_forward velocity control alone - Gofa robot #167
-
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, Niccolo |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment
-
Hi everyone! I managed to solve the problem :) This means that even if you fill the data that you are going to send to the robot controller with velocity data, they are not actually transmitted to the robot. Setting the value to true solved my problem. Cheers Niccolo |
Beta Was this translation helpful? Give feedback.
Hi everyone!
I managed to solve the problem :)
Apparently, lib_egm, when you initialise the connection, takes as input a configuration object in which one of the elements specifies whether the library sends the velocity or not (use_velocity_outputs). Such attribute, if not specified, is set to false as default.
This means that even if you fill the data that you are going to send to the robot controller with velocity data, they are not actually transmitted to the robot.
Setting the value to true solved my problem.
I hope this will be helpful to someone.
Cheers
Niccolo