Random effort peaks added between Trajectory controller and Hardware Interface
We are controlling a physical electro mechanical joint with an effortcontrollers/JointTrajectoryController. For safety we are using the jointlimits_interface::EffortJointSoftLimitsInterface. Using ROS kinetic, ROS control and ubuntu 16.04.
When the joint is experiencing a high load, the joint began to tick. We deduced that some very high effort commands are sent towards our motorcontroller. However the output of the effort trajectory controller does not reflect these high effort commands. The situation is visualized in the plot shown below.
As can be seen in the image:
- upper left = output of the controller. Note: the controller output unit on the y-axis is 1000 effort units, where as the other plots are 1 effort unit.
- upper right = the commands before the limits
- lower left = commands after the limits
- lower right = effort that is produced by our motor controller
From the image can be seen that between the output of the controller and somewhere before the limits, large negative effort peaks occur.
We suspect that there is a discrepancy between the reading and the writing of the memory location of the respective effort command. This is therefore between the command write by the trajectory controller and the command read by the hardware interface. We have not yet found a way to prove or prevent it.
What ways are there to debug such a problem and prevent the effort peaks?
Asked by bvaningen on 2019-07-31 04:02:24 UTC
Comments