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.
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